db-studio 1.7.3 → 1.7.5

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 (74) hide show
  1. package/dist/core-dist/assets/_pathlessLayout-7XOLasgU.js +2 -0
  2. package/dist/core-dist/assets/_pathlessLayout-BgaXE7MD.js +1 -0
  3. package/dist/core-dist/assets/_queryId-DHd3r8hS.js +1 -0
  4. package/dist/core-dist/assets/_table-BrQjEEkt.js +8 -0
  5. package/dist/core-dist/assets/_table-C6uuIAjA.js +1 -0
  6. package/dist/core-dist/assets/bundle-mjs-DkNbwow-.js +1 -0
  7. package/dist/core-dist/assets/cdoe-editor--A2X22TE.js +9 -0
  8. package/dist/core-dist/assets/chat-sidebar-Dq5zKCoF.js +2 -0
  9. package/dist/core-dist/assets/chunk-BO2N2NFS-CtrFqJix.js +131 -0
  10. package/dist/core-dist/assets/css.worker-CCg9Iwze.js +40646 -0
  11. package/dist/core-dist/assets/dist-C-W9v39G.js +1 -0
  12. package/dist/core-dist/assets/dist-CWf64aZV.js +1 -0
  13. package/dist/core-dist/assets/format-cell-value-DyKHFyYf.js +1 -0
  14. package/dist/core-dist/assets/highlighted-body-OFNGDK62-Dqw8vrq4.js +1 -0
  15. package/dist/core-dist/assets/html.worker-BBXyX7jd.js +22115 -0
  16. package/dist/core-dist/assets/icons-CAZJbhBz.js +1 -0
  17. package/dist/core-dist/assets/index-Cw94sGcz.js +57 -0
  18. package/dist/core-dist/assets/index-hsgkD-V0.css +2 -0
  19. package/dist/core-dist/assets/indexes-B2pdcOTa.js +1 -0
  20. package/dist/core-dist/assets/json.worker-D3YLuqJL.js +15158 -0
  21. package/dist/core-dist/assets/logs-DItnmo1m.js +1 -0
  22. package/dist/core-dist/assets/mermaid-GHXKKRXX--wNt23Qo.js +1 -0
  23. package/dist/core-dist/assets/monaco-editor-B6TxHuqP.js +1230 -0
  24. package/dist/core-dist/assets/monaco-editor-DVSAlpqy.css +1 -0
  25. package/dist/core-dist/assets/queries.store-B8yJ67Tq.js +1 -0
  26. package/dist/core-dist/assets/radix-ui-B93Y7STU.js +51 -0
  27. package/dist/core-dist/assets/react-dom-KMIgB9GW.js +9 -0
  28. package/dist/core-dist/assets/rolldown-runtime-Bnw7wDfq.js +1 -0
  29. package/dist/core-dist/assets/runner-DGQg7j15.js +1 -0
  30. package/dist/core-dist/assets/runner-tab-JuHyhE5I.js +9 -0
  31. package/dist/core-dist/assets/schema-B1a8u8dT.js +1 -0
  32. package/dist/core-dist/assets/scroll-area-DIT4iXSA.js +1 -0
  33. package/dist/core-dist/assets/table-Bq-YbPAX.js +1 -0
  34. package/dist/core-dist/assets/tanstack-COAHM0pn.js +9 -0
  35. package/dist/core-dist/assets/tooltip-BPnX8rwL.js +1 -0
  36. package/dist/core-dist/assets/{ts.worker-BfwyojP3.js → ts.worker-EBDMY3hW.js} +124292 -247
  37. package/dist/core-dist/assets/use-delete-column-DfaGMfjR.js +1 -0
  38. package/dist/core-dist/assets/use-rate-limit-JM72I-Qe.js +1 -0
  39. package/dist/core-dist/assets/visualizer-CQk0bfHO.js +1 -0
  40. package/dist/core-dist/index.html +10 -8
  41. package/dist/index.js +67 -67
  42. package/dist/index.js.map +1 -1
  43. package/package.json +4 -4
  44. package/dist/core-dist/assets/_pathlessLayout-C4T813nc.js +0 -1
  45. package/dist/core-dist/assets/_queryId-CzDXQjlo.js +0 -1
  46. package/dist/core-dist/assets/_table-Bu3xLCnw.js +0 -39
  47. package/dist/core-dist/assets/_table-CxQw9Zgt.js +0 -8
  48. package/dist/core-dist/assets/cdoe-editor-Cez2GFq-.js +0 -9
  49. package/dist/core-dist/assets/css.worker-NZNbQL3P.js +0 -93
  50. package/dist/core-dist/assets/dialog-DR7r4hKq.js +0 -1
  51. package/dist/core-dist/assets/format-cell-value-Cn3RA9a1.js +0 -1
  52. package/dist/core-dist/assets/html.worker-eZJr__P7.js +0 -470
  53. package/dist/core-dist/assets/icons-B2mES2Qq.js +0 -1
  54. package/dist/core-dist/assets/index-B1s9iEHF.js +0 -1
  55. package/dist/core-dist/assets/index-BZXeXns-.css +0 -1
  56. package/dist/core-dist/assets/index-C7KJNEv-.js +0 -1
  57. package/dist/core-dist/assets/index-CTFnCamQ.js +0 -1
  58. package/dist/core-dist/assets/index-DQOVykiS.js +0 -1
  59. package/dist/core-dist/assets/index-YjvhQnuu.js +0 -1
  60. package/dist/core-dist/assets/index-xtX-qDgL.js +0 -57
  61. package/dist/core-dist/assets/indexes-DESnDRwn.js +0 -1
  62. package/dist/core-dist/assets/json.worker-C838mOW9.js +0 -58
  63. package/dist/core-dist/assets/logs-DKdQRaOz.js +0 -1
  64. package/dist/core-dist/assets/monaco-editor-BMj4E99D.js +0 -1230
  65. package/dist/core-dist/assets/monaco-editor-Ck3IbhyB.css +0 -1
  66. package/dist/core-dist/assets/queries.store-DGrjGe-g.js +0 -1
  67. package/dist/core-dist/assets/radix-ui-c-7GrHMM.js +0 -51
  68. package/dist/core-dist/assets/react-dom-BcUZDRtY.js +0 -9
  69. package/dist/core-dist/assets/runner-tab-CsEKHazt.js +0 -9
  70. package/dist/core-dist/assets/scroll-area-B80EsjFm.js +0 -1
  71. package/dist/core-dist/assets/tanstack-BaWakKkc.js +0 -7
  72. package/dist/core-dist/assets/tooltip-DBQw-B98.js +0 -1
  73. package/dist/core-dist/assets/use-delete-column-c-7ogRF5.js +0 -1
  74. package/dist/core-dist/assets/visualizer-CQGMZpWZ.js +0 -1
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- var cs=Object.defineProperty;var f=(t,e)=>()=>(t&&(e=t(t=0)),e);var Pt=(t,e)=>{for(var o in e)cs(t,o,{get:e[o],enumerable:!0})};var It=f(()=>{"use strict"});var $t=f(()=>{"use strict"});var qt=f(()=>{"use strict"});var ls,se,kt=f(()=>{"use strict";ls=globalThis.process?.env?.NODE_ENV,se={PORT:3333,ENV:".env",VAR_NAME:"DATABASE_URL",BASE_URL:"http://localhost:3333",PROXY_URL:ls==="development"?"http://localhost:8787":"https://db-studio-proxy.husamql3.workers.dev"}});var vt=f(()=>{"use strict"});var Ut,rt=f(()=>{"use strict";Ut={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 Ft=f(()=>{"use strict"});var Pe=f(()=>{"use strict";It();$t();qt();kt();vt();rt();Ft()});import{z as pe}from"zod";var w,Ds,qe,Ql,Zt,ee,Q=f(()=>{"use strict";w=pe.object({db:pe.string("Database name is required")}),Ds=["pg","mysql","mssql","mongodb"],qe=pe.enum(Ds,{message:"Invalid database type"}),Ql=w.extend({dbType:qe}),Zt=pe.object({dbType:qe}),ee=pe.object({tableName:pe.string("Table name is required")})});import{z}from"zod";var G,Gl,eo=f(()=>{"use strict";Q();G=z.object({columnName:z.string("Column name is required"),columnType:z.string("Column type is required"),defaultValue:z.string().optional(),isPrimaryKey:z.boolean().default(!1),isNullable:z.boolean().default(!1),isUnique:z.boolean().default(!1),isIdentity:z.boolean().default(!1),isArray:z.boolean().default(!1)}),Gl=z.object({db:w.shape.db,tableName:ee.shape.tableName,columnName:G.shape.columnName,columnType:G.shape.columnType,defaultValue:G.shape.defaultValue,isPrimaryKey:G.shape.isPrimaryKey,isNullable:G.shape.isNullable,isUnique:G.shape.isUnique,isIdentity:G.shape.isIdentity,isArray:G.shape.isArray})});import{z as Ne}from"zod";var to,oo=f(()=>{"use strict";to=Ne.object({tableName:Ne.string("Table name is required"),data:Ne.record(Ne.string("Column name is required"),Ne.any())})});import{z as W}from"zod";var ao,K,om,am,ke=f(()=>{"use strict";Q();ao=w.extend({cascade:W.string().optional().transform(t=>t==="true")}),K=W.object({tableName:W.string("Table name is required"),columnName:W.string("Column name is required")}),om=W.object({db:w.shape.db,tableName:K.shape.tableName,columnName:K.shape.columnName,cascade:W.boolean().optional()}),am=W.object({message:W.string("Message is required"),tableName:W.string("Table name is required"),columnName:W.string("Column name is required"),deletedCount:W.number("Deleted count is required").default(0)})});import{z as Re}from"zod";var Ae,cm,no=f(()=>{"use strict";Q();ke();Ae=Re.object({columnType:Re.string("Column type is required"),isNullable:Re.boolean(),defaultValue:Re.string().nullable().optional()}),cm=Re.object({db:w.shape.db,tableName:K.shape.tableName,columnName:K.shape.columnName,columnType:Ae.shape.columnType,isNullable:Ae.shape.isNullable,defaultValue:Ae.shape.defaultValue})});var ro=f(()=>{"use strict"});import{z as de}from"zod";var so,io=f(()=>{"use strict";so=de.object({tableName:de.string().min(1,"Table name is required"),records:de.array(de.record(de.string(),de.any())).min(1,"At least one record is required")})});import{z as fe}from"zod";var co,lo=f(()=>{"use strict";Q();co=fe.object({messages:fe.array(fe.object({role:fe.enum(["user","assistant"]),content:fe.string("Content is required")})),conversationId:fe.string().optional(),db:w.shape.db})});var mo=f(()=>{"use strict"});import{z as V}from"zod";var _s,Ms,I,xs,Ls,ym,lt=f(()=>{"use strict";_s=["text","boolean","number","enum","json","date","array"],Ms=V.enum(_s),I={text:"text",boolean:"boolean",number:"number",enum:"enum",json:"json",date:"date",array:"array"},xs=["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"],Ls=V.enum(xs),ym=V.object({columnName:V.string(),dataType:Ms,dataTypeLabel:Ls,isNullable:V.boolean(),columnDefault:V.string().nullable(),isPrimaryKey:V.boolean(),isForeignKey:V.boolean(),referencedTable:V.string().nullable(),referencedColumn:V.string().nullable(),enumValues:V.array(V.string()).nullable()})});function uo(t){let e=t?.toLowerCase().trim()||"";return e.includes("[]")||e==="date"||e==="time"||e==="time without time zone"||e.startsWith("time(")||e==="timestamp"||e==="timestamp without time zone"||e.startsWith("timestamp(")||e==="timestamp with time zone"||e==="timestamptz"||e.startsWith("timestamp with time zone(")?I.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"?I.number:e==="boolean"||e==="bool"?I.boolean:e==="json"||e==="jsonb"?I.json:e.startsWith("user-defined")||e==="enum"||e==="text"||e==="xml"?I.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"?I.text:I.text}function po(t){if(!t)return T.text;let e=t.toLowerCase().trim();return e==="integer"||e==="int"||e==="int4"||e==="serial"||e==="serial4"?T.int:e==="bigint"||e==="int8"||e==="bigserial"||e==="serial8"?T.bigint:e==="smallint"||e==="int2"?T.smallint:e==="decimal"||e.startsWith("decimal(")||e==="numeric"||e.startsWith("numeric(")?T.numeric:e==="real"||e==="float4"?T.float:e==="double precision"||e==="float8"||e==="float"?T.double:e==="money"?T.money:e==="boolean"||e==="bool"?T.boolean:e==="text"?T.text:e==="character varying"||e.startsWith("varchar")||e.startsWith("character varying(")?T.varchar:e==="character"||e.startsWith("char")||e.startsWith("character(")||e==="bpchar"?T.char:e==="json"?T.json:e==="jsonb"?T.jsonb:e==="xml"?T.xml:e==="uuid"?T.uuid:e==="date"?T.date:e==="time"||e==="time without time zone"||e.startsWith("time(")?T.time:e==="timestamp"||e==="timestamp without time zone"||e.startsWith("timestamp(")?T.timestamp:e==="timestamp with time zone"||e==="timestamptz"||e.startsWith("timestamp with time zone(")?T.timestamptz:e==="interval"||e.startsWith("interval")?T.interval:e==="bytea"?T.bytea:e==="inet"?T.inet:e==="cidr"?T.cidr:e==="macaddr"?T.macaddr:e==="macaddr8"?T.macaddr8:e==="point"?T.point:e==="line"?T.line:e==="polygon"?T.polygon:e.startsWith("array")||e.includes("[]")?T.text:e.startsWith("user-defined")||e==="enum"?T.enum:T.text}function fo(t,e){let o=t?.toLowerCase().trim()||"",a=e?.toLowerCase().trim()||"";return o==="tinyint"&&a==="tinyint(1)"?I.boolean:o==="tinyint"||o==="smallint"||o==="mediumint"||o==="int"||o==="integer"||o==="bigint"||o==="decimal"||o==="numeric"||o==="float"||o==="double"||o==="real"||o==="bit"?I.number:o==="boolean"||o==="bool"?I.boolean:o==="date"||o==="datetime"||o==="timestamp"||o==="time"||o==="year"?I.date:o==="json"?I.json:o==="enum"||o==="set"?I.enum:I.text}function bo(t,e){if(!t)return T.text;let o=t.toLowerCase().trim(),a=e?.toLowerCase().trim()||"";return o==="tinyint"&&a==="tinyint(1)"?T.boolean:o==="tinyint"?T.tinyint:o==="smallint"?T.smallint:o==="mediumint"?T.mediumint:o==="int"||o==="integer"?T.int:o==="bigint"?T.bigint:o==="decimal"||o==="numeric"?T.numeric:o==="float"||o==="real"?T.float:o==="double"?T.double:o==="bit"?T.bit:o==="boolean"||o==="bool"?T.boolean:o==="char"?T.char:o==="varchar"?T.varchar:o==="tinytext"?T.tinytext:o==="text"?T.text:o==="mediumtext"?T.mediumtext:o==="longtext"?T.longtext:o==="binary"?T.binary:o==="varbinary"?T.varbinary:o==="tinyblob"?T.tinyblob:o==="blob"?T.blob:o==="mediumblob"?T.mediumblob:o==="longblob"?T.longblob:o==="json"?T.json:o==="date"?T.date:o==="time"?T.time:o==="datetime"?T.datetime:o==="timestamp"?T.timestamp:o==="year"?T.year:o==="enum"?T.enum:o==="set"?T.set:T.text}function yo(t){let e=t?.toLowerCase().trim()||"";return e==="tinyint"||e==="smallint"||e==="int"||e==="bigint"||e==="decimal"||e==="numeric"||e==="float"||e==="real"||e==="money"||e==="smallmoney"?I.number:e==="bit"?I.boolean:e==="date"||e==="datetime"||e==="datetime2"||e==="smalldatetime"||e==="time"||e==="datetimeoffset"?I.date:e==="json"?I.json:I.text}function go(t){if(!t)return T.text;let e=t.toLowerCase().trim();return e==="tinyint"?T.tinyint:e==="smallint"?T.smallint:e==="int"?T.int:e==="bigint"?T.bigint:e==="decimal"||e==="numeric"?T.numeric:e==="float"||e==="real"?T.float:e==="money"||e==="smallmoney"?T.money:e==="bit"?T.boolean:e==="char"?T.char:e==="varchar"?T.varchar:e==="text"?T.text:e==="nchar"?T.char:e==="nvarchar"?T.varchar:e==="ntext"?T.text:e==="binary"?T.binary:e==="varbinary"?T.varbinary:e==="image"?T.blob:e==="uniqueidentifier"?T.uuid:e==="date"?T.date:e==="time"?T.time:e==="datetime"||e==="datetime2"||e==="smalldatetime"?T.datetime:e==="datetimeoffset"?T.timestamptz:e==="json"?T.json:e==="xml"?T.xml:T.text}var T,To=f(()=>{"use strict";lt();T={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 U}from"zod";var Os,Eo,Ps,Is,ho,Co=f(()=>{"use strict";Os=["CASCADE","SET NULL","SET DEFAULT","RESTRICT","NO ACTION"],Eo=U.enum(Os),Ps=U.object({columnName:U.string("Column name is required"),columnType:U.string("Column type is required"),defaultValue:U.string().optional(),isPrimaryKey:U.boolean().default(!1),isNullable:U.boolean().default(!1),isUnique:U.boolean().default(!1),isIdentity:U.boolean().default(!1),isArray:U.boolean().default(!1)}),Is=U.object({columnName:U.string("Column name is required"),referencedTable:U.string("Referenced table is required"),referencedColumn:U.string("Referenced column is required"),onUpdate:Eo.default("NO ACTION"),onDelete:Eo.default("NO ACTION")}),ho=U.object({tableName:U.string("Table name is required"),fields:U.array(Ps).min(1,"At least one field is required"),foreignKeys:U.array(Is).optional()})});import{z as B}from"zod";var $s,Rm,So,No=f(()=>{"use strict";Q();$s=B.object({name:B.string("Name is required"),size:B.string("Size is required"),owner:B.string("Owner is required"),encoding:B.string("Encoding is required")}),Rm=B.object({databases:B.array($s),dbType:qe}),So=B.object({version:B.string("Version is required"),database:B.string("Database is required"),user:B.string("User is required"),host:B.string("Host is required").nullable(),port:B.number("Port is required").nullable(),active_connections:B.coerce.number("Active connections is required"),max_connections:B.coerce.number("Max connections is required")})});var Ro=f(()=>{"use strict"});import{z as be}from"zod";var mt,Ao=f(()=>{"use strict";mt=be.object({tableName:be.string("Table name is required"),primaryKeys:be.array(be.object({columnName:be.string("Column name is required"),value:be.any()})).min(1,"At least one primary key is required")})});import{z as qs}from"zod";var wo,Do=f(()=>{"use strict";Q();wo=w.extend({cascade:qs.string().optional().transform(t=>t==="true")})});import{z as _o}from"zod";var Mo,xo=f(()=>{"use strict";Mo=_o.object({query:_o.string("Query is required")})});import{z as ks}from"zod";var vs,Lo,Oo=f(()=>{"use strict";Q();vs=["csv","xlsx","json"],Lo=w.extend({format:ks.enum(vs,{message:"Invalid format. Supported formats: csv, xlsx, json"})})});var Po=f(()=>{"use strict"});import{z as ut}from"zod";var pt,Um,Io=f(()=>{"use strict";Q();ke();pt=ut.object({newColumnName:ut.string("New column name is required")}),Um=ut.object({db:w.shape.db,tableName:K.shape.tableName,columnName:K.shape.columnName,newColumnName:pt.shape.newColumnName})});import{z as M}from"zod";var jm,ve,Km,Us,Vm,$o,qo=f(()=>{"use strict";Q();jm=M.object({columnName:M.string(),operator:M.string(),value:M.string()}),ve=["asc","desc"],Km=M.object({columnName:M.string(),direction:M.enum(ve)}),Us=M.object({limit:M.number(),total:M.number(),hasNextPage:M.boolean(),hasPreviousPage:M.boolean(),nextCursor:M.string().nullable(),prevCursor:M.string().nullable()}),Vm=M.object({data:M.array(M.record(M.string(),M.unknown())),meta:Us}),$o=M.object({db:w.shape.db,cursor:M.string().optional(),limit:M.string().optional().default("50").transform(Number),direction:M.enum(ve).optional().default(ve[0]),sort:M.string().optional().transform(t=>{if(!t)return"";try{let e=JSON.parse(t);return Array.isArray(e)?e:t}catch{return t}}),order:M.enum(ve).optional(),filters:M.string().optional().transform(t=>{if(!t)return[];try{return JSON.parse(t)}catch{return[]}})})});import{z as Ue}from"zod";var Ym,ko=f(()=>{"use strict";Ym=Ue.object({tableName:Ue.string("Table name is required"),schemaName:Ue.string().optional(),rowCount:Ue.coerce.number("Row count is required")})});import{z as vo}from"zod";var Jm,Uo=f(()=>{"use strict";Jm=vo.object({schema:vo.string()})});import{z as J}from"zod";var Fo,Bo=f(()=>{"use strict";Fo=J.object({tableName:J.string("Table name is required"),primaryKey:J.string("Primary key is required").default("id"),updates:J.array(J.object({rowData:J.record(J.string("Column name is required"),J.any()),columnName:J.string("Column name is required"),value:J.any()},{message:"Each update must have a row data, column name, and value."})).min(1,"At least one update is required")})});var X=f(()=>{"use strict";eo();oo();no();ro();io();lo();mo();To();lt();Co();Q();No();Ro();ke();Ao();Do();xo();Oo();Po();Io();qo();ko();Uo();Bo()});import{HTTPException as Fs}from"hono/http-exception";import{DatabaseError as Bs}from"pg";import{ZodError as Hs}from"zod";function Ho(t,e){if(t instanceof Fs)return e.json({error:t.message??"Internal server error"},t.status);if(t instanceof Hs){let o=t.issues[0];return e.json({error:"Validation error",details:o.message},400)}if(t instanceof Error){let o=t;if(o.code==="ECONNREFUSED"||o.code==="ENOTFOUND"||o.code==="ETIMEDOUT"||o.code==="ER_ACCESS_DENIED_ERROR"||o.code==="ER_BAD_HOST_ERROR"||o.code==="ECONNRESET"||o.errno===1045||o.errno===2003||o.errno===2002||t.message.includes("ECONNREFUSED")||t.message.includes("connection refused")||t.message.includes("timeout expired")||t.message.includes("Connection terminated")||t.message.includes("MongoNetworkError")||t.message.includes("MongoServerSelectionError")||t instanceof Bs&&t.code?.startsWith("08"))return e.json({error:"Database connection failed",details:t.message},503)}return e.json({error:t instanceof Error?t.message:"Internal server error"},500)}var jo,Ko=f(()=>{"use strict";jo=(t,e)=>{if(!t.success){let o=t.error?.issues[0];return e.json({error:"Validation error",details:o?.message??"Unknown validation error"},400)}}});var Qo={};Pt(Qo,{coerceObjectId:()=>je,getDbPool:()=>C,getDbType:()=>ce,getMongoClient:()=>Fe,getMongoDb:()=>x,getMongoDbName:()=>Be,getMssqlPool:()=>R,getMysqlPool:()=>S,isValidObjectId:()=>He});import{MongoClient as js,ObjectId as dt}from"mongodb";import Ks from"mssql";import{createPool as Vs}from"mysql2/promise";import{Pool as Vo}from"pg";var ft,ie,C,S,R,ce,Fe,Be,x,He,je,h=f(()=>{"use strict";ft=class{pgPools=new Map;mysqlPools=new Map;mssqlPools=new Map;mongoClient=null;baseConfig=null;constructor(){this.initializeBaseConfig()}detectDbType(e){let o=e.protocol.replace(":","");switch(o){case"postgres":case"postgresql":return"pg";case"mysql":case"mysql2":return"mysql";case"mssql":case"sqlserver":return"mssql";case"mongodb":case"mongodb+srv":return"mongodb";default:throw new Error(`Unsupported database type: ${o}. Supported types: PostgreSQL (postgres://), MySQL (mysql://), SQL Server (mssql://), MongoDB (mongodb://).`)}}initializeBaseConfig(){let e=process.env.DATABASE_URL;if(!e)throw new Error("DATABASE_URL is not set. Please provide a database connection string.");try{let o=new URL(e);this.baseConfig={url:e,host:o.hostname,port:Number.parseInt(o.port,10)||(this.detectDbType(o)==="mysql"?3306:this.detectDbType(o)==="mssql"?1433:5432),user:o.username,password:o.password,dbType:this.detectDbType(o)}}catch(o){throw new Error(o instanceof Error?o.message:String(o))}}getDbType(){if(!this.baseConfig)throw new Error("Base configuration not initialized");return this.baseConfig.dbType}buildConnectionString(e){if(!this.baseConfig)throw new Error("Base configuration not initialized");e||(e=new URL(this.baseConfig.url).pathname.slice(1));try{let o=new URL(this.baseConfig.url);return o.pathname=`/${e}`,o.toString()}catch(o){throw new Error(`Failed to build connection string for database "${e}": ${o instanceof Error?o.message:String(o)}`)}}getPgPool(e){let o=this.buildConnectionString(e);if(!this.pgPools.has(o)){let a={connectionString:o,max:10,idleTimeoutMillis:3e4,connectionTimeoutMillis:2e3},n=new Vo(a);n.on("error",r=>{}),this.pgPools.set(o,n)}return this.pgPools.get(o)??new Vo({connectionString:o})}getMysqlPool(e){if(!this.baseConfig)throw new Error("Base configuration not initialized");let o=this.buildConnectionString(e);if(!this.mysqlPools.has(o)){let n=new URL(o).pathname.slice(1),r=Vs({host:this.baseConfig.host,port:this.baseConfig.port,user:this.baseConfig.user,password:this.baseConfig.password,database:n||void 0,waitForConnections:!0,connectionLimit:10,idleTimeout:3e4,connectTimeout:2e3,multipleStatements:!1});this.mysqlPools.set(o,r)}return this.mysqlPools.get(o)}async getMssqlPool(e){if(!this.baseConfig)throw new Error("Base configuration not initialized");let o=this.buildConnectionString(e);if(!this.mssqlPools.has(o)){let n=new URL(o).pathname.slice(1),r={server:this.baseConfig.host,port:this.baseConfig.port,user:this.baseConfig.user,password:this.baseConfig.password,database:n||void 0,options:{encrypt:!1,trustServerCertificate:!0,enableArithAbort:!0,connectTimeout:2e3},pool:{max:10,min:0,idleTimeoutMillis:3e4}},s=await new Ks.ConnectionPool(r).connect();s.on("error",c=>{}),this.mssqlPools.set(o,s)}return this.mssqlPools.get(o)}getPool(e){return this.getPgPool(e)}async closePgPool(e){let o=this.pgPools.get(e);o&&(await o.end(),this.pgPools.delete(e))}async closeMysqlPool(e){let o=this.mysqlPools.get(e);o&&(await o.end(),this.mysqlPools.delete(e))}async closeMssqlPool(e){let o=this.mssqlPools.get(e);o&&(await o.close(),this.mssqlPools.delete(e))}async closePool(e){await this.closePgPool(e),await this.closeMysqlPool(e),await this.closeMssqlPool(e)}async closePoolByDatabase(e){let o=this.buildConnectionString(e);await this.closePool(o)}async getMongoClient(){if(!this.mongoClient){if(!this.baseConfig)throw new Error("Base configuration not initialized");let e=new js(this.baseConfig.url);try{await e.connect(),this.mongoClient=e}catch(o){try{await e.close()}catch{}throw o}}return this.mongoClient}getMongoDbName(){if(!this.baseConfig)throw new Error("Base configuration not initialized");return new URL(this.baseConfig.url).pathname?.replace(/^\//,"")||"admin"}async getMongoDb(e){return(await this.getMongoClient()).db(e??this.getMongoDbName())}async closeAll(){let e=Array.from(this.pgPools.entries()).map(async([n,r])=>{await r.end()}),o=Array.from(this.mysqlPools.entries()).map(async([n,r])=>{await r.end()}),a=Array.from(this.mssqlPools.entries()).map(async([n,r])=>{await r.close()});await Promise.all([...e,...o,...a]),this.pgPools.clear(),this.mysqlPools.clear(),this.mssqlPools.clear(),this.mongoClient&&(await this.mongoClient.close(),this.mongoClient=null)}getActivePools(){return[...Array.from(this.pgPools.keys()),...Array.from(this.mysqlPools.keys()),...Array.from(this.mssqlPools.keys())]}},ie=new ft,C=t=>ie.getPgPool(t),S=t=>ie.getMysqlPool(t),R=async t=>ie.getMssqlPool(t),ce=()=>ie.getDbType(),Fe=()=>ie.getMongoClient(),Be=()=>ie.getMongoDbName(),x=t=>ie.getMongoDb(t),He=t=>typeof t=="string"&&dt.isValid(t),je=t=>typeof t=="string"&&dt.isValid(t)?new dt(t):t});import{HTTPException as Wo}from"hono/http-exception";async function Jo(t){let e=await x(t),o=await e.listCollections().toArray(),a=[];for(let n of o){let r=n.name,s=await e.collection(r).estimatedDocumentCount();a.push({tableName:r,rowCount:s})}return a}async function Ke({tableName:t,db:e}){let n=await(await x(e)).collection(t).find({}).limit(Ws).toArray(),r=n.length,s=new Map,c=(i,l)=>{let m=zs(l);if(!s.has(i))s.set(i,{types:new Set([m]),nullable:!1,presentCount:1});else{let p=s.get(i);p&&(p.types.add(m),p.presentCount+=1)}};for(let i of n)for(let[l,m]of Object.entries(i)){if(m==null){if(!s.has(l))s.set(l,{types:new Set(["text"]),nullable:!0,presentCount:1});else{let p=s.get(l);p&&(p.nullable=!0),p&&(p.presentCount+=1)}continue}c(l,m)}if(r>0)for(let i of s.values())i.presentCount<r&&(i.nullable=!0);return s.has("_id")||s.set("_id",{types:new Set(["text"]),nullable:!1,presentCount:r}),Array.from(s.entries()).map(([i,l])=>{let m=l.types.values().next().value??"text";return{columnName:i,dataType:m,dataTypeLabel:Gs(m),isNullable:l.nullable,columnDefault:null,isPrimaryKey:i==="_id",isForeignKey:!1,referencedTable:null,referencedColumn:null,enumValues:null}})}async function Xo({tableName:t,cursor:e,limit:o,direction:a,sort:n,order:r,filters:s,db:c}){let l=(await x(c)).collection(t),m=Js(s??[]),p=Go(n??"",r),u=o&&o>0?o:50,d=Ys(e),g=Number.isFinite(d)&&d>=0?d:0,y=a==="desc"?Math.max(g-u,0):g,[b,E]=await Promise.all([l.countDocuments(m),l.find(m).sort(p).skip(y).limit(u).toArray()]),N=E.map(k=>we(k)),A=y+u,q=Math.max(y-u,0);return{data:N,meta:{limit:u,total:b,hasNextPage:A<b,hasPreviousPage:y>0,nextCursor:A<b?Yo(A):null,prevCursor:y>0?Yo(q):null}}}async function Zo({tableName:t,tableData:e,db:o}){let a=await x(o);if((await a.listCollections({name:t}).toArray()).length>0)throw new Wo(400,{message:`Collection "${t}" already exists`});let r=e?.fields??[];if(r.length===0){await a.createCollection(t);return}let s={},c=[];for(let i of r){let l=Qs(i.columnType);if(!zo.has(l))throw new Wo(400,{message:`Unsupported MongoDB BSON type "${i.columnType}" for field "${i.columnName}"`});i.isArray?s[i.columnName]={bsonType:"array",...l!=="array"?{items:{bsonType:l}}:{}}:s[i.columnName]={bsonType:l},i.isNullable||c.push(i.columnName)}await a.createCollection(t,{validator:{$jsonSchema:{bsonType:"object",required:c,properties:s,additionalProperties:!0}},validationAction:"error"})}async function ea({tableName:t,columnName:e,db:o}){return{deletedCount:(await(await x(o)).collection(t).updateMany({},{$unset:{[e]:""}})).modifiedCount}}async function ta({tableName:t,db:e}){let r=(await(await x(e)).collection(t).find({}).limit(1e4).toArray()).map(c=>we(c));return{cols:Array.from(new Set(r.flatMap(c=>Object.keys(c)))),rows:r}}var zo,Qs,Ws,Yo,Ys,we,zs,Gs,Js,Go,te,oa,le,bt,ye=f(()=>{"use strict";h();zo=new Set(["double","string","object","array","binData","undefined","objectId","bool","date","null","regex","dbPointer","javascript","symbol","javascriptWithScope","int","timestamp","long","decimal","minKey","maxKey"]),Qs=t=>{let e=t.trim();if(zo.has(e))return e;switch(e.toLowerCase()){case"boolean":return"bool";case"objectid":return"objectId";case"binary":return"binData";default:return e}},Ws=200,Yo=t=>Buffer.from(JSON.stringify({offset:t})).toString("base64url"),Ys=t=>{if(!t)return 0;try{let e=JSON.parse(Buffer.from(t,"base64url").toString("utf-8"));return typeof e.offset=="number"?e.offset:0}catch{return 0}},we=t=>{if(t instanceof Date)return t.toISOString();if(typeof t=="bigint")return t.toString();if(t&&typeof t=="object"){if("_bsontype"in t&&t._bsontype==="ObjectId")return t.toHexString();if(Array.isArray(t))return t.map(o=>we(o));let e=Object.entries(t).map(([o,a])=>[o,we(a)]);return Object.fromEntries(e)}return t},zs=t=>t instanceof Date?"date":t&&typeof t=="object"?Array.isArray(t)?"array":"_bsontype"in t?"text":"json":typeof t=="boolean"?"boolean":typeof t=="number"||typeof t=="bigint"?"number":"text",Gs=t=>{switch(t){case"number":return"numeric";case"boolean":return"boolean";case"json":return"json";case"date":return"date";case"array":return"array";case"enum":return"enum";default:return"text"}},Js=t=>{if(!t||t.length===0)return{};let e=[],o=n=>n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=n=>{let r=n.trim();if(r==="null")return null;if(r==="true")return!0;if(r==="false")return!1;let s=Number(r);return!Number.isNaN(s)&&r!==""?s:He(r)?je(r):r};for(let n of t){let r=n.columnName,s=a(n.value),c=n.operator.toLowerCase();if(r)switch(c){case"=":e.push({[r]:s});break;case"!=":e.push({[r]:{$ne:s}});break;case">":e.push({[r]:{$gt:s}});break;case">=":e.push({[r]:{$gte:s}});break;case"<":e.push({[r]:{$lt:s}});break;case"<=":e.push({[r]:{$lte:s}});break;case"is":e.push({[r]:s});break;case"is not":e.push({[r]:{$ne:s}});break;case"like":e.push({[r]:{$regex:o(String(s)),$options:""}});break;case"not like":e.push({[r]:{$not:{$regex:o(String(s)),$options:""}}});break;case"ilike":e.push({[r]:{$regex:o(String(s)),$options:"i"}});break;case"not ilike":e.push({[r]:{$not:{$regex:o(String(s)),$options:"i"}}});break;default:e.push({[r]:s});break}}return e.length?{$and:e}:{}},Go=(t,e)=>{if(!t)return{_id:1};if(Array.isArray(t)){let o=t.map(a=>[a.columnName,a.direction==="desc"?-1:1]);return Object.fromEntries(o)}return typeof t=="string"&&t.length>0?{[t]:e==="desc"?-1:1}:{_id:1}};te=we,oa=Go,le=je,bt=He});async function aa(t,e={}){let{includeSampleData:o=!1,maxTables:a}=e,n=await x(t),r=await n.listCollections().toArray(),c=(typeof a=="number"&&a>0?r.slice(0,a):r).map(async l=>{let m=l.name,p=await Ke({tableName:m,db:t}),u={name:m,columns:p.map(Xs)};if(o){let g=(await n.collection(m).find({}).limit(3).toArray()).map(y=>te(y));u.sampleData=g.map(y=>Object.fromEntries(Object.entries(y).map(([b,E])=>[b,String(E)])))}return u});return{dbType:"mongodb",tables:await Promise.all(c),relationships:[]}}var Xs,na=f(()=>{"use strict";h();ye();Xs=t=>({name:t.columnName,type:t.dataTypeLabel,nullable:t.isNullable,isPrimaryKey:t.isPrimaryKey})});import{Pool as Zs}from"pg";var Ve,ei,yt,ra=f(()=>{"use strict";Ve=null,ei=()=>{if(!Ve){if(!process.env.DATABASE_URL)throw new Error("DATABASE_URL is not set. Please provide a database connection string.");try{Ve=new Zs({connectionString:process.env.DATABASE_URL}),Ve.on("error",t=>{})}catch(t){throw t}}return Ve},yt=new Proxy({},{get(t,e){try{return ei()[e]}catch(o){throw o}}})});import{HTTPException as ti}from"hono/http-exception";async function Qe({tableName:t,db:e}){let o=C(e),a=`
2
+ var cs=Object.defineProperty;var f=(t,e)=>()=>(t&&(e=t(t=0)),e);var Pt=(t,e)=>{for(var o in e)cs(t,o,{get:e[o],enumerable:!0})};var It=f(()=>{"use strict"});var $t=f(()=>{"use strict"});var qt=f(()=>{"use strict"});var ls,se,kt=f(()=>{"use strict";ls=globalThis.process?.env?.NODE_ENV,se={PORT:3333,ENV:".env",VAR_NAME:"DATABASE_URL",BASE_URL:"http://localhost:3333",PROXY_URL:ls==="development"?"http://localhost:8787":"https://db-studio-proxy.husamql3.workers.dev"}});var vt=f(()=>{"use strict"});var Ut,rt=f(()=>{"use strict";Ut={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 Ft=f(()=>{"use strict"});var Pe=f(()=>{"use strict";It();$t();qt();kt();vt();rt();Ft()});import{z as de}from"zod";var w,Ds,qe,Vl,Zt,ee,Q=f(()=>{"use strict";w=de.object({db:de.string("Database name is required")}),Ds=["pg","mysql","mssql","mongodb"],qe=de.enum(Ds,{message:"Invalid database type"}),Vl=w.extend({dbType:qe}),Zt=de.object({dbType:qe}),ee=de.object({tableName:de.string("Table name is required")})});import{z}from"zod";var G,zl,eo=f(()=>{"use strict";Q();G=z.object({columnName:z.string("Column name is required"),columnType:z.string("Column type is required"),defaultValue:z.string().optional(),isPrimaryKey:z.boolean().default(!1),isNullable:z.boolean().default(!1),isUnique:z.boolean().default(!1),isIdentity:z.boolean().default(!1),isArray:z.boolean().default(!1)}),zl=z.object({db:w.shape.db,tableName:ee.shape.tableName,columnName:G.shape.columnName,columnType:G.shape.columnType,defaultValue:G.shape.defaultValue,isPrimaryKey:G.shape.isPrimaryKey,isNullable:G.shape.isNullable,isUnique:G.shape.isUnique,isIdentity:G.shape.isIdentity,isArray:G.shape.isArray})});import{z as Ne}from"zod";var to,oo=f(()=>{"use strict";to=Ne.object({tableName:Ne.string("Table name is required"),data:Ne.record(Ne.string("Column name is required"),Ne.any())})});import{z as W}from"zod";var ao,K,tm,om,ke=f(()=>{"use strict";Q();ao=w.extend({cascade:W.string().optional().transform(t=>t==="true")}),K=W.object({tableName:W.string("Table name is required"),columnName:W.string("Column name is required")}),tm=W.object({db:w.shape.db,tableName:K.shape.tableName,columnName:K.shape.columnName,cascade:W.boolean().optional()}),om=W.object({message:W.string("Message is required"),tableName:W.string("Table name is required"),columnName:W.string("Column name is required"),deletedCount:W.number("Deleted count is required").default(0)})});import{z as Re}from"zod";var Ae,im,no=f(()=>{"use strict";Q();ke();Ae=Re.object({columnType:Re.string("Column type is required"),isNullable:Re.boolean(),defaultValue:Re.string().nullable().optional()}),im=Re.object({db:w.shape.db,tableName:K.shape.tableName,columnName:K.shape.columnName,columnType:Ae.shape.columnType,isNullable:Ae.shape.isNullable,defaultValue:Ae.shape.defaultValue})});var ro=f(()=>{"use strict"});import{z as fe}from"zod";var so,io=f(()=>{"use strict";so=fe.object({tableName:fe.string().min(1,"Table name is required"),records:fe.array(fe.record(fe.string(),fe.any())).min(1,"At least one record is required")})});import{z as ie}from"zod";var co,lo=f(()=>{"use strict";Q();co=ie.object({messages:ie.array(ie.object({role:ie.enum(["user","assistant","system","tool"]),content:ie.string().nullable()})),data:ie.object({conversationId:ie.string().optional(),db:w.shape.db})})});var mo=f(()=>{"use strict"});import{z as V}from"zod";var _s,Ms,I,xs,Ls,bm,lt=f(()=>{"use strict";_s=["text","boolean","number","enum","json","date","array"],Ms=V.enum(_s),I={text:"text",boolean:"boolean",number:"number",enum:"enum",json:"json",date:"date",array:"array"},xs=["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"],Ls=V.enum(xs),bm=V.object({columnName:V.string(),dataType:Ms,dataTypeLabel:Ls,isNullable:V.boolean(),columnDefault:V.string().nullable(),isPrimaryKey:V.boolean(),isForeignKey:V.boolean(),referencedTable:V.string().nullable(),referencedColumn:V.string().nullable(),enumValues:V.array(V.string()).nullable()})});function uo(t){let e=t?.toLowerCase().trim()||"";return e.includes("[]")||e==="date"||e==="time"||e==="time without time zone"||e.startsWith("time(")||e==="timestamp"||e==="timestamp without time zone"||e.startsWith("timestamp(")||e==="timestamp with time zone"||e==="timestamptz"||e.startsWith("timestamp with time zone(")?I.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"?I.number:e==="boolean"||e==="bool"?I.boolean:e==="json"||e==="jsonb"?I.json:e.startsWith("user-defined")||e==="enum"||e==="text"||e==="xml"?I.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"?I.text:I.text}function po(t){if(!t)return T.text;let e=t.toLowerCase().trim();return e==="integer"||e==="int"||e==="int4"||e==="serial"||e==="serial4"?T.int:e==="bigint"||e==="int8"||e==="bigserial"||e==="serial8"?T.bigint:e==="smallint"||e==="int2"?T.smallint:e==="decimal"||e.startsWith("decimal(")||e==="numeric"||e.startsWith("numeric(")?T.numeric:e==="real"||e==="float4"?T.float:e==="double precision"||e==="float8"||e==="float"?T.double:e==="money"?T.money:e==="boolean"||e==="bool"?T.boolean:e==="text"?T.text:e==="character varying"||e.startsWith("varchar")||e.startsWith("character varying(")?T.varchar:e==="character"||e.startsWith("char")||e.startsWith("character(")||e==="bpchar"?T.char:e==="json"?T.json:e==="jsonb"?T.jsonb:e==="xml"?T.xml:e==="uuid"?T.uuid:e==="date"?T.date:e==="time"||e==="time without time zone"||e.startsWith("time(")?T.time:e==="timestamp"||e==="timestamp without time zone"||e.startsWith("timestamp(")?T.timestamp:e==="timestamp with time zone"||e==="timestamptz"||e.startsWith("timestamp with time zone(")?T.timestamptz:e==="interval"||e.startsWith("interval")?T.interval:e==="bytea"?T.bytea:e==="inet"?T.inet:e==="cidr"?T.cidr:e==="macaddr"?T.macaddr:e==="macaddr8"?T.macaddr8:e==="point"?T.point:e==="line"?T.line:e==="polygon"?T.polygon:e.startsWith("array")||e.includes("[]")?T.text:e.startsWith("user-defined")||e==="enum"?T.enum:T.text}function fo(t,e){let o=t?.toLowerCase().trim()||"",a=e?.toLowerCase().trim()||"";return o==="tinyint"&&a==="tinyint(1)"?I.boolean:o==="tinyint"||o==="smallint"||o==="mediumint"||o==="int"||o==="integer"||o==="bigint"||o==="decimal"||o==="numeric"||o==="float"||o==="double"||o==="real"||o==="bit"?I.number:o==="boolean"||o==="bool"?I.boolean:o==="date"||o==="datetime"||o==="timestamp"||o==="time"||o==="year"?I.date:o==="json"?I.json:o==="enum"||o==="set"?I.enum:I.text}function bo(t,e){if(!t)return T.text;let o=t.toLowerCase().trim(),a=e?.toLowerCase().trim()||"";return o==="tinyint"&&a==="tinyint(1)"?T.boolean:o==="tinyint"?T.tinyint:o==="smallint"?T.smallint:o==="mediumint"?T.mediumint:o==="int"||o==="integer"?T.int:o==="bigint"?T.bigint:o==="decimal"||o==="numeric"?T.numeric:o==="float"||o==="real"?T.float:o==="double"?T.double:o==="bit"?T.bit:o==="boolean"||o==="bool"?T.boolean:o==="char"?T.char:o==="varchar"?T.varchar:o==="tinytext"?T.tinytext:o==="text"?T.text:o==="mediumtext"?T.mediumtext:o==="longtext"?T.longtext:o==="binary"?T.binary:o==="varbinary"?T.varbinary:o==="tinyblob"?T.tinyblob:o==="blob"?T.blob:o==="mediumblob"?T.mediumblob:o==="longblob"?T.longblob:o==="json"?T.json:o==="date"?T.date:o==="time"?T.time:o==="datetime"?T.datetime:o==="timestamp"?T.timestamp:o==="year"?T.year:o==="enum"?T.enum:o==="set"?T.set:T.text}function yo(t){let e=t?.toLowerCase().trim()||"";return e==="tinyint"||e==="smallint"||e==="int"||e==="bigint"||e==="decimal"||e==="numeric"||e==="float"||e==="real"||e==="money"||e==="smallmoney"?I.number:e==="bit"?I.boolean:e==="date"||e==="datetime"||e==="datetime2"||e==="smalldatetime"||e==="time"||e==="datetimeoffset"?I.date:e==="json"?I.json:I.text}function go(t){if(!t)return T.text;let e=t.toLowerCase().trim();return e==="tinyint"?T.tinyint:e==="smallint"?T.smallint:e==="int"?T.int:e==="bigint"?T.bigint:e==="decimal"||e==="numeric"?T.numeric:e==="float"||e==="real"?T.float:e==="money"||e==="smallmoney"?T.money:e==="bit"?T.boolean:e==="char"?T.char:e==="varchar"?T.varchar:e==="text"?T.text:e==="nchar"?T.char:e==="nvarchar"?T.varchar:e==="ntext"?T.text:e==="binary"?T.binary:e==="varbinary"?T.varbinary:e==="image"?T.blob:e==="uniqueidentifier"?T.uuid:e==="date"?T.date:e==="time"?T.time:e==="datetime"||e==="datetime2"||e==="smalldatetime"?T.datetime:e==="datetimeoffset"?T.timestamptz:e==="json"?T.json:e==="xml"?T.xml:T.text}var T,To=f(()=>{"use strict";lt();T={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 U}from"zod";var Os,Eo,Ps,Is,ho,Co=f(()=>{"use strict";Os=["CASCADE","SET NULL","SET DEFAULT","RESTRICT","NO ACTION"],Eo=U.enum(Os),Ps=U.object({columnName:U.string("Column name is required"),columnType:U.string("Column type is required"),defaultValue:U.string().optional(),isPrimaryKey:U.boolean().default(!1),isNullable:U.boolean().default(!1),isUnique:U.boolean().default(!1),isIdentity:U.boolean().default(!1),isArray:U.boolean().default(!1)}),Is=U.object({columnName:U.string("Column name is required"),referencedTable:U.string("Referenced table is required"),referencedColumn:U.string("Referenced column is required"),onUpdate:Eo.default("NO ACTION"),onDelete:Eo.default("NO ACTION")}),ho=U.object({tableName:U.string("Table name is required"),fields:U.array(Ps).min(1,"At least one field is required"),foreignKeys:U.array(Is).optional()})});import{z as B}from"zod";var $s,Nm,So,No=f(()=>{"use strict";Q();$s=B.object({name:B.string("Name is required"),size:B.string("Size is required"),owner:B.string("Owner is required"),encoding:B.string("Encoding is required")}),Nm=B.object({databases:B.array($s),dbType:qe}),So=B.object({version:B.string("Version is required"),database:B.string("Database is required"),user:B.string("User is required"),host:B.string("Host is required").nullable(),port:B.number("Port is required").nullable(),active_connections:B.coerce.number("Active connections is required"),max_connections:B.coerce.number("Max connections is required")})});var Ro=f(()=>{"use strict"});import{z as be}from"zod";var mt,Ao=f(()=>{"use strict";mt=be.object({tableName:be.string("Table name is required"),primaryKeys:be.array(be.object({columnName:be.string("Column name is required"),value:be.any()})).min(1,"At least one primary key is required")})});import{z as qs}from"zod";var wo,Do=f(()=>{"use strict";Q();wo=w.extend({cascade:qs.string().optional().transform(t=>t==="true")})});import{z as _o}from"zod";var Mo,xo=f(()=>{"use strict";Mo=_o.object({query:_o.string("Query is required")})});import{z as ks}from"zod";var vs,Lo,Oo=f(()=>{"use strict";Q();vs=["csv","xlsx","json"],Lo=w.extend({format:ks.enum(vs,{message:"Invalid format. Supported formats: csv, xlsx, json"})})});var Po=f(()=>{"use strict"});import{z as ut}from"zod";var pt,vm,Io=f(()=>{"use strict";Q();ke();pt=ut.object({newColumnName:ut.string("New column name is required")}),vm=ut.object({db:w.shape.db,tableName:K.shape.tableName,columnName:K.shape.columnName,newColumnName:pt.shape.newColumnName})});import{z as M}from"zod";var Hm,ve,jm,Us,Km,$o,qo=f(()=>{"use strict";Q();Hm=M.object({columnName:M.string(),operator:M.string(),value:M.string()}),ve=["asc","desc"],jm=M.object({columnName:M.string(),direction:M.enum(ve)}),Us=M.object({limit:M.number(),total:M.number(),hasNextPage:M.boolean(),hasPreviousPage:M.boolean(),nextCursor:M.string().nullable(),prevCursor:M.string().nullable()}),Km=M.object({data:M.array(M.record(M.string(),M.unknown())),meta:Us}),$o=M.object({db:w.shape.db,cursor:M.string().optional(),limit:M.string().optional().default("50").transform(Number),direction:M.enum(ve).optional().default(ve[0]),sort:M.string().optional().transform(t=>{if(!t)return"";try{let e=JSON.parse(t);return Array.isArray(e)?e:t}catch{return t}}),order:M.enum(ve).optional(),filters:M.string().optional().transform(t=>{if(!t)return[];try{return JSON.parse(t)}catch{return[]}})})});import{z as Ue}from"zod";var Wm,ko=f(()=>{"use strict";Wm=Ue.object({tableName:Ue.string("Table name is required"),schemaName:Ue.string().optional(),rowCount:Ue.coerce.number("Row count is required")})});import{z as vo}from"zod";var Gm,Uo=f(()=>{"use strict";Gm=vo.object({schema:vo.string()})});import{z as J}from"zod";var Fo,Bo=f(()=>{"use strict";Fo=J.object({tableName:J.string("Table name is required"),primaryKey:J.string("Primary key is required").default("id"),updates:J.array(J.object({rowData:J.record(J.string("Column name is required"),J.any()),columnName:J.string("Column name is required"),value:J.any()},{message:"Each update must have a row data, column name, and value."})).min(1,"At least one update is required")})});var X=f(()=>{"use strict";eo();oo();no();ro();io();lo();mo();To();lt();Co();Q();No();Ro();ke();Ao();Do();xo();Oo();Po();Io();qo();ko();Uo();Bo()});import{HTTPException as Fs}from"hono/http-exception";import{DatabaseError as Bs}from"pg";import{ZodError as Hs}from"zod";function Ho(t,e){if(t instanceof Fs)return e.json({error:t.message??"Internal server error"},t.status);if(t instanceof Hs){let o=t.issues[0];return e.json({error:"Validation error",details:o.message},400)}if(t instanceof Error){let o=t;if(o.code==="ECONNREFUSED"||o.code==="ENOTFOUND"||o.code==="ETIMEDOUT"||o.code==="ER_ACCESS_DENIED_ERROR"||o.code==="ER_BAD_HOST_ERROR"||o.code==="ECONNRESET"||o.errno===1045||o.errno===2003||o.errno===2002||t.message.includes("ECONNREFUSED")||t.message.includes("connection refused")||t.message.includes("timeout expired")||t.message.includes("Connection terminated")||t.message.includes("MongoNetworkError")||t.message.includes("MongoServerSelectionError")||t instanceof Bs&&t.code?.startsWith("08"))return e.json({error:"Database connection failed",details:t.message},503)}return e.json({error:t instanceof Error?t.message:"Internal server error"},500)}var jo,Ko=f(()=>{"use strict";jo=(t,e)=>{if(!t.success){let o=t.error?.issues[0];return e.json({error:"Validation error",details:o?.message??"Unknown validation error"},400)}}});var Qo={};Pt(Qo,{coerceObjectId:()=>je,getDbPool:()=>C,getDbType:()=>le,getMongoClient:()=>Fe,getMongoDb:()=>x,getMongoDbName:()=>Be,getMssqlPool:()=>R,getMysqlPool:()=>S,isValidObjectId:()=>He});import{MongoClient as js,ObjectId as dt}from"mongodb";import Ks from"mssql";import{createPool as Vs}from"mysql2/promise";import{Pool as Vo}from"pg";var ft,ce,C,S,R,le,Fe,Be,x,He,je,h=f(()=>{"use strict";ft=class{pgPools=new Map;mysqlPools=new Map;mssqlPools=new Map;mongoClient=null;baseConfig=null;constructor(){this.initializeBaseConfig()}detectDbType(e){let o=e.protocol.replace(":","");switch(o){case"postgres":case"postgresql":return"pg";case"mysql":case"mysql2":return"mysql";case"mssql":case"sqlserver":return"mssql";case"mongodb":case"mongodb+srv":return"mongodb";default:throw new Error(`Unsupported database type: ${o}. Supported types: PostgreSQL (postgres://), MySQL (mysql://), SQL Server (mssql://), MongoDB (mongodb://).`)}}initializeBaseConfig(){let e=process.env.DATABASE_URL;if(!e)throw new Error("DATABASE_URL is not set. Please provide a database connection string.");try{let o=new URL(e);this.baseConfig={url:e,host:o.hostname,port:Number.parseInt(o.port,10)||(this.detectDbType(o)==="mysql"?3306:this.detectDbType(o)==="mssql"?1433:5432),user:o.username,password:o.password,dbType:this.detectDbType(o)}}catch(o){throw new Error(o instanceof Error?o.message:String(o))}}getDbType(){if(!this.baseConfig)throw new Error("Base configuration not initialized");return this.baseConfig.dbType}buildConnectionString(e){if(!this.baseConfig)throw new Error("Base configuration not initialized");e||(e=new URL(this.baseConfig.url).pathname.slice(1));try{let o=new URL(this.baseConfig.url);return o.pathname=`/${e}`,o.toString()}catch(o){throw new Error(`Failed to build connection string for database "${e}": ${o instanceof Error?o.message:String(o)}`)}}getPgPool(e){let o=this.buildConnectionString(e);if(!this.pgPools.has(o)){let a={connectionString:o,max:10,idleTimeoutMillis:3e4,connectionTimeoutMillis:2e3},n=new Vo(a);n.on("error",r=>{}),this.pgPools.set(o,n)}return this.pgPools.get(o)??new Vo({connectionString:o})}getMysqlPool(e){if(!this.baseConfig)throw new Error("Base configuration not initialized");let o=this.buildConnectionString(e);if(!this.mysqlPools.has(o)){let n=new URL(o).pathname.slice(1),r=Vs({host:this.baseConfig.host,port:this.baseConfig.port,user:this.baseConfig.user,password:this.baseConfig.password,database:n||void 0,waitForConnections:!0,connectionLimit:10,idleTimeout:3e4,connectTimeout:2e3,multipleStatements:!1});this.mysqlPools.set(o,r)}return this.mysqlPools.get(o)}async getMssqlPool(e){if(!this.baseConfig)throw new Error("Base configuration not initialized");let o=this.buildConnectionString(e);if(!this.mssqlPools.has(o)){let n=new URL(o).pathname.slice(1),r={server:this.baseConfig.host,port:this.baseConfig.port,user:this.baseConfig.user,password:this.baseConfig.password,database:n||void 0,options:{encrypt:!1,trustServerCertificate:!0,enableArithAbort:!0,connectTimeout:2e3},pool:{max:10,min:0,idleTimeoutMillis:3e4}},i=await new Ks.ConnectionPool(r).connect();i.on("error",c=>{}),this.mssqlPools.set(o,i)}return this.mssqlPools.get(o)}getPool(e){return this.getPgPool(e)}async closePgPool(e){let o=this.pgPools.get(e);o&&(await o.end(),this.pgPools.delete(e))}async closeMysqlPool(e){let o=this.mysqlPools.get(e);o&&(await o.end(),this.mysqlPools.delete(e))}async closeMssqlPool(e){let o=this.mssqlPools.get(e);o&&(await o.close(),this.mssqlPools.delete(e))}async closePool(e){await this.closePgPool(e),await this.closeMysqlPool(e),await this.closeMssqlPool(e)}async closePoolByDatabase(e){let o=this.buildConnectionString(e);await this.closePool(o)}async getMongoClient(){if(!this.mongoClient){if(!this.baseConfig)throw new Error("Base configuration not initialized");let e=new js(this.baseConfig.url);try{await e.connect(),this.mongoClient=e}catch(o){try{await e.close()}catch{}throw o}}return this.mongoClient}getMongoDbName(){if(!this.baseConfig)throw new Error("Base configuration not initialized");return new URL(this.baseConfig.url).pathname?.replace(/^\//,"")||"admin"}async getMongoDb(e){return(await this.getMongoClient()).db(e??this.getMongoDbName())}async closeAll(){let e=Array.from(this.pgPools.entries()).map(async([n,r])=>{await r.end()}),o=Array.from(this.mysqlPools.entries()).map(async([n,r])=>{await r.end()}),a=Array.from(this.mssqlPools.entries()).map(async([n,r])=>{await r.close()});await Promise.all([...e,...o,...a]),this.pgPools.clear(),this.mysqlPools.clear(),this.mssqlPools.clear(),this.mongoClient&&(await this.mongoClient.close(),this.mongoClient=null)}getActivePools(){return[...Array.from(this.pgPools.keys()),...Array.from(this.mysqlPools.keys()),...Array.from(this.mssqlPools.keys())]}},ce=new ft,C=t=>ce.getPgPool(t),S=t=>ce.getMysqlPool(t),R=async t=>ce.getMssqlPool(t),le=()=>ce.getDbType(),Fe=()=>ce.getMongoClient(),Be=()=>ce.getMongoDbName(),x=t=>ce.getMongoDb(t),He=t=>typeof t=="string"&&dt.isValid(t),je=t=>typeof t=="string"&&dt.isValid(t)?new dt(t):t});import{HTTPException as Wo}from"hono/http-exception";async function Jo(t){let e=await x(t),o=await e.listCollections().toArray(),a=[];for(let n of o){let r=n.name,i=await e.collection(r).estimatedDocumentCount();a.push({tableName:r,rowCount:i})}return a}async function Ke({tableName:t,db:e}){let n=await(await x(e)).collection(t).find({}).limit(Ws).toArray(),r=n.length,i=new Map,c=(s,l)=>{let m=zs(l);if(!i.has(s))i.set(s,{types:new Set([m]),nullable:!1,presentCount:1});else{let p=i.get(s);p&&(p.types.add(m),p.presentCount+=1)}};for(let s of n)for(let[l,m]of Object.entries(s)){if(m==null){if(!i.has(l))i.set(l,{types:new Set(["text"]),nullable:!0,presentCount:1});else{let p=i.get(l);p&&(p.nullable=!0),p&&(p.presentCount+=1)}continue}c(l,m)}if(r>0)for(let s of i.values())s.presentCount<r&&(s.nullable=!0);return i.has("_id")||i.set("_id",{types:new Set(["text"]),nullable:!1,presentCount:r}),Array.from(i.entries()).map(([s,l])=>{let m=l.types.values().next().value??"text";return{columnName:s,dataType:m,dataTypeLabel:Gs(m),isNullable:l.nullable,columnDefault:null,isPrimaryKey:s==="_id",isForeignKey:!1,referencedTable:null,referencedColumn:null,enumValues:null}})}async function Xo({tableName:t,cursor:e,limit:o,direction:a,sort:n,order:r,filters:i,db:c}){let l=(await x(c)).collection(t),m=Js(i??[]),p=Go(n??"",r),u=o&&o>0?o:50,d=Ys(e),g=Number.isFinite(d)&&d>=0?d:0,y=a==="desc"?Math.max(g-u,0):g,[b,E]=await Promise.all([l.countDocuments(m),l.find(m).sort(p).skip(y).limit(u).toArray()]),N=E.map(k=>we(k)),A=y+u,q=Math.max(y-u,0);return{data:N,meta:{limit:u,total:b,hasNextPage:A<b,hasPreviousPage:y>0,nextCursor:A<b?Yo(A):null,prevCursor:y>0?Yo(q):null}}}async function Zo({tableName:t,tableData:e,db:o}){let a=await x(o);if((await a.listCollections({name:t}).toArray()).length>0)throw new Wo(400,{message:`Collection "${t}" already exists`});let r=e?.fields??[];if(r.length===0){await a.createCollection(t);return}let i={},c=[];for(let s of r){let l=Qs(s.columnType);if(!zo.has(l))throw new Wo(400,{message:`Unsupported MongoDB BSON type "${s.columnType}" for field "${s.columnName}"`});s.isArray?i[s.columnName]={bsonType:"array",...l!=="array"?{items:{bsonType:l}}:{}}:i[s.columnName]={bsonType:l},s.isNullable||c.push(s.columnName)}await a.createCollection(t,{validator:{$jsonSchema:{bsonType:"object",required:c,properties:i,additionalProperties:!0}},validationAction:"error"})}async function ea({tableName:t,columnName:e,db:o}){return{deletedCount:(await(await x(o)).collection(t).updateMany({},{$unset:{[e]:""}})).modifiedCount}}async function ta({tableName:t,db:e}){let r=(await(await x(e)).collection(t).find({}).limit(1e4).toArray()).map(c=>we(c));return{cols:Array.from(new Set(r.flatMap(c=>Object.keys(c)))),rows:r}}var zo,Qs,Ws,Yo,Ys,we,zs,Gs,Js,Go,te,oa,me,bt,ye=f(()=>{"use strict";h();zo=new Set(["double","string","object","array","binData","undefined","objectId","bool","date","null","regex","dbPointer","javascript","symbol","javascriptWithScope","int","timestamp","long","decimal","minKey","maxKey"]),Qs=t=>{let e=t.trim();if(zo.has(e))return e;switch(e.toLowerCase()){case"boolean":return"bool";case"objectid":return"objectId";case"binary":return"binData";default:return e}},Ws=200,Yo=t=>Buffer.from(JSON.stringify({offset:t})).toString("base64url"),Ys=t=>{if(!t)return 0;try{let e=JSON.parse(Buffer.from(t,"base64url").toString("utf-8"));return typeof e.offset=="number"?e.offset:0}catch{return 0}},we=t=>{if(t instanceof Date)return t.toISOString();if(typeof t=="bigint")return t.toString();if(t&&typeof t=="object"){if("_bsontype"in t&&t._bsontype==="ObjectId")return t.toHexString();if(Array.isArray(t))return t.map(o=>we(o));let e=Object.entries(t).map(([o,a])=>[o,we(a)]);return Object.fromEntries(e)}return t},zs=t=>t instanceof Date?"date":t&&typeof t=="object"?Array.isArray(t)?"array":"_bsontype"in t?"text":"json":typeof t=="boolean"?"boolean":typeof t=="number"||typeof t=="bigint"?"number":"text",Gs=t=>{switch(t){case"number":return"numeric";case"boolean":return"boolean";case"json":return"json";case"date":return"date";case"array":return"array";case"enum":return"enum";default:return"text"}},Js=t=>{if(!t||t.length===0)return{};let e=[],o=n=>n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=n=>{let r=n.trim();if(r==="null")return null;if(r==="true")return!0;if(r==="false")return!1;let i=Number(r);return!Number.isNaN(i)&&r!==""?i:He(r)?je(r):r};for(let n of t){let r=n.columnName,i=a(n.value),c=n.operator.toLowerCase();if(r)switch(c){case"=":e.push({[r]:i});break;case"!=":e.push({[r]:{$ne:i}});break;case">":e.push({[r]:{$gt:i}});break;case">=":e.push({[r]:{$gte:i}});break;case"<":e.push({[r]:{$lt:i}});break;case"<=":e.push({[r]:{$lte:i}});break;case"is":e.push({[r]:i});break;case"is not":e.push({[r]:{$ne:i}});break;case"like":e.push({[r]:{$regex:o(String(i)),$options:""}});break;case"not like":e.push({[r]:{$not:{$regex:o(String(i)),$options:""}}});break;case"ilike":e.push({[r]:{$regex:o(String(i)),$options:"i"}});break;case"not ilike":e.push({[r]:{$not:{$regex:o(String(i)),$options:"i"}}});break;default:e.push({[r]:i});break}}return e.length?{$and:e}:{}},Go=(t,e)=>{if(!t)return{_id:1};if(Array.isArray(t)){let o=t.map(a=>[a.columnName,a.direction==="desc"?-1:1]);return Object.fromEntries(o)}return typeof t=="string"&&t.length>0?{[t]:e==="desc"?-1:1}:{_id:1}};te=we,oa=Go,me=je,bt=He});async function aa(t,e={}){let{includeSampleData:o=!1,maxTables:a}=e,n=await x(t),r=await n.listCollections().toArray(),c=(typeof a=="number"&&a>0?r.slice(0,a):r).map(async l=>{let m=l.name,p=await Ke({tableName:m,db:t}),u={name:m,columns:p.map(Xs)};if(o){let g=(await n.collection(m).find({}).limit(3).toArray()).map(y=>te(y));u.sampleData=g.map(y=>Object.fromEntries(Object.entries(y).map(([b,E])=>[b,String(E)])))}return u});return{dbType:"mongodb",tables:await Promise.all(c),relationships:[]}}var Xs,na=f(()=>{"use strict";h();ye();Xs=t=>({name:t.columnName,type:t.dataTypeLabel,nullable:t.isNullable,isPrimaryKey:t.isPrimaryKey})});import{Pool as Zs}from"pg";var Ve,ei,yt,ra=f(()=>{"use strict";Ve=null,ei=()=>{if(!Ve){if(!process.env.DATABASE_URL)throw new Error("DATABASE_URL is not set. Please provide a database connection string.");try{Ve=new Zs({connectionString:process.env.DATABASE_URL}),Ve.on("error",t=>{})}catch(t){throw t}}return Ve},yt=new Proxy({},{get(t,e){try{return ei()[e]}catch(o){throw o}}})});import{HTTPException as ti}from"hono/http-exception";async function Qe({tableName:t,db:e}){let o=C(e),a=`
3
3
  SELECT
4
4
  c.column_name as "columnName",
5
5
  c.data_type as "dataType",
@@ -48,7 +48,7 @@ var cs=Object.defineProperty;var f=(t,e)=>()=>(t&&(e=t(t=0)),e);var Pt=(t,e)=>{f
48
48
  WHERE c.table_schema = 'public'
49
49
  AND c.table_name = $1
50
50
  ORDER BY c.ordinal_position;
51
- `,{rows:n}=await o.query(a,[t]);if(!n||n.length===0)throw new ti(404,{message:`Table "${t}" does not exist`});return n.map(r=>{let s=null;return r.enumValues&&(Array.isArray(r.enumValues)?s=r.enumValues:typeof r.enumValues=="string"&&(s=r.enumValues.replace(/[{}]/g,"").split(",").filter(Boolean))),{columnName:r.columnName,dataType:uo(r.dataType),dataTypeLabel:po(r.dataType),isNullable:r.isNullable,columnDefault:r.columnDefault,isPrimaryKey:r.isPrimaryKey,isForeignKey:r.isForeignKey,referencedTable:r.referencedTable,referencedColumn:r.referencedColumn,enumValues:s}})}var gt=f(()=>{"use strict";X();h()});async function ai(t){let e=C(t),o=`
51
+ `,{rows:n}=await o.query(a,[t]);if(!n||n.length===0)throw new ti(404,{message:`Table "${t}" does not exist`});return n.map(r=>{let i=null;return r.enumValues&&(Array.isArray(r.enumValues)?i=r.enumValues:typeof r.enumValues=="string"&&(i=r.enumValues.replace(/[{}]/g,"").split(",").filter(Boolean))),{columnName:r.columnName,dataType:uo(r.dataType),dataTypeLabel:po(r.dataType),isNullable:r.isNullable,columnDefault:r.columnDefault,isPrimaryKey:r.isPrimaryKey,isForeignKey:r.isForeignKey,referencedTable:r.referencedTable,referencedColumn:r.referencedColumn,enumValues:i}})}var gt=f(()=>{"use strict";X();h()});async function ai(t){let e=C(t),o=`
52
52
  SELECT table_name
53
53
  FROM information_schema.tables
54
54
  WHERE table_schema = 'public'
@@ -59,7 +59,7 @@ var cs=Object.defineProperty;var f=(t,e)=>()=>(t&&(e=t(t=0)),e);var Pt=(t,e)=>{f
59
59
  FROM pg_class
60
60
  WHERE relname = $1
61
61
  AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'public');
62
- `,[t])).rows[0]?.description||void 0}finally{e.release()}}async function ri(t){let e=await yt.connect();try{return(await e.query(`SELECT * FROM "${t}" LIMIT 3`)).rows}catch{return[]}finally{e.release()}}function si(t){let e={name:t.columnName,type:t.dataTypeLabel,nullable:t.isNullable};return t.isPrimaryKey&&(e.isPrimaryKey=!0),t.isForeignKey&&t.referencedTable&&t.referencedColumn&&(e.foreignKey=`${t.referencedTable}.${t.referencedColumn}`),t.enumValues&&t.enumValues.length>0&&(e.enumValues=t.enumValues,e.description=`Enum values: ${t.enumValues.join(", ")}`),e}function ii(t){let e=[];for(let o of t)for(let a of o.columns)if(a.foreignKey){let[n,r]=a.foreignKey.split(".");e.push({fromTable:o.name,fromColumn:a.name,toTable:n,toColumn:r})}return e}async function ci(t,e={}){if(ce()==="mongodb")return aa(t,{includeSampleData:e.includeSampleData});let{includeSampleData:o=!1,includeDescriptions:a=!0}=e;try{let r=(await ai(t)).map(async i=>{let[l,m,p]=await Promise.all([Qe({tableName:i,db:t}),a?ni(i):Promise.resolve(void 0),o?ri(i):Promise.resolve([])]),u={name:i,columns:l.map(si)};return m&&(u.description=m),p.length>0&&(u.sampleData=p.map(d=>Object.fromEntries(Object.entries(d).map(([g,y])=>[g,String(y)])))),u}),s=await Promise.all(r),c=ii(s);return{dbType:"pg",tables:s,relationships:c}}catch(n){throw new Error(`Failed to fetch database schema: ${n instanceof Error?n.message:"Unknown error"}`)}}async function sa(t){return ci(t,{includeSampleData:!0,includeDescriptions:!0})}var ia=f(()=>{"use strict";na();ra();h();gt()});function la(t){let e=t.dbType.toLowerCase(),o=t.dbType==="pg"?"PostgreSQL":t.dbType;return e.includes("mongo")?`You are a database assistant for db-studio. Your responses must be CONCISE and FOCUSED.
62
+ `,[t])).rows[0]?.description||void 0}finally{e.release()}}async function ri(t){let e=await yt.connect();try{return(await e.query(`SELECT * FROM "${t}" LIMIT 3`)).rows}catch{return[]}finally{e.release()}}function si(t){let e={name:t.columnName,type:t.dataTypeLabel,nullable:t.isNullable};return t.isPrimaryKey&&(e.isPrimaryKey=!0),t.isForeignKey&&t.referencedTable&&t.referencedColumn&&(e.foreignKey=`${t.referencedTable}.${t.referencedColumn}`),t.enumValues&&t.enumValues.length>0&&(e.enumValues=t.enumValues,e.description=`Enum values: ${t.enumValues.join(", ")}`),e}function ii(t){let e=[];for(let o of t)for(let a of o.columns)if(a.foreignKey){let[n,r]=a.foreignKey.split(".");e.push({fromTable:o.name,fromColumn:a.name,toTable:n,toColumn:r})}return e}async function ci(t,e={}){if(le()==="mongodb")return aa(t,{includeSampleData:e.includeSampleData});let{includeSampleData:o=!1,includeDescriptions:a=!0}=e;try{let r=(await ai(t)).map(async s=>{let[l,m,p]=await Promise.all([Qe({tableName:s,db:t}),a?ni(s):Promise.resolve(void 0),o?ri(s):Promise.resolve([])]),u={name:s,columns:l.map(si)};return m&&(u.description=m),p.length>0&&(u.sampleData=p.map(d=>Object.fromEntries(Object.entries(d).map(([g,y])=>[g,String(y)])))),u}),i=await Promise.all(r),c=ii(i);return{dbType:"pg",tables:i,relationships:c}}catch(n){throw new Error(`Failed to fetch database schema: ${n instanceof Error?n.message:"Unknown error"}`)}}async function sa(t){return ci(t,{includeSampleData:!0,includeDescriptions:!0})}var ia=f(()=>{"use strict";na();ra();h();gt()});function la(t){let e=t.dbType.toLowerCase(),o=t.dbType==="pg"?"PostgreSQL":t.dbType;return e.includes("mongo")?`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 a query
@@ -178,24 +178,24 @@ This will return the 5 customers with the highest total order value. You might a
178
178
  ### ${a.name}
179
179
  `,a.description&&(o+=`Description: ${a.description}
180
180
  `),o+=`Columns:
181
- `;for(let n of a.columns){let r=n.isPrimaryKey?" [PRIMARY KEY]":"",s=n.foreignKey?` [FK -> ${n.foreignKey}]`:"",c=n.nullable?"NULL":"NOT NULL";o+=` - ${n.name}: ${n.type} ${c}${r}${s}
181
+ `;for(let n of a.columns){let r=n.isPrimaryKey?" [PRIMARY KEY]":"",i=n.foreignKey?` [FK -> ${n.foreignKey}]`:"",c=n.nullable?"NULL":"NOT NULL";o+=` - ${n.name}: ${n.type} ${c}${r}${i}
182
182
  `,n.description&&(o+=` ${n.description}
183
183
  `)}a.sampleData&&a.sampleData.length>0&&(o+=`Sample data (${a.sampleData.length} rows):
184
184
  `,o+=`${JSON.stringify(a.sampleData.slice(0,3),null,2)}
185
185
  `)}if(t.relationships&&t.relationships.length>0){o+=`
186
186
  **Relationships:**
187
187
  `;for(let a of t.relationships)o+=` - ${a.fromTable}.${a.fromColumn} -> ${a.toTable}.${a.toColumn}
188
- `}return o}var ma=f(()=>{"use strict"});import{zValidator as li}from"@hono/zod-validator";import{Hono as mi}from"hono";var ua,pa=f(()=>{"use strict";Pe();X();ia();ma();ua=new mi().basePath("/chat").post("/",li("json",co),async t=>{let{messages:e,conversationId:o,db:a}=t.req.valid("json"),n=await sa(a),r=la(n),s={messages:e,conversationId:o,systemPrompt:r},c=await fetch(`${se.PROXY_URL}/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!c.ok){let m=await c.json();return t.json({error:m.error||"Proxy request failed"},c.status)}let{readable:i,writable:l}=new TransformStream;return c.body?.pipeTo(l),new Response(i,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})})});import{HTTPException as ui}from"hono/http-exception";async function da({db:t,params:e}){let{tableName:o,data:a}=e,n=C(t),r=Object.keys(a),s=Object.values(a),c=r.map((p,u)=>`$${u+1}`).join(", "),i=r.map(p=>`"${p}"`).join(", "),l=`
189
- INSERT INTO "${o}" (${i})
188
+ `}return o}var ma=f(()=>{"use strict"});import{zValidator as li}from"@hono/zod-validator";import{Hono as mi}from"hono";var ua,pa=f(()=>{"use strict";Pe();X();ia();ma();ua=new mi().basePath("/chat").post("/",li("json",co),async t=>{let{messages:e,data:o}=t.req.valid("json"),{db:a,conversationId:n}=o,r=await sa(a),i=la(r),c={messages:e,conversationId:n,systemPrompt:i},s=await fetch(`${se.PROXY_URL}/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});if(!s.ok){let p=await s.json();return t.json({error:p.error||"Proxy request failed"},s.status)}let{readable:l,writable:m}=new TransformStream;return s.body?.pipeTo(m),new Response(l,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})})});import{HTTPException as ui}from"hono/http-exception";async function da({db:t,params:e}){let{tableName:o,data:a}=e,n=C(t),r=Object.keys(a),i=Object.values(a),c=r.map((p,u)=>`$${u+1}`).join(", "),s=r.map(p=>`"${p}"`).join(", "),l=`
189
+ INSERT INTO "${o}" (${s})
190
190
  VALUES (${c})
191
191
  RETURNING *
192
- `,m=await n.query(l,s);if(m.rowCount===0)throw new ui(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:m.rowCount??0}}var fa=f(()=>{"use strict";h()});import{HTTPException as We}from"hono/http-exception";var ba,ya=f(()=>{"use strict";h();ba=async({tableName:t,records:e,db:o})=>{if(!e||e.length===0)throw new We(400,{message:"At least one record is required"});let n=await C(o).connect();try{let r=Object.keys(e[0]),s=r.map(m=>`"${m}"`).join(", "),c=0,i=0,l=[];await n.query("BEGIN");for(let m=0;m<e.length;m++){let p=e[m],u=r.map(y=>p[y]),d=r.map((y,b)=>`$${b+1}`).join(", "),g=`
193
- INSERT INTO "${t}" (${s})
192
+ `,m=await n.query(l,i);if(m.rowCount===0)throw new ui(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:m.rowCount??0}}var fa=f(()=>{"use strict";h()});import{HTTPException as We}from"hono/http-exception";var ba,ya=f(()=>{"use strict";h();ba=async({tableName:t,records:e,db:o})=>{if(!e||e.length===0)throw new We(400,{message:"At least one record is required"});let n=await C(o).connect();try{let r=Object.keys(e[0]),i=r.map(m=>`"${m}"`).join(", "),c=0,s=0,l=[];await n.query("BEGIN");for(let m=0;m<e.length;m++){let p=e[m],u=r.map(y=>p[y]),d=r.map((y,b)=>`$${b+1}`).join(", "),g=`
193
+ INSERT INTO "${t}" (${i})
194
194
  VALUES (${d})
195
195
  RETURNING *
196
- `;try{await n.query(g,u),c++}catch(y){throw new We(500,{message:`Failed: ${y instanceof Error?y.message:String(y)}`})}}return await n.query("COMMIT"),{success:i===0,message:`Bulk insert completed: ${c} records inserted${i>0?`, ${i} failed`:""}`,successCount:c,failureCount:i,errors:l.length>0?l:void 0}}catch(r){throw await n.query("ROLLBACK"),r instanceof We?r:new We(500,{message:`Failed to bulk insert records into "${t}"`})}finally{n.release()}}});async function ga({tableData:t,db:e}){let{tableName:o,fields:a,foreignKeys:n}=t,r=C(e),s=a.map(m=>{let p=`"${m.columnName}" ${m.columnType}`;return m.isArray&&(p+="[]"),m.isPrimaryKey&&(p+=" PRIMARY KEY"),m.isUnique&&!m.isPrimaryKey&&(p+=" UNIQUE"),m.isNullable||(p+=" NOT NULL"),m.isIdentity&&(p+=" GENERATED ALWAYS AS IDENTITY"),m.defaultValue&&!m.isIdentity&&(p+=` DEFAULT ${m.defaultValue}`),p}),c=n?.map(m=>`CONSTRAINT "${`fk_${o}_${m.columnName}_${m.referencedTable}_${m.referencedColumn}`}" FOREIGN KEY ("${m.columnName}") REFERENCES "${m.referencedTable}" ("${m.referencedColumn}") ON UPDATE ${m.onUpdate} ON DELETE ${m.onDelete}`)||[],i=[...s,...c],l=`
196
+ `;try{await n.query(g,u),c++}catch(y){throw new We(500,{message:`Failed: ${y instanceof Error?y.message:String(y)}`})}}return await n.query("COMMIT"),{success:s===0,message:`Bulk insert completed: ${c} records inserted${s>0?`, ${s} failed`:""}`,successCount:c,failureCount:s,errors:l.length>0?l:void 0}}catch(r){throw await n.query("ROLLBACK"),r instanceof We?r:new We(500,{message:`Failed to bulk insert records into "${t}"`})}finally{n.release()}}});async function ga({tableData:t,db:e}){let{tableName:o,fields:a,foreignKeys:n}=t,r=C(e),i=a.map(m=>{let p=`"${m.columnName}" ${m.columnType}`;return m.isArray&&(p+="[]"),m.isPrimaryKey&&(p+=" PRIMARY KEY"),m.isUnique&&!m.isPrimaryKey&&(p+=" UNIQUE"),m.isNullable||(p+=" NOT NULL"),m.isIdentity&&(p+=" GENERATED ALWAYS AS IDENTITY"),m.defaultValue&&!m.isIdentity&&(p+=` DEFAULT ${m.defaultValue}`),p}),c=n?.map(m=>`CONSTRAINT "${`fk_${o}_${m.columnName}_${m.referencedTable}_${m.referencedColumn}`}" FOREIGN KEY ("${m.columnName}") REFERENCES "${m.referencedTable}" ("${m.referencedColumn}") ON UPDATE ${m.onUpdate} ON DELETE ${m.onDelete}`)||[],s=[...i,...c],l=`
197
197
  CREATE TABLE "${o}" (
198
- ${i.join(`,
198
+ ${s.join(`,
199
199
  `)}
200
200
  );
201
201
  `;await r.query(l)}var Ta=f(()=>{"use strict";h()});function oe(){let t=process.env.DATABASE_URL;if(!t)return{host:"localhost",port:5432};try{let e=new URL(t),o=e.protocol.replace(":",""),a=o==="mongodb"||o==="mongodb+srv"?27017:5432;return{host:e.hostname||"localhost",port:Number.parseInt(e.port,10)||a}}catch{return{host:"localhost",port:5432}}}var De=f(()=>{"use strict"});import{HTTPException as Tt}from"hono/http-exception";async function Ea(){let t=C(),e=`
@@ -216,17 +216,17 @@ This will return the 5 customers with the highest total order value. You might a
216
216
  inet_server_port() as port,
217
217
  (SELECT count(*) FROM pg_stat_activity WHERE datname = current_database()) as active_connections,
218
218
  (SELECT setting::int FROM pg_settings WHERE name = 'max_connections') as max_connections;
219
- `,{rows:o}=await t.query(e);if(!o[0])throw new Tt(500,{message:"No connection information returned from database"});let a=So.parse(o[0]),n=oe();return{host:a.host||n.host,port:a.port||n.port,user:a.user,database:a.database,version:a.version.toString(),active_connections:a.active_connections,max_connections:a.max_connections}}var Sa=f(()=>{"use strict";X();h();De()});import{HTTPException as Na}from"hono/http-exception";async function Ra(t){let{tableName:e,columnName:o,cascade:a,db:n}=t,r=C(n),s=`
219
+ `,{rows:o}=await t.query(e);if(!o[0])throw new Tt(500,{message:"No connection information returned from database"});let a=So.parse(o[0]),n=oe();return{host:a.host||n.host,port:a.port||n.port,user:a.user,database:a.database,version:a.version.toString(),active_connections:a.active_connections,max_connections:a.max_connections}}var Sa=f(()=>{"use strict";X();h();De()});import{HTTPException as Na}from"hono/http-exception";async function Ra(t){let{tableName:e,columnName:o,cascade:a,db:n}=t,r=C(n),i=`
220
220
  SELECT EXISTS (
221
221
  SELECT 1 FROM information_schema.tables
222
222
  WHERE table_name = $1 AND table_schema = 'public'
223
223
  ) as exists;
224
- `,{rows:c}=await r.query(s,[e]);if(!c[0]?.exists)throw new Na(404,{message:`Table "${e}" does not exist`});let i=`
224
+ `,{rows:c}=await r.query(i,[e]);if(!c[0]?.exists)throw new Na(404,{message:`Table "${e}" does not exist`});let s=`
225
225
  SELECT EXISTS (
226
226
  SELECT 1 FROM information_schema.columns
227
227
  WHERE table_name = $1 AND column_name = $2 AND table_schema = 'public'
228
228
  ) as exists;
229
- `,{rows:l}=await r.query(i,[e,o]);if(!l[0]?.exists)throw new Na(404,{message:`Column "${o}" does not exist in table "${e}"`});let p=`ALTER TABLE "${e}" DROP COLUMN "${o}" ${a?"CASCADE":"RESTRICT"}`,{rowCount:u}=await r.query(p);return{deletedCount:u??0}}var Aa=f(()=>{"use strict";h()});import{HTTPException as ge}from"hono/http-exception";async function Et(t,e){return(await C(e).query(`
229
+ `,{rows:l}=await r.query(s,[e,o]);if(!l[0]?.exists)throw new Na(404,{message:`Column "${o}" does not exist in table "${e}"`});let p=`ALTER TABLE "${e}" DROP COLUMN "${o}" ${a?"CASCADE":"RESTRICT"}`,{rowCount:u}=await r.query(p);return{deletedCount:u??0}}var Aa=f(()=>{"use strict";h()});import{HTTPException as ge}from"hono/http-exception";async function Et(t,e){return(await C(e).query(`
230
230
  SELECT
231
231
  tc.constraint_name,
232
232
  tc.table_name as referencing_table,
@@ -242,25 +242,25 @@ This will return the 5 customers with the highest total order value. You might a
242
242
  AND ccu.table_schema = tc.table_schema
243
243
  WHERE tc.constraint_type = 'FOREIGN KEY'
244
244
  AND ccu.table_name = $1
245
- `,[t])).rows.map(r=>({constraintName:r.constraint_name,referencingTable:r.referencing_table,referencingColumn:r.referencing_column,referencedTable:r.referenced_table,referencedColumn:r.referenced_column}))}async function gi(t,e,o){let a=await Et(t,o);if(a.length===0)return[];let n=[],r=C(o),s=new Map;for(let i of a){let l=`${i.referencingTable}.${i.referencingColumn}`;s.has(l)||s.set(l,[]),s.get(l)?.push(i)}let c=e.map(i=>i.value);for(let[i,l]of s){let m=l[0];if(!m||!e.find(y=>y.columnName===m.referencedColumn))continue;let u=c.map((y,b)=>`$${b+1}`).join(", "),d=`
245
+ `,[t])).rows.map(r=>({constraintName:r.constraint_name,referencingTable:r.referencing_table,referencingColumn:r.referencing_column,referencedTable:r.referenced_table,referencedColumn:r.referenced_column}))}async function gi(t,e,o){let a=await Et(t,o);if(a.length===0)return[];let n=[],r=C(o),i=new Map;for(let s of a){let l=`${s.referencingTable}.${s.referencingColumn}`;i.has(l)||i.set(l,[]),i.get(l)?.push(s)}let c=e.map(s=>s.value);for(let[s,l]of i){let m=l[0];if(!m||!e.find(y=>y.columnName===m.referencedColumn))continue;let u=c.map((y,b)=>`$${b+1}`).join(", "),d=`
246
246
  SELECT * FROM "${m.referencingTable}"
247
247
  WHERE "${m.referencingColumn}" IN (${u})
248
248
  LIMIT 100
249
- `,g=await r.query(d,c);g.rows.length>0&&n.push({tableName:m.referencingTable,columnName:m.referencingColumn,constraintName:m.constraintName,records:g.rows})}return n}async function wa({tableName:t,primaryKeys:e,db:o}){let a=C(o),n=e[0]?.columnName;if(!n)throw new ge(400,{message:"Primary key column name is required"});let r=e.map(i=>i.value),s=r.map((i,l)=>`$${l+1}`).join(", "),c=`
249
+ `,g=await r.query(d,c);g.rows.length>0&&n.push({tableName:m.referencingTable,columnName:m.referencingColumn,constraintName:m.constraintName,records:g.rows})}return n}async function wa({tableName:t,primaryKeys:e,db:o}){let a=C(o),n=e[0]?.columnName;if(!n)throw new ge(400,{message:"Primary key column name is required"});let r=e.map(s=>s.value),i=r.map((s,l)=>`$${l+1}`).join(", "),c=`
250
250
  DELETE FROM "${t}"
251
- WHERE "${n}" IN (${s})
251
+ WHERE "${n}" IN (${i})
252
252
  RETURNING *
253
- `;try{await a.query("BEGIN");let i=await a.query(c,r);return await a.query("COMMIT"),{deletedCount:i.rowCount??0,fkViolation:!1,relatedRecords:[]}}catch(i){if(await a.query("ROLLBACK"),i.code==="23503")return{deletedCount:0,fkViolation:!0,relatedRecords:await gi(t,e,o)};throw i instanceof ge?i:new ge(500,{message:`Failed to delete records from "${t}"`})}}async function Da({tableName:t,primaryKeys:e,db:o}){let a=C(o),n=e[0]?.columnName;if(!n)throw new ge(400,{message:"Primary key column name is required"});let r=e.map(s=>s.value);await a.query("BEGIN");try{let s=await Et(t,o),c=0,i=new Set,l=async(g,y,b)=>{let E=await Et(g,o);for(let k of E){let H=b.map((F,Y)=>`$${Y+1}`).join(", "),j=`
253
+ `;try{await a.query("BEGIN");let s=await a.query(c,r);return await a.query("COMMIT"),{deletedCount:s.rowCount??0,fkViolation:!1,relatedRecords:[]}}catch(s){if(await a.query("ROLLBACK"),s.code==="23503")return{deletedCount:0,fkViolation:!0,relatedRecords:await gi(t,e,o)};throw s instanceof ge?s:new ge(500,{message:`Failed to delete records from "${t}"`})}}async function Da({tableName:t,primaryKeys:e,db:o}){let a=C(o),n=e[0]?.columnName;if(!n)throw new ge(400,{message:"Primary key column name is required"});let r=e.map(i=>i.value);await a.query("BEGIN");try{let i=await Et(t,o),c=0,s=new Set,l=async(g,y,b)=>{let E=await Et(g,o);for(let k of E){let H=b.map((F,Y)=>`$${Y+1}`).join(", "),j=`
254
254
  SELECT "${k.referencedColumn}" FROM "${g}"
255
255
  WHERE "${y}" IN (${H})
256
256
  `,D=(await a.query(j,b)).rows.map(({row:F})=>F[k.referencedColumn]);D.length>0&&await l(k.referencingTable,k.referencingColumn,D)}let N=b.map((k,H)=>`$${H+1}`).join(", "),A=`
257
257
  DELETE FROM "${g}"
258
258
  WHERE "${y}" IN (${N})
259
- `,q=await a.query(A,b);c+=q.rowCount??0,i.add(g)};for(let g of s)i.has(g.referencingTable)||await l(g.referencingTable,g.referencingColumn,r);let m=r.map((g,y)=>`$${y+1}`).join(", "),p=`
259
+ `,q=await a.query(A,b);c+=q.rowCount??0,s.add(g)};for(let g of i)s.has(g.referencingTable)||await l(g.referencingTable,g.referencingColumn,r);let m=r.map((g,y)=>`$${y+1}`).join(", "),p=`
260
260
  DELETE FROM "${t}"
261
261
  WHERE "${n}" IN (${m})
262
262
  RETURNING *
263
- `,u=await a.query(p,r);return await a.query("COMMIT"),{deletedCount:(u.rowCount??0)+c}}catch(s){throw await a.query("ROLLBACK"),s instanceof ge?s:new ge(500,{message:`Failed to force delete records from "${t}"`})}}var _a=f(()=>{"use strict";h()});import{HTTPException as ht}from"hono/http-exception";async function Ei(t,e){return(await C(e).query(`
263
+ `,u=await a.query(p,r);return await a.query("COMMIT"),{deletedCount:(u.rowCount??0)+c}}catch(i){throw await a.query("ROLLBACK"),i instanceof ge?i:new ge(500,{message:`Failed to force delete records from "${t}"`})}}var _a=f(()=>{"use strict";h()});import{HTTPException as ht}from"hono/http-exception";async function Ei(t,e){return(await C(e).query(`
264
264
  SELECT
265
265
  tc.constraint_name,
266
266
  tc.table_name as referencing_table,
@@ -276,15 +276,15 @@ This will return the 5 customers with the highest total order value. You might a
276
276
  AND ccu.table_schema = tc.table_schema
277
277
  WHERE tc.constraint_type = 'FOREIGN KEY'
278
278
  AND ccu.table_name = $1
279
- `,[t])).rows.map(r=>({constraintName:r.constraint_name,referencingTable:r.referencing_table,referencingColumn:r.referencing_column,referencedTable:r.referenced_table,referencedColumn:r.referenced_column}))}async function Ma(t,e){let o=await Ei(t,e);if(o.length===0)return[];let a=[],n=C(e);for(let r of o){let s=`
279
+ `,[t])).rows.map(r=>({constraintName:r.constraint_name,referencingTable:r.referencing_table,referencingColumn:r.referencing_column,referencedTable:r.referenced_table,referencedColumn:r.referenced_column}))}async function Ma(t,e){let o=await Ei(t,e);if(o.length===0)return[];let a=[],n=C(e);for(let r of o){let i=`
280
280
  SELECT * FROM "${r.referencingTable}"
281
281
  LIMIT 100
282
- `,c=await n.query(s);c.rows.length>0&&a.push({tableName:r.referencingTable,columnName:r.referencingColumn,constraintName:r.constraintName,records:c.rows})}return a}async function hi(t,e){let a=await C(e).query(`SELECT COUNT(*) as count FROM "${t}"`);return Number.parseInt(a.rows[0]?.count??"0",10)}async function xa(t){let{tableName:e,db:o,cascade:a}=t,n=C(o),r=`
282
+ `,c=await n.query(i);c.rows.length>0&&a.push({tableName:r.referencingTable,columnName:r.referencingColumn,constraintName:r.constraintName,records:c.rows})}return a}async function hi(t,e){let a=await C(e).query(`SELECT COUNT(*) as count FROM "${t}"`);return Number.parseInt(a.rows[0]?.count??"0",10)}async function xa(t){let{tableName:e,db:o,cascade:a}=t,n=C(o),r=`
283
283
  SELECT EXISTS (
284
284
  SELECT 1 FROM information_schema.tables
285
285
  WHERE table_name = $1 AND table_schema = 'public'
286
286
  ) as exists;
287
- `,{rows:s}=await n.query(r,[e]);if(!s[0]?.exists)throw new ht(404,{message:`Table "${e}" does not exist`});let c=await hi(e,o);if(!a){let i=await Ma(e,o);if(i.length>0)return{deletedCount:0,fkViolation:!0,relatedRecords:i}}try{let l=`DROP TABLE "${e}" ${a?"CASCADE":"RESTRICT"}`;return await n.query(l),{deletedCount:c,fkViolation:!1,relatedRecords:[]}}catch(i){if(i.code==="2BP01")return{deletedCount:0,fkViolation:!0,relatedRecords:await Ma(e,o)};throw i instanceof ht?i:new ht(500,{message:`Failed to delete table "${e}"`})}}var La=f(()=>{"use strict";h()});import{HTTPException as Si}from"hono/http-exception";async function Oa({tableName:t,db:e}){let o=C(e),{rows:a}=await o.query(`SELECT * FROM "${t}"`);if(!a||a.length===0)throw new Si(404,{message:`Table "${t}" does not exist or has no data`});return{cols:Object.keys(a[0]),rows:a}}var Pa=f(()=>{"use strict";h()});import{HTTPException as Ia}from"hono/http-exception";var $a,qa=f(()=>{"use strict";h();ye();$a=async({tableName:t,records:e,db:o})=>{if(!e||e.length===0)throw new Ia(400,{message:"At least one record is required"});let n=(await x(o)).collection(t),r=e.map(s=>{let c=te(s);return(c._id===""||c._id===null)&&delete c._id,c});try{let s=await n.insertMany(r,{ordered:!1});return{success:!0,message:`Successfully inserted ${s.insertedCount} record${s.insertedCount!==1?"s":""}`,successCount:s.insertedCount,failureCount:e.length-s.insertedCount}}catch(s){throw new Ia(500,{message:`Bulk insert failed: ${s instanceof Error?s.message:String(s)}`})}}});import{HTTPException as Ri}from"hono/http-exception";async function ka(){let a=(await(await Fe()).db().admin().listDatabases()).databases??[];if(!a[0])throw new Ri(500,{message:"No databases returned from MongoDB"});return a.map(n=>({name:n.name,size:Ai(n.sizeOnDisk??0),owner:"n/a",encoding:"n/a"}))}async function va(){return{db:Be()}}async function Ua(){let e=(await Fe()).db().admin(),o=oe(),a={};try{a=await e.serverStatus()}catch{}return{host:o.host,port:o.port,user:"n/a",database:Be(),version:a.version??"unknown",active_connections:a.connections?.current??0,max_connections:(a.connections?.current??0)+(a.connections?.available??0)}}var Ai,Fa=f(()=>{"use strict";h();De();Ai=t=>{if(!Number.isFinite(t))return"n/a";let e=["B","KB","MB","GB","TB"],o=t,a=0;for(;o>=1024&&a<e.length-1;)o/=1024,a+=1;return`${o.toFixed(1)} ${e[a]}`}});import{HTTPException as ae}from"hono/http-exception";var Te,Ba,Ha=f(()=>{"use strict";h();ye();Te=t=>{if(t._id&&typeof t._id=="string")return{...t,_id:le(t._id)};if(t._id&&typeof t._id=="object"){let e=t._id;if(Array.isArray(e.$in))return{...t,_id:{...e,$in:e.$in.map(o=>typeof o=="string"?le(o):o)}};if(Array.isArray(e.$nin))return{...t,_id:{...e,$nin:e.$nin.map(o=>typeof o=="string"?le(o):o)}}}return t},Ba=async({query:t,db:e})=>{if(!t||!t.trim())throw new ae(400,{message:"Query is required"});let o;try{o=JSON.parse(t)}catch{throw new ae(400,{message:"Mongo query must be valid JSON"})}if(!o.collection||!o.operation)throw new ae(400,{message:"Mongo query must include collection and operation"});let n=(await x(e)).collection(o.collection),r=performance.now(),s=[],c=0,i;switch(o.operation){case"find":{let u=Te(o.filter??{}),d=n.find(u,o.options??{}),g=o.sort??oa("",void 0);d.sort(g),o.skip&&d.skip(o.skip),o.limit&&d.limit(o.limit),s=await d.toArray(),c=s.length;break}case"aggregate":{let u=o.pipeline??[];s=await n.aggregate(u,o.options??{}).toArray(),c=s.length;break}case"insertOne":{let u=o.document;if(!u)throw new ae(400,{message:"document is required"});c=(await n.insertOne(u)).insertedId?1:0,i="OK";break}case"insertMany":{let u=o.document;if(!Array.isArray(u))throw new ae(400,{message:"document array is required"});c=(await n.insertMany(u)).insertedCount??0,i="OK";break}case"updateOne":{let u=Te(o.filter??{});if(!o.update)throw new ae(400,{message:"update is required"});let d=await n.updateOne(u,o.update,o.options??{});c=d.matchedCount??0,i=`OK (${d.modifiedCount??0} modified)`;break}case"updateMany":{let u=Te(o.filter??{});if(!o.update)throw new ae(400,{message:"update is required"});let d=await n.updateMany(u,o.update,o.options??{});c=d.matchedCount??0,i=`OK (${d.modifiedCount??0} modified)`;break}case"deleteOne":{let u=Te(o.filter??{});c=(await n.deleteOne(u,o.options??{})).deletedCount??0,i="OK";break}case"deleteMany":{let u=Te(o.filter??{});c=(await n.deleteMany(u,o.options??{})).deletedCount??0,i="OK";break}case"count":{let u=Te(o.filter??{});c=await n.countDocuments(u),s=[{count:c}],i="OK";break}default:throw new ae(400,{message:"Unsupported Mongo operation"})}let l=performance.now()-r,m=s.map(u=>te(u));return{columns:m[0]?Object.keys(m[0]):[],rows:m,rowCount:c,duration:l,message:i}}});import{HTTPException as Ct}from"hono/http-exception";async function ja({db:t,params:e}){let{tableName:o,data:a}=e,r=(await x(t)).collection(o),s=te(a);if((s._id===""||s._id===null)&&delete s._id,!(await r.insertOne(s)).insertedId)throw new Ct(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:1}}async function Ka({params:t,db:e}){let{tableName:o,updates:a,primaryKey:n}=t,s=(await x(e)).collection(o),c=0,i=n||"_id",l=new Map;for(let m of a){let p=m.rowData[i];if(p==null)throw new Ct(400,{message:`Primary key "${i}" not found in row data.`});l.has(p)||l.set(p,{}),l.get(p)[m.columnName]=m.value}for(let[m,p]of l.entries()){let u=i==="_id"&&bt(m)?le(m):m,d=await s.updateOne({[i]:u},{$set:p});if(d.matchedCount===0)throw new Ct(404,{message:`Record with ${i} = ${String(m)} not found in "${o}"`});c+=d.modifiedCount}return{updatedCount:c}}async function St({tableName:t,primaryKeys:e,db:o}){let n=(await x(o)).collection(t),r=e[0]?.columnName??"_id",s=e.map(i=>r==="_id"&&bt(i.value)?le(i.value):i.value);return{deletedCount:(await n.deleteMany({[r]:{$in:s}})).deletedCount??0}}async function Va({tableName:t,primaryKeys:e,db:o}){return{deletedCount:(await St({tableName:t,primaryKeys:e,db:o})).deletedCount}}var Qa=f(()=>{"use strict";h();ye()});import{HTTPException as wi}from"hono/http-exception";async function Wa({tableName:t,db:e}){let o=await x(e);if((await o.listCollections({name:t}).toArray()).length===0)throw new wi(404,{message:`Collection "${t}" does not exist`});let n=o.collection(t),r=await n.find({}).limit(Di).toArray(),s=await n.estimatedDocumentCount(),c=new Map,i=new Map;for(let u of r)for(let[d,g]of Object.entries(u)){let y=_i(g);c.has(d)||(c.set(d,new Set),i.set(d,0)),c.get(d)?.add(y),i.set(d,(i.get(d)??0)+1)}let l={},m=[];for(let[u,d]of c.entries()){let g=i.get(u)??0,y=g===r.length&&r.length>0,b=Array.from(d).filter(N=>N!=="null"),E=d.has("null")||g<r.length;y&&!E&&m.push(u),l[u]=b.length===1?{bsonType:E?[b[0],"null"]:b[0]}:{bsonType:E?[...b,"null"]:b}}let p={collection:t,estimatedDocumentCount:s,sampledDocuments:r.length,jsonSchema:{bsonType:"object",required:m.length>0?m:void 0,properties:l}};return JSON.stringify(p,null,2)}var Di,_i,Ya=f(()=>{"use strict";h();Di=200,_i=t=>{if(t==null)return"null";if(t instanceof Date)return"date";if(typeof t=="boolean")return"bool";if(typeof t=="number")return Number.isInteger(t)?"int":"double";if(typeof t=="bigint")return"long";if(Array.isArray(t))return"array";if(typeof t=="object"){if("_bsontype"in t){let e=t._bsontype;return e==="ObjectId"?"objectId":e==="Decimal128"?"decimal":e==="Binary"?"binData":e==="Timestamp"?"timestamp":e.toLowerCase()}return"object"}return"string"}});import{HTTPException as Mi}from"hono/http-exception";function xi(t){let e=t.match(/'([^']+)'/g);return!e||e.length===0?null:e.map(o=>o.slice(1,-1))}async function ne({tableName:t,db:e}){let o=await R(e),n=await o.request().input("tableName",t).query(`
287
+ `,{rows:i}=await n.query(r,[e]);if(!i[0]?.exists)throw new ht(404,{message:`Table "${e}" does not exist`});let c=await hi(e,o);if(!a){let s=await Ma(e,o);if(s.length>0)return{deletedCount:0,fkViolation:!0,relatedRecords:s}}try{let l=`DROP TABLE "${e}" ${a?"CASCADE":"RESTRICT"}`;return await n.query(l),{deletedCount:c,fkViolation:!1,relatedRecords:[]}}catch(s){if(s.code==="2BP01")return{deletedCount:0,fkViolation:!0,relatedRecords:await Ma(e,o)};throw s instanceof ht?s:new ht(500,{message:`Failed to delete table "${e}"`})}}var La=f(()=>{"use strict";h()});import{HTTPException as Si}from"hono/http-exception";async function Oa({tableName:t,db:e}){let o=C(e),{rows:a}=await o.query(`SELECT * FROM "${t}"`);if(!a||a.length===0)throw new Si(404,{message:`Table "${t}" does not exist or has no data`});return{cols:Object.keys(a[0]),rows:a}}var Pa=f(()=>{"use strict";h()});import{HTTPException as Ia}from"hono/http-exception";var $a,qa=f(()=>{"use strict";h();ye();$a=async({tableName:t,records:e,db:o})=>{if(!e||e.length===0)throw new Ia(400,{message:"At least one record is required"});let n=(await x(o)).collection(t),r=e.map(i=>{let c=te(i);return(c._id===""||c._id===null)&&delete c._id,c});try{let i=await n.insertMany(r,{ordered:!1});return{success:!0,message:`Successfully inserted ${i.insertedCount} record${i.insertedCount!==1?"s":""}`,successCount:i.insertedCount,failureCount:e.length-i.insertedCount}}catch(i){throw new Ia(500,{message:`Bulk insert failed: ${i instanceof Error?i.message:String(i)}`})}}});import{HTTPException as Ri}from"hono/http-exception";async function ka(){let a=(await(await Fe()).db().admin().listDatabases()).databases??[];if(!a[0])throw new Ri(500,{message:"No databases returned from MongoDB"});return a.map(n=>({name:n.name,size:Ai(n.sizeOnDisk??0),owner:"n/a",encoding:"n/a"}))}async function va(){return{db:Be()}}async function Ua(){let e=(await Fe()).db().admin(),o=oe(),a={};try{a=await e.serverStatus()}catch{}return{host:o.host,port:o.port,user:"n/a",database:Be(),version:a.version??"unknown",active_connections:a.connections?.current??0,max_connections:(a.connections?.current??0)+(a.connections?.available??0)}}var Ai,Fa=f(()=>{"use strict";h();De();Ai=t=>{if(!Number.isFinite(t))return"n/a";let e=["B","KB","MB","GB","TB"],o=t,a=0;for(;o>=1024&&a<e.length-1;)o/=1024,a+=1;return`${o.toFixed(1)} ${e[a]}`}});import{HTTPException as ae}from"hono/http-exception";var Te,Ba,Ha=f(()=>{"use strict";h();ye();Te=t=>{if(t._id&&typeof t._id=="string")return{...t,_id:me(t._id)};if(t._id&&typeof t._id=="object"){let e=t._id;if(Array.isArray(e.$in))return{...t,_id:{...e,$in:e.$in.map(o=>typeof o=="string"?me(o):o)}};if(Array.isArray(e.$nin))return{...t,_id:{...e,$nin:e.$nin.map(o=>typeof o=="string"?me(o):o)}}}return t},Ba=async({query:t,db:e})=>{if(!t||!t.trim())throw new ae(400,{message:"Query is required"});let o;try{o=JSON.parse(t)}catch{throw new ae(400,{message:"Mongo query must be valid JSON"})}if(!o.collection||!o.operation)throw new ae(400,{message:"Mongo query must include collection and operation"});let n=(await x(e)).collection(o.collection),r=performance.now(),i=[],c=0,s;switch(o.operation){case"find":{let u=Te(o.filter??{}),d=n.find(u,o.options??{}),g=o.sort??oa("",void 0);d.sort(g),o.skip&&d.skip(o.skip),o.limit&&d.limit(o.limit),i=await d.toArray(),c=i.length;break}case"aggregate":{let u=o.pipeline??[];i=await n.aggregate(u,o.options??{}).toArray(),c=i.length;break}case"insertOne":{let u=o.document;if(!u)throw new ae(400,{message:"document is required"});c=(await n.insertOne(u)).insertedId?1:0,s="OK";break}case"insertMany":{let u=o.document;if(!Array.isArray(u))throw new ae(400,{message:"document array is required"});c=(await n.insertMany(u)).insertedCount??0,s="OK";break}case"updateOne":{let u=Te(o.filter??{});if(!o.update)throw new ae(400,{message:"update is required"});let d=await n.updateOne(u,o.update,o.options??{});c=d.matchedCount??0,s=`OK (${d.modifiedCount??0} modified)`;break}case"updateMany":{let u=Te(o.filter??{});if(!o.update)throw new ae(400,{message:"update is required"});let d=await n.updateMany(u,o.update,o.options??{});c=d.matchedCount??0,s=`OK (${d.modifiedCount??0} modified)`;break}case"deleteOne":{let u=Te(o.filter??{});c=(await n.deleteOne(u,o.options??{})).deletedCount??0,s="OK";break}case"deleteMany":{let u=Te(o.filter??{});c=(await n.deleteMany(u,o.options??{})).deletedCount??0,s="OK";break}case"count":{let u=Te(o.filter??{});c=await n.countDocuments(u),i=[{count:c}],s="OK";break}default:throw new ae(400,{message:"Unsupported Mongo operation"})}let l=performance.now()-r,m=i.map(u=>te(u));return{columns:m[0]?Object.keys(m[0]):[],rows:m,rowCount:c,duration:l,message:s}}});import{HTTPException as Ct}from"hono/http-exception";async function ja({db:t,params:e}){let{tableName:o,data:a}=e,r=(await x(t)).collection(o),i=te(a);if((i._id===""||i._id===null)&&delete i._id,!(await r.insertOne(i)).insertedId)throw new Ct(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:1}}async function Ka({params:t,db:e}){let{tableName:o,updates:a,primaryKey:n}=t,i=(await x(e)).collection(o),c=0,s=n||"_id",l=new Map;for(let m of a){let p=m.rowData[s];if(p==null)throw new Ct(400,{message:`Primary key "${s}" not found in row data.`});l.has(p)||l.set(p,{}),l.get(p)[m.columnName]=m.value}for(let[m,p]of l.entries()){let u=s==="_id"&&bt(m)?me(m):m,d=await i.updateOne({[s]:u},{$set:p});if(d.matchedCount===0)throw new Ct(404,{message:`Record with ${s} = ${String(m)} not found in "${o}"`});c+=d.modifiedCount}return{updatedCount:c}}async function St({tableName:t,primaryKeys:e,db:o}){let n=(await x(o)).collection(t),r=e[0]?.columnName??"_id",i=e.map(s=>r==="_id"&&bt(s.value)?me(s.value):s.value);return{deletedCount:(await n.deleteMany({[r]:{$in:i}})).deletedCount??0}}async function Va({tableName:t,primaryKeys:e,db:o}){return{deletedCount:(await St({tableName:t,primaryKeys:e,db:o})).deletedCount}}var Qa=f(()=>{"use strict";h();ye()});import{HTTPException as wi}from"hono/http-exception";async function Wa({tableName:t,db:e}){let o=await x(e);if((await o.listCollections({name:t}).toArray()).length===0)throw new wi(404,{message:`Collection "${t}" does not exist`});let n=o.collection(t),r=await n.find({}).limit(Di).toArray(),i=await n.estimatedDocumentCount(),c=new Map,s=new Map;for(let u of r)for(let[d,g]of Object.entries(u)){let y=_i(g);c.has(d)||(c.set(d,new Set),s.set(d,0)),c.get(d)?.add(y),s.set(d,(s.get(d)??0)+1)}let l={},m=[];for(let[u,d]of c.entries()){let g=s.get(u)??0,y=g===r.length&&r.length>0,b=Array.from(d).filter(N=>N!=="null"),E=d.has("null")||g<r.length;y&&!E&&m.push(u),l[u]=b.length===1?{bsonType:E?[b[0],"null"]:b[0]}:{bsonType:E?[...b,"null"]:b}}let p={collection:t,estimatedDocumentCount:i,sampledDocuments:r.length,jsonSchema:{bsonType:"object",required:m.length>0?m:void 0,properties:l}};return JSON.stringify(p,null,2)}var Di,_i,Ya=f(()=>{"use strict";h();Di=200,_i=t=>{if(t==null)return"null";if(t instanceof Date)return"date";if(typeof t=="boolean")return"bool";if(typeof t=="number")return Number.isInteger(t)?"int":"double";if(typeof t=="bigint")return"long";if(Array.isArray(t))return"array";if(typeof t=="object"){if("_bsontype"in t){let e=t._bsontype;return e==="ObjectId"?"objectId":e==="Decimal128"?"decimal":e==="Binary"?"binData":e==="Timestamp"?"timestamp":e.toLowerCase()}return"object"}return"string"}});import{HTTPException as Mi}from"hono/http-exception";function xi(t){let e=t.match(/'([^']+)'/g);return!e||e.length===0?null:e.map(o=>o.slice(1,-1))}async function ne({tableName:t,db:e}){let o=await R(e),n=await o.request().input("tableName",t).query(`
288
288
  SELECT
289
289
  c.COLUMN_NAME AS columnName,
290
290
  c.DATA_TYPE AS dataType,
@@ -346,13 +346,13 @@ This will return the 5 customers with the highest total order value. You might a
346
346
  AND cc.TABLE_SCHEMA = 'dbo'
347
347
  WHERE cc.TABLE_NAME = @tableName
348
348
  AND cc.TABLE_CATALOG = DB_NAME()
349
- `),s=new Map;for(let c of r.recordset){let i=xi(c.checkClause);i&&s.set(c.columnName,i)}return n.recordset.map(c=>{let i=c.dataType,l=s.get(c.columnName)??null;return{columnName:c.columnName,dataType:l?"enum":yo(i),dataTypeLabel:l?"enum":go(i),isNullable:!!c.isNullable,columnDefault:c.columnDefault??null,isPrimaryKey:!!c.isPrimaryKey,isForeignKey:!!c.isForeignKey,referencedTable:c.referencedTable??null,referencedColumn:c.referencedColumn??null,enumValues:l}})}var _e=f(()=>{"use strict";X();h()});import{HTTPException as Oi}from"hono/http-exception";async function za({db:t,params:e}){let{tableName:o,data:a}=e,n=await R(t),r=await ne({tableName:o,db:t}),s=new Set(r.filter(b=>b.dataTypeLabel==="boolean").map(b=>b.columnName)),c=await n.request().input("tableName",o).query("SELECT name FROM sys.columns WHERE object_id = OBJECT_ID(@tableName) AND is_identity = 1"),i=new Set(c.recordset.map(b=>b.name)),l=Object.keys(a).filter(b=>!i.has(b)),m=l.map(b=>{let E=a[b];return s.has(b)&&typeof E=="string"?E==="true"?1:0:E}),p=l.map(b=>`[${b}]`).join(", "),u=l.map((b,E)=>`@param${E}`).join(", "),d=`
349
+ `),i=new Map;for(let c of r.recordset){let s=xi(c.checkClause);s&&i.set(c.columnName,s)}return n.recordset.map(c=>{let s=c.dataType,l=i.get(c.columnName)??null;return{columnName:c.columnName,dataType:l?"enum":yo(s),dataTypeLabel:l?"enum":go(s),isNullable:!!c.isNullable,columnDefault:c.columnDefault??null,isPrimaryKey:!!c.isPrimaryKey,isForeignKey:!!c.isForeignKey,referencedTable:c.referencedTable??null,referencedColumn:c.referencedColumn??null,enumValues:l}})}var _e=f(()=>{"use strict";X();h()});import{HTTPException as Oi}from"hono/http-exception";async function za({db:t,params:e}){let{tableName:o,data:a}=e,n=await R(t),r=await ne({tableName:o,db:t}),i=new Set(r.filter(b=>b.dataTypeLabel==="boolean").map(b=>b.columnName)),c=await n.request().input("tableName",o).query("SELECT name FROM sys.columns WHERE object_id = OBJECT_ID(@tableName) AND is_identity = 1"),s=new Set(c.recordset.map(b=>b.name)),l=Object.keys(a).filter(b=>!s.has(b)),m=l.map(b=>{let E=a[b];return i.has(b)&&typeof E=="string"?E==="true"?1:0:E}),p=l.map(b=>`[${b}]`).join(", "),u=l.map((b,E)=>`@param${E}`).join(", "),d=`
350
350
  INSERT INTO [${o}] (${p})
351
351
  VALUES (${u})
352
- `,g=n.request();l.forEach((b,E)=>{g.input(`param${E}`,m[E])});let y=await g.query(d);if(y.rowsAffected[0]===0)throw new Oi(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:y.rowsAffected[0]??0}}var Ga=f(()=>{"use strict";h();_e()});import{HTTPException as Ye}from"hono/http-exception";var Ja,Xa=f(()=>{"use strict";h();_e();Ja=async({tableName:t,records:e,db:o})=>{if(!e||e.length===0)throw new Ye(400,{message:"At least one record is required"});let n=(await R(o)).transaction();try{let r=Object.keys(e[0]),s=r.map(l=>`[${l}]`).join(", "),c=await ne({tableName:t,db:o}),i=new Set(c.filter(l=>l.dataTypeLabel==="boolean").map(l=>l.columnName));await n.begin();for(let l=0;l<e.length;l++){let m=e[l],p=n.request(),u=r.map(y=>{let b=m[y];return i.has(y)&&typeof b=="string"?b==="true"?1:0:b}),d=r.map((y,b)=>`@p${l}_${b}`).join(", ");r.forEach((y,b)=>{p.input(`p${l}_${b}`,u[b])});let g=`
353
- INSERT INTO [${t}] (${s})
352
+ `,g=n.request();l.forEach((b,E)=>{g.input(`param${E}`,m[E])});let y=await g.query(d);if(y.rowsAffected[0]===0)throw new Oi(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:y.rowsAffected[0]??0}}var Ga=f(()=>{"use strict";h();_e()});import{HTTPException as Ye}from"hono/http-exception";var Ja,Xa=f(()=>{"use strict";h();_e();Ja=async({tableName:t,records:e,db:o})=>{if(!e||e.length===0)throw new Ye(400,{message:"At least one record is required"});let n=(await R(o)).transaction();try{let r=Object.keys(e[0]),i=r.map(l=>`[${l}]`).join(", "),c=await ne({tableName:t,db:o}),s=new Set(c.filter(l=>l.dataTypeLabel==="boolean").map(l=>l.columnName));await n.begin();for(let l=0;l<e.length;l++){let m=e[l],p=n.request(),u=r.map(y=>{let b=m[y];return s.has(y)&&typeof b=="string"?b==="true"?1:0:b}),d=r.map((y,b)=>`@p${l}_${b}`).join(", ");r.forEach((y,b)=>{p.input(`p${l}_${b}`,u[b])});let g=`
353
+ INSERT INTO [${t}] (${i})
354
354
  VALUES (${d})
355
- `;try{await p.query(g)}catch(y){throw new Ye(500,{message:`Failed to insert record ${l+1}: ${y instanceof Error?y.message:String(y)}`})}}return await n.commit(),{success:!0,message:`Successfully inserted ${e.length} record${e.length!==1?"s":""}`,successCount:e.length,failureCount:0}}catch(r){throw await n.rollback(),r instanceof Ye?r:new Ye(500,{message:`Failed to bulk insert records into "${t}"`})}}});function $i(t,e){let o=t.trim().toLowerCase();return o.includes("(")&&o.includes(")")?o.includes("newid()")?e.toUpperCase().includes("UNIQUEIDENTIFIER")?"NEWID()":null:o.includes("getdate")||o.includes("current_timestamp")?"GETDATE()":t.trim():o==="null"?"NULL":o==="true"||o==="false"?o==="true"?"1":"0":t.trim()}function qi(t,e){if(e)return"NVARCHAR(MAX)";let o=t.toLowerCase().trim();return{serial:"INT IDENTITY(1,1)",serial4:"INT IDENTITY(1,1)",bigserial:"BIGINT IDENTITY(1,1)",serial8:"BIGINT IDENTITY(1,1)",int:"INT",int4:"INT",integer:"INT",bigint:"BIGINT",int8:"BIGINT",smallint:"SMALLINT",int2:"SMALLINT",tinyint:"TINYINT",numeric:"NUMERIC",decimal:"DECIMAL",real:"REAL",float4:"REAL",float:"FLOAT","double precision":"FLOAT",float8:"FLOAT",money:"MONEY",boolean:"BIT",bool:"BIT",text:"NVARCHAR(MAX)",varchar:"VARCHAR(255)","character varying":"VARCHAR(255)",char:"CHAR(1)",character:"CHAR(1)",bpchar:"CHAR",uuid:"UNIQUEIDENTIFIER",json:"NVARCHAR(MAX)",jsonb:"NVARCHAR(MAX)",xml:"XML",date:"DATE",time:"TIME","time without time zone":"TIME",timestamp:"DATETIME2","timestamp without time zone":"DATETIME2","timestamp with time zone":"DATETIMEOFFSET",timestamptz:"DATETIMEOFFSET",interval:"VARCHAR(255)",bytea:"VARBINARY(MAX)",inet:"VARCHAR(45)",cidr:"VARCHAR(45)",macaddr:"VARCHAR(17)",macaddr8:"VARCHAR(23)"}[o]||t.toUpperCase()}async function Za({tableData:t,db:e}){let{tableName:o,fields:a,foreignKeys:n}=t,r=await R(e),s=a.map(u=>{let d=qi(u.columnType,u.isArray??!1),g=`[${u.columnName}] ${d}`;if(!u.isNullable&&!u.isPrimaryKey&&(g+=" NOT NULL"),u.defaultValue&&!d.includes("IDENTITY")){let y=$i(u.defaultValue,d);y!==null&&(g+=` DEFAULT ${y}`)}return g}),c=a.filter(u=>u.isPrimaryKey),i=[];if(c.length>0){let u=c.map(d=>`[${d.columnName}]`).join(", ");i.push(`PRIMARY KEY (${u})`)}for(let u of a)u.isUnique&&!u.isPrimaryKey&&i.push(`UNIQUE ([${u.columnName}])`);let l=n?.map(u=>`CONSTRAINT [${`FK_${o}_${u.columnName}`}] FOREIGN KEY ([${u.columnName}]) REFERENCES [${u.referencedTable}] ([${u.referencedColumn}]) ON UPDATE ${u.onUpdate} ON DELETE ${u.onDelete}`)||[],m=[...s,...i,...l],p=`
355
+ `;try{await p.query(g)}catch(y){throw new Ye(500,{message:`Failed to insert record ${l+1}: ${y instanceof Error?y.message:String(y)}`})}}return await n.commit(),{success:!0,message:`Successfully inserted ${e.length} record${e.length!==1?"s":""}`,successCount:e.length,failureCount:0}}catch(r){throw await n.rollback(),r instanceof Ye?r:new Ye(500,{message:`Failed to bulk insert records into "${t}"`})}}});function $i(t,e){let o=t.trim().toLowerCase();return o.includes("(")&&o.includes(")")?o.includes("newid()")?e.toUpperCase().includes("UNIQUEIDENTIFIER")?"NEWID()":null:o.includes("getdate")||o.includes("current_timestamp")?"GETDATE()":t.trim():o==="null"?"NULL":o==="true"||o==="false"?o==="true"?"1":"0":t.trim()}function qi(t,e){if(e)return"NVARCHAR(MAX)";let o=t.toLowerCase().trim();return{serial:"INT IDENTITY(1,1)",serial4:"INT IDENTITY(1,1)",bigserial:"BIGINT IDENTITY(1,1)",serial8:"BIGINT IDENTITY(1,1)",int:"INT",int4:"INT",integer:"INT",bigint:"BIGINT",int8:"BIGINT",smallint:"SMALLINT",int2:"SMALLINT",tinyint:"TINYINT",numeric:"NUMERIC",decimal:"DECIMAL",real:"REAL",float4:"REAL",float:"FLOAT","double precision":"FLOAT",float8:"FLOAT",money:"MONEY",boolean:"BIT",bool:"BIT",text:"NVARCHAR(MAX)",varchar:"VARCHAR(255)","character varying":"VARCHAR(255)",char:"CHAR(1)",character:"CHAR(1)",bpchar:"CHAR",uuid:"UNIQUEIDENTIFIER",json:"NVARCHAR(MAX)",jsonb:"NVARCHAR(MAX)",xml:"XML",date:"DATE",time:"TIME","time without time zone":"TIME",timestamp:"DATETIME2","timestamp without time zone":"DATETIME2","timestamp with time zone":"DATETIMEOFFSET",timestamptz:"DATETIMEOFFSET",interval:"VARCHAR(255)",bytea:"VARBINARY(MAX)",inet:"VARCHAR(45)",cidr:"VARCHAR(45)",macaddr:"VARCHAR(17)",macaddr8:"VARCHAR(23)"}[o]||t.toUpperCase()}async function Za({tableData:t,db:e}){let{tableName:o,fields:a,foreignKeys:n}=t,r=await R(e),i=a.map(u=>{let d=qi(u.columnType,u.isArray??!1),g=`[${u.columnName}] ${d}`;if(!u.isNullable&&!u.isPrimaryKey&&(g+=" NOT NULL"),u.defaultValue&&!d.includes("IDENTITY")){let y=$i(u.defaultValue,d);y!==null&&(g+=` DEFAULT ${y}`)}return g}),c=a.filter(u=>u.isPrimaryKey),s=[];if(c.length>0){let u=c.map(d=>`[${d.columnName}]`).join(", ");s.push(`PRIMARY KEY (${u})`)}for(let u of a)u.isUnique&&!u.isPrimaryKey&&s.push(`UNIQUE ([${u.columnName}])`);let l=n?.map(u=>`CONSTRAINT [${`FK_${o}_${u.columnName}`}] FOREIGN KEY ([${u.columnName}]) REFERENCES [${u.referencedTable}] ([${u.referencedColumn}]) ON UPDATE ${u.onUpdate} ON DELETE ${u.onDelete}`)||[],m=[...i,...s,...l],p=`
356
356
  CREATE TABLE [${o}] (
357
357
  ${m.join(`,
358
358
  `)}
@@ -406,13 +406,13 @@ This will return the 5 customers with the highest total order value. You might a
406
406
  INNER JOIN sys.foreign_key_columns fkc
407
407
  ON fk.object_id = fkc.constraint_object_id
408
408
  WHERE OBJECT_NAME(fk.referenced_object_id) = @tableName
409
- `)).recordset.map(n=>({constraintName:n.constraint_name,referencingTable:n.referencing_table,referencingColumn:n.referencing_column,referencedTable:n.referenced_table,referencedColumn:n.referenced_column}))}async function Bi(t,e,o){let a=await Rt(t,o);if(a.length===0)return[];let n=[],r=await R(o),s=e.map(i=>i.value),c=new Map;for(let i of a){let l=`${i.referencingTable}.${i.referencingColumn}`;c.has(l)||c.set(l,[]),c.get(l)?.push(i)}for(let[i,l]of c){let m=l[0];if(!m||!e.find(y=>y.columnName===m.referencedColumn))continue;let u=r.request();s.forEach((y,b)=>{u.input(`pk${b}`,y)});let d=s.map((y,b)=>`@pk${b}`).join(", "),g=await u.query(`
409
+ `)).recordset.map(n=>({constraintName:n.constraint_name,referencingTable:n.referencing_table,referencingColumn:n.referencing_column,referencedTable:n.referenced_table,referencedColumn:n.referenced_column}))}async function Bi(t,e,o){let a=await Rt(t,o);if(a.length===0)return[];let n=[],r=await R(o),i=e.map(s=>s.value),c=new Map;for(let s of a){let l=`${s.referencingTable}.${s.referencingColumn}`;c.has(l)||c.set(l,[]),c.get(l)?.push(s)}for(let[s,l]of c){let m=l[0];if(!m||!e.find(y=>y.columnName===m.referencedColumn))continue;let u=r.request();i.forEach((y,b)=>{u.input(`pk${b}`,y)});let d=i.map((y,b)=>`@pk${b}`).join(", "),g=await u.query(`
410
410
  SELECT TOP 100 * FROM [${m.referencingTable}]
411
411
  WHERE [${m.referencingColumn}] IN (${d})
412
- `);g.recordset.length>0&&n.push({tableName:m.referencingTable,columnName:m.referencingColumn,constraintName:m.constraintName,records:g.recordset})}return n}async function ln({tableName:t,primaryKeys:e,db:o}){let a=await R(o),n=e[0]?.columnName;if(!n)throw new Ee(400,{message:"Primary key column name is required"});let r=e.map(c=>c.value),s=a.transaction();await s.begin();try{let c=s.request();r.forEach((m,p)=>{c.input(`pk${p}`,m)});let i=r.map((m,p)=>`@pk${p}`).join(", "),l=await c.query(`DELETE FROM [${t}] WHERE [${n}] IN (${i})`);return await s.commit(),{deletedCount:l.rowsAffected[0]??0,fkViolation:!1,relatedRecords:[]}}catch(c){if(await s.rollback(),c.number===Fi)return{deletedCount:0,fkViolation:!0,relatedRecords:await Bi(t,e,o)};throw c instanceof Ee?c:new Ee(500,{message:`Failed to delete records from "${t}"`})}}async function mn({tableName:t,primaryKeys:e,db:o}){let a=await R(o),n=e[0]?.columnName;if(!n)throw new Ee(400,{message:"Primary key column name is required"});let r=e.map(c=>c.value),s=a.transaction();await s.begin();try{let c=await Rt(t,o),i=0,l=new Set,m=new Set,p=async(y,b,E,N)=>{let A=`${y}.${b}`;if(N.has(A))return;N.add(A);let q=await Rt(y,o);for(let O of q){let D=s.request();E.forEach((_,v)=>{D.input(`val${v}`,_)});let F=E.map((_,v)=>`@val${v}`).join(", "),$=(await D.query(`
412
+ `);g.recordset.length>0&&n.push({tableName:m.referencingTable,columnName:m.referencingColumn,constraintName:m.constraintName,records:g.recordset})}return n}async function ln({tableName:t,primaryKeys:e,db:o}){let a=await R(o),n=e[0]?.columnName;if(!n)throw new Ee(400,{message:"Primary key column name is required"});let r=e.map(c=>c.value),i=a.transaction();await i.begin();try{let c=i.request();r.forEach((m,p)=>{c.input(`pk${p}`,m)});let s=r.map((m,p)=>`@pk${p}`).join(", "),l=await c.query(`DELETE FROM [${t}] WHERE [${n}] IN (${s})`);return await i.commit(),{deletedCount:l.rowsAffected[0]??0,fkViolation:!1,relatedRecords:[]}}catch(c){if(await i.rollback(),c.number===Fi)return{deletedCount:0,fkViolation:!0,relatedRecords:await Bi(t,e,o)};throw c instanceof Ee?c:new Ee(500,{message:`Failed to delete records from "${t}"`})}}async function mn({tableName:t,primaryKeys:e,db:o}){let a=await R(o),n=e[0]?.columnName;if(!n)throw new Ee(400,{message:"Primary key column name is required"});let r=e.map(c=>c.value),i=a.transaction();await i.begin();try{let c=await Rt(t,o),s=0,l=new Set,m=new Set,p=async(y,b,E,N)=>{let A=`${y}.${b}`;if(N.has(A))return;N.add(A);let q=await Rt(y,o);for(let O of q){let D=i.request();E.forEach((_,v)=>{D.input(`val${v}`,_)});let F=E.map((_,v)=>`@val${v}`).join(", "),$=(await D.query(`
413
413
  SELECT [${O.referencedColumn}] FROM [${y}]
414
414
  WHERE [${b}] IN (${F})
415
- `)).recordset.map(_=>_[O.referencedColumn]);$.length>0&&await p(O.referencingTable,O.referencingColumn,$,N)}let k=s.request();E.forEach((O,D)=>{k.input(`delVal${D}`,O)});let H=E.map((O,D)=>`@delVal${D}`).join(", "),j=await k.query(`DELETE FROM [${y}] WHERE [${b}] IN (${H})`);i+=j.rowsAffected[0]??0,l.add(y)};for(let y of c)l.has(y.referencingTable)||await p(y.referencingTable,y.referencingColumn,r,m);let u=s.request();r.forEach((y,b)=>{u.input(`mainPk${b}`,y)});let d=r.map((y,b)=>`@mainPk${b}`).join(", "),g=await u.query(`DELETE FROM [${t}] WHERE [${n}] IN (${d})`);return await s.commit(),{deletedCount:(g.rowsAffected[0]??0)+i}}catch(c){throw await s.rollback(),c instanceof Ee?c:new Ee(500,{message:`Failed to force delete records from "${t}"`})}}var Fi,un=f(()=>{"use strict";h();Fi=547});import{HTTPException as At}from"hono/http-exception";async function dn(t,e){return(await(await R(e)).request().input("tableName",t).query(`
415
+ `)).recordset.map(_=>_[O.referencedColumn]);$.length>0&&await p(O.referencingTable,O.referencingColumn,$,N)}let k=i.request();E.forEach((O,D)=>{k.input(`delVal${D}`,O)});let H=E.map((O,D)=>`@delVal${D}`).join(", "),j=await k.query(`DELETE FROM [${y}] WHERE [${b}] IN (${H})`);s+=j.rowsAffected[0]??0,l.add(y)};for(let y of c)l.has(y.referencingTable)||await p(y.referencingTable,y.referencingColumn,r,m);let u=i.request();r.forEach((y,b)=>{u.input(`mainPk${b}`,y)});let d=r.map((y,b)=>`@mainPk${b}`).join(", "),g=await u.query(`DELETE FROM [${t}] WHERE [${n}] IN (${d})`);return await i.commit(),{deletedCount:(g.rowsAffected[0]??0)+s}}catch(c){throw await i.rollback(),c instanceof Ee?c:new Ee(500,{message:`Failed to force delete records from "${t}"`})}}var Fi,un=f(()=>{"use strict";h();Fi=547});import{HTTPException as At}from"hono/http-exception";async function dn(t,e){return(await(await R(e)).request().input("tableName",t).query(`
416
416
  SELECT
417
417
  fk.name AS constraint_name,
418
418
  OBJECT_NAME(fk.parent_object_id) AS referencing_table,
@@ -423,13 +423,13 @@ This will return the 5 customers with the highest total order value. You might a
423
423
  INNER JOIN sys.foreign_key_columns fkc
424
424
  ON fk.object_id = fkc.constraint_object_id
425
425
  WHERE OBJECT_NAME(fk.referenced_object_id) = @tableName
426
- `)).recordset.map(n=>({constraintName:n.constraint_name,referencingTable:n.referencing_table,referencingColumn:n.referencing_column,referencedTable:n.referenced_table,referencedColumn:n.referenced_column}))}async function pn(t,e){let o=await dn(t,e);if(o.length===0)return[];let a=[],n=await R(e);for(let r of o){let s=await n.request().query(`SELECT TOP 100 * FROM [${r.referencingTable}]`);s.recordset.length>0&&a.push({tableName:r.referencingTable,columnName:r.referencingColumn,constraintName:r.constraintName,records:s.recordset})}return a}async function Ki(t,e){let a=await(await R(e)).request().query(`SELECT COUNT(*) as count FROM [${t}]`);return Number(a.recordset[0]?.count??0)}async function fn(t){let{tableName:e,db:o,cascade:a}=t,n=await R(o),r=await n.request().input("tableName",e).query(`
426
+ `)).recordset.map(n=>({constraintName:n.constraint_name,referencingTable:n.referencing_table,referencingColumn:n.referencing_column,referencedTable:n.referenced_table,referencedColumn:n.referenced_column}))}async function pn(t,e){let o=await dn(t,e);if(o.length===0)return[];let a=[],n=await R(e);for(let r of o){let i=await n.request().query(`SELECT TOP 100 * FROM [${r.referencingTable}]`);i.recordset.length>0&&a.push({tableName:r.referencingTable,columnName:r.referencingColumn,constraintName:r.constraintName,records:i.recordset})}return a}async function Ki(t,e){let a=await(await R(e)).request().query(`SELECT COUNT(*) as count FROM [${t}]`);return Number(a.recordset[0]?.count??0)}async function fn(t){let{tableName:e,db:o,cascade:a}=t,n=await R(o),r=await n.request().input("tableName",e).query(`
427
427
  SELECT COUNT(*) as cnt
428
428
  FROM INFORMATION_SCHEMA.TABLES
429
429
  WHERE TABLE_CATALOG = DB_NAME()
430
430
  AND TABLE_NAME = @tableName
431
431
  AND TABLE_SCHEMA = 'dbo'
432
- `);if(!(Number(r.recordset[0]?.cnt??0)>0))throw new At(404,{message:`Table "${e}" does not exist`});let c=await Ki(e,o);if(!a){let i=await pn(e,o);if(i.length>0)return{deletedCount:0,fkViolation:!0,relatedRecords:i}}try{if(a){let i=await dn(e,o);for(let l of i)await n.request().query(`ALTER TABLE [${l.referencingTable}] DROP CONSTRAINT [${l.constraintName}]`)}return await n.request().query(`DROP TABLE [${e}]`),{deletedCount:c,fkViolation:!1,relatedRecords:[]}}catch(i){if(i.number===ji)return{deletedCount:0,fkViolation:!0,relatedRecords:await pn(e,o)};throw i instanceof At?i:new At(500,{message:`Failed to delete table "${e}"`})}}var ji,bn=f(()=>{"use strict";h();ji=3726});import{HTTPException as Qi}from"hono/http-exception";async function yn({tableName:t,db:e}){let a=await(await R(e)).request().query(`SELECT * FROM [${t}]`);if(!a.recordset||a.recordset.length===0)throw new Qi(404,{message:`Table "${t}" does not exist or has no data`});return{cols:Object.keys(a.recordset[0]),rows:a.recordset}}var gn=f(()=>{"use strict";h()});import{HTTPException as Yi}from"hono/http-exception";var Tn,En=f(()=>{"use strict";h();Tn=async({query:t,db:e})=>{let o=await R(e);if(!t||!t.trim())throw new Yi(400,{message:"Query is required"});let a=t.trim().replace(/;+$/,""),n=performance.now(),r=await o.request().query(a),s=performance.now()-n;if(r.recordset){let c=r.recordset;return{columns:r.recordset.columns?Object.keys(r.recordset.columns):Object.keys(c[0]??{}),rows:c,rowCount:c.length,duration:s,message:c.length===0?"OK":void 0}}return{columns:[],rows:[],rowCount:r.rowsAffected[0]??0,duration:s,message:`OK \u2014 ${r.rowsAffected[0]??0} row(s) affected`}}});async function hn(t){let e=await R(t),a=await e.request().query(`
432
+ `);if(!(Number(r.recordset[0]?.cnt??0)>0))throw new At(404,{message:`Table "${e}" does not exist`});let c=await Ki(e,o);if(!a){let s=await pn(e,o);if(s.length>0)return{deletedCount:0,fkViolation:!0,relatedRecords:s}}try{if(a){let s=await dn(e,o);for(let l of s)await n.request().query(`ALTER TABLE [${l.referencingTable}] DROP CONSTRAINT [${l.constraintName}]`)}return await n.request().query(`DROP TABLE [${e}]`),{deletedCount:c,fkViolation:!1,relatedRecords:[]}}catch(s){if(s.number===ji)return{deletedCount:0,fkViolation:!0,relatedRecords:await pn(e,o)};throw s instanceof At?s:new At(500,{message:`Failed to delete table "${e}"`})}}var ji,bn=f(()=>{"use strict";h();ji=3726});import{HTTPException as Qi}from"hono/http-exception";async function yn({tableName:t,db:e}){let a=await(await R(e)).request().query(`SELECT * FROM [${t}]`);if(!a.recordset||a.recordset.length===0)throw new Qi(404,{message:`Table "${t}" does not exist or has no data`});return{cols:Object.keys(a.recordset[0]),rows:a.recordset}}var gn=f(()=>{"use strict";h()});import{HTTPException as Yi}from"hono/http-exception";var Tn,En=f(()=>{"use strict";h();Tn=async({query:t,db:e})=>{let o=await R(e);if(!t||!t.trim())throw new Yi(400,{message:"Query is required"});let a=t.trim().replace(/;+$/,""),n=performance.now(),r=await o.request().query(a),i=performance.now()-n;if(r.recordset){let c=r.recordset;return{columns:r.recordset.columns?Object.keys(r.recordset.columns):Object.keys(c[0]??{}),rows:c,rowCount:c.length,duration:i,message:c.length===0?"OK":void 0}}return{columns:[],rows:[],rowCount:r.rowsAffected[0]??0,duration:i,message:`OK \u2014 ${r.rowsAffected[0]??0} row(s) affected`}}});async function hn(t){let e=await R(t),a=await e.request().query(`
433
433
  SELECT table_name AS tableName
434
434
  FROM information_schema.tables
435
435
  WHERE table_catalog = DB_NAME()
@@ -487,16 +487,16 @@ This will return the 5 customers with the highest total order value. You might a
487
487
  AND c.TABLE_NAME = @tableName
488
488
  AND c.TABLE_SCHEMA = 'dbo'
489
489
  ORDER BY c.ORDINAL_POSITION
490
- `);if(!r.recordset||r.recordset.length===0)throw new Sn(500,{message:`Failed to retrieve schema for table "${t}"`});let s=r.recordset.map(i=>{let l=` [${i.COLUMN_NAME}] ${i.DATA_TYPE}`;return i.CHARACTER_MAXIMUM_LENGTH?l+=i.CHARACTER_MAXIMUM_LENGTH===-1?"(MAX)":`(${i.CHARACTER_MAXIMUM_LENGTH})`:i.NUMERIC_PRECISION&&(i.NUMERIC_SCALE?l+=`(${i.NUMERIC_PRECISION},${i.NUMERIC_SCALE})`:l+=`(${i.NUMERIC_PRECISION})`),l+=i.IS_NULLABLE==="YES"?" NULL":" NOT NULL",i.COLUMN_DEFAULT&&(l+=` DEFAULT ${i.COLUMN_DEFAULT}`),l});return`CREATE TABLE [${t}] (
491
- ${s.join(`,
490
+ `);if(!r.recordset||r.recordset.length===0)throw new Sn(500,{message:`Failed to retrieve schema for table "${t}"`});let i=r.recordset.map(s=>{let l=` [${s.COLUMN_NAME}] ${s.DATA_TYPE}`;return s.CHARACTER_MAXIMUM_LENGTH?l+=s.CHARACTER_MAXIMUM_LENGTH===-1?"(MAX)":`(${s.CHARACTER_MAXIMUM_LENGTH})`:s.NUMERIC_PRECISION&&(s.NUMERIC_SCALE?l+=`(${s.NUMERIC_PRECISION},${s.NUMERIC_SCALE})`:l+=`(${s.NUMERIC_PRECISION})`),l+=s.IS_NULLABLE==="YES"?" NULL":" NOT NULL",s.COLUMN_DEFAULT&&(l+=` DEFAULT ${s.COLUMN_DEFAULT}`),l});return`CREATE TABLE [${t}] (
491
+ ${i.join(`,
492
492
  `)}
493
- )`}var Rn=f(()=>{"use strict";h()});var An,wn=f(()=>{"use strict";h();An=async({tableName:t,cursor:e="",limit:o=50,direction:a="asc",sort:n=[],order:r="asc",filters:s=[],db:c})=>{let i=await R(c),l=e?Number.parseInt(e,10):0,m=l*o,p="";Array.isArray(n)&&n.length>0?p=`ORDER BY ${n.map(q=>`[${q.columnName}] ${q.direction.toUpperCase()}`).join(", ")}`:typeof n=="string"&&n?p=`ORDER BY [${n}] ${r.toUpperCase()}`:p="ORDER BY (SELECT NULL)";let u=await i.request().query(`SELECT COUNT(*) as total FROM [${t}]`),d=Number(u.recordset[0]?.total??0),y=(await i.request().query(`
493
+ )`}var Rn=f(()=>{"use strict";h()});var An,wn=f(()=>{"use strict";h();An=async({tableName:t,cursor:e="",limit:o=50,direction:a="asc",sort:n=[],order:r="asc",filters:i=[],db:c})=>{let s=await R(c),l=e?Number.parseInt(e,10):0,m=l*o,p="";Array.isArray(n)&&n.length>0?p=`ORDER BY ${n.map(q=>`[${q.columnName}] ${q.direction.toUpperCase()}`).join(", ")}`:typeof n=="string"&&n?p=`ORDER BY [${n}] ${r.toUpperCase()}`:p="ORDER BY (SELECT NULL)";let u=await s.request().query(`SELECT COUNT(*) as total FROM [${t}]`),d=Number(u.recordset[0]?.total??0),y=(await s.request().query(`
494
494
  SELECT *
495
495
  FROM [${t}]
496
496
  ${p}
497
497
  OFFSET ${m} ROWS
498
498
  FETCH NEXT ${o+1} ROWS ONLY
499
- `)).recordset,b=y.length>o;b&&(y=y.slice(0,o));let E=b?String(l+1):null,N=l>0?String(l-1):null;return{data:y,meta:{limit:o,total:d,hasNextPage:b,hasPreviousPage:l>0,nextCursor:E,prevCursor:N}}}});import{HTTPException as ze}from"hono/http-exception";async function Dn({params:t,db:e}){let{tableName:o,updates:a,primaryKey:n}=t,r=await R(e),s=await ne({tableName:o,db:e}),c=new Set(s.filter(m=>m.dataTypeLabel==="boolean").map(m=>m.columnName)),i=new Map;for(let m of a){let p=m.rowData[n];if(p==null)throw new ze(400,{message:`Primary key "${n}" not found in row data.`});i.has(p)||i.set(p,[]),i.get(p)?.push({columnName:m.columnName,value:m.value,rowData:m.rowData})}let l=r.transaction();await l.begin();try{let m=0;for(let[p,u]of i.entries()){let d=u.map((E,N)=>`[${E.columnName}] = @value${N}`),g=l.request();u.forEach((E,N)=>{let A=E.value;A!==null&&typeof A=="object"&&(A=JSON.stringify(A)),c.has(E.columnName)&&typeof A=="string"&&(A=A==="true"?1:0),g.input(`value${N}`,A)}),g.input("pkValue",p);let y=`
499
+ `)).recordset,b=y.length>o;b&&(y=y.slice(0,o));let E=b?String(l+1):null,N=l>0?String(l-1):null;return{data:y,meta:{limit:o,total:d,hasNextPage:b,hasPreviousPage:l>0,nextCursor:E,prevCursor:N}}}});import{HTTPException as ze}from"hono/http-exception";async function Dn({params:t,db:e}){let{tableName:o,updates:a,primaryKey:n}=t,r=await R(e),i=await ne({tableName:o,db:e}),c=new Set(i.filter(m=>m.dataTypeLabel==="boolean").map(m=>m.columnName)),s=new Map;for(let m of a){let p=m.rowData[n];if(p==null)throw new ze(400,{message:`Primary key "${n}" not found in row data.`});s.has(p)||s.set(p,[]),s.get(p)?.push({columnName:m.columnName,value:m.value,rowData:m.rowData})}let l=r.transaction();await l.begin();try{let m=0;for(let[p,u]of s.entries()){let d=u.map((E,N)=>`[${E.columnName}] = @value${N}`),g=l.request();u.forEach((E,N)=>{let A=E.value;A!==null&&typeof A=="object"&&(A=JSON.stringify(A)),c.has(E.columnName)&&typeof A=="string"&&(A=A==="true"?1:0),g.input(`value${N}`,A)}),g.input("pkValue",p);let y=`
500
500
  UPDATE [${o}]
501
501
  SET ${d.join(", ")}
502
502
  WHERE [${n}] = @pkValue
@@ -520,13 +520,13 @@ ${s.join(`,
520
520
  WHERE c.TABLE_SCHEMA = DATABASE()
521
521
  AND c.TABLE_NAME = ?
522
522
  ORDER BY c.ORDINAL_POSITION
523
- `,[n]=await o.execute(a,[t]);if(!n||n.length===0)throw new ec(404,{message:`Table "${t}" does not exist`});return n.map(r=>{let s=r.dataType,c=r.columnType,l=s==="enum"||s==="set"?tc(c):null;return{columnName:r.columnName,dataType:fo(s,c),dataTypeLabel:bo(s,c),isNullable:!!r.isNullable,columnDefault:r.columnDefault??null,isPrimaryKey:!!r.isPrimaryKey,isForeignKey:!!r.isForeignKey,referencedTable:r.referencedTable??null,referencedColumn:r.referencedColumn??null,enumValues:l}})}var Me=f(()=>{"use strict";X();h()});import{HTTPException as ac}from"hono/http-exception";async function Mn({db:t,params:e}){let{tableName:o,data:a}=e,n=S(t),r=await re({tableName:o,db:t}),s=new Set(r.filter(d=>d.dataTypeLabel==="boolean").map(d=>d.columnName)),c=Object.keys(a),i=Object.values(a).map((d,g)=>{let y=c[g];return s.has(y)&&typeof d=="string"?d==="true"?1:0:d}),l=c.map(()=>"?").join(", "),m=c.map(d=>`\`${d}\``).join(", "),p=`
523
+ `,[n]=await o.execute(a,[t]);if(!n||n.length===0)throw new ec(404,{message:`Table "${t}" does not exist`});return n.map(r=>{let i=r.dataType,c=r.columnType,l=i==="enum"||i==="set"?tc(c):null;return{columnName:r.columnName,dataType:fo(i,c),dataTypeLabel:bo(i,c),isNullable:!!r.isNullable,columnDefault:r.columnDefault??null,isPrimaryKey:!!r.isPrimaryKey,isForeignKey:!!r.isForeignKey,referencedTable:r.referencedTable??null,referencedColumn:r.referencedColumn??null,enumValues:l}})}var Me=f(()=>{"use strict";X();h()});import{HTTPException as ac}from"hono/http-exception";async function Mn({db:t,params:e}){let{tableName:o,data:a}=e,n=S(t),r=await re({tableName:o,db:t}),i=new Set(r.filter(d=>d.dataTypeLabel==="boolean").map(d=>d.columnName)),c=Object.keys(a),s=Object.values(a).map((d,g)=>{let y=c[g];return i.has(y)&&typeof d=="string"?d==="true"?1:0:d}),l=c.map(()=>"?").join(", "),m=c.map(d=>`\`${d}\``).join(", "),p=`
524
524
  INSERT INTO \`${o}\` (${m})
525
525
  VALUES (${l})
526
- `,[u]=await n.execute(p,i);if(u.affectedRows===0)throw new ac(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:u.affectedRows}}var xn=f(()=>{"use strict";h();Me()});import{HTTPException as Ge}from"hono/http-exception";var Ln,On=f(()=>{"use strict";h();Me();Ln=async({tableName:t,records:e,db:o})=>{if(!e||e.length===0)throw new Ge(400,{message:"At least one record is required"});let n=await S(o).getConnection();try{let r=Object.keys(e[0]),s=r.map(l=>`\`${l}\``).join(", "),c=await re({tableName:t,db:o}),i=new Set(c.filter(l=>l.dataTypeLabel==="boolean").map(l=>l.columnName));await n.beginTransaction();for(let l=0;l<e.length;l++){let m=e[l],p=r.map(g=>{let y=m[g];return i.has(g)&&typeof y=="string"?y==="true"?1:0:y}),u=r.map(()=>"?").join(", "),d=`
527
- INSERT INTO \`${t}\` (${s})
526
+ `,[u]=await n.execute(p,s);if(u.affectedRows===0)throw new ac(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:u.affectedRows}}var xn=f(()=>{"use strict";h();Me()});import{HTTPException as Ge}from"hono/http-exception";var Ln,On=f(()=>{"use strict";h();Me();Ln=async({tableName:t,records:e,db:o})=>{if(!e||e.length===0)throw new Ge(400,{message:"At least one record is required"});let n=await S(o).getConnection();try{let r=Object.keys(e[0]),i=r.map(l=>`\`${l}\``).join(", "),c=await re({tableName:t,db:o}),s=new Set(c.filter(l=>l.dataTypeLabel==="boolean").map(l=>l.columnName));await n.beginTransaction();for(let l=0;l<e.length;l++){let m=e[l],p=r.map(g=>{let y=m[g];return s.has(g)&&typeof y=="string"?y==="true"?1:0:y}),u=r.map(()=>"?").join(", "),d=`
527
+ INSERT INTO \`${t}\` (${i})
528
528
  VALUES (${u})
529
- `;try{await n.execute(d,p)}catch(g){throw new Ge(500,{message:`Failed to insert record ${l+1}: ${g instanceof Error?g.message:String(g)}`})}}return await n.commit(),{success:!0,message:`Successfully inserted ${e.length} record${e.length!==1?"s":""}`,successCount:e.length,failureCount:0}}catch(r){throw await n.rollback(),r instanceof Ge?r:new Ge(500,{message:`Failed to bulk insert records into "${t}"`})}finally{n.release()}}});function sc(t,e){if(!t?.trim())return null;let o=t.trim().toLowerCase();return o.includes("(")&&o.includes(")")?o.includes("uuid()")?!e.toUpperCase().includes("CHAR")&&!e.toUpperCase().includes("TEXT")?null:"(UUID())":o.includes("current_timestamp")||o.includes("now()")?"(CURRENT_TIMESTAMP)":o.includes("current_date")?"(CURRENT_DATE)":`(${t.trim()})`:o==="null"?"NULL":o==="true"||o==="false"?o==="true"?"1":"0":t.trim()}function ic(t,e){if(e)return"JSON";let o=t.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"}[o]||t.toUpperCase()}function he(t,e={}){let o=ic(t.columnType,t.isArray??!1),a=`\`${t.columnName}\` ${o}`;if(!t.isNullable&&!t.isPrimaryKey&&(a+=" NOT NULL"),t.defaultValue&&!o.includes("AUTO_INCREMENT")){let n=sc(t.defaultValue,o);n!==null&&(a+=` DEFAULT ${n}`)}return(t.isIdentity||e.preserveAutoIncrement)&&!o.includes("AUTO_INCREMENT")&&(a+=" AUTO_INCREMENT"),e.includeUnique&&t.isUnique&&!t.isPrimaryKey&&(a+=" UNIQUE"),e.includePrimaryKey&&t.isPrimaryKey&&(a+=" PRIMARY KEY"),a}var Je=f(()=>{"use strict"});async function Pn({tableData:t,db:e}){let{tableName:o,fields:a,foreignKeys:n}=t,r=S(e),s=a.map(u=>he(u)),c=a.filter(u=>u.isPrimaryKey),i=[];if(c.length>0){let u=c.map(d=>`\`${d.columnName}\``).join(", ");i.push(`PRIMARY KEY (${u})`)}for(let u of a)u.isUnique&&!u.isPrimaryKey&&i.push(`UNIQUE KEY \`uq_${o}_${u.columnName}\` (\`${u.columnName}\`)`);let l=n?.map(u=>`CONSTRAINT \`${`fk_${o}_${u.columnName}_${u.referencedTable}_${u.referencedColumn}`}\` FOREIGN KEY (\`${u.columnName}\`) REFERENCES \`${u.referencedTable}\` (\`${u.referencedColumn}\`) ON UPDATE ${u.onUpdate} ON DELETE ${u.onDelete}`)||[],m=[...s,...i,...l],p=`
529
+ `;try{await n.execute(d,p)}catch(g){throw new Ge(500,{message:`Failed to insert record ${l+1}: ${g instanceof Error?g.message:String(g)}`})}}return await n.commit(),{success:!0,message:`Successfully inserted ${e.length} record${e.length!==1?"s":""}`,successCount:e.length,failureCount:0}}catch(r){throw await n.rollback(),r instanceof Ge?r:new Ge(500,{message:`Failed to bulk insert records into "${t}"`})}finally{n.release()}}});function sc(t,e){if(!t?.trim())return null;let o=t.trim().toLowerCase();return o.includes("(")&&o.includes(")")?o.includes("uuid()")?!e.toUpperCase().includes("CHAR")&&!e.toUpperCase().includes("TEXT")?null:"(UUID())":o.includes("current_timestamp")||o.includes("now()")?"(CURRENT_TIMESTAMP)":o.includes("current_date")?"(CURRENT_DATE)":`(${t.trim()})`:o==="null"?"NULL":o==="true"||o==="false"?o==="true"?"1":"0":t.trim()}function ic(t,e){if(e)return"JSON";let o=t.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"}[o]||t.toUpperCase()}function he(t,e={}){let o=ic(t.columnType,t.isArray??!1),a=`\`${t.columnName}\` ${o}`;if(!t.isNullable&&!t.isPrimaryKey&&(a+=" NOT NULL"),t.defaultValue&&!o.includes("AUTO_INCREMENT")){let n=sc(t.defaultValue,o);n!==null&&(a+=` DEFAULT ${n}`)}return(t.isIdentity||e.preserveAutoIncrement)&&!o.includes("AUTO_INCREMENT")&&(a+=" AUTO_INCREMENT"),e.includeUnique&&t.isUnique&&!t.isPrimaryKey&&(a+=" UNIQUE"),e.includePrimaryKey&&t.isPrimaryKey&&(a+=" PRIMARY KEY"),a}var Je=f(()=>{"use strict"});async function Pn({tableData:t,db:e}){let{tableName:o,fields:a,foreignKeys:n}=t,r=S(e),i=a.map(u=>he(u)),c=a.filter(u=>u.isPrimaryKey),s=[];if(c.length>0){let u=c.map(d=>`\`${d.columnName}\``).join(", ");s.push(`PRIMARY KEY (${u})`)}for(let u of a)u.isUnique&&!u.isPrimaryKey&&s.push(`UNIQUE KEY \`uq_${o}_${u.columnName}\` (\`${u.columnName}\`)`);let l=n?.map(u=>`CONSTRAINT \`${`fk_${o}_${u.columnName}_${u.referencedTable}_${u.referencedColumn}`}\` FOREIGN KEY (\`${u.columnName}\`) REFERENCES \`${u.referencedTable}\` (\`${u.referencedColumn}\`) ON UPDATE ${u.onUpdate} ON DELETE ${u.onDelete}`)||[],m=[...i,...s,...l],p=`
530
530
  CREATE TABLE \`${o}\` (
531
531
  ${m.join(`,
532
532
  `)}
@@ -573,10 +573,10 @@ ${s.join(`,
573
573
  AND kcu.TABLE_NAME = tc.TABLE_NAME
574
574
  WHERE tc.CONSTRAINT_TYPE = 'FOREIGN KEY'
575
575
  AND kcu.TABLE_SCHEMA = DATABASE()
576
- AND kcu.REFERENCED_TABLE_NAME = ?`,[t]);return a.map(n=>({constraintName:n.constraint_name,referencingTable:n.referencing_table,referencingColumn:n.referencing_column,referencedTable:n.referenced_table,referencedColumn:n.referenced_column}))}async function pc(t,e,o){let a=await Dt(t,o);if(a.length===0)return[];let n=[],r=S(o),s=e.map(i=>i.value),c=new Map;for(let i of a){let l=`${i.referencingTable}.${i.referencingColumn}`;c.has(l)||c.set(l,[]),c.get(l)?.push(i)}for(let[i,l]of c){let m=l[0];if(!m||!e.find(g=>g.columnName===m.referencedColumn))continue;let u=s.map(()=>"?").join(", "),[d]=await r.execute(`SELECT * FROM \`${m.referencingTable}\`
576
+ AND kcu.REFERENCED_TABLE_NAME = ?`,[t]);return a.map(n=>({constraintName:n.constraint_name,referencingTable:n.referencing_table,referencingColumn:n.referencing_column,referencedTable:n.referenced_table,referencedColumn:n.referenced_column}))}async function pc(t,e,o){let a=await Dt(t,o);if(a.length===0)return[];let n=[],r=S(o),i=e.map(s=>s.value),c=new Map;for(let s of a){let l=`${s.referencingTable}.${s.referencingColumn}`;c.has(l)||c.set(l,[]),c.get(l)?.push(s)}for(let[s,l]of c){let m=l[0];if(!m||!e.find(g=>g.columnName===m.referencedColumn))continue;let u=i.map(()=>"?").join(", "),[d]=await r.execute(`SELECT * FROM \`${m.referencingTable}\`
577
577
  WHERE \`${m.referencingColumn}\` IN (${u})
578
- LIMIT 100`,s);d.length>0&&n.push({tableName:m.referencingTable,columnName:m.referencingColumn,constraintName:m.constraintName,records:d})}return n}async function Hn({tableName:t,primaryKeys:e,db:o}){let a=S(o),n=e[0]?.columnName;if(!n)throw new Ce(400,{message:"Primary key column name is required"});let r=e.map(i=>i.value),s=r.map(()=>"?").join(", "),c=await a.getConnection();await c.beginTransaction();try{let[i]=await c.execute(`DELETE FROM \`${t}\` WHERE \`${n}\` IN (${s})`,r);return await c.commit(),{deletedCount:i.affectedRows,fkViolation:!1,relatedRecords:[]}}catch(i){if(await c.rollback(),i.errno===uc)return{deletedCount:0,fkViolation:!0,relatedRecords:await pc(t,e,o)};throw i instanceof Ce?i:new Ce(500,{message:`Failed to delete records from "${t}"`})}finally{c.release()}}async function jn({tableName:t,primaryKeys:e,db:o}){let a=S(o),n=e[0]?.columnName;if(!n)throw new Ce(400,{message:"Primary key column name is required"});let r=e.map(c=>c.value),s=await a.getConnection();await s.beginTransaction();try{await s.execute("SET FOREIGN_KEY_CHECKS = 0");let c=await Dt(t,o),i=0,l=new Set,m=new Set,p=async(g,y,b,E)=>{let N=`${g}.${y}`;if(E.has(N))return;E.add(N);let A=await Dt(g,o);for(let H of A){let j=b.map(()=>"?").join(", "),[O]=await s.execute(`SELECT \`${H.referencedColumn}\` FROM \`${g}\`
579
- WHERE \`${y}\` IN (${j})`,b),D=O.map(F=>F[H.referencedColumn]);D.length>0&&await p(H.referencingTable,H.referencingColumn,D,E)}let q=b.map(()=>"?").join(", "),[k]=await s.execute(`DELETE FROM \`${g}\` WHERE \`${y}\` IN (${q})`,b);i+=k.affectedRows,l.add(g)};for(let g of c)l.has(g.referencingTable)||await p(g.referencingTable,g.referencingColumn,r,m);let u=r.map(()=>"?").join(", "),[d]=await s.execute(`DELETE FROM \`${t}\` WHERE \`${n}\` IN (${u})`,r);return await s.execute("SET FOREIGN_KEY_CHECKS = 1"),await s.commit(),{deletedCount:d.affectedRows+i}}catch(c){throw await s.execute("SET FOREIGN_KEY_CHECKS = 1").catch(()=>{}),await s.rollback(),c instanceof Ce?c:new Ce(500,{message:`Failed to force delete records from "${t}"`})}finally{s.release()}}var uc,Kn=f(()=>{"use strict";h();uc=1451});import{HTTPException as _t}from"hono/http-exception";async function yc(t,e){let o=S(e),[a]=await o.execute(`SELECT
578
+ LIMIT 100`,i);d.length>0&&n.push({tableName:m.referencingTable,columnName:m.referencingColumn,constraintName:m.constraintName,records:d})}return n}async function Hn({tableName:t,primaryKeys:e,db:o}){let a=S(o),n=e[0]?.columnName;if(!n)throw new Ce(400,{message:"Primary key column name is required"});let r=e.map(s=>s.value),i=r.map(()=>"?").join(", "),c=await a.getConnection();await c.beginTransaction();try{let[s]=await c.execute(`DELETE FROM \`${t}\` WHERE \`${n}\` IN (${i})`,r);return await c.commit(),{deletedCount:s.affectedRows,fkViolation:!1,relatedRecords:[]}}catch(s){if(await c.rollback(),s.errno===uc)return{deletedCount:0,fkViolation:!0,relatedRecords:await pc(t,e,o)};throw s instanceof Ce?s:new Ce(500,{message:`Failed to delete records from "${t}"`})}finally{c.release()}}async function jn({tableName:t,primaryKeys:e,db:o}){let a=S(o),n=e[0]?.columnName;if(!n)throw new Ce(400,{message:"Primary key column name is required"});let r=e.map(c=>c.value),i=await a.getConnection();await i.beginTransaction();try{await i.execute("SET FOREIGN_KEY_CHECKS = 0");let c=await Dt(t,o),s=0,l=new Set,m=new Set,p=async(g,y,b,E)=>{let N=`${g}.${y}`;if(E.has(N))return;E.add(N);let A=await Dt(g,o);for(let H of A){let j=b.map(()=>"?").join(", "),[O]=await i.execute(`SELECT \`${H.referencedColumn}\` FROM \`${g}\`
579
+ WHERE \`${y}\` IN (${j})`,b),D=O.map(F=>F[H.referencedColumn]);D.length>0&&await p(H.referencingTable,H.referencingColumn,D,E)}let q=b.map(()=>"?").join(", "),[k]=await i.execute(`DELETE FROM \`${g}\` WHERE \`${y}\` IN (${q})`,b);s+=k.affectedRows,l.add(g)};for(let g of c)l.has(g.referencingTable)||await p(g.referencingTable,g.referencingColumn,r,m);let u=r.map(()=>"?").join(", "),[d]=await i.execute(`DELETE FROM \`${t}\` WHERE \`${n}\` IN (${u})`,r);return await i.execute("SET FOREIGN_KEY_CHECKS = 1"),await i.commit(),{deletedCount:d.affectedRows+s}}catch(c){throw await i.execute("SET FOREIGN_KEY_CHECKS = 1").catch(()=>{}),await i.rollback(),c instanceof Ce?c:new Ce(500,{message:`Failed to force delete records from "${t}"`})}finally{i.release()}}var uc,Kn=f(()=>{"use strict";h();uc=1451});import{HTTPException as _t}from"hono/http-exception";async function yc(t,e){let o=S(e),[a]=await o.execute(`SELECT
580
580
  kcu.CONSTRAINT_NAME AS constraint_name,
581
581
  kcu.TABLE_NAME AS referencing_table,
582
582
  kcu.COLUMN_NAME AS referencing_column,
@@ -589,38 +589,38 @@ ${s.join(`,
589
589
  AND kcu.TABLE_NAME = tc.TABLE_NAME
590
590
  WHERE tc.CONSTRAINT_TYPE = 'FOREIGN KEY'
591
591
  AND kcu.TABLE_SCHEMA = DATABASE()
592
- AND kcu.REFERENCED_TABLE_NAME = ?`,[t]);return a.map(n=>({constraintName:n.constraint_name,referencingTable:n.referencing_table,referencingColumn:n.referencing_column,referencedTable:n.referenced_table,referencedColumn:n.referenced_column}))}async function Vn(t,e){let o=await yc(t,e);if(o.length===0)return[];let a=[],n=S(e);for(let r of o){let[s]=await n.execute(`SELECT * FROM \`${r.referencingTable}\` LIMIT 100`);s.length>0&&a.push({tableName:r.referencingTable,columnName:r.referencingColumn,constraintName:r.constraintName,records:s})}return a}async function gc(t,e){let o=S(e),[a]=await o.execute(`SELECT COUNT(*) as count FROM \`${t}\``);return Number(a[0]?.count??0)}async function Qn(t){let{tableName:e,db:o,cascade:a}=t,n=S(o),[r]=await n.execute(`SELECT COUNT(*) as cnt
592
+ AND kcu.REFERENCED_TABLE_NAME = ?`,[t]);return a.map(n=>({constraintName:n.constraint_name,referencingTable:n.referencing_table,referencingColumn:n.referencing_column,referencedTable:n.referenced_table,referencedColumn:n.referenced_column}))}async function Vn(t,e){let o=await yc(t,e);if(o.length===0)return[];let a=[],n=S(e);for(let r of o){let[i]=await n.execute(`SELECT * FROM \`${r.referencingTable}\` LIMIT 100`);i.length>0&&a.push({tableName:r.referencingTable,columnName:r.referencingColumn,constraintName:r.constraintName,records:i})}return a}async function gc(t,e){let o=S(e),[a]=await o.execute(`SELECT COUNT(*) as count FROM \`${t}\``);return Number(a[0]?.count??0)}async function Qn(t){let{tableName:e,db:o,cascade:a}=t,n=S(o),[r]=await n.execute(`SELECT COUNT(*) as cnt
593
593
  FROM information_schema.TABLES
594
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(r[0]?.cnt??0)>0))throw new _t(404,{message:`Table "${e}" does not exist`});let c=await gc(e,o);if(!a){let i=await Vn(e,o);if(i.length>0)return{deletedCount:0,fkViolation:!0,relatedRecords:i}}try{if(a){let i=await n.getConnection();try{await i.execute("SET FOREIGN_KEY_CHECKS = 0"),await i.execute(`DROP TABLE \`${e}\``),await i.execute("SET FOREIGN_KEY_CHECKS = 1")}finally{i.release()}}else await n.execute(`DROP TABLE \`${e}\``);return{deletedCount:c,fkViolation:!1,relatedRecords:[]}}catch(i){await n.execute("SET FOREIGN_KEY_CHECKS = 1").catch(()=>{});let l=i;if(l.errno===fc||l.errno===bc)return{deletedCount:0,fkViolation:!0,relatedRecords:await Vn(e,o)};throw i instanceof _t?i:new _t(500,{message:`Failed to delete table "${e}"`})}}var fc,bc,Wn=f(()=>{"use strict";h();fc=1217,bc=1451});import{HTTPException as Ec}from"hono/http-exception";async function Yn({tableName:t,db:e}){let o=S(e),[a]=await o.execute(`SELECT * FROM \`${t}\``);if(!a||a.length===0)throw new Ec(404,{message:`Table "${t}" does not exist or has no data`});return{cols:Object.keys(a[0]),rows:a}}var zn=f(()=>{"use strict";h()});import{HTTPException as Cc}from"hono/http-exception";var Gn,Jn=f(()=>{"use strict";h();Gn=async({query:t,db:e})=>{let o=S(e);if(!t||!t.trim())throw new Cc(400,{message:"Query is required"});let a=t.trim().replace(/;+$/,""),n=performance.now(),[r,s]=await o.execute(a),c=performance.now()-n;if(Array.isArray(r)){let l=r;return{columns:s?s.map(p=>p.name):Object.keys(l[0]??{}),rows:l,rowCount:l.length,duration:c,message:l.length===0?"OK":void 0}}let i=r;return{columns:[],rows:[],rowCount:i.affectedRows,duration:c,message:`OK \u2014 ${i.affectedRows} row(s) affected`}}});async function Xn(t){let e=S(t),o=`
594
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(r[0]?.cnt??0)>0))throw new _t(404,{message:`Table "${e}" does not exist`});let c=await gc(e,o);if(!a){let s=await Vn(e,o);if(s.length>0)return{deletedCount:0,fkViolation:!0,relatedRecords:s}}try{if(a){let s=await n.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 n.execute(`DROP TABLE \`${e}\``);return{deletedCount:c,fkViolation:!1,relatedRecords:[]}}catch(s){await n.execute("SET FOREIGN_KEY_CHECKS = 1").catch(()=>{});let l=s;if(l.errno===fc||l.errno===bc)return{deletedCount:0,fkViolation:!0,relatedRecords:await Vn(e,o)};throw s instanceof _t?s:new _t(500,{message:`Failed to delete table "${e}"`})}}var fc,bc,Wn=f(()=>{"use strict";h();fc=1217,bc=1451});import{HTTPException as Ec}from"hono/http-exception";async function Yn({tableName:t,db:e}){let o=S(e),[a]=await o.execute(`SELECT * FROM \`${t}\``);if(!a||a.length===0)throw new Ec(404,{message:`Table "${t}" does not exist or has no data`});return{cols:Object.keys(a[0]),rows:a}}var zn=f(()=>{"use strict";h()});import{HTTPException as Cc}from"hono/http-exception";var Gn,Jn=f(()=>{"use strict";h();Gn=async({query:t,db:e})=>{let o=S(e);if(!t||!t.trim())throw new Cc(400,{message:"Query is required"});let a=t.trim().replace(/;+$/,""),n=performance.now(),[r,i]=await o.execute(a),c=performance.now()-n;if(Array.isArray(r)){let l=r;return{columns:i?i.map(p=>p.name):Object.keys(l[0]??{}),rows:l,rowCount:l.length,duration:c,message:l.length===0?"OK":void 0}}let s=r;return{columns:[],rows:[],rowCount:s.affectedRows,duration:c,message:`OK \u2014 ${s.affectedRows} row(s) affected`}}});async function Xn(t){let e=S(t),o=`
595
595
  SELECT table_name as tableName
596
596
  FROM information_schema.tables
597
597
  WHERE table_schema = DATABASE()
598
598
  AND table_type = 'BASE TABLE'
599
599
  ORDER BY table_name
600
- `,[a]=await e.execute(o);return!a||a.length===0?[]:await Promise.all(a.map(async r=>{let[s]=await e.execute(`SELECT COUNT(*) as count FROM \`${r.tableName}\``),c=s[0];return{tableName:r.tableName,rowCount:c?.count??0}}))}var Zn=f(()=>{"use strict";h()});import{HTTPException as er}from"hono/http-exception";async function tr({tableName:t,db:e}){let o=S(e),[a]=await o.execute(`SELECT COUNT(*) as cnt
600
+ `,[a]=await e.execute(o);return!a||a.length===0?[]:await Promise.all(a.map(async r=>{let[i]=await e.execute(`SELECT COUNT(*) as count FROM \`${r.tableName}\``),c=i[0];return{tableName:r.tableName,rowCount:c?.count??0}}))}var Zn=f(()=>{"use strict";h()});import{HTTPException as er}from"hono/http-exception";async function tr({tableName:t,db:e}){let o=S(e),[a]=await o.execute(`SELECT COUNT(*) as cnt
601
601
  FROM information_schema.TABLES
602
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[t]);if(!(Number(a[0]?.cnt??0)>0))throw new er(404,{message:`Table "${t}" does not exist`});let[r]=await o.execute(`SHOW CREATE TABLE \`${t}\``),s=r[0],c=s?.["Create Table"]??s?.create_table??"";if(!c)throw new er(500,{message:`Failed to retrieve schema for table "${t}"`});return c}var or=f(()=>{"use strict";h()});function ar(t){if(t.length===0)return{clause:"",values:[]};let e=[],o=[];for(let a of t){let n=`\`${a.columnName}\``;switch(a.operator){case"=":case"!=":case">":case">=":case"<":case"<=":e.push(`${n} ${a.operator} ?`),o.push(a.value);break;case"is":a.value.toLowerCase()==="null"?e.push(`${n} IS NULL`):(e.push(`${n} = ?`),o.push(a.value));break;case"is not":a.value.toLowerCase()==="null"?e.push(`${n} IS NOT NULL`):(e.push(`${n} != ?`),o.push(a.value));break;case"like":case"ilike":e.push(`${n} LIKE ?`),o.push(a.value);break;case"not like":case"not ilike":e.push(`${n} NOT LIKE ?`),o.push(a.value);break;default:break}}return e.length===0?{clause:"",values:[]}:{clause:`WHERE ${e.join(" AND ")}`,values:o}}function nr(t,e){return Array.isArray(t)?t.length===0?"":`ORDER BY ${t.map(a=>`\`${a.columnName}\` ${a.direction.toUpperCase()}`).join(", ")}`:t&&typeof t=="string"?`ORDER BY \`${t}\` ${e?.toUpperCase()||"ASC"}`:""}function rr(t,e,o){let{values:a,sortColumns:n}=t,r=[],s=[],l=o==="asc"===(e==="asc");if(n.length>0){let m=n.map(d=>`\`${d}\``).join(", "),p=n.map(()=>"?").join(", "),u=l?">":"<";r.push(`(${m}) ${u} (${p})`);for(let d of n)s.push(a[d])}return{clause:r.length>0?`(${r.join(" AND ")})`:"",values:s}}var sr=f(()=>{"use strict"});var Xe,Ac,wc,ir,cr=f(()=>{"use strict";h();sr();Xe=t=>Buffer.from(JSON.stringify(t)).toString("base64url"),Ac=t=>{try{return JSON.parse(Buffer.from(t,"base64url").toString("utf-8"))}catch{return null}},wc=async(t,e)=>{let[o]=await t.execute(`SELECT COLUMN_NAME as column_name
602
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[t]);if(!(Number(a[0]?.cnt??0)>0))throw new er(404,{message:`Table "${t}" does not exist`});let[r]=await o.execute(`SHOW CREATE TABLE \`${t}\``),i=r[0],c=i?.["Create Table"]??i?.create_table??"";if(!c)throw new er(500,{message:`Failed to retrieve schema for table "${t}"`});return c}var or=f(()=>{"use strict";h()});function ar(t){if(t.length===0)return{clause:"",values:[]};let e=[],o=[];for(let a of t){let n=`\`${a.columnName}\``;switch(a.operator){case"=":case"!=":case">":case">=":case"<":case"<=":e.push(`${n} ${a.operator} ?`),o.push(a.value);break;case"is":a.value.toLowerCase()==="null"?e.push(`${n} IS NULL`):(e.push(`${n} = ?`),o.push(a.value));break;case"is not":a.value.toLowerCase()==="null"?e.push(`${n} IS NOT NULL`):(e.push(`${n} != ?`),o.push(a.value));break;case"like":case"ilike":e.push(`${n} LIKE ?`),o.push(a.value);break;case"not like":case"not ilike":e.push(`${n} NOT LIKE ?`),o.push(a.value);break;default:break}}return e.length===0?{clause:"",values:[]}:{clause:`WHERE ${e.join(" AND ")}`,values:o}}function nr(t,e){return Array.isArray(t)?t.length===0?"":`ORDER BY ${t.map(a=>`\`${a.columnName}\` ${a.direction.toUpperCase()}`).join(", ")}`:t&&typeof t=="string"?`ORDER BY \`${t}\` ${e?.toUpperCase()||"ASC"}`:""}function rr(t,e,o){let{values:a,sortColumns:n}=t,r=[],i=[],l=o==="asc"===(e==="asc");if(n.length>0){let m=n.map(d=>`\`${d}\``).join(", "),p=n.map(()=>"?").join(", "),u=l?">":"<";r.push(`(${m}) ${u} (${p})`);for(let d of n)i.push(a[d])}return{clause:r.length>0?`(${r.join(" AND ")})`:"",values:i}}var sr=f(()=>{"use strict"});var Xe,Ac,wc,ir,cr=f(()=>{"use strict";h();sr();Xe=t=>Buffer.from(JSON.stringify(t)).toString("base64url"),Ac=t=>{try{return JSON.parse(Buffer.from(t,"base64url").toString("utf-8"))}catch{return null}},wc=async(t,e)=>{let[o]=await t.execute(`SELECT COLUMN_NAME as column_name
603
603
  FROM information_schema.COLUMNS
604
604
  WHERE TABLE_SCHEMA = DATABASE()
605
605
  AND TABLE_NAME = ?
606
606
  AND COLUMN_KEY = 'PRI'
607
- ORDER BY ORDINAL_POSITION`,[e]);return o.map(a=>a.column_name)},ir=async({tableName:t,cursor:e="",limit:o=50,direction:a="asc",sort:n=[],order:r="asc",filters:s=[],db:c})=>{let i=S(c),l=await wc(i,t),m=[],p=r;Array.isArray(n)&&n.length>0?(m=n.map($=>$.columnName),p=n[0].direction):typeof n=="string"&&n&&(m=[n]);let u=[...m,...l.filter($=>!m.includes($))],{clause:d,values:g}=ar(s),y="",b=[];if(e){let $=Ac(e);if($){let _=rr($,a,p);y=_.clause,b=_.values}}let E="";d&&y?E=`WHERE ${d.replace(/^WHERE\s+/i,"")} AND ${y}`:d?E=d:y&&(E=`WHERE ${y}`);let N=nr((Array.isArray(n),n),r),A=N;a==="desc"?N?A=N.replace(/\bASC\b/gi,"TEMP_DESC").replace(/\bDESC\b/gi,"ASC").replace(/TEMP_DESC/g,"DESC"):u.length>0&&(A=`ORDER BY ${u.map(_=>`\`${_}\` ${p==="asc"?"DESC":"ASC"}`).join(", ")}`):!N&&u.length>0&&(A=`ORDER BY ${u.map(_=>`\`${_}\` ${p.toUpperCase()}`).join(", ")}`);let[q]=await i.execute(`SELECT COUNT(*) as total FROM \`${t}\` ${d}`,g),k=Number(q[0]?.total??0),H=Math.floor(o)+1,[j]=await i.execute(`SELECT * FROM \`${t}\` ${E} ${A} LIMIT ${H}`,[...g,...b]),O=j,D=O.length>o;D&&(O=O.slice(0,o)),a==="desc"&&(O=O.reverse());let F=null,Y=null;if(O.length>0&&u.length>0){let $=O[0],_=O[O.length-1],v=me=>({values:Object.fromEntries(u.map(Oe=>[Oe,me[Oe]])),sortColumns:u});a==="asc"?(D&&(F=Xe(v(_))),e&&(Y=Xe(v($)))):(e&&(F=Xe(v(_))),D&&(Y=Xe(v($))))}return{data:O,meta:{limit:o,total:k,hasNextPage:a==="asc"?D:!!e,hasPreviousPage:a==="asc"?!!e:D,nextCursor:F,prevCursor:Y}}}});import{HTTPException as Ze}from"hono/http-exception";async function lr({params:t,db:e}){let{tableName:o,updates:a,primaryKey:n}=t,r=S(e),s=await re({tableName:o,db:e}),c=new Set(s.filter(m=>m.dataTypeLabel==="boolean").map(m=>m.columnName)),i=new Map;for(let m of a){let p=m.rowData[n];if(p==null)throw new Ze(400,{message:`Primary key "${n}" not found in row data.`});i.has(p)||i.set(p,[]),i.get(p)?.push({columnName:m.columnName,value:m.value,rowData:m.rowData})}let l=await r.getConnection();await l.beginTransaction();try{let m=0;for(let[p,u]of i.entries()){let d=u.map(E=>`\`${E.columnName}\` = ?`),g=u.map(E=>E.value!==null&&typeof E.value=="object"?JSON.stringify(E.value):c.has(E.columnName)&&typeof E.value=="string"?E.value==="true"?1:0:E.value);g.push(p);let y=`
607
+ ORDER BY ORDINAL_POSITION`,[e]);return o.map(a=>a.column_name)},ir=async({tableName:t,cursor:e="",limit:o=50,direction:a="asc",sort:n=[],order:r="asc",filters:i=[],db:c})=>{let s=S(c),l=await wc(s,t),m=[],p=r;Array.isArray(n)&&n.length>0?(m=n.map($=>$.columnName),p=n[0].direction):typeof n=="string"&&n&&(m=[n]);let u=[...m,...l.filter($=>!m.includes($))],{clause:d,values:g}=ar(i),y="",b=[];if(e){let $=Ac(e);if($){let _=rr($,a,p);y=_.clause,b=_.values}}let E="";d&&y?E=`WHERE ${d.replace(/^WHERE\s+/i,"")} AND ${y}`:d?E=d:y&&(E=`WHERE ${y}`);let N=nr((Array.isArray(n),n),r),A=N;a==="desc"?N?A=N.replace(/\bASC\b/gi,"TEMP_DESC").replace(/\bDESC\b/gi,"ASC").replace(/TEMP_DESC/g,"DESC"):u.length>0&&(A=`ORDER BY ${u.map(_=>`\`${_}\` ${p==="asc"?"DESC":"ASC"}`).join(", ")}`):!N&&u.length>0&&(A=`ORDER BY ${u.map(_=>`\`${_}\` ${p.toUpperCase()}`).join(", ")}`);let[q]=await s.execute(`SELECT COUNT(*) as total FROM \`${t}\` ${d}`,g),k=Number(q[0]?.total??0),H=Math.floor(o)+1,[j]=await s.execute(`SELECT * FROM \`${t}\` ${E} ${A} LIMIT ${H}`,[...g,...b]),O=j,D=O.length>o;D&&(O=O.slice(0,o)),a==="desc"&&(O=O.reverse());let F=null,Y=null;if(O.length>0&&u.length>0){let $=O[0],_=O[O.length-1],v=ue=>({values:Object.fromEntries(u.map(Oe=>[Oe,ue[Oe]])),sortColumns:u});a==="asc"?(D&&(F=Xe(v(_))),e&&(Y=Xe(v($)))):(e&&(F=Xe(v(_))),D&&(Y=Xe(v($))))}return{data:O,meta:{limit:o,total:k,hasNextPage:a==="asc"?D:!!e,hasPreviousPage:a==="asc"?!!e:D,nextCursor:F,prevCursor:Y}}}});import{HTTPException as Ze}from"hono/http-exception";async function lr({params:t,db:e}){let{tableName:o,updates:a,primaryKey:n}=t,r=S(e),i=await re({tableName:o,db:e}),c=new Set(i.filter(m=>m.dataTypeLabel==="boolean").map(m=>m.columnName)),s=new Map;for(let m of a){let p=m.rowData[n];if(p==null)throw new Ze(400,{message:`Primary key "${n}" not found in row data.`});s.has(p)||s.set(p,[]),s.get(p)?.push({columnName:m.columnName,value:m.value,rowData:m.rowData})}let l=await r.getConnection();await l.beginTransaction();try{let m=0;for(let[p,u]of s.entries()){let d=u.map(E=>`\`${E.columnName}\` = ?`),g=u.map(E=>E.value!==null&&typeof E.value=="object"?JSON.stringify(E.value):c.has(E.columnName)&&typeof E.value=="string"?E.value==="true"?1:0:E.value);g.push(p);let y=`
608
608
  UPDATE \`${o}\`
609
609
  SET ${d.join(", ")}
610
610
  WHERE \`${n}\` = ?
611
- `,[b]=await l.execute(y,g);if(b.affectedRows===0)throw new Ze(404,{message:`Record with ${n} = ${p} not found in table "${o}"`});m+=b.affectedRows}return await l.commit(),{updatedCount:m}}catch(m){throw await l.rollback(),m instanceof Ze?m:new Ze(500,{message:`Failed to update records in "${o}"`})}finally{l.release()}}var mr=f(()=>{"use strict";h();Me()});import{HTTPException as Mc}from"hono/http-exception";var ur,pr=f(()=>{"use strict";h();ur=async({query:t,db:e})=>{let o=C(e);if(!t||!t.trim())throw new Mc(400,{message:"Query is required"});let a=t.trim().replace(/;+$/,""),n=performance.now(),r=await o.query(a),s=performance.now()-n;return{columns:r.fields.map(i=>i.name),rows:r.rows,rowCount:r.rows.length,duration:s,message:r.rows.length===0?"OK":void 0}}});import{HTTPException as Lc}from"hono/http-exception";async function fr(t){let e=C(t),o=`
611
+ `,[b]=await l.execute(y,g);if(b.affectedRows===0)throw new Ze(404,{message:`Record with ${n} = ${p} not found in table "${o}"`});m+=b.affectedRows}return await l.commit(),{updatedCount:m}}catch(m){throw await l.rollback(),m instanceof Ze?m:new Ze(500,{message:`Failed to update records in "${o}"`})}finally{l.release()}}var mr=f(()=>{"use strict";h();Me()});import{HTTPException as Mc}from"hono/http-exception";var ur,pr=f(()=>{"use strict";h();ur=async({query:t,db:e})=>{let o=C(e);if(!t||!t.trim())throw new Mc(400,{message:"Query is required"});let a=t.trim().replace(/;+$/,""),n=performance.now(),r=await o.query(a),i=performance.now()-n;return{columns:r.fields.map(s=>s.name),rows:r.rows,rowCount:r.rows.length,duration:i,message:r.rows.length===0?"OK":void 0}}});async function fr(t){let e=C(t),o=`
612
612
  SELECT table_schema as "schemaName", table_name as "tableName"
613
613
  FROM information_schema.tables
614
614
  WHERE table_type = 'BASE TABLE'
615
615
  AND table_schema NOT IN ('pg_catalog', 'information_schema')
616
616
  AND table_schema NOT LIKE 'pg_toast%'
617
617
  ORDER BY table_schema, table_name;
618
- `,{rows:a}=await e.query(o);if(!a[0])throw new Lc(500,{message:"No tables returned from database"});return await Promise.all(a.map(async r=>{let s=dr(r.schemaName),c=dr(r.tableName),i=`SELECT COUNT(*)::integer as count FROM "${s}"."${c}"`,{rows:l}=await e.query(i);return{schemaName:r.schemaName,tableName:r.tableName,rowCount:l[0]?.count??0}}))}var dr,br=f(()=>{"use strict";h();dr=t=>t.replaceAll('"','""')});import{HTTPException as Pc}from"hono/http-exception";async function yr({tableName:t,db:e}){let o=C(e),a=`
618
+ `,{rows:a}=await e.query(o);return a[0]?await Promise.all(a.map(async r=>{let i=dr(r.schemaName),c=dr(r.tableName),s=`SELECT COUNT(*)::integer as count FROM "${i}"."${c}"`,{rows:l}=await e.query(s);return{schemaName:r.schemaName,tableName:r.tableName,rowCount:l[0]?.count??0}})):[]}var dr,br=f(()=>{"use strict";h();dr=t=>t.replaceAll('"','""')});import{HTTPException as Oc}from"hono/http-exception";async function yr({tableName:t,db:e}){let o=C(e),a=`
619
619
  SELECT EXISTS (
620
620
  SELECT 1 FROM information_schema.tables
621
621
  WHERE table_schema = 'public' AND table_name = $1
622
622
  ) as exists
623
- `,{rows:n}=await o.query(a,[t]);if(!n[0]?.exists)throw new Pc(404,{message:`Table "${t}" does not exist`});let r=`
623
+ `,{rows:n}=await o.query(a,[t]);if(!n[0]?.exists)throw new Oc(404,{message:`Table "${t}" does not exist`});let r=`
624
624
  SELECT
625
625
  column_name,
626
626
  data_type,
@@ -633,7 +633,7 @@ ${s.join(`,
633
633
  FROM information_schema.columns
634
634
  WHERE table_schema = 'public' AND table_name = $1
635
635
  ORDER BY ordinal_position
636
- `,{rows:s}=await o.query(r,[t]),c=`
636
+ `,{rows:i}=await o.query(r,[t]),c=`
637
637
  SELECT
638
638
  tc.constraint_name,
639
639
  tc.constraint_type,
@@ -650,7 +650,7 @@ ${s.join(`,
650
650
  AND tc.constraint_type = 'FOREIGN KEY'
651
651
  WHERE tc.table_schema = 'public' AND tc.table_name = $1
652
652
  ORDER BY tc.constraint_type, tc.constraint_name
653
- `,{rows:i}=await o.query(c,[t]),l=`
653
+ `,{rows:s}=await o.query(c,[t]),l=`
654
654
  SELECT indexname, indexdef
655
655
  FROM pg_indexes
656
656
  WHERE schemaname = 'public' AND tablename = $1
@@ -659,18 +659,18 @@ ${s.join(`,
659
659
  FROM information_schema.table_constraints
660
660
  WHERE table_schema = 'public' AND table_name = $1 AND constraint_type = 'PRIMARY KEY'
661
661
  )
662
- `,{rows:m}=await o.query(l,[t]),p=[];p.push(`create table public.${t} (`);let u=[];for(let b of s){let E=` ${b.column_name} ${Ic(b)}`;b.is_nullable==="NO"&&(E+=" not null"),b.column_default!==null&&(E+=` default ${b.column_default}`),u.push(E)}let d=new Map;for(let b of i){let E=d.get(b.constraint_name)||[];E.push(b),d.set(b.constraint_name,E)}let g=[];for(let[b,E]of d){let N=E[0],A=E.map(q=>q.column_name).join(", ");if(N.constraint_type==="PRIMARY KEY")g.push(` constraint ${b} primary key (${A})`);else if(N.constraint_type==="FOREIGN KEY"){let q=N.foreign_table_name,k=N.foreign_column_name;g.push(` constraint ${b} foreign key (${A}) references ${q} (${k})`)}else N.constraint_type==="UNIQUE"&&g.push(` constraint ${b} unique (${A})`)}let y=[...u,...g];p.push(y.join(`,
662
+ `,{rows:m}=await o.query(l,[t]),p=[];p.push(`create table public.${t} (`);let u=[];for(let b of i){let E=` ${b.column_name} ${Pc(b)}`;b.is_nullable==="NO"&&(E+=" not null"),b.column_default!==null&&(E+=` default ${b.column_default}`),u.push(E)}let d=new Map;for(let b of s){let E=d.get(b.constraint_name)||[];E.push(b),d.set(b.constraint_name,E)}let g=[];for(let[b,E]of d){let N=E[0],A=E.map(q=>q.column_name).join(", ");if(N.constraint_type==="PRIMARY KEY")g.push(` constraint ${b} primary key (${A})`);else if(N.constraint_type==="FOREIGN KEY"){let q=N.foreign_table_name,k=N.foreign_column_name;g.push(` constraint ${b} foreign key (${A}) references ${q} (${k})`)}else N.constraint_type==="UNIQUE"&&g.push(` constraint ${b} unique (${A})`)}let y=[...u,...g];p.push(y.join(`,
663
663
  `)),p.push(") tablespace pg_default;");for(let b of m)Array.from(d.values()).some(N=>N[0].constraint_type==="UNIQUE"&&N[0].constraint_name===b.indexname)||(p.push(""),p.push(`${b.indexdef};`));return p.join(`
664
- `)}function Ic(t){let{data_type:e,udt_name:o,character_maximum_length:a,numeric_precision:n,numeric_scale:r}=t;return e==="USER-DEFINED"?o:e==="ARRAY"?`${o.replace(/^_/,"")}[]`:(e==="character varying"||e==="varchar")&&a?`varchar(${a})`:e==="character"&&a?`char(${a})`:e==="numeric"&&n!==null?r!==null&&r>0?`numeric(${n}, ${r})`:`numeric(${n})`: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 gr=f(()=>{"use strict";h()});function Tr(t){if(t.length===0)return{clause:"",values:[]};let e=[],o=[];for(let a of t){let n=o.length+1,r=`"${a.columnName}"`;switch(a.operator){case"=":case"!=":case">":case">=":case"<":case"<=":e.push(`${r} ${a.operator} $${n}`),o.push(a.value);break;case"is":a.value.toLowerCase()==="null"?e.push(`${r} IS NULL`):(e.push(`${r} = $${n}`),o.push(a.value));break;case"is not":a.value.toLowerCase()==="null"?e.push(`${r} IS NOT NULL`):(e.push(`${r} != $${n}`),o.push(a.value));break;case"like":e.push(`${r}::text LIKE $${n}`),o.push(a.value);break;case"not like":e.push(`${r}::text NOT LIKE $${n}`),o.push(a.value);break;case"ilike":e.push(`${r}::text ILIKE $${n}`),o.push(a.value);break;case"not ilike":e.push(`${r}::text NOT ILIKE $${n}`),o.push(a.value);break;default:break}}return e.length===0?{clause:"",values:[]}:{clause:`WHERE ${e.join(" AND ")}`,values:o}}function Er(t,e){return Array.isArray(t)?t.length===0?"":`ORDER BY ${t.map(a=>`"${a.columnName}" ${a.direction.toUpperCase()}`).join(", ")}`:t&&typeof t=="string"?`ORDER BY "${t}" ${e?.toUpperCase()||"ASC"}`:""}function hr(t,e,o,a){let{values:n,sortColumns:r}=t,s=[],c=[],m=o==="asc"===(e==="asc");if(r.length>0){let p=r.map(g=>`"${g}"`).join(", "),u=r.map((g,y)=>`$${a+y}`).join(", "),d=m?">":"<";s.push(`(${p}) ${d} (${u})`);for(let g of r)c.push(n[g])}return{clause:s.length>0?`(${s.join(" AND ")})`:"",values:c}}var Cr=f(()=>{"use strict"});var et,qc,kc,Sr,Nr=f(()=>{"use strict";h();Cr();et=t=>Buffer.from(JSON.stringify(t)).toString("base64url"),qc=t=>{try{return JSON.parse(Buffer.from(t,"base64url").toString("utf-8"))}catch{return null}},kc=async(t,e)=>{let o=`"${e}"`;return(await t.query(`SELECT a.attname as column_name
664
+ `)}function Pc(t){let{data_type:e,udt_name:o,character_maximum_length:a,numeric_precision:n,numeric_scale:r}=t;return e==="USER-DEFINED"?o:e==="ARRAY"?`${o.replace(/^_/,"")}[]`:(e==="character varying"||e==="varchar")&&a?`varchar(${a})`:e==="character"&&a?`char(${a})`:e==="numeric"&&n!==null?r!==null&&r>0?`numeric(${n}, ${r})`:`numeric(${n})`: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 gr=f(()=>{"use strict";h()});function Tr(t){if(t.length===0)return{clause:"",values:[]};let e=[],o=[];for(let a of t){let n=o.length+1,r=`"${a.columnName}"`;switch(a.operator){case"=":case"!=":case">":case">=":case"<":case"<=":e.push(`${r} ${a.operator} $${n}`),o.push(a.value);break;case"is":a.value.toLowerCase()==="null"?e.push(`${r} IS NULL`):(e.push(`${r} = $${n}`),o.push(a.value));break;case"is not":a.value.toLowerCase()==="null"?e.push(`${r} IS NOT NULL`):(e.push(`${r} != $${n}`),o.push(a.value));break;case"like":e.push(`${r}::text LIKE $${n}`),o.push(a.value);break;case"not like":e.push(`${r}::text NOT LIKE $${n}`),o.push(a.value);break;case"ilike":e.push(`${r}::text ILIKE $${n}`),o.push(a.value);break;case"not ilike":e.push(`${r}::text NOT ILIKE $${n}`),o.push(a.value);break;default:break}}return e.length===0?{clause:"",values:[]}:{clause:`WHERE ${e.join(" AND ")}`,values:o}}function Er(t,e){return Array.isArray(t)?t.length===0?"":`ORDER BY ${t.map(a=>`"${a.columnName}" ${a.direction.toUpperCase()}`).join(", ")}`:t&&typeof t=="string"?`ORDER BY "${t}" ${e?.toUpperCase()||"ASC"}`:""}function hr(t,e,o,a){let{values:n,sortColumns:r}=t,i=[],c=[],m=o==="asc"===(e==="asc");if(r.length>0){let p=r.map(g=>`"${g}"`).join(", "),u=r.map((g,y)=>`$${a+y}`).join(", "),d=m?">":"<";i.push(`(${p}) ${d} (${u})`);for(let g of r)c.push(n[g])}return{clause:i.length>0?`(${i.join(" AND ")})`:"",values:c}}var Cr=f(()=>{"use strict"});var et,$c,qc,Sr,Nr=f(()=>{"use strict";h();Cr();et=t=>Buffer.from(JSON.stringify(t)).toString("base64url"),$c=t=>{try{return JSON.parse(Buffer.from(t,"base64url").toString("utf-8"))}catch{return null}},qc=async(t,e)=>{let o=`"${e}"`;return(await t.query(`SELECT a.attname as column_name
665
665
  FROM pg_index i
666
666
  JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
667
667
  WHERE i.indrelid = $1::regclass AND i.indisprimary
668
- ORDER BY array_position(i.indkey, a.attnum)`,[o])).rows.map(n=>n.column_name)},Sr=async({tableName:t,cursor:e="",limit:o=50,direction:a="asc",sort:n=[],order:r="asc",filters:s=[],db:c})=>{let i=C(c),l=await kc(i,t),m=[],p=r;Array.isArray(n)&&n.length>0?(m=n.map(_=>_.columnName),p=n[0].direction):typeof n=="string"&&n&&(m=[n]);let u=[...m,...l.filter(_=>!m.includes(_))];u.length===0&&u.push("ctid");let{clause:d,values:g}=Tr(s),y="",b=[];if(e){let _=qc(e);if(_){let v=hr(_,a,p,g.length+1);y=v.clause,b=v.values}}let E="";d&&y?E=`WHERE ${d.replace(/^WHERE\s+/i,"")} AND ${y}`:d?E=d:y&&(E=`WHERE ${y}`);let N=Er((Array.isArray(n),n),r),A=N;a==="desc"?N?A=N.replace(/\bASC\b/gi,"TEMP_DESC").replace(/\bDESC\b/gi,"ASC").replace(/TEMP_DESC/g,"DESC"):A=`ORDER BY ${u.map(v=>`"${v}" ${p==="asc"?"DESC":"ASC"}`).join(", ")}`:!N&&u.length>0&&(A=`ORDER BY ${u.map(v=>`"${v}" ${p.toUpperCase()}`).join(", ")}`);let q=await i.query(`SELECT COUNT(*) as total FROM "${t}" ${d}`,g),k=Number(q.rows[0].total),H=g.length+b.length+1,j=await i.query(`SELECT * FROM "${t}" ${E} ${A} LIMIT $${H}`,[...g,...b,o+1]),D=j.fields&&j.fields.length>0?j.rows.filter(_=>Object.keys(_).length>0):j.rows,F=D.length>o;F&&(D=D.slice(0,o)),a==="desc"&&(D=D.reverse());let Y=null,$=null;if(D.length>0){let _=D[0],v=D[D.length-1],me=Oe=>({values:Object.fromEntries(u.map(Ot=>[Ot,Oe[Ot]])),sortColumns:u});a==="asc"?(F&&(Y=et(me(v))),e&&($=et(me(_)))):(e&&(Y=et(me(v))),F&&($=et(me(_))))}return{data:D,meta:{limit:o,total:k,hasNextPage:a==="asc"?F:!!e,hasPreviousPage:a==="asc"?!!e:F,nextCursor:Y,prevCursor:$}}}});import{HTTPException as tt}from"hono/http-exception";async function Rr({params:t,db:e}){let{tableName:o,updates:a,primaryKey:n}=t,r=C(e),s=new Map;for(let c of a){let i=c.rowData[n];if(i==null)throw new tt(400,{message:`Primary key "${n}" not found in row data. Please ensure the row has a "${n}" column.`});s.has(i)||s.set(i,[]),s.get(i)?.push({columnName:c.columnName,value:c.value,rowData:c.rowData})}await r.query("BEGIN");try{let c=0;for(let[i,l]of s.entries()){let m=l.map((g,y)=>`"${g.columnName}" = $${y+1}`),p=l.map(g=>g.value!==null&&typeof g.value=="object"?JSON.stringify(g.value):g.value);p.push(i);let u=`
668
+ ORDER BY array_position(i.indkey, a.attnum)`,[o])).rows.map(n=>n.column_name)},Sr=async({tableName:t,cursor:e="",limit:o=50,direction:a="asc",sort:n=[],order:r="asc",filters:i=[],db:c})=>{let s=C(c),l=await qc(s,t),m=[],p=r;Array.isArray(n)&&n.length>0?(m=n.map(_=>_.columnName),p=n[0].direction):typeof n=="string"&&n&&(m=[n]);let u=[...m,...l.filter(_=>!m.includes(_))];u.length===0&&u.push("ctid");let{clause:d,values:g}=Tr(i),y="",b=[];if(e){let _=$c(e);if(_){let v=hr(_,a,p,g.length+1);y=v.clause,b=v.values}}let E="";d&&y?E=`WHERE ${d.replace(/^WHERE\s+/i,"")} AND ${y}`:d?E=d:y&&(E=`WHERE ${y}`);let N=Er((Array.isArray(n),n),r),A=N;a==="desc"?N?A=N.replace(/\bASC\b/gi,"TEMP_DESC").replace(/\bDESC\b/gi,"ASC").replace(/TEMP_DESC/g,"DESC"):A=`ORDER BY ${u.map(v=>`"${v}" ${p==="asc"?"DESC":"ASC"}`).join(", ")}`:!N&&u.length>0&&(A=`ORDER BY ${u.map(v=>`"${v}" ${p.toUpperCase()}`).join(", ")}`);let q=await s.query(`SELECT COUNT(*) as total FROM "${t}" ${d}`,g),k=Number(q.rows[0].total),H=g.length+b.length+1,j=await s.query(`SELECT * FROM "${t}" ${E} ${A} LIMIT $${H}`,[...g,...b,o+1]),D=j.fields&&j.fields.length>0?j.rows.filter(_=>Object.keys(_).length>0):j.rows,F=D.length>o;F&&(D=D.slice(0,o)),a==="desc"&&(D=D.reverse());let Y=null,$=null;if(D.length>0){let _=D[0],v=D[D.length-1],ue=Oe=>({values:Object.fromEntries(u.map(Ot=>[Ot,Oe[Ot]])),sortColumns:u});a==="asc"?(F&&(Y=et(ue(v))),e&&($=et(ue(_)))):(e&&(Y=et(ue(v))),F&&($=et(ue(_))))}return{data:D,meta:{limit:o,total:k,hasNextPage:a==="asc"?F:!!e,hasPreviousPage:a==="asc"?!!e:F,nextCursor:Y,prevCursor:$}}}});import{HTTPException as tt}from"hono/http-exception";async function Rr({params:t,db:e}){let{tableName:o,updates:a,primaryKey:n}=t,r=C(e),i=new Map;for(let c of a){let s=c.rowData[n];if(s==null)throw new tt(400,{message:`Primary key "${n}" not found in row data. Please ensure the row has a "${n}" column.`});i.has(s)||i.set(s,[]),i.get(s)?.push({columnName:c.columnName,value:c.value,rowData:c.rowData})}await r.query("BEGIN");try{let c=0;for(let[s,l]of i.entries()){let m=l.map((g,y)=>`"${g.columnName}" = $${y+1}`),p=l.map(g=>g.value!==null&&typeof g.value=="object"?JSON.stringify(g.value):g.value);p.push(s);let u=`
669
669
  UPDATE "${o}"
670
670
  SET ${m.join(", ")}
671
671
  WHERE "${n}" = $${p.length}
672
672
  RETURNING *
673
- `,d=await r.query(u,p);if(d.rowCount===0)throw new tt(404,{message:`Record with ${n} = ${i} not found in table "${o}"`});c+=d.rowCount??0}return await r.query("COMMIT"),{updatedCount:c}}catch(c){throw await r.query("ROLLBACK"),c instanceof tt?c:new tt(500,{message:`Failed to update records in "${o}"`})}}var Ar=f(()=>{"use strict";h()});function P(t){return t==="mongodb"?wr.mongodb:wr[t]}var wr,xe=f(()=>{"use strict";fa();ya();Ta();Sa();Aa();_a();La();Pa();qa();Fa();Ha();Qa();Ya();ye();Ga();Xa();en();nn();cn();un();bn();gn();En();_e();Cn();Rn();wn();_n();xn();On();In();vn();Bn();Kn();Wn();zn();Jn();Me();Zn();or();cr();mr();pr();gt();br();gr();Nr();Ar();wr={pg:{addRecord:da,bulkInsertRecords:ba,createTable:ga,getDatabasesList:Ea,getCurrentDatabase:ha,getDatabaseConnectionInfo:Ca,deleteColumn:Ra,deleteRecords:wa,forceDeleteRecords:Da,deleteTable:xa,exportTableData:Oa,executeQuery:ur,getTableColumns:Qe,getTablesList:fr,getTableSchema:yr,getTableData:Sr,updateRecords:Rr},mysql:{addRecord:Mn,bulkInsertRecords:Ln,createTable:Pn,getDatabasesList:$n,getCurrentDatabase:qn,getDatabaseConnectionInfo:kn,deleteColumn:Fn,deleteRecords:Hn,forceDeleteRecords:jn,deleteTable:Qn,exportTableData:Yn,executeQuery:Gn,getTableColumns:re,getTablesList:Xn,getTableSchema:tr,getTableData:ir,updateRecords:lr},mongodb:{addRecord:({db:t,params:e})=>ja({db:t,params:e}),bulkInsertRecords:$a,createTable:({db:t,tableData:e})=>Zo({tableName:e?.tableName??"",tableData:e,db:t}),getDatabasesList:ka,getCurrentDatabase:va,getDatabaseConnectionInfo:Ua,deleteColumn:({db:t,tableName:e,columnName:o})=>ea({tableName:e,columnName:o,db:t}),deleteRecords:St,forceDeleteRecords:Va,deleteTable:async({db:t,tableName:e})=>{let{getMongoDb:o}=await Promise.resolve().then(()=>(h(),Qo));await(await o(t)).collection(e).drop()},exportTableData:({db:t,tableName:e})=>ta({tableName:e,db:t}),executeQuery:({query:t,db:e})=>Ba({query:t,db:e}),getTableColumns:Ke,getTablesList:({db:t})=>Jo(t),getTableSchema:Wa,getTableData:Xo,updateRecords:({db:t,params:e})=>Ka({db:t,params:e})},mssql:{addRecord:za,bulkInsertRecords:Ja,createTable:Za,getDatabasesList:tn,getCurrentDatabase:on,getDatabaseConnectionInfo:an,deleteColumn:sn,deleteRecords:ln,forceDeleteRecords:mn,deleteTable:fn,exportTableData:yn,executeQuery:Tn,getTableColumns:ne,getTablesList:hn,getTableSchema:Nn,getTableData:An,updateRecords:Dn}}});import{Hono as Fc}from"hono";var Dr,_r=f(()=>{"use strict";xe();h();Dr=new Fc().basePath("/databases").get("/",async t=>{let e=ce(),a=await P(e).getDatabasesList();return t.json({data:{databases:a,dbType:e}},200)}).get("/current",async t=>{let e=ce(),a=await P(e).getCurrentDatabase();return t.json({data:{db:a.db,dbType:e}},200)}).get("/connection",async t=>{let e=ce(),a=await P(e).getDatabaseConnectionInfo();return t.json({data:a},200)})});import{zValidator as Mr}from"@hono/zod-validator";import{Hono as Bc}from"hono";var xr,Lr=f(()=>{"use strict";X();xe();xr=new Bc().basePath("/query").post("/",Mr("query",w),Mr("json",Mo),async t=>{let{query:e}=t.req.valid("json"),{db:o}=t.req.valid("query"),a=t.get("dbType"),r=await P(a).executeQuery({query:e,db:o});return t.json({data:r},200)})});import{zValidator as Z}from"@hono/zod-validator";import{Hono as Hc}from"hono";var Or,Pr=f(()=>{"use strict";X();xe();Or=new Hc().basePath("/records").post("/",Z("query",w),Z("json",to),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,data:a}=t.req.valid("json"),n=t.get("dbType"),r=P(n),{insertedCount:s}=await r.addRecord({db:e,params:{tableName:o,data:a}});return t.json({data:`Record inserted into "${o}" with ${s} rows inserted`},200)}).patch("/",Z("query",w),Z("json",Fo),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,primaryKey:a,updates:n}=t.req.valid("json"),r=t.get("dbType"),s=P(r),{updatedCount:c}=await s.updateRecords({params:{tableName:o,primaryKey:a,updates:n},db:e});return t.json({data:`Updated ${c} records in "${o}"`},200)}).delete("/",Z("query",w),Z("json",mt),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,primaryKeys:a}=t.req.valid("json"),n=t.get("dbType"),r=P(n),{deletedCount:s,fkViolation:c,relatedRecords:i}=await r.deleteRecords({tableName:o,primaryKeys:a,db:e});return c?t.json({data:{deletedCount:0,fkViolation:!0,relatedRecords:i}},409):t.json({data:{deletedCount:s,fkViolation:!1,relatedRecords:[]}},200)}).delete("/force",Z("query",w),Z("json",mt),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,primaryKeys:a}=t.req.valid("json"),n=t.get("dbType"),s=await P(n).forceDeleteRecords({tableName:o,primaryKeys:a,db:e});return t.json({data:s},200)}).post("/bulk",Z("query",w),Z("json",so),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,records:a}=t.req.valid("json"),n=t.get("dbType"),s=await P(n).bulkInsertRecords({tableName:o,records:a,db:e});return t.json({data:s},200)})});import{HTTPException as Ir}from"hono/http-exception";async function $r(t){let{tableName:e,columnName:o,columnType:a,defaultValue:n,isPrimaryKey:r,isNullable:s,isUnique:c,isIdentity:i,isArray:l,db:m}=t,p=C(m),u=`
673
+ `,d=await r.query(u,p);if(d.rowCount===0)throw new tt(404,{message:`Record with ${n} = ${s} not found in table "${o}"`});c+=d.rowCount??0}return await r.query("COMMIT"),{updatedCount:c}}catch(c){throw await r.query("ROLLBACK"),c instanceof tt?c:new tt(500,{message:`Failed to update records in "${o}"`})}}var Ar=f(()=>{"use strict";h()});function P(t){return t==="mongodb"?wr.mongodb:wr[t]}var wr,xe=f(()=>{"use strict";fa();ya();Ta();Sa();Aa();_a();La();Pa();qa();Fa();Ha();Qa();Ya();ye();Ga();Xa();en();nn();cn();un();bn();gn();En();_e();Cn();Rn();wn();_n();xn();On();In();vn();Bn();Kn();Wn();zn();Jn();Me();Zn();or();cr();mr();pr();gt();br();gr();Nr();Ar();wr={pg:{addRecord:da,bulkInsertRecords:ba,createTable:ga,getDatabasesList:Ea,getCurrentDatabase:ha,getDatabaseConnectionInfo:Ca,deleteColumn:Ra,deleteRecords:wa,forceDeleteRecords:Da,deleteTable:xa,exportTableData:Oa,executeQuery:ur,getTableColumns:Qe,getTablesList:fr,getTableSchema:yr,getTableData:Sr,updateRecords:Rr},mysql:{addRecord:Mn,bulkInsertRecords:Ln,createTable:Pn,getDatabasesList:$n,getCurrentDatabase:qn,getDatabaseConnectionInfo:kn,deleteColumn:Fn,deleteRecords:Hn,forceDeleteRecords:jn,deleteTable:Qn,exportTableData:Yn,executeQuery:Gn,getTableColumns:re,getTablesList:Xn,getTableSchema:tr,getTableData:ir,updateRecords:lr},mongodb:{addRecord:({db:t,params:e})=>ja({db:t,params:e}),bulkInsertRecords:$a,createTable:({db:t,tableData:e})=>Zo({tableName:e?.tableName??"",tableData:e,db:t}),getDatabasesList:ka,getCurrentDatabase:va,getDatabaseConnectionInfo:Ua,deleteColumn:({db:t,tableName:e,columnName:o})=>ea({tableName:e,columnName:o,db:t}),deleteRecords:St,forceDeleteRecords:Va,deleteTable:async({db:t,tableName:e})=>{let{getMongoDb:o}=await Promise.resolve().then(()=>(h(),Qo));await(await o(t)).collection(e).drop()},exportTableData:({db:t,tableName:e})=>ta({tableName:e,db:t}),executeQuery:({query:t,db:e})=>Ba({query:t,db:e}),getTableColumns:Ke,getTablesList:({db:t})=>Jo(t),getTableSchema:Wa,getTableData:Xo,updateRecords:({db:t,params:e})=>Ka({db:t,params:e})},mssql:{addRecord:za,bulkInsertRecords:Ja,createTable:Za,getDatabasesList:tn,getCurrentDatabase:on,getDatabaseConnectionInfo:an,deleteColumn:sn,deleteRecords:ln,forceDeleteRecords:mn,deleteTable:fn,exportTableData:yn,executeQuery:Tn,getTableColumns:ne,getTablesList:hn,getTableSchema:Nn,getTableData:An,updateRecords:Dn}}});import{Hono as Uc}from"hono";var Dr,_r=f(()=>{"use strict";xe();h();Dr=new Uc().basePath("/databases").get("/",async t=>{let e=le(),a=await P(e).getDatabasesList();return t.json({data:{databases:a,dbType:e}},200)}).get("/current",async t=>{let e=le(),a=await P(e).getCurrentDatabase();return t.json({data:{db:a.db,dbType:e}},200)}).get("/connection",async t=>{let e=le(),a=await P(e).getDatabaseConnectionInfo();return t.json({data:a},200)})});import{zValidator as Mr}from"@hono/zod-validator";import{Hono as Fc}from"hono";var xr,Lr=f(()=>{"use strict";X();xe();xr=new Fc().basePath("/query").post("/",Mr("query",w),Mr("json",Mo),async t=>{let{query:e}=t.req.valid("json"),{db:o}=t.req.valid("query"),a=t.get("dbType"),r=await P(a).executeQuery({query:e,db:o});return t.json({data:r},200)})});import{zValidator as Z}from"@hono/zod-validator";import{Hono as Bc}from"hono";var Or,Pr=f(()=>{"use strict";X();xe();Or=new Bc().basePath("/records").post("/",Z("query",w),Z("json",to),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,data:a}=t.req.valid("json"),n=t.get("dbType"),r=P(n),{insertedCount:i}=await r.addRecord({db:e,params:{tableName:o,data:a}});return t.json({data:`Record inserted into "${o}" with ${i} rows inserted`},200)}).patch("/",Z("query",w),Z("json",Fo),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,primaryKey:a,updates:n}=t.req.valid("json"),r=t.get("dbType"),i=P(r),{updatedCount:c}=await i.updateRecords({params:{tableName:o,primaryKey:a,updates:n},db:e});return t.json({data:`Updated ${c} records in "${o}"`},200)}).delete("/",Z("query",w),Z("json",mt),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,primaryKeys:a}=t.req.valid("json"),n=t.get("dbType"),r=P(n),{deletedCount:i,fkViolation:c,relatedRecords:s}=await r.deleteRecords({tableName:o,primaryKeys:a,db:e});return c?t.json({data:{deletedCount:0,fkViolation:!0,relatedRecords:s}},409):t.json({data:{deletedCount:i,fkViolation:!1,relatedRecords:[]}},200)}).delete("/force",Z("query",w),Z("json",mt),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,primaryKeys:a}=t.req.valid("json"),n=t.get("dbType"),i=await P(n).forceDeleteRecords({tableName:o,primaryKeys:a,db:e});return t.json({data:i},200)}).post("/bulk",Z("query",w),Z("json",so),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,records:a}=t.req.valid("json"),n=t.get("dbType"),i=await P(n).bulkInsertRecords({tableName:o,records:a,db:e});return t.json({data:i},200)})});import{HTTPException as Ir}from"hono/http-exception";async function $r(t){let{tableName:e,columnName:o,columnType:a,defaultValue:n,isPrimaryKey:r,isNullable:i,isUnique:c,isIdentity:s,isArray:l,db:m}=t,p=C(m),u=`
674
674
  SELECT EXISTS (
675
675
  SELECT 1 FROM information_schema.tables
676
676
  WHERE table_name = $1 AND table_schema = 'public'
@@ -680,40 +680,40 @@ ${s.join(`,
680
680
  SELECT 1 FROM information_schema.columns
681
681
  WHERE table_name = $1 AND column_name = $2 AND table_schema = 'public'
682
682
  ) as exists;
683
- `,{rows:y}=await p.query(g,[e,o]);if(y[0]?.exists)throw new Ir(409,{message:`Column "${o}" already exists in table "${e}"`});let b=`"${o}" ${a}`;l&&(b+="[]"),r&&(b+=" PRIMARY KEY"),c&&!r&&(b+=" UNIQUE"),s||(b+=" NOT NULL"),i&&(b+=" GENERATED ALWAYS AS IDENTITY"),n?.trim()&&!i&&(b+=` DEFAULT ${n.trim()}`),await p.query(`ALTER TABLE "${e}" ADD COLUMN ${b}`)}var qr=f(()=>{"use strict";h()});import{HTTPException as kr}from"hono/http-exception";async function vr(t){let{tableName:e,columnName:o,columnType:a,isNullable:n,defaultValue:r,db:s}=t,c=C(s),i=`
683
+ `,{rows:y}=await p.query(g,[e,o]);if(y[0]?.exists)throw new Ir(409,{message:`Column "${o}" already exists in table "${e}"`});let b=`"${o}" ${a}`;l&&(b+="[]"),r&&(b+=" PRIMARY KEY"),c&&!r&&(b+=" UNIQUE"),i||(b+=" NOT NULL"),s&&(b+=" GENERATED ALWAYS AS IDENTITY"),n?.trim()&&!s&&(b+=` DEFAULT ${n.trim()}`),await p.query(`ALTER TABLE "${e}" ADD COLUMN ${b}`)}var qr=f(()=>{"use strict";h()});import{HTTPException as kr}from"hono/http-exception";async function vr(t){let{tableName:e,columnName:o,columnType:a,isNullable:n,defaultValue:r,db:i}=t,c=C(i),s=`
684
684
  SELECT EXISTS (
685
685
  SELECT 1 FROM information_schema.tables
686
686
  WHERE table_name = $1 AND table_schema = 'public'
687
687
  ) as exists;
688
- `,{rows:l}=await c.query(i,[e]);if(!l[0]?.exists)throw new kr(404,{message:`Table "${e}" does not exist`});let m=`
688
+ `,{rows:l}=await c.query(s,[e]);if(!l[0]?.exists)throw new kr(404,{message:`Table "${e}" does not exist`});let m=`
689
689
  SELECT EXISTS (
690
690
  SELECT 1 FROM information_schema.columns
691
691
  WHERE table_name = $1 AND column_name = $2 AND table_schema = 'public'
692
692
  ) as exists;
693
- `,{rows:p}=await c.query(m,[e,o]);if(!p[0]?.exists)throw new kr(404,{message:`Column "${o}" does not exist in table "${e}"`});let u=await c.connect();try{await u.query("BEGIN"),await u.query(`ALTER TABLE "${e}" ALTER COLUMN "${o}" TYPE ${a}`),await u.query(`ALTER TABLE "${e}" ALTER COLUMN "${o}" ${n?"DROP":"SET"} NOT NULL`),r?.trim()?await u.query(`ALTER TABLE "${e}" ALTER COLUMN "${o}" SET DEFAULT ${r.trim()}`):await u.query(`ALTER TABLE "${e}" ALTER COLUMN "${o}" DROP DEFAULT`),await u.query("COMMIT")}catch(d){throw await u.query("ROLLBACK"),d}finally{u.release()}}var Ur=f(()=>{"use strict";h()});import{HTTPException as Fr}from"hono/http-exception";async function Br({tableName:t,columnName:e,columnType:o,defaultValue:a,isNullable:n,db:r}){let s=await x(r),c=await s.listCollections({name:t}).toArray();if(c.length===0)throw new Fr(404,{message:`Collection "${t}" does not exist`});if(await s.collection(t).findOne({[e]:{$exists:!0}}))throw new Fr(409,{message:`Field "${e}" already exists in collection "${t}"`});let l=jc(a,o);await s.collection(t).updateMany({},{$set:{[e]:l}});let p=c[0].options?.validator?.$jsonSchema??{},u={...p.properties??{},[e]:{bsonType:n?[o,"null"]:o}},d=[...p.required??[]];!n&&!d.includes(e)&&d.push(e),await s.command({collMod:t,validator:{$jsonSchema:{...p,bsonType:"object",properties:u,...d.length>0?{required:d}:{}}},validationAction:"warn"})}var jc,Hr=f(()=>{"use strict";h();jc=(t,e)=>{if(t!=null&&t.trim()!=="")try{return JSON.parse(t)}catch{return t}switch(e){case"string":return"";case"int":case"long":case"double":case"decimal":return 0;case"bool":return!1;case"array":return[];case"object":return{};case"date":return new Date;default:return null}}});import{HTTPException as Se}from"hono/http-exception";async function jr({tableName:t,columnName:e,newColumnName:o,db:a}){let n=await x(a);if((await n.listCollections({name:t}).toArray()).length===0)throw new Se(404,{message:`Collection "${t}" does not exist`});if(e==="_id")throw new Se(400,{message:'Cannot rename the "_id" field'});if(!await n.collection(t).findOne({[e]:{$exists:!0}}))throw new Se(404,{message:`Field "${e}" does not exist in collection "${t}"`});if(await n.collection(t).findOne({[o]:{$exists:!0}}))throw new Se(409,{message:`Field "${o}" already exists in collection "${t}"`});await n.collection(t).updateMany({[e]:{$exists:!0}},{$rename:{[e]:o}})}async function Kr({tableName:t,columnName:e,columnType:o,isNullable:a,db:n}){let r=await x(n),s=await r.listCollections({name:t}).toArray();if(s.length===0)throw new Se(404,{message:`Collection "${t}" does not exist`});if(e==="_id")throw new Se(400,{message:'Cannot alter the "_id" field'});let i=s[0].options?.validator?.$jsonSchema??{},l={...i.properties??{}},m=[...i.required??[]],p=a?[o,"null"]:o;l[e]={bsonType:p};let u=m.indexOf(e);!a&&u===-1?m.push(e):a&&u!==-1&&m.splice(u,1),await r.command({collMod:t,validator:{$jsonSchema:{...i,bsonType:"object",properties:l,...m.length>0?{required:m}:{}}},validationAction:"warn"})}var Vr=f(()=>{"use strict";h()});import{HTTPException as Qr}from"hono/http-exception";async function Wr(t){let{tableName:e,columnName:o,columnType:a,defaultValue:n,isPrimaryKey:r,isNullable:s,isUnique:c,isIdentity:i,isArray:l,db:m}=t,p=S(m),[u]=await p.execute(`SELECT COUNT(*) as cnt
693
+ `,{rows:p}=await c.query(m,[e,o]);if(!p[0]?.exists)throw new kr(404,{message:`Column "${o}" does not exist in table "${e}"`});let u=await c.connect();try{await u.query("BEGIN"),await u.query(`ALTER TABLE "${e}" ALTER COLUMN "${o}" TYPE ${a}`),await u.query(`ALTER TABLE "${e}" ALTER COLUMN "${o}" ${n?"DROP":"SET"} NOT NULL`),r?.trim()?await u.query(`ALTER TABLE "${e}" ALTER COLUMN "${o}" SET DEFAULT ${r.trim()}`):await u.query(`ALTER TABLE "${e}" ALTER COLUMN "${o}" DROP DEFAULT`),await u.query("COMMIT")}catch(d){throw await u.query("ROLLBACK"),d}finally{u.release()}}var Ur=f(()=>{"use strict";h()});import{HTTPException as Fr}from"hono/http-exception";async function Br({tableName:t,columnName:e,columnType:o,defaultValue:a,isNullable:n,db:r}){let i=await x(r),c=await i.listCollections({name:t}).toArray();if(c.length===0)throw new Fr(404,{message:`Collection "${t}" does not exist`});if(await i.collection(t).findOne({[e]:{$exists:!0}}))throw new Fr(409,{message:`Field "${e}" already exists in collection "${t}"`});let l=Hc(a,o);await i.collection(t).updateMany({},{$set:{[e]:l}});let p=c[0].options?.validator?.$jsonSchema??{},u={...p.properties??{},[e]:{bsonType:n?[o,"null"]:o}},d=[...p.required??[]];!n&&!d.includes(e)&&d.push(e),await i.command({collMod:t,validator:{$jsonSchema:{...p,bsonType:"object",properties:u,...d.length>0?{required:d}:{}}},validationAction:"warn"})}var Hc,Hr=f(()=>{"use strict";h();Hc=(t,e)=>{if(t!=null&&t.trim()!=="")try{return JSON.parse(t)}catch{return t}switch(e){case"string":return"";case"int":case"long":case"double":case"decimal":return 0;case"bool":return!1;case"array":return[];case"object":return{};case"date":return new Date;default:return null}}});import{HTTPException as Se}from"hono/http-exception";async function jr({tableName:t,columnName:e,newColumnName:o,db:a}){let n=await x(a);if((await n.listCollections({name:t}).toArray()).length===0)throw new Se(404,{message:`Collection "${t}" does not exist`});if(e==="_id")throw new Se(400,{message:'Cannot rename the "_id" field'});if(!await n.collection(t).findOne({[e]:{$exists:!0}}))throw new Se(404,{message:`Field "${e}" does not exist in collection "${t}"`});if(await n.collection(t).findOne({[o]:{$exists:!0}}))throw new Se(409,{message:`Field "${o}" already exists in collection "${t}"`});await n.collection(t).updateMany({[e]:{$exists:!0}},{$rename:{[e]:o}})}async function Kr({tableName:t,columnName:e,columnType:o,isNullable:a,db:n}){let r=await x(n),i=await r.listCollections({name:t}).toArray();if(i.length===0)throw new Se(404,{message:`Collection "${t}" does not exist`});if(e==="_id")throw new Se(400,{message:'Cannot alter the "_id" field'});let s=i[0].options?.validator?.$jsonSchema??{},l={...s.properties??{}},m=[...s.required??[]],p=a?[o,"null"]:o;l[e]={bsonType:p};let u=m.indexOf(e);!a&&u===-1?m.push(e):a&&u!==-1&&m.splice(u,1),await r.command({collMod:t,validator:{$jsonSchema:{...s,bsonType:"object",properties:l,...m.length>0?{required:m}:{}}},validationAction:"warn"})}var Vr=f(()=>{"use strict";h()});import{HTTPException as Qr}from"hono/http-exception";async function Wr(t){let{tableName:e,columnName:o,columnType:a,defaultValue:n,isPrimaryKey:r,isNullable:i,isUnique:c,isIdentity:s,isArray:l,db:m}=t,p=S(m),[u]=await p.execute(`SELECT COUNT(*) as cnt
694
694
  FROM information_schema.TABLES
695
695
  WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(u[0]?.cnt??0)>0))throw new Qr(404,{message:`Table "${e}" does not exist`});let[g]=await p.execute(`SELECT COUNT(*) as cnt
696
696
  FROM information_schema.COLUMNS
697
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,o]);if(Number(g[0]?.cnt??0)>0)throw new Qr(409,{message:`Column "${o}" already exists in table "${e}"`});let b=he({columnName:o,columnType:a,defaultValue:n,isPrimaryKey:r,isNullable:s,isUnique:c,isIdentity:i,isArray:l},{includePrimaryKey:!0,includeUnique:!0});await p.execute(`ALTER TABLE \`${e}\` ADD COLUMN ${b}`)}var Yr=f(()=>{"use strict";h();Je()});import{HTTPException as zr}from"hono/http-exception";async function Gr(t){let{tableName:e,columnName:o,columnType:a,isNullable:n,defaultValue:r,db:s}=t,c=S(s),[i]=await c.execute(`SELECT COUNT(*) as cnt
697
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,o]);if(Number(g[0]?.cnt??0)>0)throw new Qr(409,{message:`Column "${o}" already exists in table "${e}"`});let b=he({columnName:o,columnType:a,defaultValue:n,isPrimaryKey:r,isNullable:i,isUnique:c,isIdentity:s,isArray:l},{includePrimaryKey:!0,includeUnique:!0});await p.execute(`ALTER TABLE \`${e}\` ADD COLUMN ${b}`)}var Yr=f(()=>{"use strict";h();Je()});import{HTTPException as zr}from"hono/http-exception";async function Gr(t){let{tableName:e,columnName:o,columnType:a,isNullable:n,defaultValue:r,db:i}=t,c=S(i),[s]=await c.execute(`SELECT COUNT(*) as cnt
698
698
  FROM information_schema.TABLES
699
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(i[0]?.cnt??0)>0))throw new zr(404,{message:`Table "${e}" does not exist`});let[m]=await c.execute(`SELECT EXTRA
699
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(s[0]?.cnt??0)>0))throw new zr(404,{message:`Table "${e}" does not exist`});let[m]=await c.execute(`SELECT EXTRA
700
700
  FROM information_schema.COLUMNS
701
701
  WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?
702
- LIMIT 1`,[e,o]),p=m[0];if(!p)throw new zr(404,{message:`Column "${o}" does not exist in table "${e}"`});let u=he({columnName:o,columnType:a,defaultValue:r,isNullable:n},{preserveAutoIncrement:p.EXTRA?.toLowerCase().includes("auto_increment")});await c.execute(`ALTER TABLE \`${e}\` MODIFY COLUMN ${u}`)}var Jr=f(()=>{"use strict";h();Je()});import{HTTPException as Mt}from"hono/http-exception";async function Xr(t){let{tableName:e,columnName:o,newColumnName:a,db:n}=t,r=S(n),[s]=await r.execute(`SELECT COUNT(*) as cnt
702
+ LIMIT 1`,[e,o]),p=m[0];if(!p)throw new zr(404,{message:`Column "${o}" does not exist in table "${e}"`});let u=he({columnName:o,columnType:a,defaultValue:r,isNullable:n},{preserveAutoIncrement:p.EXTRA?.toLowerCase().includes("auto_increment")});await c.execute(`ALTER TABLE \`${e}\` MODIFY COLUMN ${u}`)}var Jr=f(()=>{"use strict";h();Je()});import{HTTPException as Mt}from"hono/http-exception";async function Xr(t){let{tableName:e,columnName:o,newColumnName:a,db:n}=t,r=S(n),[i]=await r.execute(`SELECT COUNT(*) as cnt
703
703
  FROM information_schema.TABLES
704
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(s[0]?.cnt??0)>0))throw new Mt(404,{message:`Table "${e}" does not exist`});let[i]=await r.execute(`SELECT COUNT(*) as cnt
704
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(i[0]?.cnt??0)>0))throw new Mt(404,{message:`Table "${e}" does not exist`});let[s]=await r.execute(`SELECT COUNT(*) as cnt
705
705
  FROM information_schema.COLUMNS
706
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,o]);if(!(Number(i[0]?.cnt??0)>0))throw new Mt(404,{message:`Column "${o}" does not exist in table "${e}"`});let[m]=await r.execute(`SELECT COUNT(*) as cnt
706
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,o]);if(!(Number(s[0]?.cnt??0)>0))throw new Mt(404,{message:`Column "${o}" does not exist in table "${e}"`});let[m]=await r.execute(`SELECT COUNT(*) as cnt
707
707
  FROM information_schema.COLUMNS
708
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,a]);if(Number(m[0]?.cnt??0)>0)throw new Mt(409,{message:`Column "${a}" already exists in table "${e}"`});await r.execute(`ALTER TABLE \`${e}\` RENAME COLUMN \`${o}\` TO \`${a}\``)}var Zr=f(()=>{"use strict";h()});import{HTTPException as xt}from"hono/http-exception";async function es(t){let{tableName:e,columnName:o,newColumnName:a,db:n}=t,r=C(n),s=`
708
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,a]);if(Number(m[0]?.cnt??0)>0)throw new Mt(409,{message:`Column "${a}" already exists in table "${e}"`});await r.execute(`ALTER TABLE \`${e}\` RENAME COLUMN \`${o}\` TO \`${a}\``)}var Zr=f(()=>{"use strict";h()});import{HTTPException as xt}from"hono/http-exception";async function es(t){let{tableName:e,columnName:o,newColumnName:a,db:n}=t,r=C(n),i=`
709
709
  SELECT EXISTS (
710
710
  SELECT 1 FROM information_schema.tables
711
711
  WHERE table_name = $1 AND table_schema = 'public'
712
712
  ) as exists;
713
- `,{rows:c}=await r.query(s,[e]);if(!c[0]?.exists)throw new xt(404,{message:`Table "${e}" does not exist`});let i=`
713
+ `,{rows:c}=await r.query(i,[e]);if(!c[0]?.exists)throw new xt(404,{message:`Table "${e}" does not exist`});let s=`
714
714
  SELECT EXISTS (
715
715
  SELECT 1 FROM information_schema.columns
716
716
  WHERE table_name = $1 AND column_name = $2 AND table_schema = 'public'
717
717
  ) as exists;
718
- `,{rows:l}=await r.query(i,[e,o]);if(!l[0]?.exists)throw new xt(404,{message:`Column "${o}" does not exist in table "${e}"`});let{rows:m}=await r.query(i,[e,a]);if(m[0]?.exists)throw new xt(409,{message:`Column "${a}" already exists in table "${e}"`});await r.query(`ALTER TABLE "${e}" RENAME COLUMN "${o}" TO "${a}"`)}var ts=f(()=>{"use strict";h()});import{utils as Le,write as Kc}from"xlsx";function os({cols:t,rows:e,format:o,tableName:a}){switch(o){case"json":{let n=JSON.stringify(e??[],null,2);return new Uint8Array(Buffer.from(n,"utf-8"))}case"csv":{let n=[t,...e?.map(c=>t?.map(i=>c[i]))??[]],r=Le.aoa_to_sheet(n),s=Le.sheet_to_csv(r);return new Uint8Array(Buffer.from(s,"utf-8"))}case"xlsx":{let n=[t,...e?.map(i=>t?.map(l=>i[l]))??[]],r=Le.aoa_to_sheet(n),s=Le.book_new();Le.book_append_sheet(s,r,a.slice(0,31));let c=Kc(s,{bookType:"xlsx",type:"buffer"});return new Uint8Array(c)}}}var as=f(()=>{"use strict"});import{zValidator as L}from"@hono/zod-validator";import{Hono as Vc}from"hono";var ns,rs=f(()=>{"use strict";X();qr();Ur();xe();Hr();Vr();Yr();Jr();Zr();ts();as();ns=new Vc().basePath("/tables").get("/",L("query",w),async t=>{let{db:e}=t.req.valid("query"),o=t.get("dbType"),n=await P(o).getTablesList(e);return t.json({data:n},200)}).post("/",L("query",w),L("json",ho),async t=>{let{db:e}=t.req.valid("query"),o=t.req.valid("json"),a=t.get("dbType");return await P(a).createTable({tableData:o,db:e}),t.json({data:`Table ${o.tableName} created successfully`},200)}).delete("/:tableName",L("query",wo),L("param",ee),async t=>{let{db:e,cascade:o}=t.req.valid("query"),{tableName:a}=t.req.valid("param"),n=t.get("dbType"),s=await P(n).deleteTable({tableName:a,db:e,cascade:o});return t.json({data:s},200)}).delete("/:tableName/columns/:columnName",L("query",ao),L("param",K),async t=>{let{db:e,cascade:o}=t.req.valid("query"),{tableName:a,columnName:n}=t.req.valid("param"),r=t.get("dbType"),s=P(r),{deletedCount:c}=await s.deleteColumn({tableName:a,columnName:n,cascade:o,db:e});return t.json({data:`Column "${n}" deleted successfully from table "${a}" with ${c} rows deleted`},200)}).post("/:tableName/columns",L("query",w),L("param",ee),L("json",G),async t=>{let{db:e}=t.req.valid("query"),{tableName:o}=t.req.valid("param"),a=t.req.valid("json"),n=t.get("dbType");return n==="mysql"?await Wr({tableName:o,db:e,...a}):n==="mongodb"?await Br({tableName:o,db:e,...a}):await $r({tableName:o,db:e,...a}),t.json({data:`Column "${a.columnName}" added successfully to table "${o}"`},200)}).patch("/:tableName/columns/:columnName/rename",L("query",w),L("param",K),L("json",pt),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,columnName:a}=t.req.valid("param"),n=t.req.valid("json"),r=t.get("dbType");return r==="mysql"?await Xr({tableName:o,columnName:a,db:e,...n}):r==="mongodb"?await jr({tableName:o,columnName:a,db:e,...n}):await es({tableName:o,columnName:a,db:e,...n}),t.json({data:`Column "${a}" renamed to "${n.newColumnName}" in table "${o}"`},200)}).patch("/:tableName/columns/:columnName",L("query",w),L("param",K),L("json",Ae),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,columnName:a}=t.req.valid("param"),n=t.req.valid("json"),r=t.get("dbType");return r==="mysql"?await Gr({tableName:o,columnName:a,db:e,...n}):r==="mongodb"?await Kr({tableName:o,columnName:a,db:e,...n}):await vr({tableName:o,columnName:a,db:e,...n}),t.json({data:`Column "${a}" updated successfully in table "${o}"`},200)}).get("/:tableName/columns",L("query",w),L("param",ee),async t=>{let{db:e}=t.req.valid("query"),{tableName:o}=t.req.valid("param"),a=t.get("dbType"),r=await P(a).getTableColumns({tableName:o,db:e});return t.json({data:r},200)}).get("/:tableName/schema",L("query",w),L("param",ee),async t=>{let{db:e}=t.req.valid("query"),{tableName:o}=t.req.valid("param"),a=t.get("dbType"),r=await P(a).getTableSchema({tableName:o,db:e});return t.json({data:{schema:r}},200)}).get("/:tableName/data",L("param",ee),L("query",$o),async t=>{let{tableName:e}=t.req.valid("param"),{cursor:o,limit:a,direction:n,sort:r,order:s,filters:c,db:i}=t.req.valid("query"),l=t.get("dbType"),p=await P(l).getTableData({tableName:e,cursor:o,limit:a,direction:n,sort:r,order:s,filters:c,db:i});return t.json({data:p},200)}).get("/:tableName/export",L("param",ee),L("query",Lo),async t=>{let{tableName:e}=t.req.valid("param"),{db:o,format:a}=t.req.valid("query"),n=t.get("dbType"),r=P(n),{cols:s,rows:c}=await r.exportTableData({tableName:e,db:o}),i=os({cols:s,rows:c,format:a,tableName:e}),l;switch(a){case"csv":l="text/csv";break;case"xlsx":l="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";break;case"json":l="application/json";break}return new Response(i,{headers:{"Content-Type":l??"","Content-Disposition":`attachment; filename="${e}_export.${a}"`}})})});var ss={};Pt(ss,{createServer:()=>Xc});import nt from"path";import{fileURLToPath as Qc}from"url";import{serveStatic as ot}from"@hono/node-server/serve-static";import{zValidator as Wc}from"@hono/zod-validator";import{Hono as Yc}from"hono";import{cors as zc}from"hono/cors";import{logger as Gc}from"hono/logger";import{prettyJSON as Jc}from"hono/pretty-json";var at,Xc,is=f(()=>{"use strict";X();Ko();pa();_r();Lr();Pr();rs();at=()=>{if(process.env.NODE_ENV==="development")return nt.resolve(process.cwd(),"../core/dist");let t=nt.dirname(Qc(import.meta.url));return nt.resolve(t,"./core-dist")},Xc=()=>({app:new Yc({strict:!1}).use("/*",zc()).use(Jc({space:2})).use(process.env.NODE_ENV==="development"?Gc():(e,o)=>o()).use("/favicon.ico",ot({path:nt.resolve(at(),"favicon.ico")})).use("*",async(e,o)=>{e.header("Access-Control-Allow-Origin","*"),e.header("Access-Control-Allow-Methods","GET, POST, PUT, DELETE, OPTIONS"),e.header("Access-Control-Allow-Headers","Content-Type"),await o()}).onError(Ho).route("/",Dr).use("/assets/*",ot({root:at()})).use("/image.png",ot({root:at()})).use("/:dbType/*",Wc("param",Zt,jo)).use("/:dbType/*",async(e,o)=>{let a=e.req.param("dbType");e.set("dbType",a),await o()}).route("/:dbType",ns).route("/:dbType",Or).route("/:dbType",xr).route("/:dbType",ua).use("/*",ot({root:at()}))})});Pe();import{intro as Zc,outro as el}from"@clack/prompts";import{serve as tl}from"@hono/node-server";import Lt from"picocolors";import{program as Bt}from"commander";var Ht=()=>(Bt.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),Bt.opts());import{readFile as ms}from"fs/promises";import{resolve as us}from"path";import{cancel as Ie,isCancel as st,note as jt,select as ps,spinner as ds,text as Kt}from"@clack/prompts";import{parse as fs}from"dotenv";import it from"picocolors";var Vt=async(t,e)=>{let o=e||"DATABASE_URL";if(t?.[o])return t[o];if(process.env[o])return process.env[o];let a=ds();a.start("Looking for database connection..."),t?jt(it.red(`${o} not found in .env or process.env`)):jt(it.red(`No .env file found and ${o} not set in process.env`));let n=await ps({message:`How do you want to provide ${o}?`,options:[{value:"manual",label:"Enter connection string manually"},{value:"other-env",label:"Use different .env file"},{value:"cancel",label:"Cancel / Exit"}],initialValue:"manual"});if((st(n)||n==="cancel")&&(Ie("No database connection provided. Exiting..."),process.exit(0)),n==="other-env"){a.start("Waiting for path...");let s=await Kt({message:"Enter path to .env file",placeholder:"~/projects/myapp/.env.local or ./special.env",validate(i){if(!i?.trim())return"Path is required"}});st(s)&&(Ie("Cancelled."),process.exit(0)),a.stop("Trying custom .env...");let c=us(s);try{let i=await ms(c,"utf-8"),l=fs(i);if(l[o])return l[o];throw new Error(`${o} still missing in custom file`)}catch(i){let l=i;Ie(`Cannot read or parse file: ${it.dim(l.message)}`),process.exit(1)}}a.stop("Manual input...");let r=await Kt({message:`Paste your ${o}`,placeholder:"postgresql://user:password@localhost:5432/mydb",validate(s){if(!s?.trim())return"Connection string is required!";try{new URL(s);return}catch{return"Must be a valid URL format"}}});return st(r)&&(Ie("Cancelled."),process.exit(0)),r.trim()};import{access as bs,readFile as ys}from"fs/promises";import{dirname as gs,resolve as ct}from"path";import{parse as Ts}from"dotenv";var Es=async t=>{let e=ct(t);for(;;){let o=ct(e,".env");try{return await bs(o),o}catch{}let a=gs(e);if(a===e)return null;e=a}},ue=async t=>{let e;if(t?e=ct(t):e=await Es(process.cwd()),!e)return null;try{let o=await ys(e,"utf-8");return Ts(o)}catch(o){if(o instanceof Error&&o.message.includes("ENOENT"))return null;throw o}};rt();import{intro as hs,outro as Cs}from"@clack/prompts";import Qt from"picocolors";var Wt=()=>{hs(Qt.inverse(" db-studio ")),Cs(Qt.green(`For more information, visit: ${Ut.SITE_DOCS_LINK}`))};Pe();import{intro as Ss,note as Ns,outro as Yt}from"@clack/prompts";import $e from"picocolors";var zt=async(t,e,o)=>{Ss($e.inverse(" db-studio "));let a=o||se.VAR_NAME,n=null;if(e)n=e;else{let r=t?await ue(t):await ue();r?.[a]?n=r[a]:process.env[a]&&(n=process.env[a]??null)}n?Yt($e.green(`\u2713 Database connection configured (using ${a})`)):(Ns($e.red(`\u2717 ${a} not found`),"Status"),Yt($e.yellow("\u26A0 No database connection configured")))};import{intro as As,outro as ws}from"@clack/prompts";import Jt from"picocolors";var Gt={name:"db-studio",type:"module",version:"1.7.3",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",mongodb:"^7.1.1",mssql:"^12.2.0",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","@types/mssql":"^9.1.9","@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 Xt=()=>{As(Jt.inverse(" db-studio ")),ws(Jt.green(`\u{1F680} db-studio v${Gt.version}`))};var ol=async()=>{let{env:t,port:e,databaseUrl:o,varName:a,status:n,help:r,version:s}=Ht();r&&(Wt(),process.exit(0)),s&&(Xt(),process.exit(0)),n&&(await zt(t,o,a),process.exit(0)),Zc(Lt.inverse(" db-studio "));let c=e?parseInt(e,10):se.PORT,i=a||se.VAR_NAME,l=t?await ue(t):await ue(),m=o||await Vt(l,i);process.env.DATABASE_URL=m;let{createServer:p}=await Promise.resolve().then(()=>(is(),ss)),{app:u}=p();tl({fetch:u.fetch,port:c}),el(Lt.green(`Server running at ${Lt.cyan(`http://localhost:${c}`)}`))};ol().catch(t=>{process.exit(1)});export{ol as main};
718
+ `,{rows:l}=await r.query(s,[e,o]);if(!l[0]?.exists)throw new xt(404,{message:`Column "${o}" does not exist in table "${e}"`});let{rows:m}=await r.query(s,[e,a]);if(m[0]?.exists)throw new xt(409,{message:`Column "${a}" already exists in table "${e}"`});await r.query(`ALTER TABLE "${e}" RENAME COLUMN "${o}" TO "${a}"`)}var ts=f(()=>{"use strict";h()});import{utils as Le,write as jc}from"xlsx";function os({cols:t,rows:e,format:o,tableName:a}){switch(o){case"json":{let n=JSON.stringify(e??[],null,2);return new Uint8Array(Buffer.from(n,"utf-8"))}case"csv":{let n=[t,...e?.map(c=>t?.map(s=>c[s]))??[]],r=Le.aoa_to_sheet(n),i=Le.sheet_to_csv(r);return new Uint8Array(Buffer.from(i,"utf-8"))}case"xlsx":{let n=[t,...e?.map(s=>t?.map(l=>s[l]))??[]],r=Le.aoa_to_sheet(n),i=Le.book_new();Le.book_append_sheet(i,r,a.slice(0,31));let c=jc(i,{bookType:"xlsx",type:"buffer"});return new Uint8Array(c)}}}var as=f(()=>{"use strict"});import{zValidator as L}from"@hono/zod-validator";import{Hono as Kc}from"hono";var ns,rs=f(()=>{"use strict";X();qr();Ur();xe();Hr();Vr();Yr();Jr();Zr();ts();as();ns=new Kc().basePath("/tables").get("/",L("query",w),async t=>{let{db:e}=t.req.valid("query"),o=t.get("dbType"),n=await P(o).getTablesList(e);return t.json({data:n},200)}).post("/",L("query",w),L("json",ho),async t=>{let{db:e}=t.req.valid("query"),o=t.req.valid("json"),a=t.get("dbType");return await P(a).createTable({tableData:o,db:e}),t.json({data:`Table ${o.tableName} created successfully`},200)}).delete("/:tableName",L("query",wo),L("param",ee),async t=>{let{db:e,cascade:o}=t.req.valid("query"),{tableName:a}=t.req.valid("param"),n=t.get("dbType"),i=await P(n).deleteTable({tableName:a,db:e,cascade:o});return t.json({data:i},200)}).delete("/:tableName/columns/:columnName",L("query",ao),L("param",K),async t=>{let{db:e,cascade:o}=t.req.valid("query"),{tableName:a,columnName:n}=t.req.valid("param"),r=t.get("dbType"),i=P(r),{deletedCount:c}=await i.deleteColumn({tableName:a,columnName:n,cascade:o,db:e});return t.json({data:`Column "${n}" deleted successfully from table "${a}" with ${c} rows deleted`},200)}).post("/:tableName/columns",L("query",w),L("param",ee),L("json",G),async t=>{let{db:e}=t.req.valid("query"),{tableName:o}=t.req.valid("param"),a=t.req.valid("json"),n=t.get("dbType");return n==="mysql"?await Wr({tableName:o,db:e,...a}):n==="mongodb"?await Br({tableName:o,db:e,...a}):await $r({tableName:o,db:e,...a}),t.json({data:`Column "${a.columnName}" added successfully to table "${o}"`},200)}).patch("/:tableName/columns/:columnName/rename",L("query",w),L("param",K),L("json",pt),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,columnName:a}=t.req.valid("param"),n=t.req.valid("json"),r=t.get("dbType");return r==="mysql"?await Xr({tableName:o,columnName:a,db:e,...n}):r==="mongodb"?await jr({tableName:o,columnName:a,db:e,...n}):await es({tableName:o,columnName:a,db:e,...n}),t.json({data:`Column "${a}" renamed to "${n.newColumnName}" in table "${o}"`},200)}).patch("/:tableName/columns/:columnName",L("query",w),L("param",K),L("json",Ae),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,columnName:a}=t.req.valid("param"),n=t.req.valid("json"),r=t.get("dbType");return r==="mysql"?await Gr({tableName:o,columnName:a,db:e,...n}):r==="mongodb"?await Kr({tableName:o,columnName:a,db:e,...n}):await vr({tableName:o,columnName:a,db:e,...n}),t.json({data:`Column "${a}" updated successfully in table "${o}"`},200)}).get("/:tableName/columns",L("query",w),L("param",ee),async t=>{let{db:e}=t.req.valid("query"),{tableName:o}=t.req.valid("param"),a=t.get("dbType"),r=await P(a).getTableColumns({tableName:o,db:e});return t.json({data:r},200)}).get("/:tableName/schema",L("query",w),L("param",ee),async t=>{let{db:e}=t.req.valid("query"),{tableName:o}=t.req.valid("param"),a=t.get("dbType"),r=await P(a).getTableSchema({tableName:o,db:e});return t.json({data:{schema:r}},200)}).get("/:tableName/data",L("param",ee),L("query",$o),async t=>{let{tableName:e}=t.req.valid("param"),{cursor:o,limit:a,direction:n,sort:r,order:i,filters:c,db:s}=t.req.valid("query"),l=t.get("dbType"),p=await P(l).getTableData({tableName:e,cursor:o,limit:a,direction:n,sort:r,order:i,filters:c,db:s});return t.json({data:p},200)}).get("/:tableName/export",L("param",ee),L("query",Lo),async t=>{let{tableName:e}=t.req.valid("param"),{db:o,format:a}=t.req.valid("query"),n=t.get("dbType"),r=P(n),{cols:i,rows:c}=await r.exportTableData({tableName:e,db:o}),s=os({cols:i,rows:c,format:a,tableName:e}),l;switch(a){case"csv":l="text/csv";break;case"xlsx":l="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";break;case"json":l="application/json";break}return new Response(s,{headers:{"Content-Type":l??"","Content-Disposition":`attachment; filename="${e}_export.${a}"`}})})});var ss={};Pt(ss,{createServer:()=>Jc});import nt from"path";import{fileURLToPath as Vc}from"url";import{serveStatic as ot}from"@hono/node-server/serve-static";import{zValidator as Qc}from"@hono/zod-validator";import{Hono as Wc}from"hono";import{cors as Yc}from"hono/cors";import{logger as zc}from"hono/logger";import{prettyJSON as Gc}from"hono/pretty-json";var at,Jc,is=f(()=>{"use strict";X();Ko();pa();_r();Lr();Pr();rs();at=()=>{if(process.env.NODE_ENV==="development")return nt.resolve(process.cwd(),"../core/dist");let t=nt.dirname(Vc(import.meta.url));return nt.resolve(t,"./core-dist")},Jc=()=>({app:new Wc({strict:!1}).use("/*",Yc()).use(Gc({space:2})).use(process.env.NODE_ENV==="development"?zc():(e,o)=>o()).use("/favicon.ico",ot({path:nt.resolve(at(),"favicon.ico")})).use("*",async(e,o)=>{e.header("Access-Control-Allow-Origin","*"),e.header("Access-Control-Allow-Methods","GET, POST, PUT, DELETE, OPTIONS"),e.header("Access-Control-Allow-Headers","Content-Type"),await o()}).onError(Ho).route("/",Dr).route("/",ua).use("/assets/*",ot({root:at()})).use("/image.png",ot({root:at()})).use("/:dbType/*",Qc("param",Zt,jo)).use("/:dbType/*",async(e,o)=>{let a=e.req.param("dbType");e.set("dbType",a),await o()}).route("/:dbType",ns).route("/:dbType",Or).route("/:dbType",xr).use("/*",ot({root:at()}))})});Pe();import{intro as Xc,outro as Zc}from"@clack/prompts";import{serve as el}from"@hono/node-server";import Lt from"picocolors";import{program as Bt}from"commander";var Ht=()=>(Bt.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),Bt.opts());import{readFile as ms}from"fs/promises";import{resolve as us}from"path";import{cancel as Ie,isCancel as st,note as jt,select as ps,spinner as ds,text as Kt}from"@clack/prompts";import{parse as fs}from"dotenv";import it from"picocolors";var Vt=async(t,e)=>{let o=e||"DATABASE_URL";if(t?.[o])return t[o];if(process.env[o])return process.env[o];let a=ds();a.start("Looking for database connection..."),t?jt(it.red(`${o} not found in .env or process.env`)):jt(it.red(`No .env file found and ${o} not set in process.env`));let n=await ps({message:`How do you want to provide ${o}?`,options:[{value:"manual",label:"Enter connection string manually"},{value:"other-env",label:"Use different .env file"},{value:"cancel",label:"Cancel / Exit"}],initialValue:"manual"});if((st(n)||n==="cancel")&&(Ie("No database connection provided. Exiting..."),process.exit(0)),n==="other-env"){a.start("Waiting for path...");let i=await Kt({message:"Enter path to .env file",placeholder:"~/projects/myapp/.env.local or ./special.env",validate(s){if(!s?.trim())return"Path is required"}});st(i)&&(Ie("Cancelled."),process.exit(0)),a.stop("Trying custom .env...");let c=us(i);try{let s=await ms(c,"utf-8"),l=fs(s);if(l[o])return l[o];throw new Error(`${o} still missing in custom file`)}catch(s){let l=s;Ie(`Cannot read or parse file: ${it.dim(l.message)}`),process.exit(1)}}a.stop("Manual input...");let r=await Kt({message:`Paste your ${o}`,placeholder:"postgresql://user:password@localhost:5432/mydb",validate(i){if(!i?.trim())return"Connection string is required!";try{new URL(i);return}catch{return"Must be a valid URL format"}}});return st(r)&&(Ie("Cancelled."),process.exit(0)),r.trim()};import{access as bs,readFile as ys}from"fs/promises";import{dirname as gs,resolve as ct}from"path";import{parse as Ts}from"dotenv";var Es=async t=>{let e=ct(t);for(;;){let o=ct(e,".env");try{return await bs(o),o}catch{}let a=gs(e);if(a===e)return null;e=a}},pe=async t=>{let e;if(t?e=ct(t):e=await Es(process.cwd()),!e)return null;try{let o=await ys(e,"utf-8");return Ts(o)}catch(o){if(o instanceof Error&&o.message.includes("ENOENT"))return null;throw o}};rt();import{intro as hs,outro as Cs}from"@clack/prompts";import Qt from"picocolors";var Wt=()=>{hs(Qt.inverse(" db-studio ")),Cs(Qt.green(`For more information, visit: ${Ut.SITE_DOCS_LINK}`))};Pe();import{intro as Ss,note as Ns,outro as Yt}from"@clack/prompts";import $e from"picocolors";var zt=async(t,e,o)=>{Ss($e.inverse(" db-studio "));let a=o||se.VAR_NAME,n=null;if(e)n=e;else{let r=t?await pe(t):await pe();r?.[a]?n=r[a]:process.env[a]&&(n=process.env[a]??null)}n?Yt($e.green(`\u2713 Database connection configured (using ${a})`)):(Ns($e.red(`\u2717 ${a} not found`),"Status"),Yt($e.yellow("\u26A0 No database connection configured")))};import{intro as As,outro as ws}from"@clack/prompts";import Jt from"picocolors";var Gt={name:"db-studio",type:"module",version:"1.7.5",description:"Modern database client for PostgreSQL with spreadsheet-like grid, AI-powered SQL assistance, ER diagrams, fast data browsing and editing. CLI tool, upcoming desktop & web versions.",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",mongodb:"^7.1.1",mssql:"^12.2.0",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":"^25.6.0","@types/pg":"^8.16.0","@types/mssql":"^12.3.0","@vitest/coverage-v8":"^4.0.17",shared:"workspace:*",tsup:"^8.5.1",tsx:"^4.7.1",typescript:"^6.0.3",vitest:"^4.0.17"}};var Xt=()=>{As(Jt.inverse(" db-studio ")),ws(Jt.green(`\u{1F680} db-studio v${Gt.version}`))};var tl=async()=>{let{env:t,port:e,databaseUrl:o,varName:a,status:n,help:r,version:i}=Ht();r&&(Wt(),process.exit(0)),i&&(Xt(),process.exit(0)),n&&(await zt(t,o,a),process.exit(0)),Xc(Lt.inverse(" db-studio "));let c=e?parseInt(e,10):se.PORT,s=a||se.VAR_NAME,l=t?await pe(t):await pe(),m=o||await Vt(l,s);process.env.DATABASE_URL=m;let{createServer:p}=await Promise.resolve().then(()=>(is(),ss)),{app:u}=p();el({fetch:u.fetch,port:c}),Zc(Lt.green(`Server running at ${Lt.cyan(`http://localhost:${c}`)}`))};tl().catch(t=>{process.exit(1)});export{tl as main};
719
719
  //# sourceMappingURL=index.js.map