db-studio 1.3.33 → 1.5.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/dist/core-dist/assets/_pathlessLayout-BSFx2CpL.js +1 -0
- package/dist/core-dist/assets/_queryId-CgXpSMOd.js +1 -0
- package/dist/core-dist/assets/_table-7G_H-EMC.js +8 -0
- package/dist/core-dist/assets/_table-BD8P3EpN.js +39 -0
- package/dist/core-dist/assets/{cdoe-editor-itVA__0A.js → cdoe-editor-CsnVz62S.js} +1 -1
- package/dist/core-dist/assets/dialog-C7B5v45l.js +1 -0
- package/dist/core-dist/assets/icons-BTbp9JOE.js +1 -0
- package/dist/core-dist/assets/index-BKJZ_DtH.js +1 -0
- package/dist/core-dist/assets/index-BbUfG55J.js +1 -0
- package/dist/core-dist/assets/index-C0XbK31u.js +58 -0
- package/dist/core-dist/assets/index-CwHrvESi.css +1 -0
- package/dist/core-dist/assets/index-CywuOneB.js +1 -0
- package/dist/core-dist/assets/index-CzPkrj7Y.js +1 -0
- package/dist/core-dist/assets/index-DpF8uPY5.js +1 -0
- package/dist/core-dist/assets/{indexes-Dowc1Q3x.js → indexes-chzZ9aUc.js} +1 -1
- package/dist/core-dist/assets/logs-BC5WPG0r.js +1 -0
- package/dist/core-dist/assets/queries.store-kf8rwRRK.js +1 -0
- package/dist/core-dist/assets/radix-ui-DdSZPsGt.js +51 -0
- package/dist/core-dist/assets/{react-dom-C-8vY09X.js → react-dom-CFlhbIUR.js} +1 -1
- package/dist/core-dist/assets/runner-tab-D2PzASo9.js +3 -0
- package/dist/core-dist/assets/scroll-area-CGOQphQG.js +1 -0
- package/dist/core-dist/assets/tanstack-VIQ5XZ7a.js +7 -0
- package/dist/core-dist/assets/tooltip-eBZ2rltH.js +1 -0
- package/dist/core-dist/assets/use-delete-column-CqTA9IkF.js +1 -0
- package/dist/core-dist/assets/{visualizer-DRuf8l7V.js → visualizer-CW4V7-VL.js} +1 -1
- package/dist/core-dist/index.html +7 -7
- package/dist/index.js +215 -62
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/core-dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/core-dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/core-dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/core-dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/core-dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/core-dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/core-dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/core-dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/core-dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/core-dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/core-dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/core-dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/core-dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/core-dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/core-dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/core-dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/core-dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/core-dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/core-dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/core-dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/core-dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/core-dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/core-dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/core-dist/assets/_baseUniq-p5pzSIGg.js +0 -1
- package/dist/core-dist/assets/_pathlessLayout-bNFwtzio.js +0 -2
- package/dist/core-dist/assets/_queryId-CoulYCHZ.js +0 -1
- package/dist/core-dist/assets/_table-D5wliAP3.js +0 -8
- package/dist/core-dist/assets/abap-BdImnpbu.js +0 -1
- package/dist/core-dist/assets/actionscript-3-CfeIJUat.js +0 -1
- package/dist/core-dist/assets/ada-bCR0ucgS.js +0 -1
- package/dist/core-dist/assets/andromeeda-C-Jbm3Hp.js +0 -1
- package/dist/core-dist/assets/angular-html-CU67Zn6k.js +0 -1
- package/dist/core-dist/assets/angular-ts-BwZT4LLn.js +0 -1
- package/dist/core-dist/assets/apache-Pmp26Uib.js +0 -1
- package/dist/core-dist/assets/apex-D8_7TLub.js +0 -1
- package/dist/core-dist/assets/apl-dKokRX4l.js +0 -1
- package/dist/core-dist/assets/applescript-Co6uUVPk.js +0 -1
- package/dist/core-dist/assets/ara-BRHolxvo.js +0 -1
- package/dist/core-dist/assets/arc-D4Z6A87O.js +0 -1
- package/dist/core-dist/assets/architectureDiagram-VXUJARFQ-CoK5V8Gq.js +0 -36
- package/dist/core-dist/assets/asciidoc-Dv7Oe6Be.js +0 -1
- package/dist/core-dist/assets/asm-D_Q5rh1f.js +0 -1
- package/dist/core-dist/assets/astro-CbQHKStN.js +0 -1
- package/dist/core-dist/assets/aurora-x-D-2ljcwZ.js +0 -1
- package/dist/core-dist/assets/awk-DMzUqQB5.js +0 -1
- package/dist/core-dist/assets/ayu-dark-CmMr59Fi.js +0 -1
- package/dist/core-dist/assets/ballerina-BFfxhgS-.js +0 -1
- package/dist/core-dist/assets/bat-BkioyH1T.js +0 -1
- package/dist/core-dist/assets/beancount-k_qm7-4y.js +0 -1
- package/dist/core-dist/assets/berry-uYugtg8r.js +0 -1
- package/dist/core-dist/assets/bibtex-CHM0blh-.js +0 -1
- package/dist/core-dist/assets/bicep-Bmn6On1c.js +0 -1
- package/dist/core-dist/assets/blade-D4QpJJKB.js +0 -1
- package/dist/core-dist/assets/blockDiagram-VD42YOAC-C5HbbFu4.js +0 -122
- package/dist/core-dist/assets/bsl-BO_Y6i37.js +0 -1
- package/dist/core-dist/assets/c-BIGW1oBm.js +0 -1
- package/dist/core-dist/assets/c3-VCDPK7BO.js +0 -1
- package/dist/core-dist/assets/c4Diagram-YG6GDRKO-nT6ePZrr.js +0 -10
- package/dist/core-dist/assets/cadence-Bv_4Rxtq.js +0 -1
- package/dist/core-dist/assets/cairo-KRGpt6FW.js +0 -1
- package/dist/core-dist/assets/catppuccin-frappe-DFWUc33u.js +0 -1
- package/dist/core-dist/assets/catppuccin-latte-C9dUb6Cb.js +0 -1
- package/dist/core-dist/assets/catppuccin-macchiato-DQyhUUbL.js +0 -1
- package/dist/core-dist/assets/catppuccin-mocha-D87Tk5Gz.js +0 -1
- package/dist/core-dist/assets/channel-RRrTb5YX.js +0 -1
- package/dist/core-dist/assets/chunk-4BX2VUAB-C0cKTKuS.js +0 -1
- package/dist/core-dist/assets/chunk-55IACEB6-CS37Jqhh.js +0 -1
- package/dist/core-dist/assets/chunk-B4BG7PRW-CNxT4kr_.js +0 -165
- package/dist/core-dist/assets/chunk-DI55MBZ5-Dlh63cJN.js +0 -220
- package/dist/core-dist/assets/chunk-FMBD7UC4-zlhbJE8N.js +0 -15
- package/dist/core-dist/assets/chunk-QN33PNHL-CBxCREMZ.js +0 -1
- package/dist/core-dist/assets/chunk-QZHKN3VN-CjOf_UT-.js +0 -1
- package/dist/core-dist/assets/chunk-TZMSLE5B-C8_nfweM.js +0 -1
- package/dist/core-dist/assets/clarity-D53aC0YG.js +0 -1
- package/dist/core-dist/assets/classDiagram-2ON5EDUG-Bo8bE3Gj.js +0 -1
- package/dist/core-dist/assets/classDiagram-v2-WZHVMYZB-Bo8bE3Gj.js +0 -1
- package/dist/core-dist/assets/clojure-P80f7IUj.js +0 -1
- package/dist/core-dist/assets/clone-tDnlR_HJ.js +0 -1
- package/dist/core-dist/assets/cmake-D1j8_8rp.js +0 -1
- package/dist/core-dist/assets/cobol-nwyudZeR.js +0 -1
- package/dist/core-dist/assets/code-block-IT6T5CEO-CI7D1Ckp.js +0 -154
- package/dist/core-dist/assets/codeowners-Bp6g37R7.js +0 -1
- package/dist/core-dist/assets/codeql-DsOJ9woJ.js +0 -1
- package/dist/core-dist/assets/coffee-Ch7k5sss.js +0 -1
- package/dist/core-dist/assets/common-lisp-Cg-RD9OK.js +0 -1
- package/dist/core-dist/assets/coq-DkFqJrB1.js +0 -1
- package/dist/core-dist/assets/cose-bilkent-S5V4N54A-pMpZq0EL.js +0 -1
- package/dist/core-dist/assets/cpp-CofmeUqb.js +0 -1
- package/dist/core-dist/assets/crystal-tKQVLTB8.js +0 -1
- package/dist/core-dist/assets/csharp-K5feNrxe.js +0 -1
- package/dist/core-dist/assets/css-DPfMkruS.js +0 -1
- package/dist/core-dist/assets/csv-fuZLfV_i.js +0 -1
- package/dist/core-dist/assets/cue-D82EKSYY.js +0 -1
- package/dist/core-dist/assets/cypher-COkxafJQ.js +0 -1
- package/dist/core-dist/assets/cytoscape.esm-5J0xJHOV.js +0 -321
- package/dist/core-dist/assets/d-85-TOEBH.js +0 -1
- package/dist/core-dist/assets/dagre-6UL2VRFP-Cst9zRrY.js +0 -4
- package/dist/core-dist/assets/dark-plus-C3mMm8J8.js +0 -1
- package/dist/core-dist/assets/dart-CF10PKvl.js +0 -1
- package/dist/core-dist/assets/dax-CEL-wOlO.js +0 -1
- package/dist/core-dist/assets/defaultLocale-DX6XiGOO.js +0 -1
- package/dist/core-dist/assets/desktop-BmXAJ9_W.js +0 -1
- package/dist/core-dist/assets/diagram-PSM6KHXK-BXpUEAWs.js +0 -24
- package/dist/core-dist/assets/diagram-QEK2KX5R-Ceeu-b2e.js +0 -43
- package/dist/core-dist/assets/diagram-S2PKOQOG-B2WHBnj5.js +0 -24
- package/dist/core-dist/assets/diff-D97Zzqfu.js +0 -1
- package/dist/core-dist/assets/docker-BcOcwvcX.js +0 -1
- package/dist/core-dist/assets/dotenv-Da5cRb03.js +0 -1
- package/dist/core-dist/assets/dracula-BzJJZx-M.js +0 -1
- package/dist/core-dist/assets/dracula-soft-BXkSAIEj.js +0 -1
- package/dist/core-dist/assets/dream-maker-BtqSS_iP.js +0 -1
- package/dist/core-dist/assets/edge-BkV0erSs.js +0 -1
- package/dist/core-dist/assets/elixir-CDX3lj18.js +0 -1
- package/dist/core-dist/assets/elm-DbKCFpqz.js +0 -1
- package/dist/core-dist/assets/emacs-lisp-C9XAeP06.js +0 -1
- package/dist/core-dist/assets/erDiagram-Q2GNP2WA-C_yvmhoA.js +0 -60
- package/dist/core-dist/assets/erb-BOJIQeun.js +0 -1
- package/dist/core-dist/assets/erlang-DsQrWhSR.js +0 -1
- package/dist/core-dist/assets/everforest-dark-BgDCqdQA.js +0 -1
- package/dist/core-dist/assets/everforest-light-C8M2exoo.js +0 -1
- package/dist/core-dist/assets/fennel-BYunw83y.js +0 -1
- package/dist/core-dist/assets/fish-BvzEVeQv.js +0 -1
- package/dist/core-dist/assets/flowDiagram-NV44I4VS-Z3pNI5g9.js +0 -162
- package/dist/core-dist/assets/fluent-C4IJs8-o.js +0 -1
- package/dist/core-dist/assets/fortran-fixed-form-CkoXwp7k.js +0 -1
- package/dist/core-dist/assets/fortran-free-form-BxgE0vQu.js +0 -1
- package/dist/core-dist/assets/fsharp-CXgrBDvD.js +0 -1
- package/dist/core-dist/assets/ganttDiagram-JELNMOA3-BKJSG4df.js +0 -267
- package/dist/core-dist/assets/gdresource-B7Tvp0Sc.js +0 -1
- package/dist/core-dist/assets/gdscript-DTMYz4Jt.js +0 -1
- package/dist/core-dist/assets/gdshader-DkwncUOv.js +0 -1
- package/dist/core-dist/assets/genie-D0YGMca9.js +0 -1
- package/dist/core-dist/assets/gherkin-DyxjwDmM.js +0 -1
- package/dist/core-dist/assets/git-commit-F4YmCXRG.js +0 -1
- package/dist/core-dist/assets/git-rebase-r7XF79zn.js +0 -1
- package/dist/core-dist/assets/gitGraphDiagram-NY62KEGX-xd8UZtkJ.js +0 -65
- package/dist/core-dist/assets/github-dark-DHJKELXO.js +0 -1
- package/dist/core-dist/assets/github-dark-default-Cuk6v7N8.js +0 -1
- package/dist/core-dist/assets/github-dark-dimmed-DH5Ifo-i.js +0 -1
- package/dist/core-dist/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -1
- package/dist/core-dist/assets/github-light-DAi9KRSo.js +0 -1
- package/dist/core-dist/assets/github-light-default-D7oLnXFd.js +0 -1
- package/dist/core-dist/assets/github-light-high-contrast-BfjtVDDH.js +0 -1
- package/dist/core-dist/assets/gleam-BspZqrRM.js +0 -1
- package/dist/core-dist/assets/glimmer-js-Rg0-pVw9.js +0 -1
- package/dist/core-dist/assets/glimmer-ts-U6CK756n.js +0 -1
- package/dist/core-dist/assets/glsl-DplSGwfg.js +0 -1
- package/dist/core-dist/assets/gn-n2N0HUVH.js +0 -1
- package/dist/core-dist/assets/gnuplot-DdkO51Og.js +0 -1
- package/dist/core-dist/assets/go-Dn2_MT6a.js +0 -1
- package/dist/core-dist/assets/graph-BiTFYAoZ.js +0 -1
- package/dist/core-dist/assets/graphql-ChdNCCLP.js +0 -1
- package/dist/core-dist/assets/groovy-gcz8RCvz.js +0 -1
- package/dist/core-dist/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -1
- package/dist/core-dist/assets/gruvbox-dark-medium-GsRaNv29.js +0 -1
- package/dist/core-dist/assets/gruvbox-dark-soft-CVdnzihN.js +0 -1
- package/dist/core-dist/assets/gruvbox-light-hard-CH1njM8p.js +0 -1
- package/dist/core-dist/assets/gruvbox-light-medium-DRw_LuNl.js +0 -1
- package/dist/core-dist/assets/gruvbox-light-soft-hJgmCMqR.js +0 -1
- package/dist/core-dist/assets/hack-CaT9iCJl.js +0 -1
- package/dist/core-dist/assets/haml-B8DHNrY2.js +0 -1
- package/dist/core-dist/assets/handlebars-BL8al0AC.js +0 -1
- package/dist/core-dist/assets/haskell-Df6bDoY_.js +0 -1
- package/dist/core-dist/assets/haxe-CzTSHFRz.js +0 -1
- package/dist/core-dist/assets/hcl-BWvSN4gD.js +0 -1
- package/dist/core-dist/assets/hjson-D5-asLiD.js +0 -1
- package/dist/core-dist/assets/hlsl-D3lLCCz7.js +0 -1
- package/dist/core-dist/assets/houston-DnULxvSX.js +0 -1
- package/dist/core-dist/assets/html-GMplVEZG.js +0 -1
- package/dist/core-dist/assets/html-derivative-BFtXZ54Q.js +0 -1
- package/dist/core-dist/assets/http-jrhK8wxY.js +0 -1
- package/dist/core-dist/assets/hurl-irOxFIW8.js +0 -1
- package/dist/core-dist/assets/hxml-Bvhsp5Yf.js +0 -1
- package/dist/core-dist/assets/hy-DFXneXwc.js +0 -1
- package/dist/core-dist/assets/icons-CThL5JLu.js +0 -1
- package/dist/core-dist/assets/imba-DGztddWO.js +0 -1
- package/dist/core-dist/assets/index-B8zdJg_q.js +0 -58
- package/dist/core-dist/assets/index-BXF4gXVp.js +0 -1
- package/dist/core-dist/assets/index-Bgk4PJE4.js +0 -1
- package/dist/core-dist/assets/index-CI-PCTpD.css +0 -1
- package/dist/core-dist/assets/index-Ck69W-AH.js +0 -1
- package/dist/core-dist/assets/index-D2I1nxdU.js +0 -1
- package/dist/core-dist/assets/infoDiagram-WHAUD3N6-CRdg8M2S.js +0 -2
- package/dist/core-dist/assets/ini-BEwlwnbL.js +0 -1
- package/dist/core-dist/assets/init-Gi6I4Gst.js +0 -1
- package/dist/core-dist/assets/java-CylS5w8V.js +0 -1
- package/dist/core-dist/assets/javascript-wDzz0qaB.js +0 -1
- package/dist/core-dist/assets/jinja-4LBKfQ-Z.js +0 -1
- package/dist/core-dist/assets/jison-wvAkD_A8.js +0 -1
- package/dist/core-dist/assets/journeyDiagram-XKPGCS4Q-C4rNrDv0.js +0 -139
- package/dist/core-dist/assets/json-Cp-IABpG.js +0 -1
- package/dist/core-dist/assets/json5-C9tS-k6U.js +0 -1
- package/dist/core-dist/assets/jsonc-Des-eS-w.js +0 -1
- package/dist/core-dist/assets/jsonl-DcaNXYhu.js +0 -1
- package/dist/core-dist/assets/jsonnet-DFQXde-d.js +0 -1
- package/dist/core-dist/assets/jssm-C2t-YnRu.js +0 -1
- package/dist/core-dist/assets/jsx-g9-lgVsj.js +0 -1
- package/dist/core-dist/assets/julia-CxzCAyBv.js +0 -1
- package/dist/core-dist/assets/kanagawa-dragon-CkXjmgJE.js +0 -1
- package/dist/core-dist/assets/kanagawa-lotus-CfQXZHmo.js +0 -1
- package/dist/core-dist/assets/kanagawa-wave-DWedfzmr.js +0 -1
- package/dist/core-dist/assets/kanban-definition-3W4ZIXB7-D4bdMcnq.js +0 -89
- package/dist/core-dist/assets/katex-DvXFAOB1.css +0 -1
- package/dist/core-dist/assets/kdl-DV7GczEv.js +0 -1
- package/dist/core-dist/assets/kotlin-BdnUsdx6.js +0 -1
- package/dist/core-dist/assets/kusto-DZf3V79B.js +0 -1
- package/dist/core-dist/assets/laserwave-DUszq2jm.js +0 -1
- package/dist/core-dist/assets/latex-B4uzh10-.js +0 -1
- package/dist/core-dist/assets/layout-WHeMgL_l.js +0 -1
- package/dist/core-dist/assets/lean-BZvkOJ9d.js +0 -1
- package/dist/core-dist/assets/less-B1dDrJ26.js +0 -1
- package/dist/core-dist/assets/light-plus-B7mTdjB0.js +0 -1
- package/dist/core-dist/assets/linear-CPEHgNrr.js +0 -1
- package/dist/core-dist/assets/liquid-DYVedYrR.js +0 -1
- package/dist/core-dist/assets/llvm-BtvRca6l.js +0 -1
- package/dist/core-dist/assets/log-2UxHyX5q.js +0 -1
- package/dist/core-dist/assets/logo-BtOb2qkB.js +0 -1
- package/dist/core-dist/assets/logs-BlD66J6V.js +0 -1
- package/dist/core-dist/assets/lua-BbnMAYS6.js +0 -1
- package/dist/core-dist/assets/luau-C-HG3fhB.js +0 -1
- package/dist/core-dist/assets/make-CHLpvVh8.js +0 -1
- package/dist/core-dist/assets/markdown-Cvjx9yec.js +0 -1
- package/dist/core-dist/assets/marko-DZsq8hO1.js +0 -1
- package/dist/core-dist/assets/material-theme-D5KoaKCx.js +0 -1
- package/dist/core-dist/assets/material-theme-darker-BfHTSMKl.js +0 -1
- package/dist/core-dist/assets/material-theme-lighter-B0m2ddpp.js +0 -1
- package/dist/core-dist/assets/material-theme-ocean-CyktbL80.js +0 -1
- package/dist/core-dist/assets/material-theme-palenight-Csfq5Kiy.js +0 -1
- package/dist/core-dist/assets/matlab-D7o27uSR.js +0 -1
- package/dist/core-dist/assets/mdc-DUICxH0z.js +0 -1
- package/dist/core-dist/assets/mdx-Cmh6b_Ma.js +0 -1
- package/dist/core-dist/assets/mermaid-VLURNSYL-y089KhWi.js +0 -377
- package/dist/core-dist/assets/mermaid-mWjccvbQ.js +0 -1
- package/dist/core-dist/assets/mermaid.core-BxHPE-d6.js +0 -191
- package/dist/core-dist/assets/min-dark-CafNBF8u.js +0 -1
- package/dist/core-dist/assets/min-kHWoRv33.js +0 -1
- package/dist/core-dist/assets/min-light-CTRr51gU.js +0 -1
- package/dist/core-dist/assets/mindmap-definition-VGOIOE7T-CJJOhLu9.js +0 -68
- package/dist/core-dist/assets/mipsasm-CKIfxQSi.js +0 -1
- package/dist/core-dist/assets/mojo-B93PlW-d.js +0 -1
- package/dist/core-dist/assets/monokai-D4h5O-jR.js +0 -1
- package/dist/core-dist/assets/moonbit-Ba13S78F.js +0 -1
- package/dist/core-dist/assets/move-Bu9oaDYs.js +0 -1
- package/dist/core-dist/assets/narrat-DRg8JJMk.js +0 -1
- package/dist/core-dist/assets/nextflow-BrzmwbiE.js +0 -1
- package/dist/core-dist/assets/nginx-DknmC5AR.js +0 -1
- package/dist/core-dist/assets/night-owl-C39BiMTA.js +0 -1
- package/dist/core-dist/assets/nim-CVrawwO9.js +0 -1
- package/dist/core-dist/assets/nix-CwoSXNpI.js +0 -1
- package/dist/core-dist/assets/nord-Ddv68eIx.js +0 -1
- package/dist/core-dist/assets/nushell-C-sUppwS.js +0 -1
- package/dist/core-dist/assets/objective-c-DXmwc3jG.js +0 -1
- package/dist/core-dist/assets/objective-cpp-CLxacb5B.js +0 -1
- package/dist/core-dist/assets/ocaml-C0hk2d4L.js +0 -1
- package/dist/core-dist/assets/one-dark-pro-DVMEJ2y_.js +0 -1
- package/dist/core-dist/assets/one-light-PoHY5YXO.js +0 -1
- package/dist/core-dist/assets/openscad-C4EeE6gA.js +0 -1
- package/dist/core-dist/assets/ordinal-BENe2yWM.js +0 -1
- package/dist/core-dist/assets/pascal-D93ZcfNL.js +0 -1
- package/dist/core-dist/assets/perl-C0TMdlhV.js +0 -1
- package/dist/core-dist/assets/php-CDn_0X-4.js +0 -1
- package/dist/core-dist/assets/pieDiagram-ADFJNKIX-CAk_tXAT.js +0 -30
- package/dist/core-dist/assets/pkl-u5AG7uiY.js +0 -1
- package/dist/core-dist/assets/plastic-3e1v2bzS.js +0 -1
- package/dist/core-dist/assets/plsql-ChMvpjG-.js +0 -1
- package/dist/core-dist/assets/po-BTJTHyun.js +0 -1
- package/dist/core-dist/assets/poimandres-CS3Unz2-.js +0 -1
- package/dist/core-dist/assets/polar-C0HS_06l.js +0 -1
- package/dist/core-dist/assets/postcss-CXtECtnM.js +0 -1
- package/dist/core-dist/assets/powerquery-CEu0bR-o.js +0 -1
- package/dist/core-dist/assets/powershell-Dpen1YoG.js +0 -1
- package/dist/core-dist/assets/prisma-Dd19v3D-.js +0 -1
- package/dist/core-dist/assets/prolog-CbFg5uaA.js +0 -1
- package/dist/core-dist/assets/proto-C7zT0LnQ.js +0 -1
- package/dist/core-dist/assets/pug-CGlum2m_.js +0 -1
- package/dist/core-dist/assets/puppet-BMWR74SV.js +0 -1
- package/dist/core-dist/assets/purescript-CklMAg4u.js +0 -1
- package/dist/core-dist/assets/python-B6aJPvgy.js +0 -1
- package/dist/core-dist/assets/qml-3beO22l8.js +0 -1
- package/dist/core-dist/assets/qmldir-C8lEn-DE.js +0 -1
- package/dist/core-dist/assets/qss-IeuSbFQv.js +0 -1
- package/dist/core-dist/assets/quadrantDiagram-AYHSOK5B-C8Per30k.js +0 -7
- package/dist/core-dist/assets/queries.store-DO6JjVaD.js +0 -1
- package/dist/core-dist/assets/r-Dspwwk_N.js +0 -1
- package/dist/core-dist/assets/racket-BqYA7rlc.js +0 -1
- package/dist/core-dist/assets/radix-ui-bzITMjAn.js +0 -51
- package/dist/core-dist/assets/raku-DXvB9xmW.js +0 -1
- package/dist/core-dist/assets/razor-C1TweQQi.js +0 -1
- package/dist/core-dist/assets/red-bN70gL4F.js +0 -1
- package/dist/core-dist/assets/reg-C-SQnVFl.js +0 -1
- package/dist/core-dist/assets/regexp-CDVJQ6XC.js +0 -1
- package/dist/core-dist/assets/rel-C3B-1QV4.js +0 -1
- package/dist/core-dist/assets/requirementDiagram-UZGBJVZJ-EDXv7-B6.js +0 -64
- package/dist/core-dist/assets/riscv-BM1_JUlF.js +0 -1
- package/dist/core-dist/assets/rose-pine-dawn-DHQR4-dF.js +0 -1
- package/dist/core-dist/assets/rose-pine-moon-D4_iv3hh.js +0 -1
- package/dist/core-dist/assets/rose-pine-qdsjHGoJ.js +0 -1
- package/dist/core-dist/assets/rosmsg-BJDFO7_C.js +0 -1
- package/dist/core-dist/assets/rst-B0xPkSld.js +0 -1
- package/dist/core-dist/assets/ruby-BvKwtOVI.js +0 -1
- package/dist/core-dist/assets/runner-tab-DEnOfqHr.js +0 -3
- package/dist/core-dist/assets/rust-B1yitclQ.js +0 -1
- package/dist/core-dist/assets/sankeyDiagram-TZEHDZUN-CQ57PXul.js +0 -10
- package/dist/core-dist/assets/sas-cz2c8ADy.js +0 -1
- package/dist/core-dist/assets/sass-Cj5Yp3dK.js +0 -1
- package/dist/core-dist/assets/scala-C151Ov-r.js +0 -1
- package/dist/core-dist/assets/schema-C9usm3AO.js +0 -1
- package/dist/core-dist/assets/scheme-C98Dy4si.js +0 -1
- package/dist/core-dist/assets/scroll-area-C3MoruNP.js +0 -1
- package/dist/core-dist/assets/scss-OYdSNvt2.js +0 -1
- package/dist/core-dist/assets/sdbl-DVxCFoDh.js +0 -1
- package/dist/core-dist/assets/sequenceDiagram-WL72ISMW-DgKiIj0U.js +0 -145
- package/dist/core-dist/assets/shaderlab-Dg9Lc6iA.js +0 -1
- package/dist/core-dist/assets/shellscript-Yzrsuije.js +0 -1
- package/dist/core-dist/assets/shellsession-BADoaaVG.js +0 -1
- package/dist/core-dist/assets/slack-dark-BthQWCQV.js +0 -1
- package/dist/core-dist/assets/slack-ochin-DqwNpetd.js +0 -1
- package/dist/core-dist/assets/smalltalk-BERRCDM3.js +0 -1
- package/dist/core-dist/assets/snazzy-light-Bw305WKR.js +0 -1
- package/dist/core-dist/assets/solarized-dark-DXbdFlpD.js +0 -1
- package/dist/core-dist/assets/solarized-light-L9t79GZl.js +0 -1
- package/dist/core-dist/assets/solidity-rGO070M0.js +0 -1
- package/dist/core-dist/assets/soy-Brmx7dQM.js +0 -1
- package/dist/core-dist/assets/sparql-rVzFXLq3.js +0 -1
- package/dist/core-dist/assets/splunk-BtCnVYZw.js +0 -1
- package/dist/core-dist/assets/sql-BLtJtn59.js +0 -1
- package/dist/core-dist/assets/ssh-config-_ykCGR6B.js +0 -1
- package/dist/core-dist/assets/stata-BH5u7GGu.js +0 -1
- package/dist/core-dist/assets/stateDiagram-FKZM4ZOC-DRNqRhHl.js +0 -1
- package/dist/core-dist/assets/stateDiagram-v2-4FDKWEC3-D167gXuY.js +0 -1
- package/dist/core-dist/assets/stylus-BEDo0Tqx.js +0 -1
- package/dist/core-dist/assets/svelte-zxCyuUbr.js +0 -1
- package/dist/core-dist/assets/swift-Dg5xB15N.js +0 -1
- package/dist/core-dist/assets/synthwave-84-CbfX1IO0.js +0 -1
- package/dist/core-dist/assets/system-verilog-CnnmHF94.js +0 -1
- package/dist/core-dist/assets/systemd-4A_iFExJ.js +0 -1
- package/dist/core-dist/assets/talonscript-CkByrt1z.js +0 -1
- package/dist/core-dist/assets/tanstack-Be3yNbjx.js +0 -9
- package/dist/core-dist/assets/tasl-QIJgUcNo.js +0 -1
- package/dist/core-dist/assets/tcl-dwOrl1Do.js +0 -1
- package/dist/core-dist/assets/templ-W15q3VgB.js +0 -1
- package/dist/core-dist/assets/terraform-BETggiCN.js +0 -1
- package/dist/core-dist/assets/tex-CvyZ59Mk.js +0 -1
- package/dist/core-dist/assets/timeline-definition-IT6M3QCI-CFZd4jmL.js +0 -61
- package/dist/core-dist/assets/tokyo-night-hegEt444.js +0 -1
- package/dist/core-dist/assets/toml-vGWfd6FD.js +0 -1
- package/dist/core-dist/assets/treemap-KMMF4GRG-C306sutZ.js +0 -128
- package/dist/core-dist/assets/ts-tags-zn1MmPIZ.js +0 -1
- package/dist/core-dist/assets/tsv-B_m7g4N7.js +0 -1
- package/dist/core-dist/assets/tsx-COt5Ahok.js +0 -1
- package/dist/core-dist/assets/turtle-BsS91CYL.js +0 -1
- package/dist/core-dist/assets/twig-CO9l9SDP.js +0 -1
- package/dist/core-dist/assets/typescript-BPQ3VLAy.js +0 -1
- package/dist/core-dist/assets/typespec-BGHnOYBU.js +0 -1
- package/dist/core-dist/assets/typst-DHCkPAjA.js +0 -1
- package/dist/core-dist/assets/v-BcVCzyr7.js +0 -1
- package/dist/core-dist/assets/vala-CsfeWuGM.js +0 -1
- package/dist/core-dist/assets/vb-D17OF-Vu.js +0 -1
- package/dist/core-dist/assets/verilog-BQ8w6xss.js +0 -1
- package/dist/core-dist/assets/vesper-DU1UobuO.js +0 -1
- package/dist/core-dist/assets/vhdl-CeAyd5Ju.js +0 -1
- package/dist/core-dist/assets/viml-CJc9bBzg.js +0 -1
- package/dist/core-dist/assets/vitesse-black-Bkuqu6BP.js +0 -1
- package/dist/core-dist/assets/vitesse-dark-D0r3Knsf.js +0 -1
- package/dist/core-dist/assets/vitesse-light-CVO1_9PV.js +0 -1
- package/dist/core-dist/assets/vue-DN_0RTcg.js +0 -1
- package/dist/core-dist/assets/vue-html-AaS7Mt5G.js +0 -1
- package/dist/core-dist/assets/vue-vine-CQOfvN7w.js +0 -1
- package/dist/core-dist/assets/vyper-CDx5xZoG.js +0 -1
- package/dist/core-dist/assets/wasm-CG6Dc4jp.js +0 -1
- package/dist/core-dist/assets/wasm-MzD3tlZU.js +0 -1
- package/dist/core-dist/assets/wenyan-BV7otONQ.js +0 -1
- package/dist/core-dist/assets/wgsl-Dx-B1_4e.js +0 -1
- package/dist/core-dist/assets/wikitext-BhOHFoWU.js +0 -1
- package/dist/core-dist/assets/wit-5i3qLPDT.js +0 -1
- package/dist/core-dist/assets/wolfram-lXgVvXCa.js +0 -1
- package/dist/core-dist/assets/xml-sdJ4AIDG.js +0 -1
- package/dist/core-dist/assets/xsl-CtQFsRM5.js +0 -1
- package/dist/core-dist/assets/xychartDiagram-PRI3JC2R-CIwcgBI2.js +0 -7
- package/dist/core-dist/assets/yaml-Buea-lGh.js +0 -1
- package/dist/core-dist/assets/zenscript-DVFEvuxE.js +0 -1
- package/dist/core-dist/assets/zig-VOosw3JB.js +0 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var zo=Object.defineProperty;var m=(t,e)=>()=>(t&&(e=t(t=0)),e);var Ko=(t,e)=>{for(var o in e)zo(t,o,{get:e[o],enumerable:!0})};var qe=m(()=>{"use strict"});var M,Ie=m(()=>{"use strict";M={PORT:3333,ENV:".env",VAR_NAME:"DATABASE_URL",BASE_URL:"http://localhost:3333",PROXY_URL:process.env.NODE_ENV==="development"?"http://localhost:8787":"https://db-studio-proxy.husamql3.workers.dev"}});var Oe=m(()=>{"use strict"});var Le,he=m(()=>{"use strict";Le={AUTHOR:"H\xFCsam \u{1F951} <devhsmq@gmail.com>",AUTHOR_NAME:"H\xFCsam",AUTHOR_AVATAR:"/avocado.png",AUTHOR_USERNAME:"husamql3",AUTHOR_GITHUB_LINK:"https://github.com/husamql3",SITE_DESCRIPTION:"The modern pgAdmin alternative that works with every database.",SITE_KEYWORDS:["database","management","studio","spreadsheet","ai","sql"],SITE_TITLE:"DB Studio",SITE_NAME:"dbstudio.sh",SITE_URL:"https://dbstudio.sh",SITE_X_LINK:"https://x.com/dbstudio_sh",SITE_GITHUB_LINK:"https://github.com/husamql3/db-studio",SITE_DOCS_LINK:"https://dbstudio.sh/docs",SITE_CHANGELOG_LINK:"https://dbstudio.sh/changelog",SITE_ROADMAP_LINK:"https://dbstudio.sh/roadmap",SITE_IMAGE:"https://dbstudio.sh/og-image.png",SITE_IMAGE_WIDTH:"1200",SITE_IMAGE_HEIGHT:"630",SITE_IMAGE_ALT:"dbstudio.sh \u2013 Modern database management studio",SITE_COLOR:"#1447e6"}});var ke=m(()=>{"use strict"});var oe=m(()=>{"use strict";qe();Ie();Oe();he();ke()});import{z as Z}from"zod";var Ge,Je=m(()=>{"use strict";Ge=Z.object({tableName:Z.string("Table name is required"),data:Z.record(Z.string("Column name is required"),Z.any())})});var Xe=m(()=>{"use strict"});import{z as W}from"zod";var Ze,et=m(()=>{"use strict";Ze=W.object({tableName:W.string().min(1,"Table name is required"),records:W.array(W.record(W.string(),W.any())).min(1,"At least one record is required")})});import{z as B}from"zod";var S,cr,ne,Za,tt,V,j=m(()=>{"use strict";S=B.object({db:B.string("Database name is required")}),cr=["pg"],ne=B.enum(cr,{message:"Invalid database type"}),Za=S.extend({dbType:ne}),tt=B.object({dbType:ne}),V=B.object({tableName:B.string("Table name is required")})});import{z as Q}from"zod";var ot,rt=m(()=>{"use strict";j();ot=Q.object({messages:Q.array(Q.object({role:Q.enum(["user","assistant"]),content:Q.string("Content is required")})),conversationId:Q.string().optional(),db:S.shape.db})});var at=m(()=>{"use strict"});import{z as A}from"zod";var lr,mr,U,ur,pr,nn,Ee=m(()=>{"use strict";lr=["text","boolean","number","enum","json","date","array"],mr=A.enum(lr),U={text:"text",boolean:"boolean",number:"number",enum:"enum",json:"json",date:"date",array:"array"},ur=["int","bigint","smallint","numeric","float","double","money","boolean","text","varchar","char","json","jsonb","xml","uuid","date","time","timestamp","timestamptz","interval","bytea","inet","cidr","macaddr","macaddr8","point","line","polygon","array","enum"],pr=A.enum(ur),nn=A.object({columnName:A.string(),dataType:mr,dataTypeLabel:pr,isNullable:A.boolean(),columnDefault:A.string().nullable(),isPrimaryKey:A.boolean(),isForeignKey:A.boolean(),referencedTable:A.string().nullable(),referencedColumn:A.string().nullable(),enumValues:A.array(A.string()).nullable()})});function nt(t){let e=t?.toLowerCase().trim()||"";return e.includes("[]")||e==="date"||e==="time"||e==="time without time zone"||e.startsWith("time(")||e==="timestamp"||e==="timestamp without time zone"||e.startsWith("timestamp(")||e==="timestamp with time zone"||e==="timestamptz"||e.startsWith("timestamp with time zone(")?U.date:e==="integer"||e==="int"||e==="int4"||e==="bigint"||e==="int8"||e==="smallint"||e==="int2"||e==="decimal"||e.startsWith("decimal(")||e==="numeric"||e.startsWith("numeric(")||e==="real"||e==="float4"||e==="double precision"||e==="float8"||e==="float"||e==="serial"||e==="serial4"||e==="bigserial"||e==="serial8"||e==="money"?U.number:e==="boolean"||e==="bool"?U.boolean:e==="json"||e==="jsonb"?U.json:e.startsWith("user-defined")||e==="enum"||e==="text"||e==="xml"?U.text:e==="character varying"||e.startsWith("varchar")||e.startsWith("character varying(")||e==="character"||e.startsWith("char")||e.startsWith("character(")||e==="bpchar"||e==="uuid"||e==="interval"||e.startsWith("interval")||e==="bytea"||e==="point"||e==="line"||e==="polygon"||e==="inet"||e==="cidr"||e==="macaddr"||e==="macaddr8"?U.text:U.text}function st(t){if(!t)return b.text;let e=t.toLowerCase().trim();return e==="integer"||e==="int"||e==="int4"||e==="serial"||e==="serial4"?b.int:e==="bigint"||e==="int8"||e==="bigserial"||e==="serial8"?b.bigint:e==="smallint"||e==="int2"?b.smallint:e==="decimal"||e.startsWith("decimal(")||e==="numeric"||e.startsWith("numeric(")?b.numeric:e==="real"||e==="float4"?b.float:e==="double precision"||e==="float8"||e==="float"?b.double:e==="money"?b.money:e==="boolean"||e==="bool"?b.boolean:e==="text"?b.text:e==="character varying"||e.startsWith("varchar")||e.startsWith("character varying(")?b.varchar:e==="character"||e.startsWith("char")||e.startsWith("character(")||e==="bpchar"?b.char:e==="json"?b.json:e==="jsonb"?b.jsonb:e==="xml"?b.xml:e==="uuid"?b.uuid:e==="date"?b.date:e==="time"||e==="time without time zone"||e.startsWith("time(")?b.time:e==="timestamp"||e==="timestamp without time zone"||e.startsWith("timestamp(")?b.timestamp:e==="timestamp with time zone"||e==="timestamptz"||e.startsWith("timestamp with time zone(")?b.timestamptz:e==="interval"||e.startsWith("interval")?b.interval:e==="bytea"?b.bytea:e==="inet"?b.inet:e==="cidr"?b.cidr:e==="macaddr"?b.macaddr:e==="macaddr8"?b.macaddr8:e==="point"?b.point:e==="line"?b.line:e==="polygon"?b.polygon:e.startsWith("array")||e.includes("[]")?b.text:e.startsWith("user-defined")||e==="enum"?b.enum:b.text}var b,it=m(()=>{"use strict";Ee();b={int:"int",bigint:"bigint",smallint:"smallint",numeric:"numeric",float:"float",double:"double",money:"money",boolean:"boolean",text:"text",varchar:"varchar",char:"char",json:"json",jsonb:"jsonb",xml:"xml",uuid:"uuid",date:"date",time:"time",timestamp:"timestamp",timestamptz:"timestamptz",interval:"interval",bytea:"bytea",inet:"inet",cidr:"cidr",macaddr:"macaddr",macaddr8:"macaddr8",point:"point",line:"line",polygon:"polygon",array:"array",enum:"enum"}});import{z as R}from"zod";var dr,ct,fr,br,lt,mt=m(()=>{"use strict";dr=["CASCADE","SET NULL","SET DEFAULT","RESTRICT","NO ACTION"],ct=R.enum(dr),fr=R.object({columnName:R.string("Column name is required"),columnType:R.string("Column type is required"),defaultValue:R.string().optional(),isPrimaryKey:R.boolean().default(!1),isNullable:R.boolean().default(!1),isUnique:R.boolean().default(!1),isIdentity:R.boolean().default(!1),isArray:R.boolean().default(!1)}),br=R.object({columnName:R.string("Column name is required"),referencedTable:R.string("Referenced table is required"),referencedColumn:R.string("Referenced column is required"),onUpdate:ct.default("NO ACTION"),onDelete:ct.default("NO ACTION")}),lt=R.object({tableName:R.string("Table name is required"),fields:R.array(fr).min(1,"At least one field is required"),foreignKeys:R.array(br).optional()})});import{z as C}from"zod";var yr,fn,ut,pt=m(()=>{"use strict";j();yr=C.object({name:C.string("Name is required"),size:C.string("Size is required"),owner:C.string("Owner is required"),encoding:C.string("Encoding is required")}),fn=C.object({databases:C.array(yr),dbType:ne}),ut=C.object({version:C.string("Version is required"),database:C.string("Database is required"),user:C.string("User is required"),host:C.string("Host is required").nullable(),port:C.number("Port is required").nullable(),active_connections:C.coerce.number("Active connections is required"),max_connections:C.coerce.number("Max connections is required")})});var dt=m(()=>{"use strict"});import{z as $}from"zod";var ft,se,gn,Tn,bt=m(()=>{"use strict";j();ft=S.extend({cascade:$.string().optional().transform(t=>t==="true")}),se=$.object({tableName:$.string("Table name is required"),columnName:$.string("Column name is required")}),gn=$.object({db:S.shape.db,tableName:se.shape.tableName,columnName:se.shape.columnName,cascade:$.boolean().optional()}),Tn=$.object({message:$.string("Message is required"),tableName:$.string("Table name is required"),columnName:$.string("Column name is required"),deletedCount:$.number("Deleted count is required").default(0)})});import{z as Y}from"zod";var Re,yt=m(()=>{"use strict";Re=Y.object({tableName:Y.string("Table name is required"),primaryKeys:Y.array(Y.object({columnName:Y.string("Column name is required"),value:Y.any()})).min(1,"At least one primary key is required")})});import{z as hr}from"zod";var ht,gt=m(()=>{"use strict";j();ht=S.extend({cascade:hr.string().optional().transform(t=>t==="true")})});import{z as Tt}from"zod";var St,Et=m(()=>{"use strict";St=Tt.object({query:Tt.string("Query is required")})});import{z as gr}from"zod";var Tr,Rt,wt=m(()=>{"use strict";j();Tr=["csv","xlsx","json"],Rt=S.extend({format:gr.enum(Tr,{message:"Invalid format. Supported formats: csv, xlsx, json"})})});var _t=m(()=>{"use strict"});import{z as T}from"zod";var qn,ie,In,Sr,On,Dt,Ct=m(()=>{"use strict";j();qn=T.object({columnName:T.string(),operator:T.string(),value:T.string()}),ie=["asc","desc"],In=T.object({columnName:T.string(),direction:T.enum(ie)}),Sr=T.object({limit:T.number(),total:T.number(),hasNextPage:T.boolean(),hasPreviousPage:T.boolean(),nextCursor:T.string().nullable(),prevCursor:T.string().nullable()}),On=T.object({data:T.array(T.record(T.string(),T.unknown())),meta:Sr}),Dt=T.object({db:S.shape.db,cursor:T.string().optional(),limit:T.string().optional().default("50").transform(Number),direction:T.enum(ie).optional().default(ie[0]),sort:T.string().optional().transform(t=>{if(!t)return"";try{let e=JSON.parse(t);return Array.isArray(e)?e:t}catch{return t}}),order:T.enum(ie).optional(),filters:T.string().optional().transform(t=>{if(!t)return[];try{return JSON.parse(t)}catch{return[]}})})});import{z as we}from"zod";var jn,xt=m(()=>{"use strict";jn=we.object({tableName:we.string("Table name is required"),rowCount:we.coerce.number("Row count is required")})});import{z as Nt}from"zod";var Hn,vt=m(()=>{"use strict";Hn=Nt.object({schema:Nt.string()})});import{z as q}from"zod";var At,$t=m(()=>{"use strict";At=q.object({tableName:q.string("Table name is required"),primaryKey:q.string("Primary key is required").default("id"),updates:q.array(q.object({rowData:q.record(q.string("Column name is required"),q.any()),columnName:q.string("Column name is required"),value:q.any()},{message:"Each update must have a row data, column name, and value."})).min(1,"At least one update is required")})});var F=m(()=>{"use strict";Je();Xe();et();rt();at();it();Ee();mt();j();pt();dt();bt();yt();gt();Et();wt();_t();Ct();xt();vt();$t()});import{HTTPException as Er}from"hono/http-exception";import{DatabaseError as Rr}from"pg";import{ZodError as wr}from"zod";function Pt(t,e){if(t instanceof Er)return e.json({error:t.message??"Internal server error"},t.status);if(t instanceof wr){let o=t.issues[0];return e.json({error:"Validation error",details:o.message},400)}return t instanceof Error&&(t.message.includes("ECONNREFUSED")||t.message.includes("connection refused")||t.message.includes("timeout expired")||t.message.includes("Connection terminated")||t instanceof Rr&&t.code?.startsWith("08"))?e.json({error:"Database connection failed",details:t.message},503):e.json({error:t instanceof Error?t.message:"Internal server error"},500)}var qt,It=m(()=>{"use strict";qt=(t,e)=>{if(!t.success){let o=t.error?.issues[0];return e.json({error:"Validation error",details:o?.message??"Unknown validation error"},400)}}});import{Pool as _r}from"pg";var ce,Dr,_e,Ot=m(()=>{"use strict";ce=null,Dr=()=>{if(!ce){if(!process.env.DATABASE_URL)throw new Error("DATABASE_URL is not set. Please provide a database connection string.");try{ce=new _r({connectionString:process.env.DATABASE_URL}),ce.on("error",t=>{})}catch(t){throw t}}return ce},_e=new Proxy({},{get(t,e){try{return Dr()[e]}catch(o){throw o}}})});import{Pool as Lt}from"pg";var De,kt,f,Ce,_=m(()=>{"use strict";De=class{pools=new Map;baseConfig=null;constructor(){this.initializeBaseConfig()}detectDbType(e){let o=e.protocol.replace(":","");if(o==="postgres"||o==="postgresql")return"pg";throw new Error(`Unsupported database type: ${o}. Currently only PostgreSQL is supported. Please use a PostgreSQL connection string (postgres:// or postgresql://).`)}initializeBaseConfig(){let e=process.env.DATABASE_URL;if(!e)throw new Error("DATABASE_URL is not set. Please provide a database connection string.");try{let o=new URL(e);this.baseConfig={url:e,host:o.hostname,port:Number.parseInt(o.port,10)||5432,user:o.username,password:o.password,dbType:this.detectDbType(o)}}catch(o){throw new Error(o instanceof Error?o.message:String(o))}}getDbType(){if(!this.baseConfig)throw new Error("Base configuration not initialized");return this.baseConfig.dbType}buildConnectionString(e){if(!this.baseConfig)throw new Error("Base configuration not initialized");if(!e){let o=this.baseConfig.url;o&&(e=new URL(o).pathname.slice(1))}try{let o=new URL(this.baseConfig.url);return o.pathname=`/${e}`,o.toString()}catch(o){throw new Error(`Failed to build connection string for database "${e}": ${o instanceof Error?o.message:String(o)}`)}}getPool(e){let o=this.buildConnectionString(e);if(!this.pools.has(o)){let r={connectionString:o,max:10,idleTimeoutMillis:3e4,connectionTimeoutMillis:2e3},n=new Lt(r);n.on("error",a=>{}),this.pools.set(o,n)}return this.pools.get(o)??new Lt({connectionString:o})}async closePool(e){let o=this.pools.get(e);o&&(await o.end(),this.pools.delete(e))}async closePoolByDatabase(e){let o=this.buildConnectionString(e);await this.closePool(o)}async closeAll(){let e=Array.from(this.pools.entries()).map(async([o,r])=>{await r.end()});await Promise.all(e),this.pools.clear()}getActivePools(){return Array.from(this.pools.keys())}},kt=new De,f=t=>kt.getPool(t),Ce=()=>kt.getDbType()});import{HTTPException as Cr}from"hono/http-exception";async function le({tableName:t,db:e}){let o=f(e),r=`
|
|
2
|
+
var fr=Object.defineProperty;var d=(a,e)=>()=>(a&&(e=a(a=0)),e);var yr=(a,e)=>{for(var t in e)fr(a,t,{get:e[t],enumerable:!0})};var nt=d(()=>{"use strict"});var st=d(()=>{"use strict"});var it=d(()=>{"use strict"});var Z,lt=d(()=>{"use strict";Z={PORT:3333,ENV:".env",VAR_NAME:"DATABASE_URL",BASE_URL:"http://localhost:3333",PROXY_URL:process.env.NODE_ENV==="development"?"http://localhost:8787":"https://db-studio-proxy.husamql3.workers.dev"}});var ct=d(()=>{"use strict"});var mt,Oe=d(()=>{"use strict";mt={AUTHOR:"H\xFCsam \u{1F951} <devhsmq@gmail.com>",AUTHOR_NAME:"H\xFCsam",AUTHOR_AVATAR:"/avocado.png",AUTHOR_USERNAME:"husamql3",AUTHOR_GITHUB_LINK:"https://github.com/husamql3",SITE_DESCRIPTION:"The modern pgAdmin alternative that works with every database.",SITE_KEYWORDS:["database","management","studio","spreadsheet","ai","sql"],SITE_TITLE:"DB Studio",SITE_NAME:"dbstudio.sh",SITE_URL:"https://dbstudio.sh",SITE_X_LINK:"https://x.com/dbstudio_sh",SITE_GITHUB_LINK:"https://github.com/husamql3/db-studio",SITE_DOCS_LINK:"https://dbstudio.sh/docs",SITE_CHANGELOG_LINK:"https://dbstudio.sh/changelog",SITE_ROADMAP_LINK:"https://dbstudio.sh/roadmap",SITE_IMAGE:"https://dbstudio.sh/og-image.png",SITE_IMAGE_WIDTH:"1200",SITE_IMAGE_HEIGHT:"630",SITE_IMAGE_ALT:"dbstudio.sh \u2013 Modern database management studio",SITE_COLOR:"#1447e6"}});var ut=d(()=>{"use strict"});var ye=d(()=>{"use strict";nt();st();it();lt();ct();Oe();ut()});import{z as ae}from"zod";var C,$r,he,Fs,wt,G,B=d(()=>{"use strict";C=ae.object({db:ae.string("Database name is required")}),$r=["pg","mysql"],he=ae.enum($r,{message:"Invalid database type"}),Fs=C.extend({dbType:he}),wt=ae.object({dbType:he}),G=ae.object({tableName:ae.string("Table name is required")})});import{z as W}from"zod";var V,Ks,Nt=d(()=>{"use strict";B();V=W.object({columnName:W.string("Column name is required"),columnType:W.string("Column type is required"),defaultValue:W.string().optional(),isPrimaryKey:W.boolean().default(!1),isNullable:W.boolean().default(!1),isUnique:W.boolean().default(!1),isIdentity:W.boolean().default(!1),isArray:W.boolean().default(!1)}),Ks=W.object({db:C.shape.db,tableName:G.shape.tableName,columnName:V.shape.columnName,columnType:V.shape.columnType,defaultValue:V.shape.defaultValue,isPrimaryKey:V.shape.isPrimaryKey,isNullable:V.shape.isNullable,isUnique:V.shape.isUnique,isIdentity:V.shape.isIdentity,isArray:V.shape.isArray})});import{z as ce}from"zod";var At,Dt=d(()=>{"use strict";At=ce.object({tableName:ce.string("Table name is required"),data:ce.record(ce.string("Column name is required"),ce.any())})});import{z as j}from"zod";var _t,U,Gs,Js,ge=d(()=>{"use strict";B();_t=C.extend({cascade:j.string().optional().transform(a=>a==="true")}),U=j.object({tableName:j.string("Table name is required"),columnName:j.string("Column name is required")}),Gs=j.object({db:C.shape.db,tableName:U.shape.tableName,columnName:U.shape.columnName,cascade:j.boolean().optional()}),Js=j.object({message:j.string("Message is required"),tableName:j.string("Table name is required"),columnName:j.string("Column name is required"),deletedCount:j.number("Deleted count is required").default(0)})});import{z as me}from"zod";var ue,ai,xt=d(()=>{"use strict";B();ge();ue=me.object({columnType:me.string("Column type is required"),isNullable:me.boolean(),defaultValue:me.string().nullable().optional()}),ai=me.object({db:C.shape.db,tableName:U.shape.tableName,columnName:U.shape.columnName,columnType:ue.shape.columnType,isNullable:ue.shape.isNullable,defaultValue:ue.shape.defaultValue})});var Pt=d(()=>{"use strict"});import{z as oe}from"zod";var Lt,vt=d(()=>{"use strict";Lt=oe.object({tableName:oe.string().min(1,"Table name is required"),records:oe.array(oe.record(oe.string(),oe.any())).min(1,"At least one record is required")})});import{z as re}from"zod";var $t,qt=d(()=>{"use strict";B();$t=re.object({messages:re.array(re.object({role:re.enum(["user","assistant"]),content:re.string("Content is required")})),conversationId:re.string().optional(),db:C.shape.db})});var Ot=d(()=>{"use strict"});import{z as F}from"zod";var qr,Or,v,Mr,Ir,mi,Ue=d(()=>{"use strict";qr=["text","boolean","number","enum","json","date","array"],Or=F.enum(qr),v={text:"text",boolean:"boolean",number:"number",enum:"enum",json:"json",date:"date",array:"array"},Mr=["int","bigint","smallint","numeric","float","double","money","tinyint","mediumint","bit","boolean","text","varchar","char","tinytext","mediumtext","longtext","json","jsonb","xml","uuid","date","time","timestamp","timestamptz","interval","datetime","year","bytea","inet","cidr","macaddr","macaddr8","point","line","polygon","binary","varbinary","blob","tinyblob","mediumblob","longblob","array","enum","set"],Ir=F.enum(Mr),mi=F.object({columnName:F.string(),dataType:Or,dataTypeLabel:Ir,isNullable:F.boolean(),columnDefault:F.string().nullable(),isPrimaryKey:F.boolean(),isForeignKey:F.boolean(),referencedTable:F.string().nullable(),referencedColumn:F.string().nullable(),enumValues:F.array(F.string()).nullable()})});function Mt(a){let e=a?.toLowerCase().trim()||"";return e.includes("[]")||e==="date"||e==="time"||e==="time without time zone"||e.startsWith("time(")||e==="timestamp"||e==="timestamp without time zone"||e.startsWith("timestamp(")||e==="timestamp with time zone"||e==="timestamptz"||e.startsWith("timestamp with time zone(")?v.date:e==="integer"||e==="int"||e==="int4"||e==="bigint"||e==="int8"||e==="smallint"||e==="int2"||e==="decimal"||e.startsWith("decimal(")||e==="numeric"||e.startsWith("numeric(")||e==="real"||e==="float4"||e==="double precision"||e==="float8"||e==="float"||e==="serial"||e==="serial4"||e==="bigserial"||e==="serial8"||e==="money"?v.number:e==="boolean"||e==="bool"?v.boolean:e==="json"||e==="jsonb"?v.json:e.startsWith("user-defined")||e==="enum"||e==="text"||e==="xml"?v.text:e==="character varying"||e.startsWith("varchar")||e.startsWith("character varying(")||e==="character"||e.startsWith("char")||e.startsWith("character(")||e==="bpchar"||e==="uuid"||e==="interval"||e.startsWith("interval")||e==="bytea"||e==="point"||e==="line"||e==="polygon"||e==="inet"||e==="cidr"||e==="macaddr"||e==="macaddr8"?v.text:v.text}function It(a){if(!a)return y.text;let e=a.toLowerCase().trim();return e==="integer"||e==="int"||e==="int4"||e==="serial"||e==="serial4"?y.int:e==="bigint"||e==="int8"||e==="bigserial"||e==="serial8"?y.bigint:e==="smallint"||e==="int2"?y.smallint:e==="decimal"||e.startsWith("decimal(")||e==="numeric"||e.startsWith("numeric(")?y.numeric:e==="real"||e==="float4"?y.float:e==="double precision"||e==="float8"||e==="float"?y.double:e==="money"?y.money:e==="boolean"||e==="bool"?y.boolean:e==="text"?y.text:e==="character varying"||e.startsWith("varchar")||e.startsWith("character varying(")?y.varchar:e==="character"||e.startsWith("char")||e.startsWith("character(")||e==="bpchar"?y.char:e==="json"?y.json:e==="jsonb"?y.jsonb:e==="xml"?y.xml:e==="uuid"?y.uuid:e==="date"?y.date:e==="time"||e==="time without time zone"||e.startsWith("time(")?y.time:e==="timestamp"||e==="timestamp without time zone"||e.startsWith("timestamp(")?y.timestamp:e==="timestamp with time zone"||e==="timestamptz"||e.startsWith("timestamp with time zone(")?y.timestamptz:e==="interval"||e.startsWith("interval")?y.interval:e==="bytea"?y.bytea:e==="inet"?y.inet:e==="cidr"?y.cidr:e==="macaddr"?y.macaddr:e==="macaddr8"?y.macaddr8:e==="point"?y.point:e==="line"?y.line:e==="polygon"?y.polygon:e.startsWith("array")||e.includes("[]")?y.text:e.startsWith("user-defined")||e==="enum"?y.enum:y.text}function kt(a,e){let t=a?.toLowerCase().trim()||"",o=e?.toLowerCase().trim()||"";return t==="tinyint"&&o==="tinyint(1)"?v.boolean:t==="tinyint"||t==="smallint"||t==="mediumint"||t==="int"||t==="integer"||t==="bigint"||t==="decimal"||t==="numeric"||t==="float"||t==="double"||t==="real"||t==="bit"?v.number:t==="boolean"||t==="bool"?v.boolean:t==="date"||t==="datetime"||t==="timestamp"||t==="time"||t==="year"?v.date:t==="json"?v.json:t==="enum"||t==="set"?v.enum:v.text}function Ut(a,e){if(!a)return y.text;let t=a.toLowerCase().trim(),o=e?.toLowerCase().trim()||"";return t==="tinyint"&&o==="tinyint(1)"?y.boolean:t==="tinyint"?y.tinyint:t==="smallint"?y.smallint:t==="mediumint"?y.mediumint:t==="int"||t==="integer"?y.int:t==="bigint"?y.bigint:t==="decimal"||t==="numeric"?y.numeric:t==="float"||t==="real"?y.float:t==="double"?y.double:t==="bit"?y.bit:t==="boolean"||t==="bool"?y.boolean:t==="char"?y.char:t==="varchar"?y.varchar:t==="tinytext"?y.tinytext:t==="text"?y.text:t==="mediumtext"?y.mediumtext:t==="longtext"?y.longtext:t==="binary"?y.binary:t==="varbinary"?y.varbinary:t==="tinyblob"?y.tinyblob:t==="blob"?y.blob:t==="mediumblob"?y.mediumblob:t==="longblob"?y.longblob:t==="json"?y.json:t==="date"?y.date:t==="time"?y.time:t==="datetime"?y.datetime:t==="timestamp"?y.timestamp:t==="year"?y.year:t==="enum"?y.enum:t==="set"?y.set:y.text}var y,Ft=d(()=>{"use strict";Ue();y={int:"int",bigint:"bigint",smallint:"smallint",numeric:"numeric",float:"float",double:"double",money:"money",tinyint:"tinyint",mediumint:"mediumint",bit:"bit",boolean:"boolean",text:"text",varchar:"varchar",char:"char",tinytext:"tinytext",mediumtext:"mediumtext",longtext:"longtext",json:"json",jsonb:"jsonb",xml:"xml",uuid:"uuid",date:"date",time:"time",timestamp:"timestamp",timestamptz:"timestamptz",interval:"interval",datetime:"datetime",year:"year",bytea:"bytea",inet:"inet",cidr:"cidr",macaddr:"macaddr",macaddr8:"macaddr8",point:"point",line:"line",polygon:"polygon",binary:"binary",varbinary:"varbinary",blob:"blob",tinyblob:"tinyblob",mediumblob:"mediumblob",longblob:"longblob",array:"array",enum:"enum",set:"set"}});import{z as x}from"zod";var kr,Ht,Ur,Fr,Bt,jt=d(()=>{"use strict";kr=["CASCADE","SET NULL","SET DEFAULT","RESTRICT","NO ACTION"],Ht=x.enum(kr),Ur=x.object({columnName:x.string("Column name is required"),columnType:x.string("Column type is required"),defaultValue:x.string().optional(),isPrimaryKey:x.boolean().default(!1),isNullable:x.boolean().default(!1),isUnique:x.boolean().default(!1),isIdentity:x.boolean().default(!1),isArray:x.boolean().default(!1)}),Fr=x.object({columnName:x.string("Column name is required"),referencedTable:x.string("Referenced table is required"),referencedColumn:x.string("Referenced column is required"),onUpdate:Ht.default("NO ACTION"),onDelete:Ht.default("NO ACTION")}),Bt=x.object({tableName:x.string("Table name is required"),fields:x.array(Ur).min(1,"At least one field is required"),foreignKeys:x.array(Fr).optional()})});import{z as $}from"zod";var Hr,hi,Kt,Wt=d(()=>{"use strict";B();Hr=$.object({name:$.string("Name is required"),size:$.string("Size is required"),owner:$.string("Owner is required"),encoding:$.string("Encoding is required")}),hi=$.object({databases:$.array(Hr),dbType:he}),Kt=$.object({version:$.string("Version is required"),database:$.string("Database is required"),user:$.string("User is required"),host:$.string("Host is required").nullable(),port:$.number("Port is required").nullable(),active_connections:$.coerce.number("Active connections is required"),max_connections:$.coerce.number("Max connections is required")})});var Vt=d(()=>{"use strict"});import{z as ne}from"zod";var Fe,zt=d(()=>{"use strict";Fe=ne.object({tableName:ne.string("Table name is required"),primaryKeys:ne.array(ne.object({columnName:ne.string("Column name is required"),value:ne.any()})).min(1,"At least one primary key is required")})});import{z as Br}from"zod";var Yt,Qt=d(()=>{"use strict";B();Yt=C.extend({cascade:Br.string().optional().transform(a=>a==="true")})});import{z as Gt}from"zod";var Jt,Xt=d(()=>{"use strict";Jt=Gt.object({query:Gt.string("Query is required")})});import{z as jr}from"zod";var Kr,Zt,ea=d(()=>{"use strict";B();Kr=["csv","xlsx","json"],Zt=C.extend({format:jr.enum(Kr,{message:"Invalid format. Supported formats: csv, xlsx, json"})})});var ta=d(()=>{"use strict"});import{z as He}from"zod";var Be,$i,aa=d(()=>{"use strict";B();ge();Be=He.object({newColumnName:He.string("New column name is required")}),$i=He.object({db:C.shape.db,tableName:U.shape.tableName,columnName:U.shape.columnName,newColumnName:Be.shape.newColumnName})});import{z as w}from"zod";var Ii,Ee,ki,Wr,Ui,oa,ra=d(()=>{"use strict";B();Ii=w.object({columnName:w.string(),operator:w.string(),value:w.string()}),Ee=["asc","desc"],ki=w.object({columnName:w.string(),direction:w.enum(Ee)}),Wr=w.object({limit:w.number(),total:w.number(),hasNextPage:w.boolean(),hasPreviousPage:w.boolean(),nextCursor:w.string().nullable(),prevCursor:w.string().nullable()}),Ui=w.object({data:w.array(w.record(w.string(),w.unknown())),meta:Wr}),oa=w.object({db:C.shape.db,cursor:w.string().optional(),limit:w.string().optional().default("50").transform(Number),direction:w.enum(Ee).optional().default(Ee[0]),sort:w.string().optional().transform(a=>{if(!a)return"";try{let e=JSON.parse(a);return Array.isArray(e)?e:a}catch{return a}}),order:w.enum(Ee).optional(),filters:w.string().optional().transform(a=>{if(!a)return[];try{return JSON.parse(a)}catch{return[]}})})});import{z as je}from"zod";var Bi,na=d(()=>{"use strict";Bi=je.object({tableName:je.string("Table name is required"),rowCount:je.coerce.number("Row count is required")})});import{z as sa}from"zod";var Wi,ia=d(()=>{"use strict";Wi=sa.object({schema:sa.string()})});import{z}from"zod";var la,ca=d(()=>{"use strict";la=z.object({tableName:z.string("Table name is required"),primaryKey:z.string("Primary key is required").default("id"),updates:z.array(z.object({rowData:z.record(z.string("Column name is required"),z.any()),columnName:z.string("Column name is required"),value:z.any()},{message:"Each update must have a row data, column name, and value."})).min(1,"At least one update is required")})});var J=d(()=>{"use strict";Nt();Dt();xt();Pt();vt();qt();Ot();Ft();Ue();jt();B();Wt();Vt();ge();zt();Qt();Xt();ea();ta();aa();ra();na();ia();ca()});import{HTTPException as Vr}from"hono/http-exception";import{DatabaseError as zr}from"pg";import{ZodError as Yr}from"zod";function ma(a,e){if(a instanceof Vr)return e.json({error:a.message??"Internal server error"},a.status);if(a instanceof Yr){let t=a.issues[0];return e.json({error:"Validation error",details:t.message},400)}if(a instanceof Error){let t=a;if(t.code==="ECONNREFUSED"||t.code==="ENOTFOUND"||t.code==="ETIMEDOUT"||t.code==="ER_ACCESS_DENIED_ERROR"||t.code==="ER_BAD_HOST_ERROR"||t.code==="ECONNRESET"||t.errno===1045||t.errno===2003||t.errno===2002||a.message.includes("ECONNREFUSED")||a.message.includes("connection refused")||a.message.includes("timeout expired")||a.message.includes("Connection terminated")||a instanceof zr&&a.code?.startsWith("08"))return e.json({error:"Database connection failed",details:a.message},503)}return e.json({error:a instanceof Error?a.message:"Internal server error"},500)}var ua,pa=d(()=>{"use strict";ua=(a,e)=>{if(!a.success){let t=a.error?.issues[0];return e.json({error:"Validation error",details:t?.message??"Unknown validation error"},400)}}});import{Pool as Qr}from"pg";var Se,Gr,Ke,da=d(()=>{"use strict";Se=null,Gr=()=>{if(!Se){if(!process.env.DATABASE_URL)throw new Error("DATABASE_URL is not set. Please provide a database connection string.");try{Se=new Qr({connectionString:process.env.DATABASE_URL}),Se.on("error",a=>{})}catch(a){throw a}}return Se},Ke=new Proxy({},{get(a,e){try{return Gr()[e]}catch(t){throw t}}})});import{createPool as Jr}from"mysql2/promise";import{Pool as fa}from"pg";var We,Ve,g,E,Re,S=d(()=>{"use strict";We=class{pgPools=new Map;mysqlPools=new Map;baseConfig=null;constructor(){this.initializeBaseConfig()}detectDbType(e){let t=e.protocol.replace(":","");if(t==="postgres"||t==="postgresql")return"pg";if(t==="mysql"||t==="mysql2")return"mysql";throw new Error(`Unsupported database type: ${t}. Supported types: PostgreSQL (postgres://) and MySQL (mysql://).`)}initializeBaseConfig(){let e=process.env.DATABASE_URL;if(!e)throw new Error("DATABASE_URL is not set. Please provide a database connection string.");try{let t=new URL(e);this.baseConfig={url:e,host:t.hostname,port:Number.parseInt(t.port,10)||(this.detectDbType(t)==="mysql"?3306:5432),user:t.username,password:t.password,dbType:this.detectDbType(t)}}catch(t){throw new Error(t instanceof Error?t.message:String(t))}}getDbType(){if(!this.baseConfig)throw new Error("Base configuration not initialized");return this.baseConfig.dbType}buildConnectionString(e){if(!this.baseConfig)throw new Error("Base configuration not initialized");e||(e=new URL(this.baseConfig.url).pathname.slice(1));try{let t=new URL(this.baseConfig.url);return t.pathname=`/${e}`,t.toString()}catch(t){throw new Error(`Failed to build connection string for database "${e}": ${t instanceof Error?t.message:String(t)}`)}}getPgPool(e){let t=this.buildConnectionString(e);if(!this.pgPools.has(t)){let o={connectionString:t,max:10,idleTimeoutMillis:3e4,connectionTimeoutMillis:2e3},r=new fa(o);r.on("error",n=>{}),this.pgPools.set(t,r)}return this.pgPools.get(t)??new fa({connectionString:t})}getMysqlPool(e){if(!this.baseConfig)throw new Error("Base configuration not initialized");let t=this.buildConnectionString(e);if(!this.mysqlPools.has(t)){let r=new URL(t).pathname.slice(1),n=Jr({host:this.baseConfig.host,port:this.baseConfig.port,user:this.baseConfig.user,password:this.baseConfig.password,database:r||void 0,waitForConnections:!0,connectionLimit:10,idleTimeout:3e4,connectTimeout:2e3,multipleStatements:!1});this.mysqlPools.set(t,n)}return this.mysqlPools.get(t)}getPool(e){return this.getPgPool(e)}async closePgPool(e){let t=this.pgPools.get(e);t&&(await t.end(),this.pgPools.delete(e))}async closeMysqlPool(e){let t=this.mysqlPools.get(e);t&&(await t.end(),this.mysqlPools.delete(e))}async closePool(e){await this.closePgPool(e),await this.closeMysqlPool(e)}async closePoolByDatabase(e){let t=this.buildConnectionString(e);await this.closePool(t)}async closeAll(){let e=Array.from(this.pgPools.entries()).map(async([o,r])=>{await r.end()}),t=Array.from(this.mysqlPools.entries()).map(async([o,r])=>{await r.end()});await Promise.all([...e,...t]),this.pgPools.clear(),this.mysqlPools.clear()}getActivePools(){return[...Array.from(this.pgPools.keys()),...Array.from(this.mysqlPools.keys())]}},Ve=new We,g=a=>Ve.getPgPool(a),E=a=>Ve.getMysqlPool(a),Re=()=>Ve.getDbType()});import{HTTPException as Xr}from"hono/http-exception";async function Ce({tableName:a,db:e}){let t=g(e),o=`
|
|
3
3
|
SELECT
|
|
4
4
|
c.column_name as "columnName",
|
|
5
5
|
c.data_type as "dataType",
|
|
@@ -48,18 +48,18 @@ var zo=Object.defineProperty;var m=(t,e)=>()=>(t&&(e=t(t=0)),e);var Ko=(t,e)=>{f
|
|
|
48
48
|
WHERE c.table_schema = 'public'
|
|
49
49
|
AND c.table_name = $1
|
|
50
50
|
ORDER BY c.ordinal_position;
|
|
51
|
-
`,{rows:
|
|
51
|
+
`,{rows:r}=await t.query(o,[a]);if(!r||r.length===0)throw new Xr(404,{message:`Table "${a}" does not exist`});return r.map(n=>{let i=null;return n.enumValues&&(Array.isArray(n.enumValues)?i=n.enumValues:typeof n.enumValues=="string"&&(i=n.enumValues.replace(/[{}]/g,"").split(",").filter(Boolean))),{columnName:n.columnName,dataType:Mt(n.dataType),dataTypeLabel:It(n.dataType),isNullable:n.isNullable,columnDefault:n.columnDefault,isPrimaryKey:n.isPrimaryKey,isForeignKey:n.isForeignKey,referencedTable:n.referencedTable,referencedColumn:n.referencedColumn,enumValues:i}})}var ze=d(()=>{"use strict";J();S()});async function Zr(a){let e=g(a),t=`
|
|
52
52
|
SELECT table_name
|
|
53
53
|
FROM information_schema.tables
|
|
54
54
|
WHERE table_schema = 'public'
|
|
55
55
|
AND table_type = 'BASE TABLE'
|
|
56
56
|
ORDER BY table_name;
|
|
57
|
-
`,{rows:
|
|
57
|
+
`,{rows:o}=await e.query(t);return o.map(r=>r.table_name)}async function en(a){let e=await Ke.connect();try{return(await e.query(`
|
|
58
58
|
SELECT obj_description(oid) as description
|
|
59
59
|
FROM pg_class
|
|
60
60
|
WHERE relname = $1
|
|
61
61
|
AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'public');
|
|
62
|
-
`,[
|
|
62
|
+
`,[a])).rows[0]?.description||void 0}finally{e.release()}}async function tn(a){let e=await Ke.connect();try{return(await e.query(`SELECT * FROM "${a}" LIMIT 3`)).rows}catch{return[]}finally{e.release()}}function an(a){let e={name:a.columnName,type:a.dataTypeLabel,nullable:a.isNullable};return a.isPrimaryKey&&(e.isPrimaryKey=!0),a.isForeignKey&&a.referencedTable&&a.referencedColumn&&(e.foreignKey=`${a.referencedTable}.${a.referencedColumn}`),a.enumValues&&a.enumValues.length>0&&(e.enumValues=a.enumValues,e.description=`Enum values: ${a.enumValues.join(", ")}`),e}function on(a){let e=[];for(let t of a)for(let o of t.columns)if(o.foreignKey){let[r,n]=o.foreignKey.split(".");e.push({fromTable:t.name,fromColumn:o.name,toTable:r,toColumn:n})}return e}async function rn(a,e={}){let{includeSampleData:t=!1,includeDescriptions:o=!0}=e;try{let n=(await Zr(a)).map(async s=>{let[m,c,p]=await Promise.all([Ce({tableName:s,db:a}),o?en(s):Promise.resolve(void 0),t?tn(s):Promise.resolve([])]),u={name:s,columns:m.map(an)};return c&&(u.description=c),p.length>0&&(u.sampleData=p.map(b=>Object.fromEntries(Object.entries(b).map(([f,h])=>[f,String(h)])))),u}),i=await Promise.all(n),l=on(i);return{dbType:"PostgreSQL",tables:i,relationships:l}}catch(r){throw new Error(`Failed to fetch database schema: ${r instanceof Error?r.message:"Unknown error"}`)}}async function ya(a){return rn(a,{includeSampleData:!0,includeDescriptions:!0})}var ba=d(()=>{"use strict";da();S();ze()});function Ta(a){return`You are a database assistant for db-studio. Your responses must be CONCISE and FOCUSED.
|
|
63
63
|
|
|
64
64
|
**Your Role:**
|
|
65
65
|
1. Keep responses SHORT - 2-3 sentences maximum unless generating SQL
|
|
@@ -69,15 +69,15 @@ var zo=Object.defineProperty;var m=(t,e)=>()=>(t&&(e=t(t=0)),e);var Ko=(t,e)=>{f
|
|
|
69
69
|
- 1 sentence about expected results
|
|
70
70
|
- NO verbose explanations
|
|
71
71
|
3. Use exact table/column names from the schema
|
|
72
|
-
4. Generate valid ${
|
|
72
|
+
4. Generate valid ${a.dbType} syntax
|
|
73
73
|
5. If query is unclear, ask ONE specific clarifying question
|
|
74
74
|
6. No preamble, no apologies, get straight to the answer
|
|
75
75
|
|
|
76
76
|
**Database Context:**
|
|
77
|
-
${
|
|
77
|
+
${nn(a)}
|
|
78
78
|
|
|
79
79
|
**Guidelines:**
|
|
80
|
-
1. Always generate syntactically correct SQL for the database type (${
|
|
80
|
+
1. Always generate syntactically correct SQL for the database type (${a.dbType})
|
|
81
81
|
2. Use proper table/column names exactly as defined in the schema
|
|
82
82
|
3. When generating queries, wrap them in \`\`\`sql code blocks
|
|
83
83
|
4. Explain what the query does in plain language
|
|
@@ -112,21 +112,21 @@ LIMIT 5;
|
|
|
112
112
|
|
|
113
113
|
This will return the 5 customers with the highest total order value. You might also want to see:
|
|
114
114
|
- Revenue trends over time for these customers
|
|
115
|
-
- Their most frequently ordered products"`}function
|
|
115
|
+
- Their most frequently ordered products"`}function nn(a){let e=`Database Type: ${a.dbType}
|
|
116
116
|
|
|
117
117
|
`;e+=`**Tables and Columns:**
|
|
118
|
-
`;for(let
|
|
119
|
-
### ${
|
|
120
|
-
`,
|
|
118
|
+
`;for(let t of a.tables){e+=`
|
|
119
|
+
### ${t.name}
|
|
120
|
+
`,t.description&&(e+=`Description: ${t.description}
|
|
121
121
|
`),e+=`Columns:
|
|
122
|
-
`;for(let
|
|
123
|
-
`,
|
|
124
|
-
`)}
|
|
125
|
-
`,e+=`${JSON.stringify(
|
|
126
|
-
`)}if(
|
|
122
|
+
`;for(let o of t.columns){let r=o.isPrimaryKey?" [PRIMARY KEY]":"",n=o.foreignKey?` [FK -> ${o.foreignKey}]`:"",i=o.nullable?"NULL":"NOT NULL";e+=` - ${o.name}: ${o.type} ${i}${r}${n}
|
|
123
|
+
`,o.description&&(e+=` ${o.description}
|
|
124
|
+
`)}t.sampleData&&t.sampleData.length>0&&(e+=`Sample data (${t.sampleData.length} rows):
|
|
125
|
+
`,e+=`${JSON.stringify(t.sampleData.slice(0,3),null,2)}
|
|
126
|
+
`)}if(a.relationships&&a.relationships.length>0){e+=`
|
|
127
127
|
**Relationships:**
|
|
128
|
-
`;for(let
|
|
129
|
-
`}return e}var
|
|
128
|
+
`;for(let t of a.relationships)e+=` - ${t.fromTable}.${t.fromColumn} -> ${t.toTable}.${t.toColumn}
|
|
129
|
+
`}return e}var ha=d(()=>{"use strict"});import{zValidator as sn}from"@hono/zod-validator";import{Hono as ln}from"hono";var ga,Ea=d(()=>{"use strict";ye();J();ba();ha();ga=new ln().basePath("/chat").post("/",sn("json",$t),async a=>{let{messages:e,conversationId:t,db:o}=a.req.valid("json"),r=await ya(o),n=Ta(r),i={messages:e,conversationId:t,systemPrompt:n},l=await fetch(`${Z.PROXY_URL}/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!l.ok){let c=await l.json();return a.json({error:c.error||"Proxy request failed"},l.status)}let{readable:s,writable:m}=new TransformStream;return l.body?.pipeTo(m),new Response(s,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})})});function we(){let a=process.env.DATABASE_URL;if(!a)return{host:"localhost",port:5432};try{let e=new URL(a);return{host:e.hostname||"localhost",port:Number.parseInt(e.port,10)||5432}}catch{return{host:"localhost",port:5432}}}var Ye=d(()=>{"use strict"});import{HTTPException as Qe}from"hono/http-exception";async function Sa(){let a=g(),e=`
|
|
130
130
|
SELECT
|
|
131
131
|
d.datname as name,
|
|
132
132
|
pg_size_pretty(pg_database_size(d.datname)) as size,
|
|
@@ -135,7 +135,7 @@ This will return the 5 customers with the highest total order value. You might a
|
|
|
135
135
|
FROM pg_catalog.pg_database d
|
|
136
136
|
WHERE d.datistemplate = false
|
|
137
137
|
ORDER BY d.datname;
|
|
138
|
-
`,{rows:
|
|
138
|
+
`,{rows:t}=await a.query(e);if(!t[0])throw new Qe(500,{message:"No databases returned from database"});return t}async function Ra(){let a=g(),e="SELECT current_database() as database;",{rows:t}=await a.query(e);if(!t[0])throw new Qe(500,{message:"No current database returned from database"});return t[0]}async function Ca(){let a=g(),e=`
|
|
139
139
|
SELECT
|
|
140
140
|
version() as version,
|
|
141
141
|
current_database() as database,
|
|
@@ -144,15 +144,40 @@ This will return the 5 customers with the highest total order value. You might a
|
|
|
144
144
|
inet_server_port() as port,
|
|
145
145
|
(SELECT count(*) FROM pg_stat_activity WHERE datname = current_database()) as active_connections,
|
|
146
146
|
(SELECT setting::int FROM pg_settings WHERE name = 'max_connections') as max_connections;
|
|
147
|
-
`,{rows:
|
|
148
|
-
|
|
149
|
-
|
|
147
|
+
`,{rows:t}=await a.query(e);if(!t[0])throw new Qe(500,{message:"No connection information returned from database"});let o=Kt.parse(t[0]),r=we();return{host:o.host||r.host,port:o.port||r.port,user:o.user,database:o.database,version:o.version.toString(),active_connections:o.active_connections,max_connections:o.max_connections}}var wa=d(()=>{"use strict";J();S();Ye()});import{HTTPException as Ge}from"hono/http-exception";async function Na(){let a=E(),[e]=await a.execute(`
|
|
148
|
+
SELECT
|
|
149
|
+
s.SCHEMA_NAME AS name,
|
|
150
|
+
CONCAT(
|
|
151
|
+
ROUND(
|
|
152
|
+
COALESCE(SUM(t.data_length + t.index_length), 0) / 1024 / 1024,
|
|
153
|
+
2
|
|
154
|
+
),
|
|
155
|
+
' MB'
|
|
156
|
+
) AS size,
|
|
157
|
+
CURRENT_USER() AS owner,
|
|
158
|
+
s.DEFAULT_CHARACTER_SET_NAME AS encoding
|
|
159
|
+
FROM information_schema.SCHEMATA s
|
|
160
|
+
LEFT JOIN information_schema.TABLES t
|
|
161
|
+
ON t.TABLE_SCHEMA = s.SCHEMA_NAME
|
|
162
|
+
GROUP BY s.SCHEMA_NAME, s.DEFAULT_CHARACTER_SET_NAME
|
|
163
|
+
ORDER BY s.SCHEMA_NAME
|
|
164
|
+
`);if(!e[0])throw new Ge(500,{message:"No databases returned from server"});return e}async function Aa(){let a=E(),[e]=await a.execute("SELECT DATABASE() AS db");if(!e[0])throw new Ge(500,{message:"No current database returned from server"});return e[0]}async function Da(){let a=E(),[e]=await a.execute(`
|
|
165
|
+
SELECT
|
|
166
|
+
VERSION() AS version,
|
|
167
|
+
DATABASE() AS database_name,
|
|
168
|
+
CURRENT_USER() AS user,
|
|
169
|
+
@@hostname AS host,
|
|
170
|
+
@@port AS port,
|
|
171
|
+
@@max_connections AS max_connections
|
|
172
|
+
`),[t]=await a.execute("SELECT COUNT(*) AS cnt FROM information_schema.PROCESSLIST");if(!e[0])throw new Ge(500,{message:"No connection information returned from server"});let o=e[0],r=Number(t[0]?.cnt??0),n=we();return{host:String(o.host||n.host),port:Number(o.port||n.port),user:String(o.user),database:String(o.database_name??""),version:String(o.version),active_connections:r,max_connections:Number(o.max_connections)}}var _a=d(()=>{"use strict";S();Ye()});import{Hono as cn}from"hono";var xa,Pa=d(()=>{"use strict";wa();_a();S();xa=new cn().basePath("/databases").get("/",async a=>{let e=Re(),t=e==="mysql"?await Na():await Sa();return a.json({data:{databases:t,dbType:e}},200)}).get("/current",async a=>{let e=Re(),t=e==="mysql"?await Aa():await Ra();return a.json({data:{db:t.db,dbType:e}},200)}).get("/connection",async a=>{let t=Re()==="mysql"?await Da():await Ca();return a.json({data:t},200)})});import{HTTPException as mn}from"hono/http-exception";var La,va=d(()=>{"use strict";S();La=async({query:a,db:e})=>{let t=E(e);if(!a||!a.trim())throw new mn(400,{message:"Query is required"});let o=a.trim().replace(/;+$/,""),r=performance.now(),[n,i]=await t.execute(o),l=performance.now()-r;if(Array.isArray(n)){let m=n;return{columns:i?i.map(p=>p.name):Object.keys(m[0]??{}),rows:m,rowCount:m.length,duration:l,message:m.length===0?"OK":void 0}}let s=n;return{columns:[],rows:[],rowCount:s.affectedRows,duration:l,message:`OK \u2014 ${s.affectedRows} row(s) affected`}}});import{HTTPException as un}from"hono/http-exception";var $a,qa=d(()=>{"use strict";S();$a=async({query:a,db:e})=>{let t=g(e);if(!a||!a.trim())throw new un(400,{message:"Query is required"});let o=a.trim().replace(/;+$/,""),r=performance.now(),n=await t.query(o),i=performance.now()-r;return{columns:n.fields.map(s=>s.name),rows:n.rows,rowCount:n.rows.length,duration:i,message:n.rows.length===0?"OK":void 0}}});import{zValidator as Oa}from"@hono/zod-validator";import{Hono as pn}from"hono";var Ma,Ia=d(()=>{"use strict";J();va();qa();Ma=new pn().basePath("/query").post("/",Oa("query",C),Oa("json",Jt),async a=>{let{query:e}=a.req.valid("json"),{db:t}=a.req.valid("query"),r=a.get("dbType")==="mysql"?await La({query:e,db:t}):await $a({query:e,db:t});return a.json({data:r},200)})});import{HTTPException as dn}from"hono/http-exception";async function ka({db:a,params:e}){let{tableName:t,data:o}=e,r=g(a),n=Object.keys(o),i=Object.values(o),l=n.map((p,u)=>`$${u+1}`).join(", "),s=n.map(p=>`"${p}"`).join(", "),m=`
|
|
173
|
+
INSERT INTO "${t}" (${s})
|
|
174
|
+
VALUES (${l})
|
|
150
175
|
RETURNING *
|
|
151
|
-
`,
|
|
152
|
-
INSERT INTO "${
|
|
153
|
-
VALUES (${
|
|
176
|
+
`,c=await r.query(m,i);if(c.rowCount===0)throw new dn(500,{message:`Failed to insert record into "${t}"`});return{insertedCount:c.rowCount??0}}var Ua=d(()=>{"use strict";S()});import{HTTPException as Ne}from"hono/http-exception";var Fa,Ha=d(()=>{"use strict";S();Fa=async({tableName:a,records:e,db:t})=>{if(!e||e.length===0)throw new Ne(400,{message:"At least one record is required"});let r=await g(t).connect();try{let n=Object.keys(e[0]),i=n.map(c=>`"${c}"`).join(", "),l=0,s=0,m=[];await r.query("BEGIN");for(let c=0;c<e.length;c++){let p=e[c],u=n.map(h=>p[h]),b=n.map((h,T)=>`$${T+1}`).join(", "),f=`
|
|
177
|
+
INSERT INTO "${a}" (${i})
|
|
178
|
+
VALUES (${b})
|
|
154
179
|
RETURNING *
|
|
155
|
-
`;try{await
|
|
180
|
+
`;try{await r.query(f,u),l++}catch(h){throw new Ne(500,{message:`Failed: ${h instanceof Error?h.message:String(h)}`})}}return await r.query("COMMIT"),{success:s===0,message:`Bulk insert completed: ${l} records inserted${s>0?`, ${s} failed`:""}`,successCount:l,failureCount:s,errors:m.length>0?m:void 0}}catch(n){throw await r.query("ROLLBACK"),n instanceof Ne?n:new Ne(500,{message:`Failed to bulk insert records into "${a}"`})}finally{r.release()}}});import{HTTPException as se}from"hono/http-exception";async function Je(a,e){return(await g(e).query(`
|
|
156
181
|
SELECT
|
|
157
182
|
tc.constraint_name,
|
|
158
183
|
tc.table_name as referencing_table,
|
|
@@ -168,45 +193,111 @@ This will return the 5 customers with the highest total order value. You might a
|
|
|
168
193
|
AND ccu.table_schema = tc.table_schema
|
|
169
194
|
WHERE tc.constraint_type = 'FOREIGN KEY'
|
|
170
195
|
AND ccu.table_name = $1
|
|
171
|
-
`,[
|
|
172
|
-
SELECT * FROM "${
|
|
173
|
-
WHERE "${
|
|
196
|
+
`,[a])).rows.map(n=>({constraintName:n.constraint_name,referencingTable:n.referencing_table,referencingColumn:n.referencing_column,referencedTable:n.referenced_table,referencedColumn:n.referenced_column}))}async function fn(a,e,t){let o=await Je(a,t);if(o.length===0)return[];let r=[],n=g(t),i=new Map;for(let s of o){let m=`${s.referencingTable}.${s.referencingColumn}`;i.has(m)||i.set(m,[]),i.get(m)?.push(s)}let l=e.map(s=>s.value);for(let[s,m]of i){let c=m[0];if(!c||!e.find(h=>h.columnName===c.referencedColumn))continue;let u=l.map((h,T)=>`$${T+1}`).join(", "),b=`
|
|
197
|
+
SELECT * FROM "${c.referencingTable}"
|
|
198
|
+
WHERE "${c.referencingColumn}" IN (${u})
|
|
174
199
|
LIMIT 100
|
|
175
|
-
`,
|
|
176
|
-
DELETE FROM "${
|
|
177
|
-
WHERE "${
|
|
200
|
+
`,f=await n.query(b,l);f.rows.length>0&&r.push({tableName:c.referencingTable,columnName:c.referencingColumn,constraintName:c.constraintName,records:f.rows})}return r}async function Ba({tableName:a,primaryKeys:e,db:t}){let o=g(t),r=e[0]?.columnName;if(!r)throw new se(400,{message:"Primary key column name is required"});let n=e.map(s=>s.value),i=n.map((s,m)=>`$${m+1}`).join(", "),l=`
|
|
201
|
+
DELETE FROM "${a}"
|
|
202
|
+
WHERE "${r}" IN (${i})
|
|
178
203
|
RETURNING *
|
|
179
|
-
`;try{await
|
|
180
|
-
SELECT "${
|
|
181
|
-
WHERE "${
|
|
182
|
-
`,
|
|
183
|
-
DELETE FROM "${
|
|
184
|
-
WHERE "${
|
|
185
|
-
`,H=await
|
|
186
|
-
DELETE FROM "${
|
|
187
|
-
WHERE "${
|
|
204
|
+
`;try{await o.query("BEGIN");let s=await o.query(l,n);return await o.query("COMMIT"),{deletedCount:s.rowCount??0,fkViolation:!1,relatedRecords:[]}}catch(s){if(await o.query("ROLLBACK"),s.code==="23503")return{deletedCount:0,fkViolation:!0,relatedRecords:await fn(a,e,t)};throw s instanceof se?s:new se(500,{message:`Failed to delete records from "${a}"`})}}async function ja({tableName:a,primaryKeys:e,db:t}){let o=g(t),r=e[0]?.columnName;if(!r)throw new se(400,{message:"Primary key column name is required"});let n=e.map(i=>i.value);await o.query("BEGIN");try{let i=await Je(a,t),l=0,s=new Set,m=async(f,h,T)=>{let R=await Je(f,t);for(let I of R){let k=T.map((O,Q)=>`$${Q+1}`).join(", "),K=`
|
|
205
|
+
SELECT "${I.referencedColumn}" FROM "${f}"
|
|
206
|
+
WHERE "${h}" IN (${k})
|
|
207
|
+
`,_=(await o.query(K,T)).rows.map(({row:O})=>O[I.referencedColumn]);_.length>0&&await m(I.referencingTable,I.referencingColumn,_)}let D=T.map((I,k)=>`$${k+1}`).join(", "),P=`
|
|
208
|
+
DELETE FROM "${f}"
|
|
209
|
+
WHERE "${h}" IN (${D})
|
|
210
|
+
`,H=await o.query(P,T);l+=H.rowCount??0,s.add(f)};for(let f of i)s.has(f.referencingTable)||await m(f.referencingTable,f.referencingColumn,n);let c=n.map((f,h)=>`$${h+1}`).join(", "),p=`
|
|
211
|
+
DELETE FROM "${a}"
|
|
212
|
+
WHERE "${r}" IN (${c})
|
|
188
213
|
RETURNING *
|
|
189
|
-
`,
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
214
|
+
`,u=await o.query(p,n);return await o.query("COMMIT"),{deletedCount:(u.rowCount??0)+l}}catch(i){throw await o.query("ROLLBACK"),i instanceof se?i:new se(500,{message:`Failed to force delete records from "${a}"`})}}var Ka=d(()=>{"use strict";S()});import{HTTPException as yn}from"hono/http-exception";function bn(a){let e=a.match(/^(?:enum|set)\((.+)\)$/i);return e?.[1]?e[1].split(",").map(t=>t.trim().replace(/^'|'$/g,"")):null}async function X({tableName:a,db:e}){let t=E(e),o=`
|
|
215
|
+
SELECT
|
|
216
|
+
c.COLUMN_NAME AS columnName,
|
|
217
|
+
c.DATA_TYPE AS dataType,
|
|
218
|
+
c.COLUMN_TYPE AS columnType,
|
|
219
|
+
(c.IS_NULLABLE = 'YES') AS isNullable,
|
|
220
|
+
c.COLUMN_DEFAULT AS columnDefault,
|
|
221
|
+
(c.COLUMN_KEY = 'PRI') AS isPrimaryKey,
|
|
222
|
+
(kcu.REFERENCED_TABLE_NAME IS NOT NULL) AS isForeignKey,
|
|
223
|
+
kcu.REFERENCED_TABLE_NAME AS referencedTable,
|
|
224
|
+
kcu.REFERENCED_COLUMN_NAME AS referencedColumn
|
|
225
|
+
FROM information_schema.COLUMNS c
|
|
226
|
+
LEFT JOIN information_schema.KEY_COLUMN_USAGE kcu
|
|
227
|
+
ON c.TABLE_SCHEMA = kcu.TABLE_SCHEMA
|
|
228
|
+
AND c.TABLE_NAME = kcu.TABLE_NAME
|
|
229
|
+
AND c.COLUMN_NAME = kcu.COLUMN_NAME
|
|
230
|
+
AND kcu.REFERENCED_TABLE_NAME IS NOT NULL
|
|
231
|
+
WHERE c.TABLE_SCHEMA = DATABASE()
|
|
232
|
+
AND c.TABLE_NAME = ?
|
|
233
|
+
ORDER BY c.ORDINAL_POSITION
|
|
234
|
+
`,[r]=await t.execute(o,[a]);if(!r||r.length===0)throw new yn(404,{message:`Table "${a}" does not exist`});return r.map(n=>{let i=n.dataType,l=n.columnType,m=i==="enum"||i==="set"?bn(l):null;return{columnName:n.columnName,dataType:kt(i,l),dataTypeLabel:Ut(i,l),isNullable:!!n.isNullable,columnDefault:n.columnDefault??null,isPrimaryKey:!!n.isPrimaryKey,isForeignKey:!!n.isForeignKey,referencedTable:n.referencedTable??null,referencedColumn:n.referencedColumn??null,enumValues:m}})}var pe=d(()=>{"use strict";J();S()});import{HTTPException as Tn}from"hono/http-exception";async function Wa({db:a,params:e}){let{tableName:t,data:o}=e,r=E(a),n=await X({tableName:t,db:a}),i=new Set(n.filter(b=>b.dataTypeLabel==="boolean").map(b=>b.columnName)),l=Object.keys(o),s=Object.values(o).map((b,f)=>{let h=l[f];return i.has(h)&&typeof b=="string"?b==="true"?1:0:b}),m=l.map(()=>"?").join(", "),c=l.map(b=>`\`${b}\``).join(", "),p=`
|
|
235
|
+
INSERT INTO \`${t}\` (${c})
|
|
236
|
+
VALUES (${m})
|
|
237
|
+
`,[u]=await r.execute(p,s);if(u.affectedRows===0)throw new Tn(500,{message:`Failed to insert record into "${t}"`});return{insertedCount:u.affectedRows}}var Va=d(()=>{"use strict";S();pe()});import{HTTPException as Ae}from"hono/http-exception";var za,Ya=d(()=>{"use strict";S();pe();za=async({tableName:a,records:e,db:t})=>{if(!e||e.length===0)throw new Ae(400,{message:"At least one record is required"});let r=await E(t).getConnection();try{let n=Object.keys(e[0]),i=n.map(m=>`\`${m}\``).join(", "),l=await X({tableName:a,db:t}),s=new Set(l.filter(m=>m.dataTypeLabel==="boolean").map(m=>m.columnName));await r.beginTransaction();for(let m=0;m<e.length;m++){let c=e[m],p=n.map(f=>{let h=c[f];return s.has(f)&&typeof h=="string"?h==="true"?1:0:h}),u=n.map(()=>"?").join(", "),b=`
|
|
238
|
+
INSERT INTO \`${a}\` (${i})
|
|
239
|
+
VALUES (${u})
|
|
240
|
+
`;try{await r.execute(b,p)}catch(f){throw new Ae(500,{message:`Failed to insert record ${m+1}: ${f instanceof Error?f.message:String(f)}`})}}return await r.commit(),{success:!0,message:`Successfully inserted ${e.length} record${e.length!==1?"s":""}`,successCount:e.length,failureCount:0}}catch(n){throw await r.rollback(),n instanceof Ae?n:new Ae(500,{message:`Failed to bulk insert records into "${a}"`})}finally{r.release()}}});import{HTTPException as ie}from"hono/http-exception";async function Xe(a,e){let t=E(e),[o]=await t.execute(`SELECT
|
|
241
|
+
kcu.CONSTRAINT_NAME AS constraint_name,
|
|
242
|
+
kcu.TABLE_NAME AS referencing_table,
|
|
243
|
+
kcu.COLUMN_NAME AS referencing_column,
|
|
244
|
+
kcu.REFERENCED_TABLE_NAME AS referenced_table,
|
|
245
|
+
kcu.REFERENCED_COLUMN_NAME AS referenced_column
|
|
246
|
+
FROM information_schema.KEY_COLUMN_USAGE kcu
|
|
247
|
+
JOIN information_schema.TABLE_CONSTRAINTS tc
|
|
248
|
+
ON kcu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
|
|
249
|
+
AND kcu.TABLE_SCHEMA = tc.TABLE_SCHEMA
|
|
250
|
+
AND kcu.TABLE_NAME = tc.TABLE_NAME
|
|
251
|
+
WHERE tc.CONSTRAINT_TYPE = 'FOREIGN KEY'
|
|
252
|
+
AND kcu.TABLE_SCHEMA = DATABASE()
|
|
253
|
+
AND kcu.REFERENCED_TABLE_NAME = ?`,[a]);return o.map(r=>({constraintName:r.constraint_name,referencingTable:r.referencing_table,referencingColumn:r.referencing_column,referencedTable:r.referenced_table,referencedColumn:r.referenced_column}))}async function gn(a,e,t){let o=await Xe(a,t);if(o.length===0)return[];let r=[],n=E(t),i=e.map(s=>s.value),l=new Map;for(let s of o){let m=`${s.referencingTable}.${s.referencingColumn}`;l.has(m)||l.set(m,[]),l.get(m)?.push(s)}for(let[s,m]of l){let c=m[0];if(!c||!e.find(f=>f.columnName===c.referencedColumn))continue;let u=i.map(()=>"?").join(", "),[b]=await n.execute(`SELECT * FROM \`${c.referencingTable}\`
|
|
254
|
+
WHERE \`${c.referencingColumn}\` IN (${u})
|
|
255
|
+
LIMIT 100`,i);b.length>0&&r.push({tableName:c.referencingTable,columnName:c.referencingColumn,constraintName:c.constraintName,records:b})}return r}async function Qa({tableName:a,primaryKeys:e,db:t}){let o=E(t),r=e[0]?.columnName;if(!r)throw new ie(400,{message:"Primary key column name is required"});let n=e.map(s=>s.value),i=n.map(()=>"?").join(", "),l=await o.getConnection();await l.beginTransaction();try{let[s]=await l.execute(`DELETE FROM \`${a}\` WHERE \`${r}\` IN (${i})`,n);return await l.commit(),{deletedCount:s.affectedRows,fkViolation:!1,relatedRecords:[]}}catch(s){if(await l.rollback(),s.errno===hn)return{deletedCount:0,fkViolation:!0,relatedRecords:await gn(a,e,t)};throw s instanceof ie?s:new ie(500,{message:`Failed to delete records from "${a}"`})}finally{l.release()}}async function Ga({tableName:a,primaryKeys:e,db:t}){let o=E(t),r=e[0]?.columnName;if(!r)throw new ie(400,{message:"Primary key column name is required"});let n=e.map(l=>l.value),i=await o.getConnection();await i.beginTransaction();try{await i.execute("SET FOREIGN_KEY_CHECKS = 0");let l=await Xe(a,t),s=0,m=new Set,c=new Set,p=async(f,h,T,R)=>{let D=`${f}.${h}`;if(R.has(D))return;R.add(D);let P=await Xe(f,t);for(let k of P){let K=T.map(()=>"?").join(", "),[q]=await i.execute(`SELECT \`${k.referencedColumn}\` FROM \`${f}\`
|
|
256
|
+
WHERE \`${h}\` IN (${K})`,T),_=q.map(O=>O[k.referencedColumn]);_.length>0&&await p(k.referencingTable,k.referencingColumn,_,R)}let H=T.map(()=>"?").join(", "),[I]=await i.execute(`DELETE FROM \`${f}\` WHERE \`${h}\` IN (${H})`,T);s+=I.affectedRows,m.add(f)};for(let f of l)m.has(f.referencingTable)||await p(f.referencingTable,f.referencingColumn,n,c);let u=n.map(()=>"?").join(", "),[b]=await i.execute(`DELETE FROM \`${a}\` WHERE \`${r}\` IN (${u})`,n);return await i.execute("SET FOREIGN_KEY_CHECKS = 1"),await i.commit(),{deletedCount:b.affectedRows+s}}catch(l){throw await i.execute("SET FOREIGN_KEY_CHECKS = 1").catch(()=>{}),await i.rollback(),l instanceof ie?l:new ie(500,{message:`Failed to force delete records from "${a}"`})}finally{i.release()}}var hn,Ja=d(()=>{"use strict";S();hn=1451});import{HTTPException as De}from"hono/http-exception";async function Xa({params:a,db:e}){let{tableName:t,updates:o,primaryKey:r}=a,n=E(e),i=await X({tableName:t,db:e}),l=new Set(i.filter(c=>c.dataTypeLabel==="boolean").map(c=>c.columnName)),s=new Map;for(let c of o){let p=c.rowData[r];if(p==null)throw new De(400,{message:`Primary key "${r}" not found in row data.`});s.has(p)||s.set(p,[]),s.get(p)?.push({columnName:c.columnName,value:c.value,rowData:c.rowData})}let m=await n.getConnection();await m.beginTransaction();try{let c=0;for(let[p,u]of s.entries()){let b=u.map(R=>`\`${R.columnName}\` = ?`),f=u.map(R=>R.value!==null&&typeof R.value=="object"?JSON.stringify(R.value):l.has(R.columnName)&&typeof R.value=="string"?R.value==="true"?1:0:R.value);f.push(p);let h=`
|
|
257
|
+
UPDATE \`${t}\`
|
|
258
|
+
SET ${b.join(", ")}
|
|
259
|
+
WHERE \`${r}\` = ?
|
|
260
|
+
`,[T]=await m.execute(h,f);if(T.affectedRows===0)throw new De(404,{message:`Record with ${r} = ${p} not found in table "${t}"`});c+=T.affectedRows}return await m.commit(),{updatedCount:c}}catch(c){throw await m.rollback(),c instanceof De?c:new De(500,{message:`Failed to update records in "${t}"`})}finally{m.release()}}var Za=d(()=>{"use strict";S();pe()});import{HTTPException as _e}from"hono/http-exception";async function eo({params:a,db:e}){let{tableName:t,updates:o,primaryKey:r}=a,n=g(e),i=new Map;for(let l of o){let s=l.rowData[r];if(s==null)throw new _e(400,{message:`Primary key "${r}" not found in row data. Please ensure the row has a "${r}" column.`});i.has(s)||i.set(s,[]),i.get(s)?.push({columnName:l.columnName,value:l.value,rowData:l.rowData})}await n.query("BEGIN");try{let l=0;for(let[s,m]of i.entries()){let c=m.map((f,h)=>`"${f.columnName}" = $${h+1}`),p=m.map(f=>f.value!==null&&typeof f.value=="object"?JSON.stringify(f.value):f.value);p.push(s);let u=`
|
|
261
|
+
UPDATE "${t}"
|
|
262
|
+
SET ${c.join(", ")}
|
|
263
|
+
WHERE "${r}" = $${p.length}
|
|
193
264
|
RETURNING *
|
|
194
|
-
`,
|
|
195
|
-
|
|
265
|
+
`,b=await n.query(u,p);if(b.rowCount===0)throw new _e(404,{message:`Record with ${r} = ${s} not found in table "${t}"`});l+=b.rowCount??0}return await n.query("COMMIT"),{updatedCount:l}}catch(l){throw await n.query("ROLLBACK"),l instanceof _e?l:new _e(500,{message:`Failed to update records in "${t}"`})}}var to=d(()=>{"use strict";S()});import{zValidator as Y}from"@hono/zod-validator";import{Hono as En}from"hono";var ao,oo=d(()=>{"use strict";J();Ua();Ha();Ka();Va();Ya();Ja();Za();to();ao=new En().basePath("/records").post("/",Y("query",C),Y("json",At),async a=>{let{db:e}=a.req.valid("query"),{tableName:t,data:o}=a.req.valid("json"),r=a.get("dbType"),{insertedCount:n}=r==="mysql"?await Wa({db:e,params:{tableName:t,data:o}}):await ka({db:e,params:{tableName:t,data:o}});return a.json({data:`Record inserted into "${t}" with ${n} rows inserted`},200)}).patch("/",Y("query",C),Y("json",la),async a=>{let{db:e}=a.req.valid("query"),{tableName:t,primaryKey:o,updates:r}=a.req.valid("json"),n=a.get("dbType"),{updatedCount:i}=n==="mysql"?await Xa({params:{tableName:t,primaryKey:o,updates:r},db:e}):await eo({params:{tableName:t,primaryKey:o,updates:r},db:e});return a.json({data:`Updated ${i} records in "${t}"`},200)}).delete("/",Y("query",C),Y("json",Fe),async a=>{let{db:e}=a.req.valid("query"),{tableName:t,primaryKeys:o}=a.req.valid("json"),r=a.get("dbType"),{deletedCount:n,fkViolation:i,relatedRecords:l}=r==="mysql"?await Qa({tableName:t,primaryKeys:o,db:e}):await Ba({tableName:t,primaryKeys:o,db:e});return i?a.json({data:{deletedCount:0,fkViolation:!0,relatedRecords:l}},409):a.json({data:{deletedCount:n,fkViolation:!1,relatedRecords:[]}},200)}).delete("/force",Y("query",C),Y("json",Fe),async a=>{let{db:e}=a.req.valid("query"),{tableName:t,primaryKeys:o}=a.req.valid("json"),n=a.get("dbType")==="mysql"?await Ga({tableName:t,primaryKeys:o,db:e}):await ja({tableName:t,primaryKeys:o,db:e});return a.json({data:n},200)}).post("/bulk",Y("query",C),Y("json",Lt),async a=>{let{db:e}=a.req.valid("query"),{tableName:t,records:o}=a.req.valid("json"),n=a.get("dbType")==="mysql"?await za({tableName:t,records:o,db:e}):await Fa({tableName:t,records:o,db:e});return a.json({data:n},200)})});import{HTTPException as ro}from"hono/http-exception";async function no(a){let{tableName:e,columnName:t,columnType:o,defaultValue:r,isPrimaryKey:n,isNullable:i,isUnique:l,isIdentity:s,isArray:m,db:c}=a,p=g(c),u=`
|
|
266
|
+
SELECT EXISTS (
|
|
267
|
+
SELECT 1 FROM information_schema.tables
|
|
268
|
+
WHERE table_name = $1 AND table_schema = 'public'
|
|
269
|
+
) as exists;
|
|
270
|
+
`,{rows:b}=await p.query(u,[e]);if(!b[0]?.exists)throw new ro(404,{message:`Table "${e}" does not exist`});let f=`
|
|
271
|
+
SELECT EXISTS (
|
|
272
|
+
SELECT 1 FROM information_schema.columns
|
|
273
|
+
WHERE table_name = $1 AND column_name = $2 AND table_schema = 'public'
|
|
274
|
+
) as exists;
|
|
275
|
+
`,{rows:h}=await p.query(f,[e,t]);if(h[0]?.exists)throw new ro(409,{message:`Column "${t}" already exists in table "${e}"`});let T=`"${t}" ${o}`;m&&(T+="[]"),n&&(T+=" PRIMARY KEY"),l&&!n&&(T+=" UNIQUE"),i||(T+=" NOT NULL"),s&&(T+=" GENERATED ALWAYS AS IDENTITY"),r?.trim()&&!s&&(T+=` DEFAULT ${r.trim()}`),await p.query(`ALTER TABLE "${e}" ADD COLUMN ${T}`)}var so=d(()=>{"use strict";S()});import{HTTPException as io}from"hono/http-exception";async function lo(a){let{tableName:e,columnName:t,columnType:o,isNullable:r,defaultValue:n,db:i}=a,l=g(i),s=`
|
|
276
|
+
SELECT EXISTS (
|
|
277
|
+
SELECT 1 FROM information_schema.tables
|
|
278
|
+
WHERE table_name = $1 AND table_schema = 'public'
|
|
279
|
+
) as exists;
|
|
280
|
+
`,{rows:m}=await l.query(s,[e]);if(!m[0]?.exists)throw new io(404,{message:`Table "${e}" does not exist`});let c=`
|
|
281
|
+
SELECT EXISTS (
|
|
282
|
+
SELECT 1 FROM information_schema.columns
|
|
283
|
+
WHERE table_name = $1 AND column_name = $2 AND table_schema = 'public'
|
|
284
|
+
) as exists;
|
|
285
|
+
`,{rows:p}=await l.query(c,[e,t]);if(!p[0]?.exists)throw new io(404,{message:`Column "${t}" does not exist in table "${e}"`});let u=await l.connect();try{await u.query("BEGIN"),await u.query(`ALTER TABLE "${e}" ALTER COLUMN "${t}" TYPE ${o}`),await u.query(`ALTER TABLE "${e}" ALTER COLUMN "${t}" ${r?"DROP":"SET"} NOT NULL`),n?.trim()?await u.query(`ALTER TABLE "${e}" ALTER COLUMN "${t}" SET DEFAULT ${n.trim()}`):await u.query(`ALTER TABLE "${e}" ALTER COLUMN "${t}" DROP DEFAULT`),await u.query("COMMIT")}catch(b){throw await u.query("ROLLBACK"),b}finally{u.release()}}var co=d(()=>{"use strict";S()});async function mo({tableData:a,db:e}){let{tableName:t,fields:o,foreignKeys:r}=a,n=g(e),i=o.map(c=>{let p=`"${c.columnName}" ${c.columnType}`;return c.isArray&&(p+="[]"),c.isPrimaryKey&&(p+=" PRIMARY KEY"),c.isUnique&&!c.isPrimaryKey&&(p+=" UNIQUE"),c.isNullable||(p+=" NOT NULL"),c.isIdentity&&(p+=" GENERATED ALWAYS AS IDENTITY"),c.defaultValue&&!c.isIdentity&&(p+=` DEFAULT ${c.defaultValue}`),p}),l=r?.map(c=>`CONSTRAINT "${`fk_${t}_${c.columnName}_${c.referencedTable}_${c.referencedColumn}`}" FOREIGN KEY ("${c.columnName}") REFERENCES "${c.referencedTable}" ("${c.referencedColumn}") ON UPDATE ${c.onUpdate} ON DELETE ${c.onDelete}`)||[],s=[...i,...l],m=`
|
|
286
|
+
CREATE TABLE "${t}" (
|
|
196
287
|
${s.join(`,
|
|
197
288
|
`)}
|
|
198
289
|
);
|
|
199
|
-
`;await
|
|
290
|
+
`;await n.query(m)}var uo=d(()=>{"use strict";S()});import{HTTPException as po}from"hono/http-exception";async function fo(a){let{tableName:e,columnName:t,cascade:o,db:r}=a,n=g(r),i=`
|
|
200
291
|
SELECT EXISTS (
|
|
201
292
|
SELECT 1 FROM information_schema.tables
|
|
202
293
|
WHERE table_name = $1 AND table_schema = 'public'
|
|
203
294
|
) as exists;
|
|
204
|
-
`,{rows:
|
|
295
|
+
`,{rows:l}=await n.query(i,[e]);if(!l[0]?.exists)throw new po(404,{message:`Table "${e}" does not exist`});let s=`
|
|
205
296
|
SELECT EXISTS (
|
|
206
297
|
SELECT 1 FROM information_schema.columns
|
|
207
298
|
WHERE table_name = $1 AND column_name = $2 AND table_schema = 'public'
|
|
208
299
|
) as exists;
|
|
209
|
-
`,{rows:
|
|
300
|
+
`,{rows:m}=await n.query(s,[e,t]);if(!m[0]?.exists)throw new po(404,{message:`Column "${t}" does not exist in table "${e}"`});let p=`ALTER TABLE "${e}" DROP COLUMN "${t}" ${o?"CASCADE":"RESTRICT"}`,{rowCount:u}=await n.query(p);return{deletedCount:u??0}}var yo=d(()=>{"use strict";S()});import{HTTPException as Ze}from"hono/http-exception";async function Sn(a,e){return(await g(e).query(`
|
|
210
301
|
SELECT
|
|
211
302
|
tc.constraint_name,
|
|
212
303
|
tc.table_name as referencing_table,
|
|
@@ -222,26 +313,88 @@ This will return the 5 customers with the highest total order value. You might a
|
|
|
222
313
|
AND ccu.table_schema = tc.table_schema
|
|
223
314
|
WHERE tc.constraint_type = 'FOREIGN KEY'
|
|
224
315
|
AND ccu.table_name = $1
|
|
225
|
-
`,[
|
|
226
|
-
SELECT * FROM "${
|
|
316
|
+
`,[a])).rows.map(n=>({constraintName:n.constraint_name,referencingTable:n.referencing_table,referencingColumn:n.referencing_column,referencedTable:n.referenced_table,referencedColumn:n.referenced_column}))}async function bo(a,e){let t=await Sn(a,e);if(t.length===0)return[];let o=[],r=g(e);for(let n of t){let i=`
|
|
317
|
+
SELECT * FROM "${n.referencingTable}"
|
|
227
318
|
LIMIT 100
|
|
228
|
-
`,
|
|
319
|
+
`,l=await r.query(i);l.rows.length>0&&o.push({tableName:n.referencingTable,columnName:n.referencingColumn,constraintName:n.constraintName,records:l.rows})}return o}async function Rn(a,e){let o=await g(e).query(`SELECT COUNT(*) as count FROM "${a}"`);return Number.parseInt(o.rows[0]?.count??"0",10)}async function To(a){let{tableName:e,db:t,cascade:o}=a,r=g(t),n=`
|
|
229
320
|
SELECT EXISTS (
|
|
230
321
|
SELECT 1 FROM information_schema.tables
|
|
231
322
|
WHERE table_name = $1 AND table_schema = 'public'
|
|
232
323
|
) as exists;
|
|
233
|
-
`,{rows:i}=await
|
|
324
|
+
`,{rows:i}=await r.query(n,[e]);if(!i[0]?.exists)throw new Ze(404,{message:`Table "${e}" does not exist`});let l=await Rn(e,t);if(!o){let s=await bo(e,t);if(s.length>0)return{deletedCount:0,fkViolation:!0,relatedRecords:s}}try{let m=`DROP TABLE "${e}" ${o?"CASCADE":"RESTRICT"}`;return await r.query(m),{deletedCount:l,fkViolation:!1,relatedRecords:[]}}catch(s){if(s.code==="2BP01")return{deletedCount:0,fkViolation:!0,relatedRecords:await bo(e,t)};throw s instanceof Ze?s:new Ze(500,{message:`Failed to delete table "${e}"`})}}var ho=d(()=>{"use strict";S()});import{HTTPException as Cn}from"hono/http-exception";async function go({tableName:a,db:e}){let t=g(e),{rows:o}=await t.query(`SELECT * FROM "${a}"`);if(!o||o.length===0)throw new Cn(404,{message:`Table "${a}" does not exist or has no data`});return{cols:Object.keys(o[0]),rows:o}}var Eo=d(()=>{"use strict";S()});function wn(a,e){if(!a?.trim())return null;let t=a.trim().toLowerCase();return t.includes("(")&&t.includes(")")?t.includes("uuid()")?!e.toUpperCase().includes("CHAR")&&!e.toUpperCase().includes("TEXT")?null:"(UUID())":t.includes("current_timestamp")||t.includes("now()")?"(CURRENT_TIMESTAMP)":t.includes("current_date")?"(CURRENT_DATE)":`(${a.trim()})`:t==="null"?"NULL":t==="true"||t==="false"?t==="true"?"1":"0":a.trim()}function Nn(a,e){if(e)return"JSON";let t=a.toLowerCase().trim();return{serial:"INT AUTO_INCREMENT",serial4:"INT AUTO_INCREMENT",bigserial:"BIGINT AUTO_INCREMENT",serial8:"BIGINT AUTO_INCREMENT",int:"INT",int4:"INT",integer:"INT",bigint:"BIGINT",int8:"BIGINT",smallint:"SMALLINT",int2:"SMALLINT",numeric:"DECIMAL",decimal:"DECIMAL",real:"FLOAT",float4:"FLOAT",float:"FLOAT","double precision":"DOUBLE",float8:"DOUBLE",money:"DECIMAL(19, 4)",boolean:"TINYINT(1)",bool:"TINYINT(1)",text:"LONGTEXT",varchar:"VARCHAR(255)","character varying":"VARCHAR(255)",char:"CHAR(1)",character:"CHAR(1)",bpchar:"CHAR",uuid:"CHAR(36)",json:"JSON",jsonb:"JSON",xml:"LONGTEXT",date:"DATE",time:"TIME","time without time zone":"TIME",timestamp:"DATETIME","timestamp without time zone":"DATETIME","timestamp with time zone":"DATETIME",timestamptz:"DATETIME",interval:"VARCHAR(255)",bytea:"LONGBLOB",inet:"VARCHAR(45)",cidr:"VARCHAR(45)",macaddr:"VARCHAR(17)",macaddr8:"VARCHAR(23)",point:"POINT",line:"LINESTRING",polygon:"POLYGON"}[t]||a.toUpperCase()}function le(a,e={}){let t=Nn(a.columnType,a.isArray??!1),o=`\`${a.columnName}\` ${t}`;if(!a.isNullable&&!a.isPrimaryKey&&(o+=" NOT NULL"),a.defaultValue&&!t.includes("AUTO_INCREMENT")){let r=wn(a.defaultValue,t);r!==null&&(o+=` DEFAULT ${r}`)}return(a.isIdentity||e.preserveAutoIncrement)&&!t.includes("AUTO_INCREMENT")&&(o+=" AUTO_INCREMENT"),e.includeUnique&&a.isUnique&&!a.isPrimaryKey&&(o+=" UNIQUE"),e.includePrimaryKey&&a.isPrimaryKey&&(o+=" PRIMARY KEY"),o}var xe=d(()=>{"use strict"});import{HTTPException as So}from"hono/http-exception";async function Ro(a){let{tableName:e,columnName:t,columnType:o,defaultValue:r,isPrimaryKey:n,isNullable:i,isUnique:l,isIdentity:s,isArray:m,db:c}=a,p=E(c),[u]=await p.execute(`SELECT COUNT(*) as cnt
|
|
325
|
+
FROM information_schema.TABLES
|
|
326
|
+
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(u[0]?.cnt??0)>0))throw new So(404,{message:`Table "${e}" does not exist`});let[f]=await p.execute(`SELECT COUNT(*) as cnt
|
|
327
|
+
FROM information_schema.COLUMNS
|
|
328
|
+
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,t]);if(Number(f[0]?.cnt??0)>0)throw new So(409,{message:`Column "${t}" already exists in table "${e}"`});let T=le({columnName:t,columnType:o,defaultValue:r,isPrimaryKey:n,isNullable:i,isUnique:l,isIdentity:s,isArray:m},{includePrimaryKey:!0,includeUnique:!0});await p.execute(`ALTER TABLE \`${e}\` ADD COLUMN ${T}`)}var Co=d(()=>{"use strict";S();xe()});import{HTTPException as wo}from"hono/http-exception";async function No(a){let{tableName:e,columnName:t,columnType:o,isNullable:r,defaultValue:n,db:i}=a,l=E(i),[s]=await l.execute(`SELECT COUNT(*) as cnt
|
|
329
|
+
FROM information_schema.TABLES
|
|
330
|
+
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(s[0]?.cnt??0)>0))throw new wo(404,{message:`Table "${e}" does not exist`});let[c]=await l.execute(`SELECT EXTRA
|
|
331
|
+
FROM information_schema.COLUMNS
|
|
332
|
+
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?
|
|
333
|
+
LIMIT 1`,[e,t]),p=c[0];if(!p)throw new wo(404,{message:`Column "${t}" does not exist in table "${e}"`});let u=le({columnName:t,columnType:o,defaultValue:n,isNullable:r},{preserveAutoIncrement:p.EXTRA?.toLowerCase().includes("auto_increment")});await l.execute(`ALTER TABLE \`${e}\` MODIFY COLUMN ${u}`)}var Ao=d(()=>{"use strict";S();xe()});async function Do({tableData:a,db:e}){let{tableName:t,fields:o,foreignKeys:r}=a,n=E(e),i=o.map(u=>le(u)),l=o.filter(u=>u.isPrimaryKey),s=[];if(l.length>0){let u=l.map(b=>`\`${b.columnName}\``).join(", ");s.push(`PRIMARY KEY (${u})`)}for(let u of o)u.isUnique&&!u.isPrimaryKey&&s.push(`UNIQUE KEY \`uq_${t}_${u.columnName}\` (\`${u.columnName}\`)`);let m=r?.map(u=>`CONSTRAINT \`${`fk_${t}_${u.columnName}_${u.referencedTable}_${u.referencedColumn}`}\` FOREIGN KEY (\`${u.columnName}\`) REFERENCES \`${u.referencedTable}\` (\`${u.referencedColumn}\`) ON UPDATE ${u.onUpdate} ON DELETE ${u.onDelete}`)||[],c=[...i,...s,...m],p=`
|
|
334
|
+
CREATE TABLE \`${t}\` (
|
|
335
|
+
${c.join(`,
|
|
336
|
+
`)}
|
|
337
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
|
338
|
+
`;await n.execute(p)}var _o=d(()=>{"use strict";S();xe()});import{HTTPException as xo}from"hono/http-exception";async function Po(a){let{tableName:e,columnName:t,db:o}=a,r=E(o),[n]=await r.execute(`SELECT COUNT(*) as cnt
|
|
339
|
+
FROM information_schema.TABLES
|
|
340
|
+
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(n[0]?.cnt??0)>0))throw new xo(404,{message:`Table "${e}" does not exist`});let[l]=await r.execute(`SELECT COUNT(*) as cnt
|
|
341
|
+
FROM information_schema.COLUMNS
|
|
342
|
+
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,t]);if(!(Number(l[0]?.cnt??0)>0))throw new xo(404,{message:`Column "${t}" does not exist in table "${e}"`});let[m]=await r.execute(`ALTER TABLE \`${e}\` DROP COLUMN \`${t}\``);return{deletedCount:m.affectedRows}}var Lo=d(()=>{"use strict";S()});import{HTTPException as et}from"hono/http-exception";async function _n(a,e){let t=E(e),[o]=await t.execute(`SELECT
|
|
343
|
+
kcu.CONSTRAINT_NAME AS constraint_name,
|
|
344
|
+
kcu.TABLE_NAME AS referencing_table,
|
|
345
|
+
kcu.COLUMN_NAME AS referencing_column,
|
|
346
|
+
kcu.REFERENCED_TABLE_NAME AS referenced_table,
|
|
347
|
+
kcu.REFERENCED_COLUMN_NAME AS referenced_column
|
|
348
|
+
FROM information_schema.KEY_COLUMN_USAGE kcu
|
|
349
|
+
JOIN information_schema.TABLE_CONSTRAINTS tc
|
|
350
|
+
ON kcu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
|
|
351
|
+
AND kcu.TABLE_SCHEMA = tc.TABLE_SCHEMA
|
|
352
|
+
AND kcu.TABLE_NAME = tc.TABLE_NAME
|
|
353
|
+
WHERE tc.CONSTRAINT_TYPE = 'FOREIGN KEY'
|
|
354
|
+
AND kcu.TABLE_SCHEMA = DATABASE()
|
|
355
|
+
AND kcu.REFERENCED_TABLE_NAME = ?`,[a]);return o.map(r=>({constraintName:r.constraint_name,referencingTable:r.referencing_table,referencingColumn:r.referencing_column,referencedTable:r.referenced_table,referencedColumn:r.referenced_column}))}async function vo(a,e){let t=await _n(a,e);if(t.length===0)return[];let o=[],r=E(e);for(let n of t){let[i]=await r.execute(`SELECT * FROM \`${n.referencingTable}\` LIMIT 100`);i.length>0&&o.push({tableName:n.referencingTable,columnName:n.referencingColumn,constraintName:n.constraintName,records:i})}return o}async function xn(a,e){let t=E(e),[o]=await t.execute(`SELECT COUNT(*) as count FROM \`${a}\``);return Number(o[0]?.count??0)}async function $o(a){let{tableName:e,db:t,cascade:o}=a,r=E(t),[n]=await r.execute(`SELECT COUNT(*) as cnt
|
|
356
|
+
FROM information_schema.TABLES
|
|
357
|
+
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(n[0]?.cnt??0)>0))throw new et(404,{message:`Table "${e}" does not exist`});let l=await xn(e,t);if(!o){let s=await vo(e,t);if(s.length>0)return{deletedCount:0,fkViolation:!0,relatedRecords:s}}try{if(o){let s=await r.getConnection();try{await s.execute("SET FOREIGN_KEY_CHECKS = 0"),await s.execute(`DROP TABLE \`${e}\``),await s.execute("SET FOREIGN_KEY_CHECKS = 1")}finally{s.release()}}else await r.execute(`DROP TABLE \`${e}\``);return{deletedCount:l,fkViolation:!1,relatedRecords:[]}}catch(s){await r.execute("SET FOREIGN_KEY_CHECKS = 1").catch(()=>{});let m=s;if(m.errno===An||m.errno===Dn)return{deletedCount:0,fkViolation:!0,relatedRecords:await vo(e,t)};throw s instanceof et?s:new et(500,{message:`Failed to delete table "${e}"`})}}var An,Dn,qo=d(()=>{"use strict";S();An=1217,Dn=1451});import{HTTPException as Pn}from"hono/http-exception";async function Oo({tableName:a,db:e}){let t=E(e),[o]=await t.execute(`SELECT * FROM \`${a}\``);if(!o||o.length===0)throw new Pn(404,{message:`Table "${a}" does not exist or has no data`});return{cols:Object.keys(o[0]),rows:o}}var Mo=d(()=>{"use strict";S()});import{HTTPException as tt}from"hono/http-exception";async function Io(a){let{tableName:e,columnName:t,newColumnName:o,db:r}=a,n=E(r),[i]=await n.execute(`SELECT COUNT(*) as cnt
|
|
358
|
+
FROM information_schema.TABLES
|
|
359
|
+
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(i[0]?.cnt??0)>0))throw new tt(404,{message:`Table "${e}" does not exist`});let[s]=await n.execute(`SELECT COUNT(*) as cnt
|
|
360
|
+
FROM information_schema.COLUMNS
|
|
361
|
+
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,t]);if(!(Number(s[0]?.cnt??0)>0))throw new tt(404,{message:`Column "${t}" does not exist in table "${e}"`});let[c]=await n.execute(`SELECT COUNT(*) as cnt
|
|
362
|
+
FROM information_schema.COLUMNS
|
|
363
|
+
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,o]);if(Number(c[0]?.cnt??0)>0)throw new tt(409,{message:`Column "${o}" already exists in table "${e}"`});await n.execute(`ALTER TABLE \`${e}\` RENAME COLUMN \`${t}\` TO \`${o}\``)}var ko=d(()=>{"use strict";S()});async function Uo(a){let e=E(a),t=`
|
|
364
|
+
SELECT table_name as tableName
|
|
365
|
+
FROM information_schema.tables
|
|
366
|
+
WHERE table_schema = DATABASE()
|
|
367
|
+
AND table_type = 'BASE TABLE'
|
|
368
|
+
ORDER BY table_name
|
|
369
|
+
`,[o]=await e.execute(t);return!o||o.length===0?[]:await Promise.all(o.map(async n=>{let[i]=await e.execute(`SELECT COUNT(*) as count FROM \`${n.tableName}\``),l=i[0];return{tableName:n.tableName,rowCount:l?.count??0}}))}var Fo=d(()=>{"use strict";S()});import{HTTPException as Ho}from"hono/http-exception";async function Bo({tableName:a,db:e}){let t=E(e),[o]=await t.execute(`SELECT COUNT(*) as cnt
|
|
370
|
+
FROM information_schema.TABLES
|
|
371
|
+
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[a]);if(!(Number(o[0]?.cnt??0)>0))throw new Ho(404,{message:`Table "${a}" does not exist`});let[n]=await t.execute(`SHOW CREATE TABLE \`${a}\``),i=n[0],l=i?.["Create Table"]??i?.create_table??"";if(!l)throw new Ho(500,{message:`Failed to retrieve schema for table "${a}"`});return l}var jo=d(()=>{"use strict";S()});function Ko(a){if(a.length===0)return{clause:"",values:[]};let e=[],t=[];for(let o of a){let r=`\`${o.columnName}\``;switch(o.operator){case"=":case"!=":case">":case">=":case"<":case"<=":e.push(`${r} ${o.operator} ?`),t.push(o.value);break;case"is":o.value.toLowerCase()==="null"?e.push(`${r} IS NULL`):(e.push(`${r} = ?`),t.push(o.value));break;case"is not":o.value.toLowerCase()==="null"?e.push(`${r} IS NOT NULL`):(e.push(`${r} != ?`),t.push(o.value));break;case"like":case"ilike":e.push(`${r} LIKE ?`),t.push(o.value);break;case"not like":case"not ilike":e.push(`${r} NOT LIKE ?`),t.push(o.value);break;default:break}}return e.length===0?{clause:"",values:[]}:{clause:`WHERE ${e.join(" AND ")}`,values:t}}function Wo(a,e){return Array.isArray(a)?a.length===0?"":`ORDER BY ${a.map(o=>`\`${o.columnName}\` ${o.direction.toUpperCase()}`).join(", ")}`:a&&typeof a=="string"?`ORDER BY \`${a}\` ${e?.toUpperCase()||"ASC"}`:""}function Vo(a,e,t){let{values:o,sortColumns:r}=a,n=[],i=[],m=t==="asc"===(e==="asc");if(r.length>0){let c=r.map(b=>`\`${b}\``).join(", "),p=r.map(()=>"?").join(", "),u=m?">":"<";n.push(`(${c}) ${u} (${p})`);for(let b of r)i.push(o[b])}return{clause:n.length>0?`(${n.join(" AND ")})`:"",values:i}}var zo=d(()=>{"use strict"});var Pe,Ln,vn,Yo,Qo=d(()=>{"use strict";S();zo();Pe=a=>Buffer.from(JSON.stringify(a)).toString("base64url"),Ln=a=>{try{return JSON.parse(Buffer.from(a,"base64url").toString("utf-8"))}catch{return null}},vn=async(a,e)=>{let[t]=await a.execute(`SELECT COLUMN_NAME as column_name
|
|
372
|
+
FROM information_schema.COLUMNS
|
|
373
|
+
WHERE TABLE_SCHEMA = DATABASE()
|
|
374
|
+
AND TABLE_NAME = ?
|
|
375
|
+
AND COLUMN_KEY = 'PRI'
|
|
376
|
+
ORDER BY ORDINAL_POSITION`,[e]);return t.map(o=>o.column_name)},Yo=async({tableName:a,cursor:e="",limit:t=50,direction:o="asc",sort:r=[],order:n="asc",filters:i=[],db:l})=>{let s=E(l),m=await vn(s,a),c=[],p=n;Array.isArray(r)&&r.length>0?(c=r.map(L=>L.columnName),p=r[0].direction):typeof r=="string"&&r&&(c=[r]);let u=[...c,...m.filter(L=>!c.includes(L))],{clause:b,values:f}=Ko(i),h="",T=[];if(e){let L=Ln(e);if(L){let N=Vo(L,o,p);h=N.clause,T=N.values}}let R="";b&&h?R=`WHERE ${b.replace(/^WHERE\s+/i,"")} AND ${h}`:b?R=b:h&&(R=`WHERE ${h}`);let D=Wo((Array.isArray(r),r),n),P=D;o==="desc"?D?P=D.replace(/\bASC\b/gi,"TEMP_DESC").replace(/\bDESC\b/gi,"ASC").replace(/TEMP_DESC/g,"DESC"):u.length>0&&(P=`ORDER BY ${u.map(N=>`\`${N}\` ${p==="asc"?"DESC":"ASC"}`).join(", ")}`):!D&&u.length>0&&(P=`ORDER BY ${u.map(N=>`\`${N}\` ${p.toUpperCase()}`).join(", ")}`);let[H]=await s.execute(`SELECT COUNT(*) as total FROM \`${a}\` ${b}`,f),I=Number(H[0]?.total??0),k=Math.floor(t)+1,[K]=await s.execute(`SELECT * FROM \`${a}\` ${R} ${P} LIMIT ${k}`,[...f,...T]),q=K,_=q.length>t;_&&(q=q.slice(0,t)),o==="desc"&&(q=q.reverse());let O=null,Q=null;if(q.length>0&&u.length>0){let L=q[0],N=q[q.length-1],M=ee=>({values:Object.fromEntries(u.map(fe=>[fe,ee[fe]])),sortColumns:u});o==="asc"?(_&&(O=Pe(M(N))),e&&(Q=Pe(M(L)))):(e&&(O=Pe(M(N))),_&&(Q=Pe(M(L))))}return{data:q,meta:{limit:t,total:I,hasNextPage:o==="asc"?_:!!e,hasPreviousPage:o==="asc"?!!e:_,nextCursor:O,prevCursor:Q}}}});import{HTTPException as at}from"hono/http-exception";async function Go(a){let{tableName:e,columnName:t,newColumnName:o,db:r}=a,n=g(r),i=`
|
|
377
|
+
SELECT EXISTS (
|
|
378
|
+
SELECT 1 FROM information_schema.tables
|
|
379
|
+
WHERE table_name = $1 AND table_schema = 'public'
|
|
380
|
+
) as exists;
|
|
381
|
+
`,{rows:l}=await n.query(i,[e]);if(!l[0]?.exists)throw new at(404,{message:`Table "${e}" does not exist`});let s=`
|
|
382
|
+
SELECT EXISTS (
|
|
383
|
+
SELECT 1 FROM information_schema.columns
|
|
384
|
+
WHERE table_name = $1 AND column_name = $2 AND table_schema = 'public'
|
|
385
|
+
) as exists;
|
|
386
|
+
`,{rows:m}=await n.query(s,[e,t]);if(!m[0]?.exists)throw new at(404,{message:`Column "${t}" does not exist in table "${e}"`});let{rows:c}=await n.query(s,[e,o]);if(c[0]?.exists)throw new at(409,{message:`Column "${o}" already exists in table "${e}"`});await n.query(`ALTER TABLE "${e}" RENAME COLUMN "${t}" TO "${o}"`)}var Jo=d(()=>{"use strict";S()});import{HTTPException as $n}from"hono/http-exception";async function Xo(a){let e=g(a),t=`
|
|
234
387
|
SELECT table_name as "tableName"
|
|
235
388
|
FROM information_schema.tables
|
|
236
389
|
WHERE table_schema = 'public'
|
|
237
390
|
AND table_type = 'BASE TABLE'
|
|
238
391
|
ORDER BY table_name;
|
|
239
|
-
`,{rows:
|
|
392
|
+
`,{rows:o}=await e.query(t);if(!o[0])throw new $n(500,{message:"No tables returned from database"});return await Promise.all(o.map(async n=>{let i=`SELECT COUNT(*)::integer as count FROM "${n.tableName}"`,{rows:l}=await e.query(i);return{tableName:n.tableName,rowCount:l[0]?.count??0}}))}var Zo=d(()=>{"use strict";S()});import{HTTPException as qn}from"hono/http-exception";async function er({tableName:a,db:e}){let t=g(e),o=`
|
|
240
393
|
SELECT EXISTS (
|
|
241
394
|
SELECT 1 FROM information_schema.tables
|
|
242
395
|
WHERE table_schema = 'public' AND table_name = $1
|
|
243
396
|
) as exists
|
|
244
|
-
`,{rows:
|
|
397
|
+
`,{rows:r}=await t.query(o,[a]);if(!r[0]?.exists)throw new qn(404,{message:`Table "${a}" does not exist`});let n=`
|
|
245
398
|
SELECT
|
|
246
399
|
column_name,
|
|
247
400
|
data_type,
|
|
@@ -254,7 +407,7 @@ This will return the 5 customers with the highest total order value. You might a
|
|
|
254
407
|
FROM information_schema.columns
|
|
255
408
|
WHERE table_schema = 'public' AND table_name = $1
|
|
256
409
|
ORDER BY ordinal_position
|
|
257
|
-
`,{rows:i}=await
|
|
410
|
+
`,{rows:i}=await t.query(n,[a]),l=`
|
|
258
411
|
SELECT
|
|
259
412
|
tc.constraint_name,
|
|
260
413
|
tc.constraint_type,
|
|
@@ -271,7 +424,7 @@ This will return the 5 customers with the highest total order value. You might a
|
|
|
271
424
|
AND tc.constraint_type = 'FOREIGN KEY'
|
|
272
425
|
WHERE tc.table_schema = 'public' AND tc.table_name = $1
|
|
273
426
|
ORDER BY tc.constraint_type, tc.constraint_name
|
|
274
|
-
`,{rows:s}=await
|
|
427
|
+
`,{rows:s}=await t.query(l,[a]),m=`
|
|
275
428
|
SELECT indexname, indexdef
|
|
276
429
|
FROM pg_indexes
|
|
277
430
|
WHERE schemaname = 'public' AND tablename = $1
|
|
@@ -280,11 +433,11 @@ This will return the 5 customers with the highest total order value. You might a
|
|
|
280
433
|
FROM information_schema.table_constraints
|
|
281
434
|
WHERE table_schema = 'public' AND table_name = $1 AND constraint_type = 'PRIMARY KEY'
|
|
282
435
|
)
|
|
283
|
-
`,{rows:
|
|
284
|
-
`)),p.push(") tablespace pg_default;");for(let
|
|
285
|
-
`)}function
|
|
436
|
+
`,{rows:c}=await t.query(m,[a]),p=[];p.push(`create table public.${a} (`);let u=[];for(let T of i){let R=` ${T.column_name} ${On(T)}`;T.is_nullable==="NO"&&(R+=" not null"),T.column_default!==null&&(R+=` default ${T.column_default}`),u.push(R)}let b=new Map;for(let T of s){let R=b.get(T.constraint_name)||[];R.push(T),b.set(T.constraint_name,R)}let f=[];for(let[T,R]of b){let D=R[0],P=R.map(H=>H.column_name).join(", ");if(D.constraint_type==="PRIMARY KEY")f.push(` constraint ${T} primary key (${P})`);else if(D.constraint_type==="FOREIGN KEY"){let H=D.foreign_table_name,I=D.foreign_column_name;f.push(` constraint ${T} foreign key (${P}) references ${H} (${I})`)}else D.constraint_type==="UNIQUE"&&f.push(` constraint ${T} unique (${P})`)}let h=[...u,...f];p.push(h.join(`,
|
|
437
|
+
`)),p.push(") tablespace pg_default;");for(let T of c)Array.from(b.values()).some(D=>D[0].constraint_type==="UNIQUE"&&D[0].constraint_name===T.indexname)||(p.push(""),p.push(`${T.indexdef};`));return p.join(`
|
|
438
|
+
`)}function On(a){let{data_type:e,udt_name:t,character_maximum_length:o,numeric_precision:r,numeric_scale:n}=a;return e==="USER-DEFINED"?t:e==="ARRAY"?`${t.replace(/^_/,"")}[]`:(e==="character varying"||e==="varchar")&&o?`varchar(${o})`:e==="character"&&o?`char(${o})`:e==="numeric"&&r!==null?n!==null&&n>0?`numeric(${r}, ${n})`:`numeric(${r})`:e==="timestamp with time zone"?"timestamp with time zone":e==="timestamp without time zone"?"timestamp":{"character varying":"varchar",character:"char","double precision":"float8",integer:"integer",bigint:"bigint",smallint:"smallint",boolean:"boolean",text:"text",uuid:"uuid",json:"json",jsonb:"jsonb",date:"date",time:"time",bytea:"bytea"}[e]||e}var tr=d(()=>{"use strict";S()});function ar(a){if(a.length===0)return{clause:"",values:[]};let e=[],t=[];for(let o of a){let r=t.length+1,n=`"${o.columnName}"`;switch(o.operator){case"=":case"!=":case">":case">=":case"<":case"<=":e.push(`${n} ${o.operator} $${r}`),t.push(o.value);break;case"is":o.value.toLowerCase()==="null"?e.push(`${n} IS NULL`):(e.push(`${n} = $${r}`),t.push(o.value));break;case"is not":o.value.toLowerCase()==="null"?e.push(`${n} IS NOT NULL`):(e.push(`${n} != $${r}`),t.push(o.value));break;case"like":e.push(`${n}::text LIKE $${r}`),t.push(o.value);break;case"not like":e.push(`${n}::text NOT LIKE $${r}`),t.push(o.value);break;case"ilike":e.push(`${n}::text ILIKE $${r}`),t.push(o.value);break;case"not ilike":e.push(`${n}::text NOT ILIKE $${r}`),t.push(o.value);break;default:break}}return e.length===0?{clause:"",values:[]}:{clause:`WHERE ${e.join(" AND ")}`,values:t}}function or(a,e){return Array.isArray(a)?a.length===0?"":`ORDER BY ${a.map(o=>`"${o.columnName}" ${o.direction.toUpperCase()}`).join(", ")}`:a&&typeof a=="string"?`ORDER BY "${a}" ${e?.toUpperCase()||"ASC"}`:""}function rr(a,e,t,o){let{values:r,sortColumns:n}=a,i=[],l=[],c=t==="asc"===(e==="asc");if(n.length>0){let p=n.map(f=>`"${f}"`).join(", "),u=n.map((f,h)=>`$${o+h}`).join(", "),b=c?">":"<";i.push(`(${p}) ${b} (${u})`);for(let f of n)l.push(r[f])}return{clause:i.length>0?`(${i.join(" AND ")})`:"",values:l}}var nr=d(()=>{"use strict"});var Le,Mn,In,sr,ir=d(()=>{"use strict";S();nr();Le=a=>Buffer.from(JSON.stringify(a)).toString("base64url"),Mn=a=>{try{return JSON.parse(Buffer.from(a,"base64url").toString("utf-8"))}catch{return null}},In=async(a,e)=>{let t=`"${e}"`;return(await a.query(`SELECT a.attname as column_name
|
|
286
439
|
FROM pg_index i
|
|
287
440
|
JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
|
|
288
441
|
WHERE i.indrelid = $1::regclass AND i.indisprimary
|
|
289
|
-
ORDER BY array_position(i.indkey, a.attnum)`,[o])).rows.map(n=>n.column_name)},qo=async({tableName:t,cursor:e="",limit:o=50,direction:r="asc",sort:n=[],order:a="asc",filters:i=[],db:c})=>{let s=f(c),u=await Yr(s,t),l=[],p=a;Array.isArray(n)&&n.length>0?(l=n.map(N=>N.columnName),p=n[0].direction):typeof n=="string"&&n&&(l=[n]);let y=[...l,...u.filter(N=>!l.includes(N))];y.length===0&&y.push("ctid");let{clause:E,values:d}=vo(i),g="",h=[];if(e){let N=Qr(e);if(N){let L=$o(N,r,p,d.length+1);g=L.clause,h=L.values}}let w="";E&&g?w=`WHERE ${E.replace(/^WHERE\s+/i,"")} AND ${g}`:E?w=E:g&&(w=`WHERE ${g}`);let D=Ao((Array.isArray(n),n),a),P=D;r==="desc"?D?P=D.replace(/\bASC\b/gi,"TEMP_DESC").replace(/\bDESC\b/gi,"ASC").replace(/TEMP_DESC/g,"DESC"):P=`ORDER BY ${y.map(L=>`"${L}" ${p==="asc"?"DESC":"ASC"}`).join(", ")}`:!D&&y.length>0&&(P=`ORDER BY ${y.map(L=>`"${L}" ${p.toUpperCase()}`).join(", ")}`);let H=await s.query(`SELECT COUNT(*) as total FROM "${t}" ${E}`,d),O=Number(H.rows[0].total),J=d.length+h.length+1,z=await s.query(`SELECT * FROM "${t}" ${w} ${P} LIMIT $${J}`,[...d,...h,o+1]),v=z.fields&&z.fields.length>0?z.rows.filter(N=>Object.keys(N).length>0):z.rows,k=v.length>o;k&&(v=v.slice(0,o)),r==="desc"&&(v=v.reverse());let X=null,ye=null;if(v.length>0){let N=v[0],L=v[v.length-1],te=Mo=>({values:Object.fromEntries(y.map(Pe=>[Pe,Mo[Pe]])),sortColumns:y});r==="asc"?(k&&(X=pe(te(L))),e&&(ye=pe(te(N)))):(e&&(X=pe(te(L))),k&&(ye=pe(te(N))))}return{data:v,meta:{limit:o,total:O,hasNextPage:r==="asc"?k:!!e,hasPreviousPage:r==="asc"?!!e:k,nextCursor:X,prevCursor:ye}}}});import{utils as ee,write as Gr}from"xlsx";function Oo({cols:t,rows:e,format:o,tableName:r}){switch(o){case"json":{let n=JSON.stringify(e??[],null,2);return new Uint8Array(Buffer.from(n,"utf-8"))}case"csv":{let n=[t,...e?.map(c=>t?.map(s=>c[s]))??[]],a=ee.aoa_to_sheet(n),i=ee.sheet_to_csv(a);return new Uint8Array(Buffer.from(i,"utf-8"))}case"xlsx":{let n=[t,...e?.map(s=>t?.map(u=>s[u]))??[]],a=ee.aoa_to_sheet(n),i=ee.book_new();ee.book_append_sheet(i,a,r.slice(0,31));let c=Gr(i,{bookType:"xlsx",type:"buffer"});return new Uint8Array(c)}}}var Lo=m(()=>{"use strict"});import{zValidator as x}from"@hono/zod-validator";import{Hono as Jr}from"hono";var ko,jo=m(()=>{"use strict";F();yo();To();Ro();_o();xe();Co();No();Io();Lo();ko=new Jr().basePath("/tables").get("/",x("query",S),async t=>{let{db:e}=t.req.valid("query"),o=await Do(e);return t.json({data:o},200)}).post("/",x("query",S),x("json",lt),async t=>{let{db:e}=t.req.valid("query"),o=t.req.valid("json");return await bo({tableData:o,db:e}),t.json({data:`Table ${o.tableName} created successfully`},200)}).delete("/:tableName",x("query",ht),x("param",V),async t=>{let{db:e,cascade:o}=t.req.valid("query"),{tableName:r}=t.req.valid("param"),n=await Eo({tableName:r,db:e,cascade:o});return t.json({data:n},200)}).delete("/:tableName/columns/:columnName",x("query",ft),x("param",se),async t=>{let{db:e,cascade:o}=t.req.valid("query"),{tableName:r,columnName:n}=t.req.valid("param"),{deletedCount:a}=await go({tableName:r,columnName:n,cascade:o,db:e});return t.json({data:`Column "${n}" deleted successfully from table "${r}" with ${a} rows deleted`},200)}).get("/:tableName/columns",x("query",S),x("param",V),async t=>{let{db:e}=t.req.valid("query"),{tableName:o}=t.req.valid("param"),r=await le({tableName:o,db:e});return t.json({data:r},200)}).get("/:tableName/schema",x("query",S),x("param",V),async t=>{let{db:e}=t.req.valid("query"),{tableName:o}=t.req.valid("param"),r=await xo({tableName:o,db:e});return t.json({data:{schema:r}},200)}).get("/:tableName/data",x("param",V),x("query",Dt),async t=>{let{tableName:e}=t.req.valid("param"),{cursor:o,limit:r,direction:n,sort:a,order:i,filters:c,db:s}=t.req.valid("query"),u=await qo({tableName:e,cursor:o,limit:r,direction:n,sort:a,order:i,filters:c,db:s});return t.json({data:u},200)}).get("/:tableName/export",x("param",V),x("query",Rt),async t=>{let{tableName:e}=t.req.valid("param"),{db:o,format:r}=t.req.valid("query"),{cols:n,rows:a}=await wo({tableName:e,db:o}),i=Oo({cols:n,rows:a,format:r,tableName:e}),c;switch(r){case"csv":c="text/csv";break;case"xlsx":c="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";break;case"json":c="application/json";break}return new Response(i,{headers:{"Content-Type":c??"","Content-Disposition":`attachment; filename="${e}_export.${r}"`}})})});var Uo={};Ko(Uo,{createServer:()=>aa});import be from"path";import{fileURLToPath as Xr}from"url";import{serveStatic as de}from"@hono/node-server/serve-static";import{zValidator as Zr}from"@hono/zod-validator";import{Hono as ea}from"hono";import{cors as ta}from"hono/cors";import{logger as oa}from"hono/logger";import{prettyJSON as ra}from"hono/pretty-json";var fe,aa,Fo=m(()=>{"use strict";F();It();zt();Jt();oo();fo();jo();fe=()=>{if(process.env.NODE_ENV==="development")return be.resolve(process.cwd(),"../core/dist");let t=be.dirname(Xr(import.meta.url));return be.resolve(t,"./core-dist")},aa=()=>({app:new ea({strict:!1}).use("/*",ta()).use(ra({space:2})).use(process.env.NODE_ENV==="development"?oa():(e,o)=>o()).use("/favicon.ico",de({path:be.resolve(fe(),"favicon.ico")})).use("*",async(e,o)=>{e.header("Access-Control-Allow-Origin","*"),e.header("Access-Control-Allow-Methods","GET, POST, PUT, DELETE, OPTIONS"),e.header("Access-Control-Allow-Headers","Content-Type"),await o()}).onError(Pt).route("/",Gt).use("/assets/*",de({root:fe()})).use("/image.png",de({root:fe()})).use("/:dbType/*",Zr("param",tt,qt)).use("/:dbType/*",async(e,o)=>{let r=e.req.param("dbType");e.set("dbType",r),await o()}).route("/:dbType",ko).route("/:dbType",po).route("/:dbType",to).route("/:dbType",Mt).use("/*",de({root:fe()}))})});oe();import{intro as na,outro as sa}from"@clack/prompts";import{serve as ia}from"@hono/node-server";import ca from"open";import $e from"picocolors";import{program as je}from"commander";var Ue=()=>(je.name("db-studio").option("-e, --env <path>","Path to custom .env file").option("-p, --port <port>","Port to run the server on").option("-d, --database-url <url>","Database URL to use").option("-n, --var-name <name>","Custom environment variable name (default: DATABASE_URL)").option("-s, --status","Show status of the server").option("-h, --help","Show help").option("-v, --version","Show version").parse(process.argv),je.opts());import{readFile as Wo}from"fs/promises";import{resolve as Bo}from"path";import{cancel as re,isCancel as ge,note as Fe,select as Vo,spinner as Qo,text as He}from"@clack/prompts";import{parse as Yo}from"dotenv";import Te from"picocolors";var Me=async(t,e)=>{let o=e||"DATABASE_URL";if(t?.[o])return t[o];if(process.env[o])return process.env[o];let r=Qo();r.start("Looking for database connection..."),t?Fe(Te.red(`${o} not found in .env or process.env`)):Fe(Te.red(`No .env file found and ${o} not set in process.env`));let n=await Vo({message:`How do you want to provide ${o}?`,options:[{value:"manual",label:"Enter connection string manually"},{value:"other-env",label:"Use different .env file"},{value:"cancel",label:"Cancel / Exit"}],initialValue:"manual"});if((ge(n)||n==="cancel")&&(re("No database connection provided. Exiting..."),process.exit(0)),n==="other-env"){r.start("Waiting for path...");let i=await He({message:"Enter path to .env file",placeholder:"~/projects/myapp/.env.local or ./special.env",validate(s){if(!s.trim())return"Path is required"}});ge(i)&&(re("Cancelled."),process.exit(0)),r.stop("Trying custom .env...");let c=Bo(i);try{let s=await Wo(c,"utf-8"),u=Yo(s);if(u[o])return u[o];throw new Error(`${o} still missing in custom file`)}catch(s){let u=s;re(`Cannot read or parse file: ${Te.dim(u.message)}`),process.exit(1)}}r.stop("Manual input...");let a=await He({message:`Paste your ${o}`,placeholder:"postgresql://user:password@localhost:5432/mydb",validate(i){if(!i.trim())return"Connection string is required!";try{new URL(i);return}catch{return"Must be a valid URL format"}}});return ge(a)&&(re("Cancelled."),process.exit(0)),a.trim()};import{access as Go,readFile as Jo}from"fs/promises";import{dirname as Xo,resolve as Se}from"path";import{parse as Zo}from"dotenv";var er=async t=>{let e=Se(t);for(;;){let o=Se(e,".env");try{return await Go(o),o}catch{}let r=Xo(e);if(r===e)return null;e=r}},K=async t=>{let e;if(t?e=Se(t):e=await er(process.cwd()),!e)return null;try{let o=await Jo(e,"utf-8");return Zo(o)}catch(o){if(o instanceof Error&&o.message.includes("ENOENT"))return null;throw o}};he();import{intro as tr,outro as or}from"@clack/prompts";import ze from"picocolors";var Ke=()=>{tr(ze.inverse(" db-studio ")),or(ze.green(`For more information, visit: ${Le.SITE_DOCS_LINK}`))};oe();import{intro as rr,note as ar,outro as We}from"@clack/prompts";import ae from"picocolors";var Be=async(t,e,o)=>{rr(ae.inverse(" db-studio "));let r=o||M.VAR_NAME,n=null;if(e)n=e;else{let a=t?await K(t):await K();a?.[r]?n=a[r]:process.env[r]&&(n=process.env[r]??null)}n?We(ae.green(`\u2713 Database connection configured (using ${r})`)):(ar(ae.red(`\u2717 ${r} not found`),"Status"),We(ae.yellow("\u26A0 No database connection configured")))};import{intro as sr,outro as ir}from"@clack/prompts";import Qe from"picocolors";var Ve={name:"db-studio",type:"module",version:"1.3.33",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.",keywords:["database","database client","postgres","postgresql","database gui","sql client","database studio","postgres gui","ai sql","sql editor","er diagram","database management","data browser","spreadsheet database","postgres admin","mysql client","sqlite client","database tool","developer tools"],author:"H\xFCsam \u{1F951} <devhsmq@gmail.com>",homepage:"https://dbstudio.sh",repository:{type:"git",url:"git+https://github.com/husamql3/db-studio.git"},bugs:{url:"https://github.com/husamql3/db-studio/issues"},license:"MIT",bin:{"db-studio":"./dist/index.js"},files:["dist"],scripts:{dev:"NODE_ENV=development tsx watch src/index.ts",build:"tsup --minify --sourcemap",prepack:"cd ../core && bun run build && cd ../server && bun run build",start:"node dist/index.js",check:"biome check --write --unsafe",test:"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage"},dependencies:{"@clack/prompts":"^1.0.1","@hono/node-server":"^1.19.7","@hono/zod-validator":"^0.7.6",commander:"^14.0.3",dotenv:"^17.3.1",hono:"^4.10.4",open:"^11.0.0",pg:"^8.13.1",picocolors:"^1.1.1",xlsx:"^0.18.5",zod:"^4.2.1"},devDependencies:{"@biomejs/biome":"^2.2.6","@types/node":"^20.11.17","@types/pg":"^8.16.0","@vitest/coverage-v8":"^4.0.17",shared:"workspace:*",tsup:"^8.5.1",tsx:"^4.7.1",typescript:"^5.8.3",vitest:"^4.0.17"}};var Ye=()=>{sr(Qe.inverse(" db-studio ")),ir(Qe.green(`\u{1F680} db-studio v${Ve.version}`))};var la=async()=>{let{env:t,port:e,databaseUrl:o,varName:r,status:n,help:a,version:i}=Ue();a&&(Ke(),process.exit(0)),i&&(Ye(),process.exit(0)),n&&(await Be(t,o,r),process.exit(0)),na($e.inverse(" db-studio "));let c=e?parseInt(e,10):M.PORT,s=r||M.VAR_NAME,u=t?await K(t):await K(),l=o||await Me(u,s);process.env.DATABASE_URL=l;let{createServer:p}=await Promise.resolve().then(()=>(Fo(),Uo)),{app:y}=p();ia({fetch:y.fetch,port:c}),sa($e.green(`Server running at ${$e.cyan(`http://localhost:${c}`)}`)),process.env.NODE_ENV&&process.env.NODE_ENV!=="development"&&await ca(`http://localhost:${c}`)};la().catch(t=>{process.exit(1)});export{la as main};
|
|
442
|
+
ORDER BY array_position(i.indkey, a.attnum)`,[t])).rows.map(r=>r.column_name)},sr=async({tableName:a,cursor:e="",limit:t=50,direction:o="asc",sort:r=[],order:n="asc",filters:i=[],db:l})=>{let s=g(l),m=await In(s,a),c=[],p=n;Array.isArray(r)&&r.length>0?(c=r.map(N=>N.columnName),p=r[0].direction):typeof r=="string"&&r&&(c=[r]);let u=[...c,...m.filter(N=>!c.includes(N))];u.length===0&&u.push("ctid");let{clause:b,values:f}=ar(i),h="",T=[];if(e){let N=Mn(e);if(N){let M=rr(N,o,p,f.length+1);h=M.clause,T=M.values}}let R="";b&&h?R=`WHERE ${b.replace(/^WHERE\s+/i,"")} AND ${h}`:b?R=b:h&&(R=`WHERE ${h}`);let D=or((Array.isArray(r),r),n),P=D;o==="desc"?D?P=D.replace(/\bASC\b/gi,"TEMP_DESC").replace(/\bDESC\b/gi,"ASC").replace(/TEMP_DESC/g,"DESC"):P=`ORDER BY ${u.map(M=>`"${M}" ${p==="asc"?"DESC":"ASC"}`).join(", ")}`:!D&&u.length>0&&(P=`ORDER BY ${u.map(M=>`"${M}" ${p.toUpperCase()}`).join(", ")}`);let H=await s.query(`SELECT COUNT(*) as total FROM "${a}" ${b}`,f),I=Number(H.rows[0].total),k=f.length+T.length+1,K=await s.query(`SELECT * FROM "${a}" ${R} ${P} LIMIT $${k}`,[...f,...T,t+1]),_=K.fields&&K.fields.length>0?K.rows.filter(N=>Object.keys(N).length>0):K.rows,O=_.length>t;O&&(_=_.slice(0,t)),o==="desc"&&(_=_.reverse());let Q=null,L=null;if(_.length>0){let N=_[0],M=_[_.length-1],ee=fe=>({values:Object.fromEntries(u.map(rt=>[rt,fe[rt]])),sortColumns:u});o==="asc"?(O&&(Q=Le(ee(M))),e&&(L=Le(ee(N)))):(e&&(Q=Le(ee(M))),O&&(L=Le(ee(N))))}return{data:_,meta:{limit:t,total:I,hasNextPage:o==="asc"?O:!!e,hasPreviousPage:o==="asc"?!!e:O,nextCursor:Q,prevCursor:L}}}});import{utils as de,write as kn}from"xlsx";function lr({cols:a,rows:e,format:t,tableName:o}){switch(t){case"json":{let r=JSON.stringify(e??[],null,2);return new Uint8Array(Buffer.from(r,"utf-8"))}case"csv":{let r=[a,...e?.map(l=>a?.map(s=>l[s]))??[]],n=de.aoa_to_sheet(r),i=de.sheet_to_csv(n);return new Uint8Array(Buffer.from(i,"utf-8"))}case"xlsx":{let r=[a,...e?.map(s=>a?.map(m=>s[m]))??[]],n=de.aoa_to_sheet(r),i=de.book_new();de.book_append_sheet(i,n,o.slice(0,31));let l=kn(i,{bookType:"xlsx",type:"buffer"});return new Uint8Array(l)}}}var cr=d(()=>{"use strict"});import{zValidator as A}from"@hono/zod-validator";import{Hono as Un}from"hono";var mr,ur=d(()=>{"use strict";J();so();co();uo();yo();ho();Eo();Co();Ao();_o();Lo();qo();Mo();ko();pe();Fo();jo();Qo();Jo();ze();Zo();tr();ir();cr();mr=new Un().basePath("/tables").get("/",A("query",C),async a=>{let{db:e}=a.req.valid("query"),o=a.get("dbType")==="mysql"?await Uo(e):await Xo(e);return a.json({data:o},200)}).post("/",A("query",C),A("json",Bt),async a=>{let{db:e}=a.req.valid("query"),t=a.req.valid("json");return a.get("dbType")==="mysql"?await Do({tableData:t,db:e}):await mo({tableData:t,db:e}),a.json({data:`Table ${t.tableName} created successfully`},200)}).delete("/:tableName",A("query",Yt),A("param",G),async a=>{let{db:e,cascade:t}=a.req.valid("query"),{tableName:o}=a.req.valid("param"),n=a.get("dbType")==="mysql"?await $o({tableName:o,db:e,cascade:t}):await To({tableName:o,db:e,cascade:t});return a.json({data:n},200)}).delete("/:tableName/columns/:columnName",A("query",_t),A("param",U),async a=>{let{db:e,cascade:t}=a.req.valid("query"),{tableName:o,columnName:r}=a.req.valid("param"),n=a.get("dbType"),{deletedCount:i}=n==="mysql"?await Po({tableName:o,columnName:r,cascade:t,db:e}):await fo({tableName:o,columnName:r,cascade:t,db:e});return a.json({data:`Column "${r}" deleted successfully from table "${o}" with ${i} rows deleted`},200)}).post("/:tableName/columns",A("query",C),A("param",G),A("json",V),async a=>{let{db:e}=a.req.valid("query"),{tableName:t}=a.req.valid("param"),o=a.req.valid("json");return a.get("dbType")==="mysql"?await Ro({tableName:t,db:e,...o}):await no({tableName:t,db:e,...o}),a.json({data:`Column "${o.columnName}" added successfully to table "${t}"`},200)}).patch("/:tableName/columns/:columnName/rename",A("query",C),A("param",U),A("json",Be),async a=>{let{db:e}=a.req.valid("query"),{tableName:t,columnName:o}=a.req.valid("param"),r=a.req.valid("json");return a.get("dbType")==="mysql"?await Io({tableName:t,columnName:o,db:e,...r}):await Go({tableName:t,columnName:o,db:e,...r}),a.json({data:`Column "${o}" renamed to "${r.newColumnName}" in table "${t}"`},200)}).patch("/:tableName/columns/:columnName",A("query",C),A("param",U),A("json",ue),async a=>{let{db:e}=a.req.valid("query"),{tableName:t,columnName:o}=a.req.valid("param"),r=a.req.valid("json");return a.get("dbType")==="mysql"?await No({tableName:t,columnName:o,db:e,...r}):await lo({tableName:t,columnName:o,db:e,...r}),a.json({data:`Column "${o}" updated successfully in table "${t}"`},200)}).get("/:tableName/columns",A("query",C),A("param",G),async a=>{let{db:e}=a.req.valid("query"),{tableName:t}=a.req.valid("param"),r=a.get("dbType")==="mysql"?await X({tableName:t,db:e}):await Ce({tableName:t,db:e});return a.json({data:r},200)}).get("/:tableName/schema",A("query",C),A("param",G),async a=>{let{db:e}=a.req.valid("query"),{tableName:t}=a.req.valid("param"),r=a.get("dbType")==="mysql"?await Bo({tableName:t,db:e}):await er({tableName:t,db:e});return a.json({data:{schema:r}},200)}).get("/:tableName/data",A("param",G),A("query",oa),async a=>{let{tableName:e}=a.req.valid("param"),{cursor:t,limit:o,direction:r,sort:n,order:i,filters:l,db:s}=a.req.valid("query"),c=a.get("dbType")==="mysql"?await Yo({tableName:e,cursor:t,limit:o,direction:r,sort:n,order:i,filters:l,db:s}):await sr({tableName:e,cursor:t,limit:o,direction:r,sort:n,order:i,filters:l,db:s});return a.json({data:c},200)}).get("/:tableName/export",A("param",G),A("query",Zt),async a=>{let{tableName:e}=a.req.valid("param"),{db:t,format:o}=a.req.valid("query"),r=a.get("dbType"),{cols:n,rows:i}=r==="mysql"?await Oo({tableName:e,db:t}):await go({tableName:e,db:t}),l=lr({cols:n,rows:i,format:o,tableName:e}),s;switch(o){case"csv":s="text/csv";break;case"xlsx":s="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";break;case"json":s="application/json";break}return new Response(l,{headers:{"Content-Type":s??"","Content-Disposition":`attachment; filename="${e}_export.${o}"`}})})});var pr={};yr(pr,{createServer:()=>Vn});import qe from"path";import{fileURLToPath as Fn}from"url";import{serveStatic as ve}from"@hono/node-server/serve-static";import{zValidator as Hn}from"@hono/zod-validator";import{Hono as Bn}from"hono";import{cors as jn}from"hono/cors";import{logger as Kn}from"hono/logger";import{prettyJSON as Wn}from"hono/pretty-json";var $e,Vn,dr=d(()=>{"use strict";J();pa();Ea();Pa();Ia();oo();ur();$e=()=>{if(process.env.NODE_ENV==="development")return qe.resolve(process.cwd(),"../core/dist");let a=qe.dirname(Fn(import.meta.url));return qe.resolve(a,"./core-dist")},Vn=()=>({app:new Bn({strict:!1}).use("/*",jn()).use(Wn({space:2})).use(process.env.NODE_ENV==="development"?Kn():(e,t)=>t()).use("/favicon.ico",ve({path:qe.resolve($e(),"favicon.ico")})).use("*",async(e,t)=>{e.header("Access-Control-Allow-Origin","*"),e.header("Access-Control-Allow-Methods","GET, POST, PUT, DELETE, OPTIONS"),e.header("Access-Control-Allow-Headers","Content-Type"),await t()}).onError(ma).route("/",xa).use("/assets/*",ve({root:$e()})).use("/image.png",ve({root:$e()})).use("/:dbType/*",Hn("param",wt,ua)).use("/:dbType/*",async(e,t)=>{let o=e.req.param("dbType");e.set("dbType",o),await t()}).route("/:dbType",mr).route("/:dbType",ao).route("/:dbType",Ma).route("/:dbType",ga).use("/*",ve({root:$e()}))})});ye();import{intro as zn,outro as Yn}from"@clack/prompts";import{serve as Qn}from"@hono/node-server";import ot from"picocolors";import{program as pt}from"commander";var dt=()=>(pt.name("db-studio").option("-e, --env <path>","Path to custom .env file").option("-p, --port <port>","Port to run the server on").option("-d, --database-url <url>","Database URL to use").option("-n, --var-name <name>","Custom environment variable name (default: DATABASE_URL)").option("-s, --status","Show status of the server").option("-h, --help","Show help").option("-v, --version","Show version").parse(process.argv),pt.opts());import{readFile as br}from"fs/promises";import{resolve as Tr}from"path";import{cancel as be,isCancel as Me,note as ft,select as hr,spinner as gr,text as yt}from"@clack/prompts";import{parse as Er}from"dotenv";import Ie from"picocolors";var bt=async(a,e)=>{let t=e||"DATABASE_URL";if(a?.[t])return a[t];if(process.env[t])return process.env[t];let o=gr();o.start("Looking for database connection..."),a?ft(Ie.red(`${t} not found in .env or process.env`)):ft(Ie.red(`No .env file found and ${t} not set in process.env`));let r=await hr({message:`How do you want to provide ${t}?`,options:[{value:"manual",label:"Enter connection string manually"},{value:"other-env",label:"Use different .env file"},{value:"cancel",label:"Cancel / Exit"}],initialValue:"manual"});if((Me(r)||r==="cancel")&&(be("No database connection provided. Exiting..."),process.exit(0)),r==="other-env"){o.start("Waiting for path...");let i=await yt({message:"Enter path to .env file",placeholder:"~/projects/myapp/.env.local or ./special.env",validate(s){if(!s?.trim())return"Path is required"}});Me(i)&&(be("Cancelled."),process.exit(0)),o.stop("Trying custom .env...");let l=Tr(i);try{let s=await br(l,"utf-8"),m=Er(s);if(m[t])return m[t];throw new Error(`${t} still missing in custom file`)}catch(s){let m=s;be(`Cannot read or parse file: ${Ie.dim(m.message)}`),process.exit(1)}}o.stop("Manual input...");let n=await yt({message:`Paste your ${t}`,placeholder:"postgresql://user:password@localhost:5432/mydb",validate(i){if(!i?.trim())return"Connection string is required!";try{new URL(i);return}catch{return"Must be a valid URL format"}}});return Me(n)&&(be("Cancelled."),process.exit(0)),n.trim()};import{access as Sr,readFile as Rr}from"fs/promises";import{dirname as Cr,resolve as ke}from"path";import{parse as wr}from"dotenv";var Nr=async a=>{let e=ke(a);for(;;){let t=ke(e,".env");try{return await Sr(t),t}catch{}let o=Cr(e);if(o===e)return null;e=o}},te=async a=>{let e;if(a?e=ke(a):e=await Nr(process.cwd()),!e)return null;try{let t=await Rr(e,"utf-8");return wr(t)}catch(t){if(t instanceof Error&&t.message.includes("ENOENT"))return null;throw t}};Oe();import{intro as Ar,outro as Dr}from"@clack/prompts";import Tt from"picocolors";var ht=()=>{Ar(Tt.inverse(" db-studio ")),Dr(Tt.green(`For more information, visit: ${mt.SITE_DOCS_LINK}`))};ye();import{intro as _r,note as xr,outro as gt}from"@clack/prompts";import Te from"picocolors";var Et=async(a,e,t)=>{_r(Te.inverse(" db-studio "));let o=t||Z.VAR_NAME,r=null;if(e)r=e;else{let n=a?await te(a):await te();n?.[o]?r=n[o]:process.env[o]&&(r=process.env[o]??null)}r?gt(Te.green(`\u2713 Database connection configured (using ${o})`)):(xr(Te.red(`\u2717 ${o} not found`),"Status"),gt(Te.yellow("\u26A0 No database connection configured")))};import{intro as Lr,outro as vr}from"@clack/prompts";import Rt from"picocolors";var St={name:"db-studio",type:"module",version:"1.5.0",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.",keywords:["database","database client","postgres","postgresql","database gui","sql client","database studio","postgres gui","ai sql","sql editor","er diagram","database management","data browser","spreadsheet database","postgres admin","mysql client","sqlite client","database tool","developer tools"],author:"H\xFCsam \u{1F951} <devhsmq@gmail.com>",homepage:"https://dbstudio.sh",repository:{type:"git",url:"git+https://github.com/husamql3/db-studio.git"},bugs:{url:"https://github.com/husamql3/db-studio/issues"},license:"MIT",bin:{"db-studio":"./dist/index.js"},files:["dist"],scripts:{dev:"NODE_ENV=development tsx watch src/index.ts",build:"tsup --minify --sourcemap",prepack:"cd ../core && bun run build && cd ../server && bun run build",start:"node dist/index.js",check:"biome check --write --unsafe",test:"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage"},dependencies:{"@clack/prompts":"^1.0.1","@hono/node-server":"^1.19.7","@hono/zod-validator":"^0.7.6",commander:"^14.0.3",dotenv:"^17.3.1",hono:"^4.10.4",mysql2:"^3.18.2",pg:"^8.13.1",picocolors:"^1.1.1",xlsx:"^0.18.5",zod:"^4.2.1"},devDependencies:{"@biomejs/biome":"^2.2.6","@types/node":"^20.11.17","@types/pg":"^8.16.0","@vitest/coverage-v8":"^4.0.17",shared:"workspace:*",tsup:"^8.5.1",tsx:"^4.7.1",typescript:"^5.8.3",vitest:"^4.0.17"}};var Ct=()=>{Lr(Rt.inverse(" db-studio ")),vr(Rt.green(`\u{1F680} db-studio v${St.version}`))};var Gn=async()=>{let{env:a,port:e,databaseUrl:t,varName:o,status:r,help:n,version:i}=dt();n&&(ht(),process.exit(0)),i&&(Ct(),process.exit(0)),r&&(await Et(a,t,o),process.exit(0)),zn(ot.inverse(" db-studio "));let l=e?parseInt(e,10):Z.PORT,s=o||Z.VAR_NAME,m=a?await te(a):await te(),c=t||await bt(m,s);process.env.DATABASE_URL=c;let{createServer:p}=await Promise.resolve().then(()=>(dr(),pr)),{app:u}=p();Qn({fetch:u.fetch,port:l}),Yn(ot.green(`Server running at ${ot.cyan(`http://localhost:${l}`)}`))};Gn().catch(a=>{process.exit(1)});export{Gn as main};
|
|
290
443
|
//# sourceMappingURL=index.js.map
|