db-studio 1.4.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. package/README.md +44 -0
  2. package/dist/core-dist/assets/_pathlessLayout-B3hOmNOY.js +1 -0
  3. package/dist/core-dist/assets/_queryId-B-Yx8vY8.js +1 -0
  4. package/dist/core-dist/assets/_table-C9ZV09Jc.js +8 -0
  5. package/dist/core-dist/assets/_table-DIbBLMgY.js +39 -0
  6. package/dist/core-dist/assets/{cdoe-editor-BCFPgj4h.js → cdoe-editor-BUyGnaMR.js} +1 -1
  7. package/dist/core-dist/assets/dialog-BtqI2R7E.js +1 -0
  8. package/dist/core-dist/assets/icons-B2mES2Qq.js +1 -0
  9. package/dist/core-dist/assets/index-BV7euJxs.js +1 -0
  10. package/dist/core-dist/assets/index-C7KJNEv-.js +1 -0
  11. package/dist/core-dist/assets/index-CESnXcY7.js +1 -0
  12. package/dist/core-dist/assets/index-CTFnCamQ.js +1 -0
  13. package/dist/core-dist/assets/index-CwHrvESi.css +1 -0
  14. package/dist/core-dist/assets/index-DO_12lzR.js +58 -0
  15. package/dist/core-dist/assets/index-DQOVykiS.js +1 -0
  16. package/dist/core-dist/assets/{indexes-Dowc1Q3x.js → indexes-DESnDRwn.js} +1 -1
  17. package/dist/core-dist/assets/logs-DKdQRaOz.js +1 -0
  18. package/dist/core-dist/assets/queries.store-DCqn9r_M.js +1 -0
  19. package/dist/core-dist/assets/radix-ui-c-7GrHMM.js +51 -0
  20. package/dist/core-dist/assets/{react-dom-C-8vY09X.js → react-dom-BcUZDRtY.js} +1 -1
  21. package/dist/core-dist/assets/runner-tab-CloOoJUy.js +3 -0
  22. package/dist/core-dist/assets/scroll-area-D613A-kL.js +1 -0
  23. package/dist/core-dist/assets/tanstack-BaWakKkc.js +7 -0
  24. package/dist/core-dist/assets/tooltip-B4cd0H8Q.js +1 -0
  25. package/dist/core-dist/assets/use-delete-column-DxoXObaz.js +1 -0
  26. package/dist/core-dist/assets/{visualizer-DRuf8l7V.js → visualizer-CQGMZpWZ.js} +1 -1
  27. package/dist/core-dist/index.html +7 -7
  28. package/dist/index.js +99 -54
  29. package/dist/index.js.map +1 -1
  30. package/package.json +14 -14
  31. package/dist/core-dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  32. package/dist/core-dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  33. package/dist/core-dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  34. package/dist/core-dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  35. package/dist/core-dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  36. package/dist/core-dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  37. package/dist/core-dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  38. package/dist/core-dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  39. package/dist/core-dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  40. package/dist/core-dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  41. package/dist/core-dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  42. package/dist/core-dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  43. package/dist/core-dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  44. package/dist/core-dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  45. package/dist/core-dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  46. package/dist/core-dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  47. package/dist/core-dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  48. package/dist/core-dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  49. package/dist/core-dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  50. package/dist/core-dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  51. package/dist/core-dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  52. package/dist/core-dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  53. package/dist/core-dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  54. package/dist/core-dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  55. package/dist/core-dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  56. package/dist/core-dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  57. package/dist/core-dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  58. package/dist/core-dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  59. package/dist/core-dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  60. package/dist/core-dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  61. package/dist/core-dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  62. package/dist/core-dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  63. package/dist/core-dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  64. package/dist/core-dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  65. package/dist/core-dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  66. package/dist/core-dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  67. package/dist/core-dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  68. package/dist/core-dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  69. package/dist/core-dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  70. package/dist/core-dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  71. package/dist/core-dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  72. package/dist/core-dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  73. package/dist/core-dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  74. package/dist/core-dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  75. package/dist/core-dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  76. package/dist/core-dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  77. package/dist/core-dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  78. package/dist/core-dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  79. package/dist/core-dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  80. package/dist/core-dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  81. package/dist/core-dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  82. package/dist/core-dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  83. package/dist/core-dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  84. package/dist/core-dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  85. package/dist/core-dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  86. package/dist/core-dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  87. package/dist/core-dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  88. package/dist/core-dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  89. package/dist/core-dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  90. package/dist/core-dist/assets/_baseUniq-C7A7fsQ-.js +0 -1
  91. package/dist/core-dist/assets/_pathlessLayout-BErOoJBf.js +0 -2
  92. package/dist/core-dist/assets/_queryId-B1LaFAmm.js +0 -1
  93. package/dist/core-dist/assets/_table-4nxpgHEz.js +0 -8
  94. package/dist/core-dist/assets/abap-BdImnpbu.js +0 -1
  95. package/dist/core-dist/assets/actionscript-3-CfeIJUat.js +0 -1
  96. package/dist/core-dist/assets/ada-bCR0ucgS.js +0 -1
  97. package/dist/core-dist/assets/andromeeda-C-Jbm3Hp.js +0 -1
  98. package/dist/core-dist/assets/angular-html-CU67Zn6k.js +0 -1
  99. package/dist/core-dist/assets/angular-ts-BwZT4LLn.js +0 -1
  100. package/dist/core-dist/assets/apache-Pmp26Uib.js +0 -1
  101. package/dist/core-dist/assets/apex-D8_7TLub.js +0 -1
  102. package/dist/core-dist/assets/apl-dKokRX4l.js +0 -1
  103. package/dist/core-dist/assets/applescript-Co6uUVPk.js +0 -1
  104. package/dist/core-dist/assets/ara-BRHolxvo.js +0 -1
  105. package/dist/core-dist/assets/arc-Clvi5rzR.js +0 -1
  106. package/dist/core-dist/assets/architectureDiagram-VXUJARFQ-DkipSmLb.js +0 -36
  107. package/dist/core-dist/assets/asciidoc-Dv7Oe6Be.js +0 -1
  108. package/dist/core-dist/assets/asm-D_Q5rh1f.js +0 -1
  109. package/dist/core-dist/assets/astro-CbQHKStN.js +0 -1
  110. package/dist/core-dist/assets/aurora-x-D-2ljcwZ.js +0 -1
  111. package/dist/core-dist/assets/awk-DMzUqQB5.js +0 -1
  112. package/dist/core-dist/assets/ayu-dark-CmMr59Fi.js +0 -1
  113. package/dist/core-dist/assets/ballerina-BFfxhgS-.js +0 -1
  114. package/dist/core-dist/assets/bat-BkioyH1T.js +0 -1
  115. package/dist/core-dist/assets/beancount-k_qm7-4y.js +0 -1
  116. package/dist/core-dist/assets/berry-uYugtg8r.js +0 -1
  117. package/dist/core-dist/assets/bibtex-CHM0blh-.js +0 -1
  118. package/dist/core-dist/assets/bicep-Bmn6On1c.js +0 -1
  119. package/dist/core-dist/assets/blade-D4QpJJKB.js +0 -1
  120. package/dist/core-dist/assets/blockDiagram-VD42YOAC-DV8KUj94.js +0 -122
  121. package/dist/core-dist/assets/bsl-BO_Y6i37.js +0 -1
  122. package/dist/core-dist/assets/c-BIGW1oBm.js +0 -1
  123. package/dist/core-dist/assets/c3-VCDPK7BO.js +0 -1
  124. package/dist/core-dist/assets/c4Diagram-YG6GDRKO-CIKSfaF1.js +0 -10
  125. package/dist/core-dist/assets/cadence-Bv_4Rxtq.js +0 -1
  126. package/dist/core-dist/assets/cairo-KRGpt6FW.js +0 -1
  127. package/dist/core-dist/assets/catppuccin-frappe-DFWUc33u.js +0 -1
  128. package/dist/core-dist/assets/catppuccin-latte-C9dUb6Cb.js +0 -1
  129. package/dist/core-dist/assets/catppuccin-macchiato-DQyhUUbL.js +0 -1
  130. package/dist/core-dist/assets/catppuccin-mocha-D87Tk5Gz.js +0 -1
  131. package/dist/core-dist/assets/channel-B2Rh1omC.js +0 -1
  132. package/dist/core-dist/assets/chunk-4BX2VUAB-DcvB4_uV.js +0 -1
  133. package/dist/core-dist/assets/chunk-55IACEB6-EG9AyKaq.js +0 -1
  134. package/dist/core-dist/assets/chunk-B4BG7PRW-KK8IJqzV.js +0 -165
  135. package/dist/core-dist/assets/chunk-DI55MBZ5-TpII66YZ.js +0 -220
  136. package/dist/core-dist/assets/chunk-FMBD7UC4-IEg5SEkW.js +0 -15
  137. package/dist/core-dist/assets/chunk-QN33PNHL-DOQqAhwZ.js +0 -1
  138. package/dist/core-dist/assets/chunk-QZHKN3VN-CQD63wVo.js +0 -1
  139. package/dist/core-dist/assets/chunk-TZMSLE5B-Ck8unx9M.js +0 -1
  140. package/dist/core-dist/assets/clarity-D53aC0YG.js +0 -1
  141. package/dist/core-dist/assets/classDiagram-2ON5EDUG-yB0lDqQ_.js +0 -1
  142. package/dist/core-dist/assets/classDiagram-v2-WZHVMYZB-yB0lDqQ_.js +0 -1
  143. package/dist/core-dist/assets/clojure-P80f7IUj.js +0 -1
  144. package/dist/core-dist/assets/clone-DMtL-4i6.js +0 -1
  145. package/dist/core-dist/assets/cmake-D1j8_8rp.js +0 -1
  146. package/dist/core-dist/assets/cobol-nwyudZeR.js +0 -1
  147. package/dist/core-dist/assets/code-block-IT6T5CEO-BkhPLTN-.js +0 -154
  148. package/dist/core-dist/assets/codeowners-Bp6g37R7.js +0 -1
  149. package/dist/core-dist/assets/codeql-DsOJ9woJ.js +0 -1
  150. package/dist/core-dist/assets/coffee-Ch7k5sss.js +0 -1
  151. package/dist/core-dist/assets/common-lisp-Cg-RD9OK.js +0 -1
  152. package/dist/core-dist/assets/coq-DkFqJrB1.js +0 -1
  153. package/dist/core-dist/assets/cose-bilkent-S5V4N54A-BU01uPeb.js +0 -1
  154. package/dist/core-dist/assets/cpp-CofmeUqb.js +0 -1
  155. package/dist/core-dist/assets/crystal-tKQVLTB8.js +0 -1
  156. package/dist/core-dist/assets/csharp-K5feNrxe.js +0 -1
  157. package/dist/core-dist/assets/css-DPfMkruS.js +0 -1
  158. package/dist/core-dist/assets/csv-fuZLfV_i.js +0 -1
  159. package/dist/core-dist/assets/cue-D82EKSYY.js +0 -1
  160. package/dist/core-dist/assets/cypher-COkxafJQ.js +0 -1
  161. package/dist/core-dist/assets/cytoscape.esm-5J0xJHOV.js +0 -321
  162. package/dist/core-dist/assets/d-85-TOEBH.js +0 -1
  163. package/dist/core-dist/assets/dagre-6UL2VRFP-DgGR46yM.js +0 -4
  164. package/dist/core-dist/assets/dark-plus-C3mMm8J8.js +0 -1
  165. package/dist/core-dist/assets/dart-CF10PKvl.js +0 -1
  166. package/dist/core-dist/assets/dax-CEL-wOlO.js +0 -1
  167. package/dist/core-dist/assets/defaultLocale-DX6XiGOO.js +0 -1
  168. package/dist/core-dist/assets/desktop-BmXAJ9_W.js +0 -1
  169. package/dist/core-dist/assets/diagram-PSM6KHXK-D_opTgTY.js +0 -24
  170. package/dist/core-dist/assets/diagram-QEK2KX5R-C8q65IvQ.js +0 -43
  171. package/dist/core-dist/assets/diagram-S2PKOQOG-DideTxM7.js +0 -24
  172. package/dist/core-dist/assets/diff-D97Zzqfu.js +0 -1
  173. package/dist/core-dist/assets/docker-BcOcwvcX.js +0 -1
  174. package/dist/core-dist/assets/dotenv-Da5cRb03.js +0 -1
  175. package/dist/core-dist/assets/dracula-BzJJZx-M.js +0 -1
  176. package/dist/core-dist/assets/dracula-soft-BXkSAIEj.js +0 -1
  177. package/dist/core-dist/assets/dream-maker-BtqSS_iP.js +0 -1
  178. package/dist/core-dist/assets/edge-BkV0erSs.js +0 -1
  179. package/dist/core-dist/assets/elixir-CDX3lj18.js +0 -1
  180. package/dist/core-dist/assets/elm-DbKCFpqz.js +0 -1
  181. package/dist/core-dist/assets/emacs-lisp-C9XAeP06.js +0 -1
  182. package/dist/core-dist/assets/erDiagram-Q2GNP2WA-CRAdUMHH.js +0 -60
  183. package/dist/core-dist/assets/erb-BOJIQeun.js +0 -1
  184. package/dist/core-dist/assets/erlang-DsQrWhSR.js +0 -1
  185. package/dist/core-dist/assets/everforest-dark-BgDCqdQA.js +0 -1
  186. package/dist/core-dist/assets/everforest-light-C8M2exoo.js +0 -1
  187. package/dist/core-dist/assets/fennel-BYunw83y.js +0 -1
  188. package/dist/core-dist/assets/fish-BvzEVeQv.js +0 -1
  189. package/dist/core-dist/assets/flowDiagram-NV44I4VS-BZhEr3Uj.js +0 -162
  190. package/dist/core-dist/assets/fluent-C4IJs8-o.js +0 -1
  191. package/dist/core-dist/assets/fortran-fixed-form-CkoXwp7k.js +0 -1
  192. package/dist/core-dist/assets/fortran-free-form-BxgE0vQu.js +0 -1
  193. package/dist/core-dist/assets/fsharp-CXgrBDvD.js +0 -1
  194. package/dist/core-dist/assets/ganttDiagram-JELNMOA3-v6QMKJx4.js +0 -267
  195. package/dist/core-dist/assets/gdresource-B7Tvp0Sc.js +0 -1
  196. package/dist/core-dist/assets/gdscript-DTMYz4Jt.js +0 -1
  197. package/dist/core-dist/assets/gdshader-DkwncUOv.js +0 -1
  198. package/dist/core-dist/assets/genie-D0YGMca9.js +0 -1
  199. package/dist/core-dist/assets/gherkin-DyxjwDmM.js +0 -1
  200. package/dist/core-dist/assets/git-commit-F4YmCXRG.js +0 -1
  201. package/dist/core-dist/assets/git-rebase-r7XF79zn.js +0 -1
  202. package/dist/core-dist/assets/gitGraphDiagram-NY62KEGX-A1MEr8uU.js +0 -65
  203. package/dist/core-dist/assets/github-dark-DHJKELXO.js +0 -1
  204. package/dist/core-dist/assets/github-dark-default-Cuk6v7N8.js +0 -1
  205. package/dist/core-dist/assets/github-dark-dimmed-DH5Ifo-i.js +0 -1
  206. package/dist/core-dist/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -1
  207. package/dist/core-dist/assets/github-light-DAi9KRSo.js +0 -1
  208. package/dist/core-dist/assets/github-light-default-D7oLnXFd.js +0 -1
  209. package/dist/core-dist/assets/github-light-high-contrast-BfjtVDDH.js +0 -1
  210. package/dist/core-dist/assets/gleam-BspZqrRM.js +0 -1
  211. package/dist/core-dist/assets/glimmer-js-Rg0-pVw9.js +0 -1
  212. package/dist/core-dist/assets/glimmer-ts-U6CK756n.js +0 -1
  213. package/dist/core-dist/assets/glsl-DplSGwfg.js +0 -1
  214. package/dist/core-dist/assets/gn-n2N0HUVH.js +0 -1
  215. package/dist/core-dist/assets/gnuplot-DdkO51Og.js +0 -1
  216. package/dist/core-dist/assets/go-Dn2_MT6a.js +0 -1
  217. package/dist/core-dist/assets/graph-C6dXmhID.js +0 -1
  218. package/dist/core-dist/assets/graphql-ChdNCCLP.js +0 -1
  219. package/dist/core-dist/assets/groovy-gcz8RCvz.js +0 -1
  220. package/dist/core-dist/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -1
  221. package/dist/core-dist/assets/gruvbox-dark-medium-GsRaNv29.js +0 -1
  222. package/dist/core-dist/assets/gruvbox-dark-soft-CVdnzihN.js +0 -1
  223. package/dist/core-dist/assets/gruvbox-light-hard-CH1njM8p.js +0 -1
  224. package/dist/core-dist/assets/gruvbox-light-medium-DRw_LuNl.js +0 -1
  225. package/dist/core-dist/assets/gruvbox-light-soft-hJgmCMqR.js +0 -1
  226. package/dist/core-dist/assets/hack-CaT9iCJl.js +0 -1
  227. package/dist/core-dist/assets/haml-B8DHNrY2.js +0 -1
  228. package/dist/core-dist/assets/handlebars-BL8al0AC.js +0 -1
  229. package/dist/core-dist/assets/haskell-Df6bDoY_.js +0 -1
  230. package/dist/core-dist/assets/haxe-CzTSHFRz.js +0 -1
  231. package/dist/core-dist/assets/hcl-BWvSN4gD.js +0 -1
  232. package/dist/core-dist/assets/hjson-D5-asLiD.js +0 -1
  233. package/dist/core-dist/assets/hlsl-D3lLCCz7.js +0 -1
  234. package/dist/core-dist/assets/houston-DnULxvSX.js +0 -1
  235. package/dist/core-dist/assets/html-GMplVEZG.js +0 -1
  236. package/dist/core-dist/assets/html-derivative-BFtXZ54Q.js +0 -1
  237. package/dist/core-dist/assets/http-jrhK8wxY.js +0 -1
  238. package/dist/core-dist/assets/hurl-irOxFIW8.js +0 -1
  239. package/dist/core-dist/assets/hxml-Bvhsp5Yf.js +0 -1
  240. package/dist/core-dist/assets/hy-DFXneXwc.js +0 -1
  241. package/dist/core-dist/assets/icons-CThL5JLu.js +0 -1
  242. package/dist/core-dist/assets/imba-DGztddWO.js +0 -1
  243. package/dist/core-dist/assets/index-B7-ICZ0j.js +0 -1
  244. package/dist/core-dist/assets/index-BMkY85Cs.js +0 -58
  245. package/dist/core-dist/assets/index-BXF4gXVp.js +0 -1
  246. package/dist/core-dist/assets/index-Bgk4PJE4.js +0 -1
  247. package/dist/core-dist/assets/index-CI-PCTpD.css +0 -1
  248. package/dist/core-dist/assets/index-DVnhzasD.js +0 -1
  249. package/dist/core-dist/assets/infoDiagram-WHAUD3N6-CJkR0w30.js +0 -2
  250. package/dist/core-dist/assets/ini-BEwlwnbL.js +0 -1
  251. package/dist/core-dist/assets/init-Gi6I4Gst.js +0 -1
  252. package/dist/core-dist/assets/java-CylS5w8V.js +0 -1
  253. package/dist/core-dist/assets/javascript-wDzz0qaB.js +0 -1
  254. package/dist/core-dist/assets/jinja-4LBKfQ-Z.js +0 -1
  255. package/dist/core-dist/assets/jison-wvAkD_A8.js +0 -1
  256. package/dist/core-dist/assets/journeyDiagram-XKPGCS4Q-SAEhBpzZ.js +0 -139
  257. package/dist/core-dist/assets/json-Cp-IABpG.js +0 -1
  258. package/dist/core-dist/assets/json5-C9tS-k6U.js +0 -1
  259. package/dist/core-dist/assets/jsonc-Des-eS-w.js +0 -1
  260. package/dist/core-dist/assets/jsonl-DcaNXYhu.js +0 -1
  261. package/dist/core-dist/assets/jsonnet-DFQXde-d.js +0 -1
  262. package/dist/core-dist/assets/jssm-C2t-YnRu.js +0 -1
  263. package/dist/core-dist/assets/jsx-g9-lgVsj.js +0 -1
  264. package/dist/core-dist/assets/julia-CxzCAyBv.js +0 -1
  265. package/dist/core-dist/assets/kanagawa-dragon-CkXjmgJE.js +0 -1
  266. package/dist/core-dist/assets/kanagawa-lotus-CfQXZHmo.js +0 -1
  267. package/dist/core-dist/assets/kanagawa-wave-DWedfzmr.js +0 -1
  268. package/dist/core-dist/assets/kanban-definition-3W4ZIXB7-CTjwDgKD.js +0 -89
  269. package/dist/core-dist/assets/katex-DvXFAOB1.css +0 -1
  270. package/dist/core-dist/assets/kdl-DV7GczEv.js +0 -1
  271. package/dist/core-dist/assets/kotlin-BdnUsdx6.js +0 -1
  272. package/dist/core-dist/assets/kusto-DZf3V79B.js +0 -1
  273. package/dist/core-dist/assets/laserwave-DUszq2jm.js +0 -1
  274. package/dist/core-dist/assets/latex-B4uzh10-.js +0 -1
  275. package/dist/core-dist/assets/layout-BC4bIyCj.js +0 -1
  276. package/dist/core-dist/assets/lean-BZvkOJ9d.js +0 -1
  277. package/dist/core-dist/assets/less-B1dDrJ26.js +0 -1
  278. package/dist/core-dist/assets/light-plus-B7mTdjB0.js +0 -1
  279. package/dist/core-dist/assets/linear-aOQP6b5O.js +0 -1
  280. package/dist/core-dist/assets/liquid-DYVedYrR.js +0 -1
  281. package/dist/core-dist/assets/llvm-BtvRca6l.js +0 -1
  282. package/dist/core-dist/assets/log-2UxHyX5q.js +0 -1
  283. package/dist/core-dist/assets/logo-BtOb2qkB.js +0 -1
  284. package/dist/core-dist/assets/logs-BlD66J6V.js +0 -1
  285. package/dist/core-dist/assets/lua-BbnMAYS6.js +0 -1
  286. package/dist/core-dist/assets/luau-C-HG3fhB.js +0 -1
  287. package/dist/core-dist/assets/make-CHLpvVh8.js +0 -1
  288. package/dist/core-dist/assets/markdown-Cvjx9yec.js +0 -1
  289. package/dist/core-dist/assets/marko-DZsq8hO1.js +0 -1
  290. package/dist/core-dist/assets/material-theme-D5KoaKCx.js +0 -1
  291. package/dist/core-dist/assets/material-theme-darker-BfHTSMKl.js +0 -1
  292. package/dist/core-dist/assets/material-theme-lighter-B0m2ddpp.js +0 -1
  293. package/dist/core-dist/assets/material-theme-ocean-CyktbL80.js +0 -1
  294. package/dist/core-dist/assets/material-theme-palenight-Csfq5Kiy.js +0 -1
  295. package/dist/core-dist/assets/matlab-D7o27uSR.js +0 -1
  296. package/dist/core-dist/assets/mdc-DUICxH0z.js +0 -1
  297. package/dist/core-dist/assets/mdx-Cmh6b_Ma.js +0 -1
  298. package/dist/core-dist/assets/mermaid-VLURNSYL-Bk83Yp1q.js +0 -377
  299. package/dist/core-dist/assets/mermaid-mWjccvbQ.js +0 -1
  300. package/dist/core-dist/assets/mermaid.core-VvKZ2mCx.js +0 -191
  301. package/dist/core-dist/assets/min-BiqQDxvT.js +0 -1
  302. package/dist/core-dist/assets/min-dark-CafNBF8u.js +0 -1
  303. package/dist/core-dist/assets/min-light-CTRr51gU.js +0 -1
  304. package/dist/core-dist/assets/mindmap-definition-VGOIOE7T-DjjEGOvH.js +0 -68
  305. package/dist/core-dist/assets/mipsasm-CKIfxQSi.js +0 -1
  306. package/dist/core-dist/assets/mojo-B93PlW-d.js +0 -1
  307. package/dist/core-dist/assets/monokai-D4h5O-jR.js +0 -1
  308. package/dist/core-dist/assets/moonbit-Ba13S78F.js +0 -1
  309. package/dist/core-dist/assets/move-Bu9oaDYs.js +0 -1
  310. package/dist/core-dist/assets/narrat-DRg8JJMk.js +0 -1
  311. package/dist/core-dist/assets/nextflow-BrzmwbiE.js +0 -1
  312. package/dist/core-dist/assets/nginx-DknmC5AR.js +0 -1
  313. package/dist/core-dist/assets/night-owl-C39BiMTA.js +0 -1
  314. package/dist/core-dist/assets/nim-CVrawwO9.js +0 -1
  315. package/dist/core-dist/assets/nix-CwoSXNpI.js +0 -1
  316. package/dist/core-dist/assets/nord-Ddv68eIx.js +0 -1
  317. package/dist/core-dist/assets/nushell-C-sUppwS.js +0 -1
  318. package/dist/core-dist/assets/objective-c-DXmwc3jG.js +0 -1
  319. package/dist/core-dist/assets/objective-cpp-CLxacb5B.js +0 -1
  320. package/dist/core-dist/assets/ocaml-C0hk2d4L.js +0 -1
  321. package/dist/core-dist/assets/one-dark-pro-DVMEJ2y_.js +0 -1
  322. package/dist/core-dist/assets/one-light-PoHY5YXO.js +0 -1
  323. package/dist/core-dist/assets/openscad-C4EeE6gA.js +0 -1
  324. package/dist/core-dist/assets/ordinal-BENe2yWM.js +0 -1
  325. package/dist/core-dist/assets/pascal-D93ZcfNL.js +0 -1
  326. package/dist/core-dist/assets/perl-C0TMdlhV.js +0 -1
  327. package/dist/core-dist/assets/php-CDn_0X-4.js +0 -1
  328. package/dist/core-dist/assets/pieDiagram-ADFJNKIX-AUM01WmV.js +0 -30
  329. package/dist/core-dist/assets/pkl-u5AG7uiY.js +0 -1
  330. package/dist/core-dist/assets/plastic-3e1v2bzS.js +0 -1
  331. package/dist/core-dist/assets/plsql-ChMvpjG-.js +0 -1
  332. package/dist/core-dist/assets/po-BTJTHyun.js +0 -1
  333. package/dist/core-dist/assets/poimandres-CS3Unz2-.js +0 -1
  334. package/dist/core-dist/assets/polar-C0HS_06l.js +0 -1
  335. package/dist/core-dist/assets/postcss-CXtECtnM.js +0 -1
  336. package/dist/core-dist/assets/powerquery-CEu0bR-o.js +0 -1
  337. package/dist/core-dist/assets/powershell-Dpen1YoG.js +0 -1
  338. package/dist/core-dist/assets/prisma-Dd19v3D-.js +0 -1
  339. package/dist/core-dist/assets/prolog-CbFg5uaA.js +0 -1
  340. package/dist/core-dist/assets/proto-C7zT0LnQ.js +0 -1
  341. package/dist/core-dist/assets/pug-CGlum2m_.js +0 -1
  342. package/dist/core-dist/assets/puppet-BMWR74SV.js +0 -1
  343. package/dist/core-dist/assets/purescript-CklMAg4u.js +0 -1
  344. package/dist/core-dist/assets/python-B6aJPvgy.js +0 -1
  345. package/dist/core-dist/assets/qml-3beO22l8.js +0 -1
  346. package/dist/core-dist/assets/qmldir-C8lEn-DE.js +0 -1
  347. package/dist/core-dist/assets/qss-IeuSbFQv.js +0 -1
  348. package/dist/core-dist/assets/quadrantDiagram-AYHSOK5B-MpcGOIDU.js +0 -7
  349. package/dist/core-dist/assets/queries.store-DjOPk8vF.js +0 -1
  350. package/dist/core-dist/assets/r-Dspwwk_N.js +0 -1
  351. package/dist/core-dist/assets/racket-BqYA7rlc.js +0 -1
  352. package/dist/core-dist/assets/radix-ui-bzITMjAn.js +0 -51
  353. package/dist/core-dist/assets/raku-DXvB9xmW.js +0 -1
  354. package/dist/core-dist/assets/razor-C1TweQQi.js +0 -1
  355. package/dist/core-dist/assets/red-bN70gL4F.js +0 -1
  356. package/dist/core-dist/assets/reg-C-SQnVFl.js +0 -1
  357. package/dist/core-dist/assets/regexp-CDVJQ6XC.js +0 -1
  358. package/dist/core-dist/assets/rel-C3B-1QV4.js +0 -1
  359. package/dist/core-dist/assets/requirementDiagram-UZGBJVZJ-DTgvy-oh.js +0 -64
  360. package/dist/core-dist/assets/riscv-BM1_JUlF.js +0 -1
  361. package/dist/core-dist/assets/rose-pine-dawn-DHQR4-dF.js +0 -1
  362. package/dist/core-dist/assets/rose-pine-moon-D4_iv3hh.js +0 -1
  363. package/dist/core-dist/assets/rose-pine-qdsjHGoJ.js +0 -1
  364. package/dist/core-dist/assets/rosmsg-BJDFO7_C.js +0 -1
  365. package/dist/core-dist/assets/rst-B0xPkSld.js +0 -1
  366. package/dist/core-dist/assets/ruby-BvKwtOVI.js +0 -1
  367. package/dist/core-dist/assets/runner-tab-2NkPdwaD.js +0 -3
  368. package/dist/core-dist/assets/rust-B1yitclQ.js +0 -1
  369. package/dist/core-dist/assets/sankeyDiagram-TZEHDZUN-Coy7Jnu4.js +0 -10
  370. package/dist/core-dist/assets/sas-cz2c8ADy.js +0 -1
  371. package/dist/core-dist/assets/sass-Cj5Yp3dK.js +0 -1
  372. package/dist/core-dist/assets/scala-C151Ov-r.js +0 -1
  373. package/dist/core-dist/assets/schema-C9usm3AO.js +0 -1
  374. package/dist/core-dist/assets/scheme-C98Dy4si.js +0 -1
  375. package/dist/core-dist/assets/scroll-area-DuacQlkg.js +0 -1
  376. package/dist/core-dist/assets/scss-OYdSNvt2.js +0 -1
  377. package/dist/core-dist/assets/sdbl-DVxCFoDh.js +0 -1
  378. package/dist/core-dist/assets/sequenceDiagram-WL72ISMW-DWol0BxA.js +0 -145
  379. package/dist/core-dist/assets/shaderlab-Dg9Lc6iA.js +0 -1
  380. package/dist/core-dist/assets/shellscript-Yzrsuije.js +0 -1
  381. package/dist/core-dist/assets/shellsession-BADoaaVG.js +0 -1
  382. package/dist/core-dist/assets/slack-dark-BthQWCQV.js +0 -1
  383. package/dist/core-dist/assets/slack-ochin-DqwNpetd.js +0 -1
  384. package/dist/core-dist/assets/smalltalk-BERRCDM3.js +0 -1
  385. package/dist/core-dist/assets/snazzy-light-Bw305WKR.js +0 -1
  386. package/dist/core-dist/assets/solarized-dark-DXbdFlpD.js +0 -1
  387. package/dist/core-dist/assets/solarized-light-L9t79GZl.js +0 -1
  388. package/dist/core-dist/assets/solidity-rGO070M0.js +0 -1
  389. package/dist/core-dist/assets/soy-Brmx7dQM.js +0 -1
  390. package/dist/core-dist/assets/sparql-rVzFXLq3.js +0 -1
  391. package/dist/core-dist/assets/splunk-BtCnVYZw.js +0 -1
  392. package/dist/core-dist/assets/sql-BLtJtn59.js +0 -1
  393. package/dist/core-dist/assets/ssh-config-_ykCGR6B.js +0 -1
  394. package/dist/core-dist/assets/stata-BH5u7GGu.js +0 -1
  395. package/dist/core-dist/assets/stateDiagram-FKZM4ZOC-B4qm6ej0.js +0 -1
  396. package/dist/core-dist/assets/stateDiagram-v2-4FDKWEC3-BuP2exNa.js +0 -1
  397. package/dist/core-dist/assets/stylus-BEDo0Tqx.js +0 -1
  398. package/dist/core-dist/assets/svelte-zxCyuUbr.js +0 -1
  399. package/dist/core-dist/assets/swift-Dg5xB15N.js +0 -1
  400. package/dist/core-dist/assets/synthwave-84-CbfX1IO0.js +0 -1
  401. package/dist/core-dist/assets/system-verilog-CnnmHF94.js +0 -1
  402. package/dist/core-dist/assets/systemd-4A_iFExJ.js +0 -1
  403. package/dist/core-dist/assets/talonscript-CkByrt1z.js +0 -1
  404. package/dist/core-dist/assets/tanstack-Be3yNbjx.js +0 -9
  405. package/dist/core-dist/assets/tasl-QIJgUcNo.js +0 -1
  406. package/dist/core-dist/assets/tcl-dwOrl1Do.js +0 -1
  407. package/dist/core-dist/assets/templ-W15q3VgB.js +0 -1
  408. package/dist/core-dist/assets/terraform-BETggiCN.js +0 -1
  409. package/dist/core-dist/assets/tex-CvyZ59Mk.js +0 -1
  410. package/dist/core-dist/assets/timeline-definition-IT6M3QCI-DZ5Afuno.js +0 -61
  411. package/dist/core-dist/assets/tokyo-night-hegEt444.js +0 -1
  412. package/dist/core-dist/assets/toml-vGWfd6FD.js +0 -1
  413. package/dist/core-dist/assets/treemap-KMMF4GRG-Cxy-aurk.js +0 -128
  414. package/dist/core-dist/assets/ts-tags-zn1MmPIZ.js +0 -1
  415. package/dist/core-dist/assets/tsv-B_m7g4N7.js +0 -1
  416. package/dist/core-dist/assets/tsx-COt5Ahok.js +0 -1
  417. package/dist/core-dist/assets/turtle-BsS91CYL.js +0 -1
  418. package/dist/core-dist/assets/twig-CO9l9SDP.js +0 -1
  419. package/dist/core-dist/assets/typescript-BPQ3VLAy.js +0 -1
  420. package/dist/core-dist/assets/typespec-BGHnOYBU.js +0 -1
  421. package/dist/core-dist/assets/typst-DHCkPAjA.js +0 -1
  422. package/dist/core-dist/assets/v-BcVCzyr7.js +0 -1
  423. package/dist/core-dist/assets/vala-CsfeWuGM.js +0 -1
  424. package/dist/core-dist/assets/vb-D17OF-Vu.js +0 -1
  425. package/dist/core-dist/assets/verilog-BQ8w6xss.js +0 -1
  426. package/dist/core-dist/assets/vesper-DU1UobuO.js +0 -1
  427. package/dist/core-dist/assets/vhdl-CeAyd5Ju.js +0 -1
  428. package/dist/core-dist/assets/viml-CJc9bBzg.js +0 -1
  429. package/dist/core-dist/assets/vitesse-black-Bkuqu6BP.js +0 -1
  430. package/dist/core-dist/assets/vitesse-dark-D0r3Knsf.js +0 -1
  431. package/dist/core-dist/assets/vitesse-light-CVO1_9PV.js +0 -1
  432. package/dist/core-dist/assets/vue-DN_0RTcg.js +0 -1
  433. package/dist/core-dist/assets/vue-html-AaS7Mt5G.js +0 -1
  434. package/dist/core-dist/assets/vue-vine-CQOfvN7w.js +0 -1
  435. package/dist/core-dist/assets/vyper-CDx5xZoG.js +0 -1
  436. package/dist/core-dist/assets/wasm-CG6Dc4jp.js +0 -1
  437. package/dist/core-dist/assets/wasm-MzD3tlZU.js +0 -1
  438. package/dist/core-dist/assets/wenyan-BV7otONQ.js +0 -1
  439. package/dist/core-dist/assets/wgsl-Dx-B1_4e.js +0 -1
  440. package/dist/core-dist/assets/wikitext-BhOHFoWU.js +0 -1
  441. package/dist/core-dist/assets/wit-5i3qLPDT.js +0 -1
  442. package/dist/core-dist/assets/wolfram-lXgVvXCa.js +0 -1
  443. package/dist/core-dist/assets/xml-sdJ4AIDG.js +0 -1
  444. package/dist/core-dist/assets/xsl-CtQFsRM5.js +0 -1
  445. package/dist/core-dist/assets/xychartDiagram-PRI3JC2R-yhq_s0e5.js +0 -7
  446. package/dist/core-dist/assets/yaml-Buea-lGh.js +0 -1
  447. package/dist/core-dist/assets/zenscript-DVFEvuxE.js +0 -1
  448. 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 Fo=Object.defineProperty;var p=(a,e)=>()=>(a&&(e=a(a=0)),e);var Uo=(a,e)=>{for(var t in e)Fo(a,t,{get:e[t],enumerable:!0})};var Ye=p(()=>{"use strict"});var Qe=p(()=>{"use strict"});var Ge=p(()=>{"use strict"});var Q,Je=p(()=>{"use strict";Q={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 Xe=p(()=>{"use strict"});var Ze,_e=p(()=>{"use strict";Ze={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 et=p(()=>{"use strict"});var ce=p(()=>{"use strict";Ye();Qe();Ge();Je();Xe();_e();et()});import{z as ne}from"zod";var dt,ft=p(()=>{"use strict";dt=ne.object({tableName:ne.string("Table name is required"),data:ne.record(ne.string("Column name is required"),ne.any())})});var bt=p(()=>{"use strict"});import{z as X}from"zod";var yt,gt=p(()=>{"use strict";yt=X.object({tableName:X.string().min(1,"Table name is required"),records:X.array(X.record(X.string(),X.any())).min(1,"At least one record is required")})});import{z as Z}from"zod";var w,rr,pe,bs,ht,ee,z=p(()=>{"use strict";w=Z.object({db:Z.string("Database name is required")}),rr=["pg","mysql"],pe=Z.enum(rr,{message:"Invalid database type"}),bs=w.extend({dbType:pe}),ht=Z.object({dbType:pe}),ee=Z.object({tableName:Z.string("Table name is required")})});import{z as te}from"zod";var Tt,Et=p(()=>{"use strict";z();Tt=te.object({messages:te.array(te.object({role:te.enum(["user","assistant"]),content:te.string("Content is required")})),conversationId:te.string().optional(),db:w.shape.db})});var St=p(()=>{"use strict"});import{z as F}from"zod";var nr,sr,v,ir,lr,Ss,Le=p(()=>{"use strict";nr=["text","boolean","number","enum","json","date","array"],sr=F.enum(nr),v={text:"text",boolean:"boolean",number:"number",enum:"enum",json:"json",date:"date",array:"array"},ir=["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"],lr=F.enum(ir),Ss=F.object({columnName:F.string(),dataType:sr,dataTypeLabel:lr,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 Rt(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 Ct(a){if(!a)return b.text;let e=a.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}function wt(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 Nt(a,e){if(!a)return b.text;let t=a.toLowerCase().trim(),o=e?.toLowerCase().trim()||"";return t==="tinyint"&&o==="tinyint(1)"?b.boolean:t==="tinyint"?b.tinyint:t==="smallint"?b.smallint:t==="mediumint"?b.mediumint:t==="int"||t==="integer"?b.int:t==="bigint"?b.bigint:t==="decimal"||t==="numeric"?b.numeric:t==="float"||t==="real"?b.float:t==="double"?b.double:t==="bit"?b.bit:t==="boolean"||t==="bool"?b.boolean:t==="char"?b.char:t==="varchar"?b.varchar:t==="tinytext"?b.tinytext:t==="text"?b.text:t==="mediumtext"?b.mediumtext:t==="longtext"?b.longtext:t==="binary"?b.binary:t==="varbinary"?b.varbinary:t==="tinyblob"?b.tinyblob:t==="blob"?b.blob:t==="mediumblob"?b.mediumblob:t==="longblob"?b.longblob:t==="json"?b.json:t==="date"?b.date:t==="time"?b.time:t==="datetime"?b.datetime:t==="timestamp"?b.timestamp:t==="year"?b.year:t==="enum"?b.enum:t==="set"?b.set:b.text}var b,Dt=p(()=>{"use strict";Le();b={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 _}from"zod";var cr,At,mr,ur,_t,xt=p(()=>{"use strict";cr=["CASCADE","SET NULL","SET DEFAULT","RESTRICT","NO ACTION"],At=_.enum(cr),mr=_.object({columnName:_.string("Column name is required"),columnType:_.string("Column type is required"),defaultValue:_.string().optional(),isPrimaryKey:_.boolean().default(!1),isNullable:_.boolean().default(!1),isUnique:_.boolean().default(!1),isIdentity:_.boolean().default(!1),isArray:_.boolean().default(!1)}),ur=_.object({columnName:_.string("Column name is required"),referencedTable:_.string("Referenced table is required"),referencedColumn:_.string("Referenced column is required"),onUpdate:At.default("NO ACTION"),onDelete:At.default("NO ACTION")}),_t=_.object({tableName:_.string("Table name is required"),fields:_.array(mr).min(1,"At least one field is required"),foreignKeys:_.array(ur).optional()})});import{z as L}from"zod";var pr,xs,Pt,vt=p(()=>{"use strict";z();pr=L.object({name:L.string("Name is required"),size:L.string("Size is required"),owner:L.string("Owner is required"),encoding:L.string("Encoding is required")}),xs=L.object({databases:L.array(pr),dbType:pe}),Pt=L.object({version:L.string("Version is required"),database:L.string("Database is required"),user:L.string("User is required"),host:L.string("Host is required").nullable(),port:L.number("Port is required").nullable(),active_connections:L.coerce.number("Active connections is required"),max_connections:L.coerce.number("Max connections is required")})});var Lt=p(()=>{"use strict"});import{z as H}from"zod";var $t,de,$s,Os,Ot=p(()=>{"use strict";z();$t=w.extend({cascade:H.string().optional().transform(a=>a==="true")}),de=H.object({tableName:H.string("Table name is required"),columnName:H.string("Column name is required")}),$s=H.object({db:w.shape.db,tableName:de.shape.tableName,columnName:de.shape.columnName,cascade:H.boolean().optional()}),Os=H.object({message:H.string("Message is required"),tableName:H.string("Table name is required"),columnName:H.string("Column name is required"),deletedCount:H.number("Deleted count is required").default(0)})});import{z as ae}from"zod";var $e,qt=p(()=>{"use strict";$e=ae.object({tableName:ae.string("Table name is required"),primaryKeys:ae.array(ae.object({columnName:ae.string("Column name is required"),value:ae.any()})).min(1,"At least one primary key is required")})});import{z as dr}from"zod";var It,Mt=p(()=>{"use strict";z();It=w.extend({cascade:dr.string().optional().transform(a=>a==="true")})});import{z as kt}from"zod";var Ft,Ut=p(()=>{"use strict";Ft=kt.object({query:kt.string("Query is required")})});import{z as fr}from"zod";var br,Ht,jt=p(()=>{"use strict";z();br=["csv","xlsx","json"],Ht=w.extend({format:fr.enum(br,{message:"Invalid format. Supported formats: csv, xlsx, json"})})});var Bt=p(()=>{"use strict"});import{z as C}from"zod";var Ys,fe,Qs,yr,Gs,Kt,Wt=p(()=>{"use strict";z();Ys=C.object({columnName:C.string(),operator:C.string(),value:C.string()}),fe=["asc","desc"],Qs=C.object({columnName:C.string(),direction:C.enum(fe)}),yr=C.object({limit:C.number(),total:C.number(),hasNextPage:C.boolean(),hasPreviousPage:C.boolean(),nextCursor:C.string().nullable(),prevCursor:C.string().nullable()}),Gs=C.object({data:C.array(C.record(C.string(),C.unknown())),meta:yr}),Kt=C.object({db:w.shape.db,cursor:C.string().optional(),limit:C.string().optional().default("50").transform(Number),direction:C.enum(fe).optional().default(fe[0]),sort:C.string().optional().transform(a=>{if(!a)return"";try{let e=JSON.parse(a);return Array.isArray(e)?e:a}catch{return a}}),order:C.enum(fe).optional(),filters:C.string().optional().transform(a=>{if(!a)return[];try{return JSON.parse(a)}catch{return[]}})})});import{z as Oe}from"zod";var Zs,Vt=p(()=>{"use strict";Zs=Oe.object({tableName:Oe.string("Table name is required"),rowCount:Oe.coerce.number("Row count is required")})});import{z as zt}from"zod";var ai,Yt=p(()=>{"use strict";ai=zt.object({schema:zt.string()})});import{z as B}from"zod";var Qt,Gt=p(()=>{"use strict";Qt=B.object({tableName:B.string("Table name is required"),primaryKey:B.string("Primary key is required").default("id"),updates:B.array(B.object({rowData:B.record(B.string("Column name is required"),B.any()),columnName:B.string("Column name is required"),value:B.any()},{message:"Each update must have a row data, column name, and value."})).min(1,"At least one update is required")})});var V=p(()=>{"use strict";ft();bt();gt();Et();St();Dt();Le();xt();z();vt();Lt();Ot();qt();Mt();Ut();jt();Bt();Wt();Vt();Yt();Gt()});import{HTTPException as gr}from"hono/http-exception";import{DatabaseError as hr}from"pg";import{ZodError as Tr}from"zod";function Jt(a,e){if(a instanceof gr)return e.json({error:a.message??"Internal server error"},a.status);if(a instanceof Tr){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 hr&&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 Xt,Zt=p(()=>{"use strict";Xt=(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 Er}from"pg";var be,Sr,qe,ea=p(()=>{"use strict";be=null,Sr=()=>{if(!be){if(!process.env.DATABASE_URL)throw new Error("DATABASE_URL is not set. Please provide a database connection string.");try{be=new Er({connectionString:process.env.DATABASE_URL}),be.on("error",a=>{})}catch(a){throw a}}return be},qe=new Proxy({},{get(a,e){try{return Sr()[e]}catch(t){throw t}}})});import{createPool as Rr}from"mysql2/promise";import{Pool as ta}from"pg";var Ie,Me,T,S,ye,R=p(()=>{"use strict";Ie=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 ta(o);r.on("error",n=>{}),this.pgPools.set(t,r)}return this.pgPools.get(t)??new ta({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=Rr({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())]}},Me=new Ie,T=a=>Me.getPgPool(a),S=a=>Me.getMysqlPool(a),ye=()=>Me.getDbType()});import{HTTPException as Cr}from"hono/http-exception";async function ge({tableName:a,db:e}){let t=T(e),o=`
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:["pgadmin alternative","database client","database gui","database browser","sql editor","postgresql client","mysql client","table editor","ai sql","er diagram"],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_GITHUB_NEW_ISSUE_LINK:"https://github.com/husamql3/db-studio/issues/new/choose",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,Ir,Mr,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"},Ir=["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"],Mr=F.enum(Ir),mi=F.object({columnName:F.string(),dataType:Or,dataTypeLabel:Mr,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 It(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 Mt(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 Mi,Ee,ki,Wr,Ui,oa,ra=d(()=>{"use strict";B();Mi=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 Fo=Object.defineProperty;var p=(a,e)=>()=>(a&&(e=a(a=0)),e);var Uo=(a,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:r}=await t.query(o,[a]);if(!r||r.length===0)throw new Cr(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:Rt(n.dataType),dataTypeLabel:Ct(n.dataType),isNullable:n.isNullable,columnDefault:n.columnDefault,isPrimaryKey:n.isPrimaryKey,isForeignKey:n.isForeignKey,referencedTable:n.referencedTable,referencedColumn:n.referencedColumn,enumValues:i}})}var ke=p(()=>{"use strict";V();R()});async function wr(a){let e=T(a),t=`
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:It(n.dataType),dataTypeLabel:Mt(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:o}=await e.query(t);return o.map(r=>r.table_name)}async function Nr(a){let e=await qe.connect();try{return(await e.query(`
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
- `,[a])).rows[0]?.description||void 0}finally{e.release()}}async function Dr(a){let e=await qe.connect();try{return(await e.query(`SELECT * FROM "${a}" LIMIT 3`)).rows}catch{return[]}finally{e.release()}}function Ar(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 _r(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 xr(a,e={}){let{includeSampleData:t=!1,includeDescriptions:o=!0}=e;try{let n=(await wr(a)).map(async s=>{let[m,c,f]=await Promise.all([ge({tableName:s,db:a}),o?Nr(s):Promise.resolve(void 0),t?Dr(s):Promise.resolve([])]),u={name:s,columns:m.map(Ar)};return c&&(u.description=c),f.length>0&&(u.sampleData=f.map(y=>Object.fromEntries(Object.entries(y).map(([d,g])=>[d,String(g)])))),u}),i=await Promise.all(n),l=_r(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 aa(a){return xr(a,{includeSampleData:!0,includeDescriptions:!0})}var oa=p(()=>{"use strict";ea();R();ke()});function ra(a){return`You are a database assistant for db-studio. Your responses must be CONCISE and FOCUSED.
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
@@ -74,7 +74,7 @@ var Fo=Object.defineProperty;var p=(a,e)=>()=>(a&&(e=a(a=0)),e);var Uo=(a,e)=>{f
74
74
  6. No preamble, no apologies, get straight to the answer
75
75
 
76
76
  **Database Context:**
77
- ${Pr(a)}
77
+ ${nn(a)}
78
78
 
79
79
  **Guidelines:**
80
80
  1. Always generate syntactically correct SQL for the database type (${a.dbType})
@@ -112,7 +112,7 @@ 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 Pr(a){let e=`Database Type: ${a.dbType}
115
+ - Their most frequently ordered products"`}function nn(a){let e=`Database Type: ${a.dbType}
116
116
 
117
117
  `;e+=`**Tables and Columns:**
118
118
  `;for(let t of a.tables){e+=`
@@ -126,7 +126,7 @@ This will return the 5 customers with the highest total order value. You might a
126
126
  `)}if(a.relationships&&a.relationships.length>0){e+=`
127
127
  **Relationships:**
128
128
  `;for(let t of a.relationships)e+=` - ${t.fromTable}.${t.fromColumn} -> ${t.toTable}.${t.toColumn}
129
- `}return e}var na=p(()=>{"use strict"});import{zValidator as vr}from"@hono/zod-validator";import{Hono as Lr}from"hono";var sa,ia=p(()=>{"use strict";ce();V();oa();na();sa=new Lr().basePath("/chat").post("/",vr("json",Tt),async a=>{let{messages:e,conversationId:t,db:o}=a.req.valid("json"),r=await aa(o),n=ra(r),i={messages:e,conversationId:t,systemPrompt:n},l=await fetch(`${Q.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 he(){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 Fe=p(()=>{"use strict"});import{HTTPException as Ue}from"hono/http-exception";async function la(){let a=T(),e=`
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:t}=await a.query(e);if(!t[0])throw new Ue(500,{message:"No databases returned from database"});return t}async function ca(){let a=T(),e="SELECT current_database() as database;",{rows:t}=await a.query(e);if(!t[0])throw new Ue(500,{message:"No current database returned from database"});return t[0]}async function ma(){let a=T(),e=`
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,7 +144,7 @@ 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:t}=await a.query(e);if(!t[0])throw new Ue(500,{message:"No connection information returned from database"});let o=Pt.parse(t[0]),r=he();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 ua=p(()=>{"use strict";V();R();Fe()});import{HTTPException as He}from"hono/http-exception";async function pa(){let a=S(),[e]=await a.execute(`
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
148
  SELECT
149
149
  s.SCHEMA_NAME AS name,
150
150
  CONCAT(
@@ -161,7 +161,7 @@ This will return the 5 customers with the highest total order value. You might a
161
161
  ON t.TABLE_SCHEMA = s.SCHEMA_NAME
162
162
  GROUP BY s.SCHEMA_NAME, s.DEFAULT_CHARACTER_SET_NAME
163
163
  ORDER BY s.SCHEMA_NAME
164
- `);if(!e[0])throw new He(500,{message:"No databases returned from server"});return e}async function da(){let a=S(),[e]=await a.execute("SELECT DATABASE() AS db");if(!e[0])throw new He(500,{message:"No current database returned from server"});return e[0]}async function fa(){let a=S(),[e]=await a.execute(`
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
165
  SELECT
166
166
  VERSION() AS version,
167
167
  DATABASE() AS database_name,
@@ -169,15 +169,15 @@ This will return the 5 customers with the highest total order value. You might a
169
169
  @@hostname AS host,
170
170
  @@port AS port,
171
171
  @@max_connections AS max_connections
172
- `),[t]=await a.execute("SELECT COUNT(*) AS cnt FROM information_schema.PROCESSLIST");if(!e[0])throw new He(500,{message:"No connection information returned from server"});let o=e[0],r=Number(t[0]?.cnt??0),n=he();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 ba=p(()=>{"use strict";R();Fe()});import{Hono as $r}from"hono";var ya,ga=p(()=>{"use strict";ua();ba();R();ya=new $r().basePath("/databases").get("/",async a=>{let e=ye(),t=e==="mysql"?await pa():await la();return a.json({data:{databases:t,dbType:e}},200)}).get("/current",async a=>{let e=ye(),t=e==="mysql"?await da():await ca();return a.json({data:{db:t.db,dbType:e}},200)}).get("/connection",async a=>{let t=ye()==="mysql"?await fa():await ma();return a.json({data:t},200)})});import{HTTPException as Or}from"hono/http-exception";var ha,Ta=p(()=>{"use strict";R();ha=async({query:a,db:e})=>{let t=S(e);if(!a||!a.trim())throw new Or(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(f=>f.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 qr}from"hono/http-exception";var Ea,Sa=p(()=>{"use strict";R();Ea=async({query:a,db:e})=>{let t=T(e);if(!a||!a.trim())throw new qr(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 Ra}from"@hono/zod-validator";import{Hono as Ir}from"hono";var Ca,wa=p(()=>{"use strict";V();Ta();Sa();Ca=new Ir().basePath("/query").post("/",Ra("query",w),Ra("json",Ft),async a=>{let{query:e}=a.req.valid("json"),{db:t}=a.req.valid("query"),r=a.get("dbType")==="mysql"?await ha({query:e,db:t}):await Ea({query:e,db:t});return a.json({data:r},200)})});import{HTTPException as Mr}from"hono/http-exception";async function Na({db:a,params:e}){let{tableName:t,data:o}=e,r=T(a),n=Object.keys(o),i=Object.values(o),l=n.map((f,u)=>`$${u+1}`).join(", "),s=n.map(f=>`"${f}"`).join(", "),m=`
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 Ia,Ma=d(()=>{"use strict";J();va();qa();Ia=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
173
  INSERT INTO "${t}" (${s})
174
174
  VALUES (${l})
175
175
  RETURNING *
176
- `,c=await r.query(m,i);if(c.rowCount===0)throw new Mr(500,{message:`Failed to insert record into "${t}"`});return{insertedCount:c.rowCount??0}}var Da=p(()=>{"use strict";R()});import{HTTPException as Te}from"hono/http-exception";var Aa,_a=p(()=>{"use strict";R();Aa=async({tableName:a,records:e,db:t})=>{if(!e||e.length===0)throw new Te(400,{message:"At least one record is required"});let r=await T(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 f=e[c],u=n.map(g=>f[g]),y=n.map((g,h)=>`$${h+1}`).join(", "),d=`
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
177
  INSERT INTO "${a}" (${i})
178
- VALUES (${y})
178
+ VALUES (${b})
179
179
  RETURNING *
180
- `;try{await r.query(d,u),l++}catch(g){throw new Te(500,{message:`Failed: ${g instanceof Error?g.message:String(g)}`})}}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 Te?n:new Te(500,{message:`Failed to bulk insert records into "${a}"`})}finally{r.release()}}});import{HTTPException as oe}from"hono/http-exception";async function je(a,e){return(await T(e).query(`
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(`
181
181
  SELECT
182
182
  tc.constraint_name,
183
183
  tc.table_name as referencing_table,
@@ -193,25 +193,25 @@ This will return the 5 customers with the highest total order value. You might a
193
193
  AND ccu.table_schema = tc.table_schema
194
194
  WHERE tc.constraint_type = 'FOREIGN KEY'
195
195
  AND ccu.table_name = $1
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 kr(a,e,t){let o=await je(a,t);if(o.length===0)return[];let r=[],n=T(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(g=>g.columnName===c.referencedColumn))continue;let u=l.map((g,h)=>`$${h+1}`).join(", "),y=`
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
197
  SELECT * FROM "${c.referencingTable}"
198
198
  WHERE "${c.referencingColumn}" IN (${u})
199
199
  LIMIT 100
200
- `,d=await n.query(y,l);d.rows.length>0&&r.push({tableName:c.referencingTable,columnName:c.referencingColumn,constraintName:c.constraintName,records:d.rows})}return r}async function xa({tableName:a,primaryKeys:e,db:t}){let o=T(t),r=e[0]?.columnName;if(!r)throw new oe(400,{message:"Primary key column name is required"});let n=e.map(s=>s.value),i=n.map((s,m)=>`$${m+1}`).join(", "),l=`
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
201
  DELETE FROM "${a}"
202
202
  WHERE "${r}" IN (${i})
203
203
  RETURNING *
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 kr(a,e,t)};throw s instanceof oe?s:new oe(500,{message:`Failed to delete records from "${a}"`})}}async function Pa({tableName:a,primaryKeys:e,db:t}){let o=T(t),r=e[0]?.columnName;if(!r)throw new oe(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(d,g,h)=>{let E=await je(d,t);for(let M of E){let k=h.map((q,W)=>`$${W+1}`).join(", "),j=`
205
- SELECT "${M.referencedColumn}" FROM "${d}"
206
- WHERE "${g}" IN (${k})
207
- `,A=(await o.query(j,h)).rows.map(({row:q})=>q[M.referencedColumn]);A.length>0&&await m(M.referencingTable,M.referencingColumn,A)}let D=h.map((M,k)=>`$${k+1}`).join(", "),x=`
208
- DELETE FROM "${d}"
209
- WHERE "${g}" IN (${D})
210
- `,U=await o.query(x,h);l+=U.rowCount??0,s.add(d)};for(let d of i)s.has(d.referencingTable)||await m(d.referencingTable,d.referencingColumn,n);let c=n.map((d,g)=>`$${g+1}`).join(", "),f=`
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 M of R){let k=T.map((O,Q)=>`$${Q+1}`).join(", "),K=`
205
+ SELECT "${M.referencedColumn}" FROM "${f}"
206
+ WHERE "${h}" IN (${k})
207
+ `,_=(await o.query(K,T)).rows.map(({row:O})=>O[M.referencedColumn]);_.length>0&&await m(M.referencingTable,M.referencingColumn,_)}let D=T.map((M,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
211
  DELETE FROM "${a}"
212
212
  WHERE "${r}" IN (${c})
213
213
  RETURNING *
214
- `,u=await o.query(f,n);return await o.query("COMMIT"),{deletedCount:(u.rowCount??0)+l}}catch(i){throw await o.query("ROLLBACK"),i instanceof oe?i:new oe(500,{message:`Failed to force delete records from "${a}"`})}}var va=p(()=>{"use strict";R()});import{HTTPException as Fr}from"hono/http-exception";function Ur(a){let e=a.match(/^(?:enum|set)\((.+)\)$/i);return e?.[1]?e[1].split(",").map(t=>t.trim().replace(/^'|'$/g,"")):null}async function Y({tableName:a,db:e}){let t=S(e),o=`
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
215
  SELECT
216
216
  c.COLUMN_NAME AS columnName,
217
217
  c.DATA_TYPE AS dataType,
@@ -231,13 +231,13 @@ This will return the 5 customers with the highest total order value. You might a
231
231
  WHERE c.TABLE_SCHEMA = DATABASE()
232
232
  AND c.TABLE_NAME = ?
233
233
  ORDER BY c.ORDINAL_POSITION
234
- `,[r]=await t.execute(o,[a]);if(!r||r.length===0)throw new Fr(404,{message:`Table "${a}" does not exist`});return r.map(n=>{let i=n.dataType,l=n.columnType,m=i==="enum"||i==="set"?Ur(l):null;return{columnName:n.columnName,dataType:wt(i,l),dataTypeLabel:Nt(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 se=p(()=>{"use strict";V();R()});import{HTTPException as Hr}from"hono/http-exception";async function La({db:a,params:e}){let{tableName:t,data:o}=e,r=S(a),n=await Y({tableName:t,db:a}),i=new Set(n.filter(y=>y.dataTypeLabel==="boolean").map(y=>y.columnName)),l=Object.keys(o),s=Object.values(o).map((y,d)=>{let g=l[d];return i.has(g)&&typeof y=="string"?y==="true"?1:0:y}),m=l.map(()=>"?").join(", "),c=l.map(y=>`\`${y}\``).join(", "),f=`
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
235
  INSERT INTO \`${t}\` (${c})
236
236
  VALUES (${m})
237
- `,[u]=await r.execute(f,s);if(u.affectedRows===0)throw new Hr(500,{message:`Failed to insert record into "${t}"`});return{insertedCount:u.affectedRows}}var $a=p(()=>{"use strict";R();se()});import{HTTPException as Ee}from"hono/http-exception";var Oa,qa=p(()=>{"use strict";R();se();Oa=async({tableName:a,records:e,db:t})=>{if(!e||e.length===0)throw new Ee(400,{message:"At least one record is required"});let r=await S(t).getConnection();try{let n=Object.keys(e[0]),i=n.map(m=>`\`${m}\``).join(", "),l=await Y({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],f=n.map(d=>{let g=c[d];return s.has(d)&&typeof g=="string"?g==="true"?1:0:g}),u=n.map(()=>"?").join(", "),y=`
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
238
  INSERT INTO \`${a}\` (${i})
239
239
  VALUES (${u})
240
- `;try{await r.execute(y,f)}catch(d){throw new Ee(500,{message:`Failed to insert record ${m+1}: ${d instanceof Error?d.message:String(d)}`})}}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 Ee?n:new Ee(500,{message:`Failed to bulk insert records into "${a}"`})}finally{r.release()}}});import{HTTPException as re}from"hono/http-exception";async function Be(a,e){let t=S(e),[o]=await t.execute(`SELECT
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
241
  kcu.CONSTRAINT_NAME AS constraint_name,
242
242
  kcu.TABLE_NAME AS referencing_table,
243
243
  kcu.COLUMN_NAME AS referencing_column,
@@ -250,34 +250,54 @@ This will return the 5 customers with the highest total order value. You might a
250
250
  AND kcu.TABLE_NAME = tc.TABLE_NAME
251
251
  WHERE tc.CONSTRAINT_TYPE = 'FOREIGN KEY'
252
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 Br(a,e,t){let o=await Be(a,t);if(o.length===0)return[];let r=[],n=S(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(d=>d.columnName===c.referencedColumn))continue;let u=i.map(()=>"?").join(", "),[y]=await n.execute(`SELECT * FROM \`${c.referencingTable}\`
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
254
  WHERE \`${c.referencingColumn}\` IN (${u})
255
- LIMIT 100`,i);y.length>0&&r.push({tableName:c.referencingTable,columnName:c.referencingColumn,constraintName:c.constraintName,records:y})}return r}async function Ia({tableName:a,primaryKeys:e,db:t}){let o=S(t),r=e[0]?.columnName;if(!r)throw new re(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===jr)return{deletedCount:0,fkViolation:!0,relatedRecords:await Br(a,e,t)};throw s instanceof re?s:new re(500,{message:`Failed to delete records from "${a}"`})}finally{l.release()}}async function Ma({tableName:a,primaryKeys:e,db:t}){let o=S(t),r=e[0]?.columnName;if(!r)throw new re(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 Be(a,t),s=0,m=new Set,c=new Set,f=async(d,g,h,E)=>{let D=`${d}.${g}`;if(E.has(D))return;E.add(D);let x=await Be(d,t);for(let k of x){let j=h.map(()=>"?").join(", "),[O]=await i.execute(`SELECT \`${k.referencedColumn}\` FROM \`${d}\`
256
- WHERE \`${g}\` IN (${j})`,h),A=O.map(q=>q[k.referencedColumn]);A.length>0&&await f(k.referencingTable,k.referencingColumn,A,E)}let U=h.map(()=>"?").join(", "),[M]=await i.execute(`DELETE FROM \`${d}\` WHERE \`${g}\` IN (${U})`,h);s+=M.affectedRows,m.add(d)};for(let d of l)m.has(d.referencingTable)||await f(d.referencingTable,d.referencingColumn,n,c);let u=n.map(()=>"?").join(", "),[y]=await i.execute(`DELETE FROM \`${a}\` WHERE \`${r}\` IN (${u})`,n);return await i.execute("SET FOREIGN_KEY_CHECKS = 1"),await i.commit(),{deletedCount:y.affectedRows+s}}catch(l){throw await i.execute("SET FOREIGN_KEY_CHECKS = 1").catch(()=>{}),await i.rollback(),l instanceof re?l:new re(500,{message:`Failed to force delete records from "${a}"`})}finally{i.release()}}var jr,ka=p(()=>{"use strict";R();jr=1451});import{HTTPException as Se}from"hono/http-exception";async function Fa({params:a,db:e}){let{tableName:t,updates:o,primaryKey:r}=a,n=S(e),i=await Y({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 f=c.rowData[r];if(f==null)throw new Se(400,{message:`Primary key "${r}" not found in row data.`});s.has(f)||s.set(f,[]),s.get(f)?.push({columnName:c.columnName,value:c.value,rowData:c.rowData})}let m=await n.getConnection();await m.beginTransaction();try{let c=0;for(let[f,u]of s.entries()){let y=u.map(E=>`\`${E.columnName}\` = ?`),d=u.map(E=>E.value!==null&&typeof E.value=="object"?JSON.stringify(E.value):l.has(E.columnName)&&typeof E.value=="string"?E.value==="true"?1:0:E.value);d.push(f);let g=`
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(", "),[M]=await i.execute(`DELETE FROM \`${f}\` WHERE \`${h}\` IN (${H})`,T);s+=M.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
257
  UPDATE \`${t}\`
258
- SET ${y.join(", ")}
258
+ SET ${b.join(", ")}
259
259
  WHERE \`${r}\` = ?
260
- `,[h]=await m.execute(g,d);if(h.affectedRows===0)throw new Se(404,{message:`Record with ${r} = ${f} not found in table "${t}"`});c+=h.affectedRows}return await m.commit(),{updatedCount:c}}catch(c){throw await m.rollback(),c instanceof Se?c:new Se(500,{message:`Failed to update records in "${t}"`})}finally{m.release()}}var Ua=p(()=>{"use strict";R();se()});import{HTTPException as Re}from"hono/http-exception";async function Ha({params:a,db:e}){let{tableName:t,updates:o,primaryKey:r}=a,n=T(e),i=new Map;for(let l of o){let s=l.rowData[r];if(s==null)throw new Re(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((d,g)=>`"${d.columnName}" = $${g+1}`),f=m.map(d=>d.value!==null&&typeof d.value=="object"?JSON.stringify(d.value):d.value);f.push(s);let u=`
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
261
  UPDATE "${t}"
262
262
  SET ${c.join(", ")}
263
- WHERE "${r}" = $${f.length}
263
+ WHERE "${r}" = $${p.length}
264
264
  RETURNING *
265
- `,y=await n.query(u,f);if(y.rowCount===0)throw new Re(404,{message:`Record with ${r} = ${s} not found in table "${t}"`});l+=y.rowCount??0}return await n.query("COMMIT"),{updatedCount:l}}catch(l){throw await n.query("ROLLBACK"),l instanceof Re?l:new Re(500,{message:`Failed to update records in "${t}"`})}}var ja=p(()=>{"use strict";R()});import{zValidator as K}from"@hono/zod-validator";import{Hono as Kr}from"hono";var Ba,Ka=p(()=>{"use strict";V();Da();_a();va();$a();qa();ka();Ua();ja();Ba=new Kr().basePath("/records").post("/",K("query",w),K("json",dt),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 La({db:e,params:{tableName:t,data:o}}):await Na({db:e,params:{tableName:t,data:o}});return a.json({data:`Record inserted into "${t}" with ${n} rows inserted`},200)}).patch("/",K("query",w),K("json",Qt),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 Fa({params:{tableName:t,primaryKey:o,updates:r},db:e}):await Ha({params:{tableName:t,primaryKey:o,updates:r},db:e});return a.json({data:`Updated ${i} records in "${t}"`},200)}).delete("/",K("query",w),K("json",$e),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 Ia({tableName:t,primaryKeys:o,db:e}):await xa({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",K("query",w),K("json",$e),async a=>{let{db:e}=a.req.valid("query"),{tableName:t,primaryKeys:o}=a.req.valid("json"),n=a.get("dbType")==="mysql"?await Ma({tableName:t,primaryKeys:o,db:e}):await Pa({tableName:t,primaryKeys:o,db:e});return a.json({data:n},200)}).post("/bulk",K("query",w),K("json",yt),async a=>{let{db:e}=a.req.valid("query"),{tableName:t,records:o}=a.req.valid("json"),n=a.get("dbType")==="mysql"?await Oa({tableName:t,records:o,db:e}):await Aa({tableName:t,records:o,db:e});return a.json({data:n},200)})});async function Wa({tableData:a,db:e}){let{tableName:t,fields:o,foreignKeys:r}=a,n=T(e),i=o.map(c=>{let f=`"${c.columnName}" ${c.columnType}`;return c.isArray&&(f+="[]"),c.isPrimaryKey&&(f+=" PRIMARY KEY"),c.isUnique&&!c.isPrimaryKey&&(f+=" UNIQUE"),c.isNullable||(f+=" NOT NULL"),c.isIdentity&&(f+=" GENERATED ALWAYS AS IDENTITY"),c.defaultValue&&!c.isIdentity&&(f+=` DEFAULT ${c.defaultValue}`),f}),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=`
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=`
266
286
  CREATE TABLE "${t}" (
267
287
  ${s.join(`,
268
288
  `)}
269
289
  );
270
- `;await n.query(m)}var Va=p(()=>{"use strict";R()});import{HTTPException as za}from"hono/http-exception";async function Ya(a){let{tableName:e,columnName:t,cascade:o,db:r}=a,n=T(r),i=`
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=`
271
291
  SELECT EXISTS (
272
292
  SELECT 1 FROM information_schema.tables
273
293
  WHERE table_name = $1 AND table_schema = 'public'
274
294
  ) as exists;
275
- `,{rows:l}=await n.query(i,[e]);if(!l[0]?.exists)throw new za(404,{message:`Table "${e}" does not exist`});let s=`
295
+ `,{rows:l}=await n.query(i,[e]);if(!l[0]?.exists)throw new po(404,{message:`Table "${e}" does not exist`});let s=`
276
296
  SELECT EXISTS (
277
297
  SELECT 1 FROM information_schema.columns
278
298
  WHERE table_name = $1 AND column_name = $2 AND table_schema = 'public'
279
299
  ) as exists;
280
- `,{rows:m}=await n.query(s,[e,t]);if(!m[0]?.exists)throw new za(404,{message:`Column "${t}" does not exist in table "${e}"`});let f=`ALTER TABLE "${e}" DROP COLUMN "${t}" ${o?"CASCADE":"RESTRICT"}`,{rowCount:u}=await n.query(f);return{deletedCount:u??0}}var Qa=p(()=>{"use strict";R()});import{HTTPException as Ke}from"hono/http-exception";async function Wr(a,e){return(await T(e).query(`
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(`
281
301
  SELECT
282
302
  tc.constraint_name,
283
303
  tc.table_name as referencing_table,
@@ -293,24 +313,33 @@ This will return the 5 customers with the highest total order value. You might a
293
313
  AND ccu.table_schema = tc.table_schema
294
314
  WHERE tc.constraint_type = 'FOREIGN KEY'
295
315
  AND ccu.table_name = $1
296
- `,[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 Ga(a,e){let t=await Wr(a,e);if(t.length===0)return[];let o=[],r=T(e);for(let n of t){let i=`
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=`
297
317
  SELECT * FROM "${n.referencingTable}"
298
318
  LIMIT 100
299
- `,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 Vr(a,e){let o=await T(e).query(`SELECT COUNT(*) as count FROM "${a}"`);return Number.parseInt(o.rows[0]?.count??"0",10)}async function Ja(a){let{tableName:e,db:t,cascade:o}=a,r=T(t),n=`
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=`
300
320
  SELECT EXISTS (
301
321
  SELECT 1 FROM information_schema.tables
302
322
  WHERE table_name = $1 AND table_schema = 'public'
303
323
  ) as exists;
304
- `,{rows:i}=await r.query(n,[e]);if(!i[0]?.exists)throw new Ke(404,{message:`Table "${e}" does not exist`});let l=await Vr(e,t);if(!o){let s=await Ga(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 Ga(e,t)};throw s instanceof Ke?s:new Ke(500,{message:`Failed to delete table "${e}"`})}}var Xa=p(()=>{"use strict";R()});import{HTTPException as zr}from"hono/http-exception";async function Za({tableName:a,db:e}){let t=T(e),{rows:o}=await t.query(`SELECT * FROM "${a}"`);if(!o||o.length===0)throw new zr(404,{message:`Table "${a}" does not exist or has no data`});return{cols:Object.keys(o[0]),rows:o}}var eo=p(()=>{"use strict";R()});function Yr(a,e){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 Qr(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()}async function to({tableData:a,db:e}){let{tableName:t,fields:o,foreignKeys:r}=a,n=S(e),i=o.map(u=>{let y=Qr(u.columnType,u.isArray??!1),d=`\`${u.columnName}\` ${y}`;if(!u.isNullable&&!u.isPrimaryKey&&(d+=" NOT NULL"),u.defaultValue&&!y.includes("AUTO_INCREMENT")){let g=Yr(u.defaultValue,y);g!==null&&(d+=` DEFAULT ${g}`)}return u.isIdentity&&!y.includes("AUTO_INCREMENT")&&(d+=" AUTO_INCREMENT"),d}),l=o.filter(u=>u.isPrimaryKey),s=[];if(l.length>0){let u=l.map(y=>`\`${y.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],f=`
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=`
305
334
  CREATE TABLE \`${t}\` (
306
335
  ${c.join(`,
307
336
  `)}
308
337
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
309
- `;await n.execute(f)}var ao=p(()=>{"use strict";R()});import{HTTPException as oo}from"hono/http-exception";async function ro(a){let{tableName:e,columnName:t,db:o}=a,r=S(o),[n]=await r.execute(`SELECT COUNT(*) as cnt
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
310
339
  FROM information_schema.TABLES
311
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(n[0]?.cnt??0)>0))throw new oo(404,{message:`Table "${e}" does not exist`});let[l]=await r.execute(`SELECT COUNT(*) as cnt
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
312
341
  FROM information_schema.COLUMNS
313
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,t]);if(!(Number(l[0]?.cnt??0)>0))throw new oo(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 no=p(()=>{"use strict";R()});import{HTTPException as We}from"hono/http-exception";async function Xr(a,e){let t=S(e),[o]=await t.execute(`SELECT
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
314
343
  kcu.CONSTRAINT_NAME AS constraint_name,
315
344
  kcu.TABLE_NAME AS referencing_table,
316
345
  kcu.COLUMN_NAME AS referencing_column,
@@ -323,33 +352,49 @@ This will return the 5 customers with the highest total order value. You might a
323
352
  AND kcu.TABLE_NAME = tc.TABLE_NAME
324
353
  WHERE tc.CONSTRAINT_TYPE = 'FOREIGN KEY'
325
354
  AND kcu.TABLE_SCHEMA = DATABASE()
326
- 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 so(a,e){let t=await Xr(a,e);if(t.length===0)return[];let o=[],r=S(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 Zr(a,e){let t=S(e),[o]=await t.execute(`SELECT COUNT(*) as count FROM \`${a}\``);return Number(o[0]?.count??0)}async function io(a){let{tableName:e,db:t,cascade:o}=a,r=S(t),[n]=await r.execute(`SELECT COUNT(*) as cnt
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
327
356
  FROM information_schema.TABLES
328
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(n[0]?.cnt??0)>0))throw new We(404,{message:`Table "${e}" does not exist`});let l=await Zr(e,t);if(!o){let s=await so(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===Gr||m.errno===Jr)return{deletedCount:0,fkViolation:!0,relatedRecords:await so(e,t)};throw s instanceof We?s:new We(500,{message:`Failed to delete table "${e}"`})}}var Gr,Jr,lo=p(()=>{"use strict";R();Gr=1217,Jr=1451});import{HTTPException as en}from"hono/http-exception";async function co({tableName:a,db:e}){let t=S(e),[o]=await t.execute(`SELECT * FROM \`${a}\``);if(!o||o.length===0)throw new en(404,{message:`Table "${a}" does not exist or has no data`});return{cols:Object.keys(o[0]),rows:o}}var mo=p(()=>{"use strict";R()});async function uo(a){let e=S(a),t=`
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 Io=d(()=>{"use strict";S()});import{HTTPException as tt}from"hono/http-exception";async function Mo(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=`
329
364
  SELECT table_name as tableName
330
365
  FROM information_schema.tables
331
366
  WHERE table_schema = DATABASE()
332
367
  AND table_type = 'BASE TABLE'
333
368
  ORDER BY table_name
334
- `,[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 po=p(()=>{"use strict";R()});import{HTTPException as fo}from"hono/http-exception";async function bo({tableName:a,db:e}){let t=S(e),[o]=await t.execute(`SELECT COUNT(*) as cnt
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
335
370
  FROM information_schema.TABLES
336
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[a]);if(!(Number(o[0]?.cnt??0)>0))throw new fo(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 fo(500,{message:`Failed to retrieve schema for table "${a}"`});return l}var yo=p(()=>{"use strict";R()});function go(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 ho(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 To(a,e,t){let{values:o,sortColumns:r}=a,n=[],i=[],m=t==="asc"===(e==="asc");if(r.length>0){let c=r.map(y=>`\`${y}\``).join(", "),f=r.map(()=>"?").join(", "),u=m?">":"<";n.push(`(${c}) ${u} (${f})`);for(let y of r)i.push(o[y])}return{clause:n.length>0?`(${n.join(" AND ")})`:"",values:i}}var Eo=p(()=>{"use strict"});var Ce,tn,an,So,Ro=p(()=>{"use strict";R();Eo();Ce=a=>Buffer.from(JSON.stringify(a)).toString("base64url"),tn=a=>{try{return JSON.parse(Buffer.from(a,"base64url").toString("utf-8"))}catch{return null}},an=async(a,e)=>{let[t]=await a.execute(`SELECT COLUMN_NAME as column_name
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
337
372
  FROM information_schema.COLUMNS
338
373
  WHERE TABLE_SCHEMA = DATABASE()
339
374
  AND TABLE_NAME = ?
340
375
  AND COLUMN_KEY = 'PRI'
341
- ORDER BY ORDINAL_POSITION`,[e]);return t.map(o=>o.column_name)},So=async({tableName:a,cursor:e="",limit:t=50,direction:o="asc",sort:r=[],order:n="asc",filters:i=[],db:l})=>{let s=S(l),m=await an(s,a),c=[],f=n;Array.isArray(r)&&r.length>0?(c=r.map(P=>P.columnName),f=r[0].direction):typeof r=="string"&&r&&(c=[r]);let u=[...c,...m.filter(P=>!c.includes(P))],{clause:y,values:d}=go(i),g="",h=[];if(e){let P=tn(e);if(P){let N=To(P,o,f);g=N.clause,h=N.values}}let E="";y&&g?E=`WHERE ${y.replace(/^WHERE\s+/i,"")} AND ${g}`:y?E=y:g&&(E=`WHERE ${g}`);let D=ho((Array.isArray(r),r),n),x=D;o==="desc"?D?x=D.replace(/\bASC\b/gi,"TEMP_DESC").replace(/\bDESC\b/gi,"ASC").replace(/TEMP_DESC/g,"DESC"):u.length>0&&(x=`ORDER BY ${u.map(N=>`\`${N}\` ${f==="asc"?"DESC":"ASC"}`).join(", ")}`):!D&&u.length>0&&(x=`ORDER BY ${u.map(N=>`\`${N}\` ${f.toUpperCase()}`).join(", ")}`);let[U]=await s.execute(`SELECT COUNT(*) as total FROM \`${a}\` ${y}`,d),M=Number(U[0]?.total??0),k=Math.floor(t)+1,[j]=await s.execute(`SELECT * FROM \`${a}\` ${E} ${x} LIMIT ${k}`,[...d,...h]),O=j,A=O.length>t;A&&(O=O.slice(0,t)),o==="desc"&&(O=O.reverse());let q=null,W=null;if(O.length>0&&u.length>0){let P=O[0],N=O[O.length-1],I=G=>({values:Object.fromEntries(u.map(le=>[le,G[le]])),sortColumns:u});o==="asc"?(A&&(q=Ce(I(N))),e&&(W=Ce(I(P)))):(e&&(q=Ce(I(N))),A&&(W=Ce(I(P))))}return{data:O,meta:{limit:t,total:M,hasNextPage:o==="asc"?A:!!e,hasPreviousPage:o==="asc"?!!e:A,nextCursor:q,prevCursor:W}}}});import{HTTPException as on}from"hono/http-exception";async function Co(a){let e=T(a),t=`
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),M=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],I=ee=>({values:Object.fromEntries(u.map(fe=>[fe,ee[fe]])),sortColumns:u});o==="asc"?(_&&(O=Pe(I(N))),e&&(Q=Pe(I(L)))):(e&&(O=Pe(I(N))),_&&(Q=Pe(I(L))))}return{data:q,meta:{limit:t,total:M,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=`
342
387
  SELECT table_name as "tableName"
343
388
  FROM information_schema.tables
344
389
  WHERE table_schema = 'public'
345
390
  AND table_type = 'BASE TABLE'
346
391
  ORDER BY table_name;
347
- `,{rows:o}=await e.query(t);if(!o[0])throw new on(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 wo=p(()=>{"use strict";R()});import{HTTPException as rn}from"hono/http-exception";async function No({tableName:a,db:e}){let t=T(e),o=`
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=`
348
393
  SELECT EXISTS (
349
394
  SELECT 1 FROM information_schema.tables
350
395
  WHERE table_schema = 'public' AND table_name = $1
351
396
  ) as exists
352
- `,{rows:r}=await t.query(o,[a]);if(!r[0]?.exists)throw new rn(404,{message:`Table "${a}" does not exist`});let n=`
397
+ `,{rows:r}=await t.query(o,[a]);if(!r[0]?.exists)throw new qn(404,{message:`Table "${a}" does not exist`});let n=`
353
398
  SELECT
354
399
  column_name,
355
400
  data_type,
@@ -388,11 +433,11 @@ This will return the 5 customers with the highest total order value. You might a
388
433
  FROM information_schema.table_constraints
389
434
  WHERE table_schema = 'public' AND table_name = $1 AND constraint_type = 'PRIMARY KEY'
390
435
  )
391
- `,{rows:c}=await t.query(m,[a]),f=[];f.push(`create table public.${a} (`);let u=[];for(let h of i){let E=` ${h.column_name} ${nn(h)}`;h.is_nullable==="NO"&&(E+=" not null"),h.column_default!==null&&(E+=` default ${h.column_default}`),u.push(E)}let y=new Map;for(let h of s){let E=y.get(h.constraint_name)||[];E.push(h),y.set(h.constraint_name,E)}let d=[];for(let[h,E]of y){let D=E[0],x=E.map(U=>U.column_name).join(", ");if(D.constraint_type==="PRIMARY KEY")d.push(` constraint ${h} primary key (${x})`);else if(D.constraint_type==="FOREIGN KEY"){let U=D.foreign_table_name,M=D.foreign_column_name;d.push(` constraint ${h} foreign key (${x}) references ${U} (${M})`)}else D.constraint_type==="UNIQUE"&&d.push(` constraint ${h} unique (${x})`)}let g=[...u,...d];f.push(g.join(`,
392
- `)),f.push(") tablespace pg_default;");for(let h of c)Array.from(y.values()).some(D=>D[0].constraint_type==="UNIQUE"&&D[0].constraint_name===h.indexname)||(f.push(""),f.push(`${h.indexdef};`));return f.join(`
393
- `)}function nn(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 Do=p(()=>{"use strict";R()});function Ao(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 _o(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 xo(a,e,t,o){let{values:r,sortColumns:n}=a,i=[],l=[],c=t==="asc"===(e==="asc");if(n.length>0){let f=n.map(d=>`"${d}"`).join(", "),u=n.map((d,g)=>`$${o+g}`).join(", "),y=c?">":"<";i.push(`(${f}) ${y} (${u})`);for(let d of n)l.push(r[d])}return{clause:i.length>0?`(${i.join(" AND ")})`:"",values:l}}var Po=p(()=>{"use strict"});var we,sn,ln,vo,Lo=p(()=>{"use strict";R();Po();we=a=>Buffer.from(JSON.stringify(a)).toString("base64url"),sn=a=>{try{return JSON.parse(Buffer.from(a,"base64url").toString("utf-8"))}catch{return null}},ln=async(a,e)=>{let t=`"${e}"`;return(await a.query(`SELECT a.attname as column_name
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,M=D.foreign_column_name;f.push(` constraint ${T} foreign key (${P}) references ${H} (${M})`)}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,In,Mn,sr,ir=d(()=>{"use strict";S();nr();Le=a=>Buffer.from(JSON.stringify(a)).toString("base64url"),In=a=>{try{return JSON.parse(Buffer.from(a,"base64url").toString("utf-8"))}catch{return null}},Mn=async(a,e)=>{let t=`"${e}"`;return(await a.query(`SELECT a.attname as column_name
394
439
  FROM pg_index i
395
440
  JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
396
441
  WHERE i.indrelid = $1::regclass AND i.indisprimary
397
- ORDER BY array_position(i.indkey, a.attnum)`,[t])).rows.map(r=>r.column_name)},vo=async({tableName:a,cursor:e="",limit:t=50,direction:o="asc",sort:r=[],order:n="asc",filters:i=[],db:l})=>{let s=T(l),m=await ln(s,a),c=[],f=n;Array.isArray(r)&&r.length>0?(c=r.map(N=>N.columnName),f=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:y,values:d}=Ao(i),g="",h=[];if(e){let N=sn(e);if(N){let I=xo(N,o,f,d.length+1);g=I.clause,h=I.values}}let E="";y&&g?E=`WHERE ${y.replace(/^WHERE\s+/i,"")} AND ${g}`:y?E=y:g&&(E=`WHERE ${g}`);let D=_o((Array.isArray(r),r),n),x=D;o==="desc"?D?x=D.replace(/\bASC\b/gi,"TEMP_DESC").replace(/\bDESC\b/gi,"ASC").replace(/TEMP_DESC/g,"DESC"):x=`ORDER BY ${u.map(I=>`"${I}" ${f==="asc"?"DESC":"ASC"}`).join(", ")}`:!D&&u.length>0&&(x=`ORDER BY ${u.map(I=>`"${I}" ${f.toUpperCase()}`).join(", ")}`);let U=await s.query(`SELECT COUNT(*) as total FROM "${a}" ${y}`,d),M=Number(U.rows[0].total),k=d.length+h.length+1,j=await s.query(`SELECT * FROM "${a}" ${E} ${x} LIMIT $${k}`,[...d,...h,t+1]),A=j.fields&&j.fields.length>0?j.rows.filter(N=>Object.keys(N).length>0):j.rows,q=A.length>t;q&&(A=A.slice(0,t)),o==="desc"&&(A=A.reverse());let W=null,P=null;if(A.length>0){let N=A[0],I=A[A.length-1],G=le=>({values:Object.fromEntries(u.map(ze=>[ze,le[ze]])),sortColumns:u});o==="asc"?(q&&(W=we(G(I))),e&&(P=we(G(N)))):(e&&(W=we(G(I))),q&&(P=we(G(N))))}return{data:A,meta:{limit:t,total:M,hasNextPage:o==="asc"?q:!!e,hasPreviousPage:o==="asc"?!!e:q,nextCursor:W,prevCursor:P}}}});import{utils as ie,write as cn}from"xlsx";function $o({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=ie.aoa_to_sheet(r),i=ie.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=ie.aoa_to_sheet(r),i=ie.book_new();ie.book_append_sheet(i,n,o.slice(0,31));let l=cn(i,{bookType:"xlsx",type:"buffer"});return new Uint8Array(l)}}}var Oo=p(()=>{"use strict"});import{zValidator as $}from"@hono/zod-validator";import{Hono as mn}from"hono";var qo,Io=p(()=>{"use strict";V();Va();Qa();Xa();eo();ao();no();lo();mo();se();po();yo();Ro();ke();wo();Do();Lo();Oo();qo=new mn().basePath("/tables").get("/",$("query",w),async a=>{let{db:e}=a.req.valid("query"),o=a.get("dbType")==="mysql"?await uo(e):await Co(e);return a.json({data:o},200)}).post("/",$("query",w),$("json",_t),async a=>{let{db:e}=a.req.valid("query"),t=a.req.valid("json");return a.get("dbType")==="mysql"?await to({tableData:t,db:e}):await Wa({tableData:t,db:e}),a.json({data:`Table ${t.tableName} created successfully`},200)}).delete("/:tableName",$("query",It),$("param",ee),async a=>{let{db:e,cascade:t}=a.req.valid("query"),{tableName:o}=a.req.valid("param"),n=a.get("dbType")==="mysql"?await io({tableName:o,db:e,cascade:t}):await Ja({tableName:o,db:e,cascade:t});return a.json({data:n},200)}).delete("/:tableName/columns/:columnName",$("query",$t),$("param",de),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 ro({tableName:o,columnName:r,cascade:t,db:e}):await Ya({tableName:o,columnName:r,cascade:t,db:e});return a.json({data:`Column "${r}" deleted successfully from table "${o}" with ${i} rows deleted`},200)}).get("/:tableName/columns",$("query",w),$("param",ee),async a=>{let{db:e}=a.req.valid("query"),{tableName:t}=a.req.valid("param"),r=a.get("dbType")==="mysql"?await Y({tableName:t,db:e}):await ge({tableName:t,db:e});return a.json({data:r},200)}).get("/:tableName/schema",$("query",w),$("param",ee),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 No({tableName:t,db:e});return a.json({data:{schema:r}},200)}).get("/:tableName/data",$("param",ee),$("query",Kt),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 So({tableName:e,cursor:t,limit:o,direction:r,sort:n,order:i,filters:l,db:s}):await vo({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",$("param",ee),$("query",Ht),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 co({tableName:e,db:t}):await Za({tableName:e,db:t}),l=$o({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 Mo={};Uo(Mo,{createServer:()=>gn});import Ae from"path";import{fileURLToPath as un}from"url";import{serveStatic as Ne}from"@hono/node-server/serve-static";import{zValidator as pn}from"@hono/zod-validator";import{Hono as dn}from"hono";import{cors as fn}from"hono/cors";import{logger as bn}from"hono/logger";import{prettyJSON as yn}from"hono/pretty-json";var De,gn,ko=p(()=>{"use strict";V();Zt();ia();ga();wa();Ka();Io();De=()=>{if(process.env.NODE_ENV==="development")return Ae.resolve(process.cwd(),"../core/dist");let a=Ae.dirname(un(import.meta.url));return Ae.resolve(a,"./core-dist")},gn=()=>({app:new dn({strict:!1}).use("/*",fn()).use(yn({space:2})).use(process.env.NODE_ENV==="development"?bn():(e,t)=>t()).use("/favicon.ico",Ne({path:Ae.resolve(De(),"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(Jt).route("/",ya).use("/assets/*",Ne({root:De()})).use("/image.png",Ne({root:De()})).use("/:dbType/*",pn("param",ht,Xt)).use("/:dbType/*",async(e,t)=>{let o=e.req.param("dbType");e.set("dbType",o),await t()}).route("/:dbType",qo).route("/:dbType",Ba).route("/:dbType",Ca).route("/:dbType",sa).use("/*",Ne({root:De()}))})});ce();import{intro as hn,outro as Tn}from"@clack/prompts";import{serve as En}from"@hono/node-server";import Ve from"picocolors";import{program as tt}from"commander";var at=()=>(tt.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),tt.opts());import{readFile as Ho}from"fs/promises";import{resolve as jo}from"path";import{cancel as me,isCancel as xe,note as ot,select as Bo,spinner as Ko,text as rt}from"@clack/prompts";import{parse as Wo}from"dotenv";import Pe from"picocolors";var nt=async(a,e)=>{let t=e||"DATABASE_URL";if(a?.[t])return a[t];if(process.env[t])return process.env[t];let o=Ko();o.start("Looking for database connection..."),a?ot(Pe.red(`${t} not found in .env or process.env`)):ot(Pe.red(`No .env file found and ${t} not set in process.env`));let r=await Bo({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((xe(r)||r==="cancel")&&(me("No database connection provided. Exiting..."),process.exit(0)),r==="other-env"){o.start("Waiting for path...");let i=await rt({message:"Enter path to .env file",placeholder:"~/projects/myapp/.env.local or ./special.env",validate(s){if(!s?.trim())return"Path is required"}});xe(i)&&(me("Cancelled."),process.exit(0)),o.stop("Trying custom .env...");let l=jo(i);try{let s=await Ho(l,"utf-8"),m=Wo(s);if(m[t])return m[t];throw new Error(`${t} still missing in custom file`)}catch(s){let m=s;me(`Cannot read or parse file: ${Pe.dim(m.message)}`),process.exit(1)}}o.stop("Manual input...");let n=await rt({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 xe(n)&&(me("Cancelled."),process.exit(0)),n.trim()};import{access as Vo,readFile as zo}from"fs/promises";import{dirname as Yo,resolve as ve}from"path";import{parse as Qo}from"dotenv";var Go=async a=>{let e=ve(a);for(;;){let t=ve(e,".env");try{return await Vo(t),t}catch{}let o=Yo(e);if(o===e)return null;e=o}},J=async a=>{let e;if(a?e=ve(a):e=await Go(process.cwd()),!e)return null;try{let t=await zo(e,"utf-8");return Qo(t)}catch(t){if(t instanceof Error&&t.message.includes("ENOENT"))return null;throw t}};_e();import{intro as Jo,outro as Xo}from"@clack/prompts";import st from"picocolors";var it=()=>{Jo(st.inverse(" db-studio ")),Xo(st.green(`For more information, visit: ${Ze.SITE_DOCS_LINK}`))};ce();import{intro as Zo,note as er,outro as lt}from"@clack/prompts";import ue from"picocolors";var ct=async(a,e,t)=>{Zo(ue.inverse(" db-studio "));let o=t||Q.VAR_NAME,r=null;if(e)r=e;else{let n=a?await J(a):await J();n?.[o]?r=n[o]:process.env[o]&&(r=process.env[o]??null)}r?lt(ue.green(`\u2713 Database connection configured (using ${o})`)):(er(ue.red(`\u2717 ${o} not found`),"Status"),lt(ue.yellow("\u26A0 No database connection configured")))};import{intro as ar,outro as or}from"@clack/prompts";import ut from"picocolors";var mt={name:"db-studio",type:"module",version:"1.4.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 pt=()=>{ar(ut.inverse(" db-studio ")),or(ut.green(`\u{1F680} db-studio v${mt.version}`))};var Sn=async()=>{let{env:a,port:e,databaseUrl:t,varName:o,status:r,help:n,version:i}=at();n&&(it(),process.exit(0)),i&&(pt(),process.exit(0)),r&&(await ct(a,t,o),process.exit(0)),hn(Ve.inverse(" db-studio "));let l=e?parseInt(e,10):Q.PORT,s=o||Q.VAR_NAME,m=a?await J(a):await J(),c=t||await nt(m,s);process.env.DATABASE_URL=c;let{createServer:f}=await Promise.resolve().then(()=>(ko(),Mo)),{app:u}=f();En({fetch:u.fetch,port:l}),Tn(Ve.green(`Server running at ${Ve.cyan(`http://localhost:${l}`)}`))};Sn().catch(a=>{process.exit(1)});export{Sn 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 Mn(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=In(e);if(N){let I=rr(N,o,p,f.length+1);h=I.clause,T=I.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(I=>`"${I}" ${p==="asc"?"DESC":"ASC"}`).join(", ")}`:!D&&u.length>0&&(P=`ORDER BY ${u.map(I=>`"${I}" ${p.toUpperCase()}`).join(", ")}`);let H=await s.query(`SELECT COUNT(*) as total FROM "${a}" ${b}`,f),M=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],I=_[_.length-1],ee=fe=>({values:Object.fromEntries(u.map(rt=>[rt,fe[rt]])),sortColumns:u});o==="asc"?(O&&(Q=Le(ee(I))),e&&(L=Le(ee(N)))):(e&&(Q=Le(ee(I))),O&&(L=Le(ee(N))))}return{data:_,meta:{limit:t,total:M,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();Io();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 Mo({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();Ma();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",Ia).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 Ie,note as ft,select as hr,spinner as gr,text as yt}from"@clack/prompts";import{parse as Er}from"dotenv";import Me 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(Me.red(`${t} not found in .env or process.env`)):ft(Me.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((Ie(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"}});Ie(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: ${Me.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 Ie(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.1",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 client","database gui","database browser","sql client","sql editor","query tool","table editor","data editor","postgres","postgresql","postgresql client","postgresql gui","pgadmin alternative","mysql","mysql client","ai sql","er diagram","database management","database studio"],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};
398
443
  //# sourceMappingURL=index.js.map