db-studio 1.6.2 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- var sn=Object.defineProperty;var d=(a,e)=>()=>(a&&(e=a(a=0)),e);var ln=(a,e)=>{for(var t in e)sn(a,t,{get:e[t],enumerable:!0})};var yt=d(()=>{"use strict"});var Tt=d(()=>{"use strict"});var Et=d(()=>{"use strict"});var ae,gt=d(()=>{"use strict";ae={PORT:3333,ENV:".env",VAR_NAME:"DATABASE_URL",BASE_URL:"http://localhost:3333",PROXY_URL:process.env.NODE_ENV==="development"?"http://localhost:8787":"https://db-studio-proxy.husamql3.workers.dev"}});var ht=d(()=>{"use strict"});var Nt,Ve=d(()=>{"use strict";Nt={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 Ct=d(()=>{"use strict"});var Ce=d(()=>{"use strict";yt();Tt();Et();gt();ht();Ve();Ct()});import{z as ne}from"zod";var A,_n,Se,Pl,qt,Z,V=d(()=>{"use strict";A=ne.object({db:ne.string("Database name is required")}),_n=["pg","mysql","mssql"],Se=ne.enum(_n,{message:"Invalid database type"}),Pl=A.extend({dbType:Se}),qt=ne.object({dbType:Se}),Z=ne.object({tableName:ne.string("Table name is required")})});import{z as Q}from"zod";var z,vl,$t=d(()=>{"use strict";V();z=Q.object({columnName:Q.string("Column name is required"),columnType:Q.string("Column type is required"),defaultValue:Q.string().optional(),isPrimaryKey:Q.boolean().default(!1),isNullable:Q.boolean().default(!1),isUnique:Q.boolean().default(!1),isIdentity:Q.boolean().default(!1),isArray:Q.boolean().default(!1)}),vl=Q.object({db:A.shape.db,tableName:Z.shape.tableName,columnName:z.shape.columnName,columnType:z.shape.columnType,defaultValue:z.shape.defaultValue,isPrimaryKey:z.shape.isPrimaryKey,isNullable:z.shape.isNullable,isUnique:z.shape.isUnique,isIdentity:z.shape.isIdentity,isArray:z.shape.isArray})});import{z as fe}from"zod";var vt,kt=d(()=>{"use strict";vt=fe.object({tableName:fe.string("Table name is required"),data:fe.record(fe.string("Column name is required"),fe.any())})});import{z as W}from"zod";var Ut,j,jl,Kl,_e=d(()=>{"use strict";V();Ut=A.extend({cascade:W.string().optional().transform(a=>a==="true")}),j=W.object({tableName:W.string("Table name is required"),columnName:W.string("Column name is required")}),jl=W.object({db:A.shape.db,tableName:j.shape.tableName,columnName:j.shape.columnName,cascade:W.boolean().optional()}),Kl=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 be}from"zod";var ye,zl,Ft=d(()=>{"use strict";V();_e();ye=be.object({columnType:be.string("Column type is required"),isNullable:be.boolean(),defaultValue:be.string().nullable().optional()}),zl=be.object({db:A.shape.db,tableName:j.shape.tableName,columnName:j.shape.columnName,columnType:ye.shape.columnType,isNullable:ye.shape.isNullable,defaultValue:ye.shape.defaultValue})});var Ht=d(()=>{"use strict"});import{z as se}from"zod";var Bt,jt=d(()=>{"use strict";Bt=se.object({tableName:se.string().min(1,"Table name is required"),records:se.array(se.record(se.string(),se.any())).min(1,"At least one record is required")})});import{z as ie}from"zod";var Kt,Vt=d(()=>{"use strict";V();Kt=ie.object({messages:ie.array(ie.object({role:ie.enum(["user","assistant"]),content:ie.string("Content is required")})),conversationId:ie.string().optional(),db:A.shape.db})});var Wt=d(()=>{"use strict"});import{z as K}from"zod";var wn,Dn,P,Ln,xn,oc,ze=d(()=>{"use strict";wn=["text","boolean","number","enum","json","date","array"],Dn=K.enum(wn),P={text:"text",boolean:"boolean",number:"number",enum:"enum",json:"json",date:"date",array:"array"},Ln=["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"],xn=K.enum(Ln),oc=K.object({columnName:K.string(),dataType:Dn,dataTypeLabel:xn,isNullable:K.boolean(),columnDefault:K.string().nullable(),isPrimaryKey:K.boolean(),isForeignKey:K.boolean(),referencedTable:K.string().nullable(),referencedColumn:K.string().nullable(),enumValues:K.array(K.string()).nullable()})});function Yt(a){let e=a?.toLowerCase().trim()||"";return e.includes("[]")||e==="date"||e==="time"||e==="time without time zone"||e.startsWith("time(")||e==="timestamp"||e==="timestamp without time zone"||e.startsWith("timestamp(")||e==="timestamp with time zone"||e==="timestamptz"||e.startsWith("timestamp with time zone(")?P.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"?P.number:e==="boolean"||e==="bool"?P.boolean:e==="json"||e==="jsonb"?P.json:e.startsWith("user-defined")||e==="enum"||e==="text"||e==="xml"?P.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"?P.text:P.text}function Qt(a){if(!a)return f.text;let e=a.toLowerCase().trim();return e==="integer"||e==="int"||e==="int4"||e==="serial"||e==="serial4"?f.int:e==="bigint"||e==="int8"||e==="bigserial"||e==="serial8"?f.bigint:e==="smallint"||e==="int2"?f.smallint:e==="decimal"||e.startsWith("decimal(")||e==="numeric"||e.startsWith("numeric(")?f.numeric:e==="real"||e==="float4"?f.float:e==="double precision"||e==="float8"||e==="float"?f.double:e==="money"?f.money:e==="boolean"||e==="bool"?f.boolean:e==="text"?f.text:e==="character varying"||e.startsWith("varchar")||e.startsWith("character varying(")?f.varchar:e==="character"||e.startsWith("char")||e.startsWith("character(")||e==="bpchar"?f.char:e==="json"?f.json:e==="jsonb"?f.jsonb:e==="xml"?f.xml:e==="uuid"?f.uuid:e==="date"?f.date:e==="time"||e==="time without time zone"||e.startsWith("time(")?f.time:e==="timestamp"||e==="timestamp without time zone"||e.startsWith("timestamp(")?f.timestamp:e==="timestamp with time zone"||e==="timestamptz"||e.startsWith("timestamp with time zone(")?f.timestamptz:e==="interval"||e.startsWith("interval")?f.interval:e==="bytea"?f.bytea:e==="inet"?f.inet:e==="cidr"?f.cidr:e==="macaddr"?f.macaddr:e==="macaddr8"?f.macaddr8:e==="point"?f.point:e==="line"?f.line:e==="polygon"?f.polygon:e.startsWith("array")||e.includes("[]")?f.text:e.startsWith("user-defined")||e==="enum"?f.enum:f.text}function zt(a,e){let t=a?.toLowerCase().trim()||"",o=e?.toLowerCase().trim()||"";return t==="tinyint"&&o==="tinyint(1)"?P.boolean:t==="tinyint"||t==="smallint"||t==="mediumint"||t==="int"||t==="integer"||t==="bigint"||t==="decimal"||t==="numeric"||t==="float"||t==="double"||t==="real"||t==="bit"?P.number:t==="boolean"||t==="bool"?P.boolean:t==="date"||t==="datetime"||t==="timestamp"||t==="time"||t==="year"?P.date:t==="json"?P.json:t==="enum"||t==="set"?P.enum:P.text}function Gt(a,e){if(!a)return f.text;let t=a.toLowerCase().trim(),o=e?.toLowerCase().trim()||"";return t==="tinyint"&&o==="tinyint(1)"?f.boolean:t==="tinyint"?f.tinyint:t==="smallint"?f.smallint:t==="mediumint"?f.mediumint:t==="int"||t==="integer"?f.int:t==="bigint"?f.bigint:t==="decimal"||t==="numeric"?f.numeric:t==="float"||t==="real"?f.float:t==="double"?f.double:t==="bit"?f.bit:t==="boolean"||t==="bool"?f.boolean:t==="char"?f.char:t==="varchar"?f.varchar:t==="tinytext"?f.tinytext:t==="text"?f.text:t==="mediumtext"?f.mediumtext:t==="longtext"?f.longtext:t==="binary"?f.binary:t==="varbinary"?f.varbinary:t==="tinyblob"?f.tinyblob:t==="blob"?f.blob:t==="mediumblob"?f.mediumblob:t==="longblob"?f.longblob:t==="json"?f.json:t==="date"?f.date:t==="time"?f.time:t==="datetime"?f.datetime:t==="timestamp"?f.timestamp:t==="year"?f.year:t==="enum"?f.enum:t==="set"?f.set:f.text}function Jt(a){let e=a?.toLowerCase().trim()||"";return e==="tinyint"||e==="smallint"||e==="int"||e==="bigint"||e==="decimal"||e==="numeric"||e==="float"||e==="real"||e==="money"||e==="smallmoney"?P.number:e==="bit"?P.boolean:e==="date"||e==="datetime"||e==="datetime2"||e==="smalldatetime"||e==="time"||e==="datetimeoffset"?P.date:e==="json"?P.json:P.text}function Xt(a){if(!a)return f.text;let e=a.toLowerCase().trim();return e==="tinyint"?f.tinyint:e==="smallint"?f.smallint:e==="int"?f.int:e==="bigint"?f.bigint:e==="decimal"||e==="numeric"?f.numeric:e==="float"||e==="real"?f.float:e==="money"||e==="smallmoney"?f.money:e==="bit"?f.boolean:e==="char"?f.char:e==="varchar"?f.varchar:e==="text"?f.text:e==="nchar"?f.char:e==="nvarchar"?f.varchar:e==="ntext"?f.text:e==="binary"?f.binary:e==="varbinary"?f.varbinary:e==="image"?f.blob:e==="uniqueidentifier"?f.uuid:e==="date"?f.date:e==="time"?f.time:e==="datetime"||e==="datetime2"||e==="smalldatetime"?f.datetime:e==="datetimeoffset"?f.timestamptz:e==="json"?f.json:e==="xml"?f.xml:f.text}var f,Zt=d(()=>{"use strict";ze();f={int:"int",bigint:"bigint",smallint:"smallint",numeric:"numeric",float:"float",double:"double",money:"money",tinyint:"tinyint",mediumint:"mediumint",bit:"bit",boolean:"boolean",text:"text",varchar:"varchar",char:"char",tinytext:"tinytext",mediumtext:"mediumtext",longtext:"longtext",json:"json",jsonb:"jsonb",xml:"xml",uuid:"uuid",date:"date",time:"time",timestamp:"timestamp",timestamptz:"timestamptz",interval:"interval",datetime:"datetime",year:"year",bytea:"bytea",inet:"inet",cidr:"cidr",macaddr:"macaddr",macaddr8:"macaddr8",point:"point",line:"line",polygon:"polygon",binary:"binary",varbinary:"varbinary",blob:"blob",tinyblob:"tinyblob",mediumblob:"mediumblob",longblob:"longblob",array:"array",enum:"enum",set:"set"}});import{z as $}from"zod";var Mn,ea,On,Pn,ta,aa=d(()=>{"use strict";Mn=["CASCADE","SET NULL","SET DEFAULT","RESTRICT","NO ACTION"],ea=$.enum(Mn),On=$.object({columnName:$.string("Column name is required"),columnType:$.string("Column type is required"),defaultValue:$.string().optional(),isPrimaryKey:$.boolean().default(!1),isNullable:$.boolean().default(!1),isUnique:$.boolean().default(!1),isIdentity:$.boolean().default(!1),isArray:$.boolean().default(!1)}),Pn=$.object({columnName:$.string("Column name is required"),referencedTable:$.string("Referenced table is required"),referencedColumn:$.string("Referenced column is required"),onUpdate:ea.default("NO ACTION"),onDelete:ea.default("NO ACTION")}),ta=$.object({tableName:$.string("Table name is required"),fields:$.array(On).min(1,"At least one field is required"),foreignKeys:$.array(Pn).optional()})});import{z as F}from"zod";var In,uc,oa,ra=d(()=>{"use strict";V();In=F.object({name:F.string("Name is required"),size:F.string("Size is required"),owner:F.string("Owner is required"),encoding:F.string("Encoding is required")}),uc=F.object({databases:F.array(In),dbType:Se}),oa=F.object({version:F.string("Version is required"),database:F.string("Database is required"),user:F.string("User is required"),host:F.string("Host is required").nullable(),port:F.number("Port is required").nullable(),active_connections:F.coerce.number("Active connections is required"),max_connections:F.coerce.number("Max connections is required")})});var na=d(()=>{"use strict"});import{z as le}from"zod";var Ge,sa=d(()=>{"use strict";Ge=le.object({tableName:le.string("Table name is required"),primaryKeys:le.array(le.object({columnName:le.string("Column name is required"),value:le.any()})).min(1,"At least one primary key is required")})});import{z as qn}from"zod";var ia,la=d(()=>{"use strict";V();ia=A.extend({cascade:qn.string().optional().transform(a=>a==="true")})});import{z as ca}from"zod";var ma,ua=d(()=>{"use strict";ma=ca.object({query:ca.string("Query is required")})});import{z as $n}from"zod";var vn,pa,da=d(()=>{"use strict";V();vn=["csv","xlsx","json"],pa=A.extend({format:$n.enum(vn,{message:"Invalid format. Supported formats: csv, xlsx, json"})})});var fa=d(()=>{"use strict"});import{z as Je}from"zod";var Xe,_c,ba=d(()=>{"use strict";V();_e();Xe=Je.object({newColumnName:Je.string("New column name is required")}),_c=Je.object({db:A.shape.db,tableName:j.shape.tableName,columnName:j.shape.columnName,newColumnName:Xe.shape.newColumnName})});import{z as L}from"zod";var xc,we,Mc,kn,Oc,ya,Ta=d(()=>{"use strict";V();xc=L.object({columnName:L.string(),operator:L.string(),value:L.string()}),we=["asc","desc"],Mc=L.object({columnName:L.string(),direction:L.enum(we)}),kn=L.object({limit:L.number(),total:L.number(),hasNextPage:L.boolean(),hasPreviousPage:L.boolean(),nextCursor:L.string().nullable(),prevCursor:L.string().nullable()}),Oc=L.object({data:L.array(L.record(L.string(),L.unknown())),meta:kn}),ya=L.object({db:A.shape.db,cursor:L.string().optional(),limit:L.string().optional().default("50").transform(Number),direction:L.enum(we).optional().default(we[0]),sort:L.string().optional().transform(a=>{if(!a)return"";try{let e=JSON.parse(a);return Array.isArray(e)?e:a}catch{return a}}),order:L.enum(we).optional(),filters:L.string().optional().transform(a=>{if(!a)return[];try{return JSON.parse(a)}catch{return[]}})})});import{z as Ze}from"zod";var qc,Ea=d(()=>{"use strict";qc=Ze.object({tableName:Ze.string("Table name is required"),rowCount:Ze.coerce.number("Row count is required")})});import{z as ga}from"zod";var kc,ha=d(()=>{"use strict";kc=ga.object({schema:ga.string()})});import{z as G}from"zod";var Na,Ca=d(()=>{"use strict";Na=G.object({tableName:G.string("Table name is required"),primaryKey:G.string("Primary key is required").default("id"),updates:G.array(G.object({rowData:G.record(G.string("Column name is required"),G.any()),columnName:G.string("Column name is required"),value:G.any()},{message:"Each update must have a row data, column name, and value."})).min(1,"At least one update is required")})});var J=d(()=>{"use strict";$t();kt();Ft();Ht();jt();Vt();Wt();Zt();ze();aa();V();ra();na();_e();sa();la();ua();da();fa();ba();Ta();Ea();ha();Ca()});import{HTTPException as Un}from"hono/http-exception";import{DatabaseError as Fn}from"pg";import{ZodError as Hn}from"zod";function Ra(a,e){if(a instanceof Un)return e.json({error:a.message??"Internal server error"},a.status);if(a instanceof Hn){let t=a.issues[0];return e.json({error:"Validation error",details:t.message},400)}if(a instanceof Error){let t=a;if(t.code==="ECONNREFUSED"||t.code==="ENOTFOUND"||t.code==="ETIMEDOUT"||t.code==="ER_ACCESS_DENIED_ERROR"||t.code==="ER_BAD_HOST_ERROR"||t.code==="ECONNRESET"||t.errno===1045||t.errno===2003||t.errno===2002||a.message.includes("ECONNREFUSED")||a.message.includes("connection refused")||a.message.includes("timeout expired")||a.message.includes("Connection terminated")||a instanceof Fn&&a.code?.startsWith("08"))return e.json({error:"Database connection failed",details:a.message},503)}return e.json({error:a instanceof Error?a.message:"Internal server error"},500)}var Aa,Sa=d(()=>{"use strict";Aa=(a,e)=>{if(!a.success){let t=a.error?.issues[0];return e.json({error:"Validation error",details:t?.message??"Unknown validation error"},400)}}});import{Pool as Bn}from"pg";var De,jn,et,_a=d(()=>{"use strict";De=null,jn=()=>{if(!De){if(!process.env.DATABASE_URL)throw new Error("DATABASE_URL is not set. Please provide a database connection string.");try{De=new Bn({connectionString:process.env.DATABASE_URL}),De.on("error",a=>{})}catch(a){throw a}}return De},et=new Proxy({},{get(a,e){try{return jn()[e]}catch(t){throw t}}})});import Kn from"mssql";import{createPool as Vn}from"mysql2/promise";import{Pool as wa}from"pg";var tt,Le,N,C,R,xe,h=d(()=>{"use strict";tt=class{pgPools=new Map;mysqlPools=new Map;mssqlPools=new Map;baseConfig=null;constructor(){this.initializeBaseConfig()}detectDbType(e){let t=e.protocol.replace(":","");if(t==="postgres"||t==="postgresql")return"pg";if(t==="mysql"||t==="mysql2")return"mysql";if(t==="mssql"||t==="sqlserver")return"mssql";throw new Error(`Unsupported database type: ${t}. Supported types: PostgreSQL (postgres://), MySQL (mysql://), and SQL Server (mssql://).`)}initializeBaseConfig(){let e=process.env.DATABASE_URL;if(!e)throw new Error("DATABASE_URL is not set. Please provide a database connection string.");try{let t=new URL(e);this.baseConfig={url:e,host:t.hostname,port:Number.parseInt(t.port,10)||(this.detectDbType(t)==="mysql"?3306:this.detectDbType(t)==="mssql"?1433:5432),user:t.username,password:t.password,dbType:this.detectDbType(t)}}catch(t){throw new Error(t instanceof Error?t.message:String(t))}}getDbType(){if(!this.baseConfig)throw new Error("Base configuration not initialized");return this.baseConfig.dbType}buildConnectionString(e){if(!this.baseConfig)throw new Error("Base configuration not initialized");e||(e=new URL(this.baseConfig.url).pathname.slice(1));try{let t=new URL(this.baseConfig.url);return t.pathname=`/${e}`,t.toString()}catch(t){throw new Error(`Failed to build connection string for database "${e}": ${t instanceof Error?t.message:String(t)}`)}}getPgPool(e){let t=this.buildConnectionString(e);if(!this.pgPools.has(t)){let o={connectionString:t,max:10,idleTimeoutMillis:3e4,connectionTimeoutMillis:2e3},r=new wa(o);r.on("error",n=>{}),this.pgPools.set(t,r)}return this.pgPools.get(t)??new wa({connectionString:t})}getMysqlPool(e){if(!this.baseConfig)throw new Error("Base configuration not initialized");let t=this.buildConnectionString(e);if(!this.mysqlPools.has(t)){let r=new URL(t).pathname.slice(1),n=Vn({host:this.baseConfig.host,port:this.baseConfig.port,user:this.baseConfig.user,password:this.baseConfig.password,database:r||void 0,waitForConnections:!0,connectionLimit:10,idleTimeout:3e4,connectTimeout:2e3,multipleStatements:!1});this.mysqlPools.set(t,n)}return this.mysqlPools.get(t)}async getMssqlPool(e){if(!this.baseConfig)throw new Error("Base configuration not initialized");let t=this.buildConnectionString(e);if(!this.mssqlPools.has(t)){let r=new URL(t).pathname.slice(1),n={server:this.baseConfig.host,port:this.baseConfig.port,user:this.baseConfig.user,password:this.baseConfig.password,database:r||void 0,options:{encrypt:!1,trustServerCertificate:!0,enableArithAbort:!0,connectTimeout:2e3},pool:{max:10,min:0,idleTimeoutMillis:3e4}},l=await new Kn.ConnectionPool(n).connect();l.on("error",i=>{}),this.mssqlPools.set(t,l)}return this.mssqlPools.get(t)}getPool(e){return this.getPgPool(e)}async closePgPool(e){let t=this.pgPools.get(e);t&&(await t.end(),this.pgPools.delete(e))}async closeMysqlPool(e){let t=this.mysqlPools.get(e);t&&(await t.end(),this.mysqlPools.delete(e))}async closeMssqlPool(e){let t=this.mssqlPools.get(e);t&&(await t.close(),this.mssqlPools.delete(e))}async closePool(e){await this.closePgPool(e),await this.closeMysqlPool(e),await this.closeMssqlPool(e)}async closePoolByDatabase(e){let t=this.buildConnectionString(e);await this.closePool(t)}async closeAll(){let e=Array.from(this.pgPools.entries()).map(async([r,n])=>{await n.end()}),t=Array.from(this.mysqlPools.entries()).map(async([r,n])=>{await n.end()}),o=Array.from(this.mssqlPools.entries()).map(async([r,n])=>{await n.close()});await Promise.all([...e,...t,...o]),this.pgPools.clear(),this.mysqlPools.clear(),this.mssqlPools.clear()}getActivePools(){return[...Array.from(this.pgPools.keys()),...Array.from(this.mysqlPools.keys()),...Array.from(this.mssqlPools.keys())]}},Le=new tt,N=a=>Le.getPgPool(a),C=a=>Le.getMysqlPool(a),R=async a=>Le.getMssqlPool(a),xe=()=>Le.getDbType()});import{HTTPException as Wn}from"hono/http-exception";async function Me({tableName:a,db:e}){let t=N(e),o=`
2
+ var is=Object.defineProperty;var f=(t,e)=>()=>(t&&(e=t(t=0)),e);var Pt=(t,e)=>{for(var o in e)is(t,o,{get:e[o],enumerable:!0})};var It=f(()=>{"use strict"});var $t=f(()=>{"use strict"});var qt=f(()=>{"use strict"});var se,kt=f(()=>{"use strict";se={PORT:3333,ENV:".env",VAR_NAME:"DATABASE_URL",BASE_URL:"http://localhost:3333",PROXY_URL:process.env.NODE_ENV==="development"?"http://localhost:8787":"https://db-studio-proxy.husamql3.workers.dev"}});var vt=f(()=>{"use strict"});var Ut,nt=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();nt();Ft()});import{z as pe}from"zod";var w,As,qe,Kl,Zt,ee,Q=f(()=>{"use strict";w=pe.object({db:pe.string("Database name is required")}),As=["pg","mysql","mssql","mongodb"],qe=pe.enum(As,{message:"Invalid database type"}),Kl=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,Yl,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)}),Yl=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 Re}from"zod";var to,oo=f(()=>{"use strict";to=Re.object({tableName:Re.string("Table name is required"),data:Re.record(Re.string("Column name is required"),Re.any())})});import{z as W}from"zod";var ao,K,em,tm,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")}),em=W.object({db:w.shape.db,tableName:K.shape.tableName,columnName:K.shape.columnName,cascade:W.boolean().optional()}),tm=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 Ne}from"zod";var Ae,sm,no=f(()=>{"use strict";Q();ke();Ae=Ne.object({columnType:Ne.string("Column type is required"),isNullable:Ne.boolean(),defaultValue:Ne.string().nullable().optional()}),sm=Ne.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 ws,Ds,I,_s,Ms,fm,ct=f(()=>{"use strict";ws=["text","boolean","number","enum","json","date","array"],Ds=V.enum(ws),I={text:"text",boolean:"boolean",number:"number",enum:"enum",json:"json",date:"date",array:"array"},_s=["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"],Ms=V.enum(_s),fm=V.object({columnName:V.string(),dataType:Ds,dataTypeLabel:Ms,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";ct();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 xs,Eo,Ls,Os,ho,Co=f(()=>{"use strict";xs=["CASCADE","SET NULL","SET DEFAULT","RESTRICT","NO ACTION"],Eo=U.enum(xs),Ls=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)}),Os=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(Ls).min(1,"At least one field is required"),foreignKeys:U.array(Os).optional()})});import{z as B}from"zod";var Ps,Sm,So,Ro=f(()=>{"use strict";Q();Ps=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")}),Sm=B.object({databases:B.array(Ps),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 No=f(()=>{"use strict"});import{z as be}from"zod";var lt,Ao=f(()=>{"use strict";lt=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 Is}from"zod";var wo,Do=f(()=>{"use strict";Q();wo=w.extend({cascade:Is.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 $s}from"zod";var qs,Lo,Oo=f(()=>{"use strict";Q();qs=["csv","xlsx","json"],Lo=w.extend({format:$s.enum(qs,{message:"Invalid format. Supported formats: csv, xlsx, json"})})});var Po=f(()=>{"use strict"});import{z as mt}from"zod";var ut,km,Io=f(()=>{"use strict";Q();ke();ut=mt.object({newColumnName:mt.string("New column name is required")}),km=mt.object({db:w.shape.db,tableName:K.shape.tableName,columnName:K.shape.columnName,newColumnName:ut.shape.newColumnName})});import{z as M}from"zod";var Bm,ve,Hm,ks,jm,$o,qo=f(()=>{"use strict";Q();Bm=M.object({columnName:M.string(),operator:M.string(),value:M.string()}),ve=["asc","desc"],Hm=M.object({columnName:M.string(),direction:M.enum(ve)}),ks=M.object({limit:M.number(),total:M.number(),hasNextPage:M.boolean(),hasPreviousPage:M.boolean(),nextCursor:M.string().nullable(),prevCursor:M.string().nullable()}),jm=M.object({data:M.array(M.record(M.string(),M.unknown())),meta:ks}),$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 pt}from"zod";var Qm,ko=f(()=>{"use strict";Qm=pt.object({tableName:pt.string("Table name is required"),rowCount:pt.coerce.number("Row count is required")})});import{z as vo}from"zod";var zm,Uo=f(()=>{"use strict";zm=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();ct();Co();Q();Ro();No();ke();Ao();Do();xo();Oo();Po();Io();qo();ko();Uo();Bo()});import{HTTPException as vs}from"hono/http-exception";import{DatabaseError as Us}from"pg";import{ZodError as Fs}from"zod";function Ho(t,e){if(t instanceof vs)return e.json({error:t.message??"Internal server error"},t.status);if(t instanceof Fs){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 Us&&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:()=>He,getDbPool:()=>C,getDbType:()=>ce,getMongoClient:()=>Ue,getMongoDb:()=>x,getMongoDbName:()=>Fe,getMssqlPool:()=>N,getMysqlPool:()=>S,isValidObjectId:()=>Be});import{MongoClient as Bs,ObjectId as dt}from"mongodb";import Hs from"mssql";import{createPool as js}from"mysql2/promise";import{Pool as Vo}from"pg";var ft,ie,C,S,N,ce,Ue,Fe,x,Be,He,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=js({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 Hs.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 Bs(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),N=async t=>ie.getMssqlPool(t),ce=()=>ie.getDbType(),Ue=()=>ie.getMongoClient(),Fe=()=>ie.getMongoDbName(),x=t=>ie.getMongoDb(t),Be=t=>typeof t=="string"&&dt.isValid(t),He=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 je({tableName:t,db:e}){let n=await(await x(e)).collection(t).find({}).limit(Vs).toArray(),r=n.length,s=new Map,c=(i,l)=>{let m=Ws(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:Ys(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=zs(s??[]),p=Go(n??"",r),u=o&&o>0?o:50,d=Qs(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()]),R=E.map(k=>we(k)),A=y+u,q=Math.max(y-u,0);return{data:R,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=Ks(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,Ks,Vs,Yo,Qs,we,Ws,Ys,zs,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"]),Ks=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}},Vs=200,Yo=t=>Buffer.from(JSON.stringify({offset:t})).toString("base64url"),Qs=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},Ws=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",Ys=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"}},zs=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:Be(r)?He(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=He,bt=Be});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 je({tableName:m,db:t}),u={name:m,columns:p.map(Gs)};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 Gs,na=f(()=>{"use strict";h();ye();Gs=t=>({name:t.columnName,type:t.dataTypeLabel,nullable:t.isNullable,isPrimaryKey:t.isPrimaryKey})});import{Pool as Js}from"pg";var Ke,Xs,yt,ra=f(()=>{"use strict";Ke=null,Xs=()=>{if(!Ke){if(!process.env.DATABASE_URL)throw new Error("DATABASE_URL is not set. Please provide a database connection string.");try{Ke=new Js({connectionString:process.env.DATABASE_URL}),Ke.on("error",t=>{})}catch(t){throw t}}return Ke},yt=new Proxy({},{get(t,e){try{return Xs()[e]}catch(o){throw o}}})});import{HTTPException as Zs}from"hono/http-exception";async function Ve({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,18 +48,77 @@ var sn=Object.defineProperty;var d=(a,e)=>()=>(a&&(e=a(a=0)),e);var ln=(a,e)=>{f
48
48
  WHERE c.table_schema = 'public'
49
49
  AND c.table_name = $1
50
50
  ORDER BY c.ordinal_position;
51
- `,{rows:r}=await t.query(o,[a]);if(!r||r.length===0)throw new Wn(404,{message:`Table "${a}" does not exist`});return r.map(n=>{let l=null;return n.enumValues&&(Array.isArray(n.enumValues)?l=n.enumValues:typeof n.enumValues=="string"&&(l=n.enumValues.replace(/[{}]/g,"").split(",").filter(Boolean))),{columnName:n.columnName,dataType:Yt(n.dataType),dataTypeLabel:Qt(n.dataType),isNullable:n.isNullable,columnDefault:n.columnDefault,isPrimaryKey:n.isPrimaryKey,isForeignKey:n.isForeignKey,referencedTable:n.referencedTable,referencedColumn:n.referencedColumn,enumValues:l}})}var at=d(()=>{"use strict";J();h()});async function Qn(a){let e=N(a),t=`
51
+ `,{rows:n}=await o.query(a,[t]);if(!n||n.length===0)throw new Zs(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 ti(t){let e=C(t),o=`
52
52
  SELECT table_name
53
53
  FROM information_schema.tables
54
54
  WHERE table_schema = 'public'
55
55
  AND table_type = 'BASE TABLE'
56
56
  ORDER BY table_name;
57
- `,{rows:o}=await e.query(t);return o.map(r=>r.table_name)}async function zn(a){let e=await et.connect();try{return(await e.query(`
57
+ `,{rows:a}=await e.query(o);return a.map(n=>n.table_name)}async function oi(t){let e=await yt.connect();try{return(await e.query(`
58
58
  SELECT obj_description(oid) as description
59
59
  FROM pg_class
60
60
  WHERE relname = $1
61
61
  AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'public');
62
- `,[a])).rows[0]?.description||void 0}finally{e.release()}}async function Gn(a){let e=await et.connect();try{return(await e.query(`SELECT * FROM "${a}" LIMIT 3`)).rows}catch{return[]}finally{e.release()}}function Jn(a){let e={name:a.columnName,type:a.dataTypeLabel,nullable:a.isNullable};return a.isPrimaryKey&&(e.isPrimaryKey=!0),a.isForeignKey&&a.referencedTable&&a.referencedColumn&&(e.foreignKey=`${a.referencedTable}.${a.referencedColumn}`),a.enumValues&&a.enumValues.length>0&&(e.enumValues=a.enumValues,e.description=`Enum values: ${a.enumValues.join(", ")}`),e}function Xn(a){let e=[];for(let t of a)for(let o of t.columns)if(o.foreignKey){let[r,n]=o.foreignKey.split(".");e.push({fromTable:t.name,fromColumn:o.name,toTable:r,toColumn:n})}return e}async function Zn(a,e={}){let{includeSampleData:t=!1,includeDescriptions:o=!0}=e;try{let n=(await Qn(a)).map(async s=>{let[c,m,p]=await Promise.all([Me({tableName:s,db:a}),o?zn(s):Promise.resolve(void 0),t?Gn(s):Promise.resolve([])]),u={name:s,columns:c.map(Jn)};return m&&(u.description=m),p.length>0&&(u.sampleData=p.map(E=>Object.fromEntries(Object.entries(E).map(([T,y])=>[T,String(y)])))),u}),l=await Promise.all(n),i=Xn(l);return{dbType:"PostgreSQL",tables:l,relationships:i}}catch(r){throw new Error(`Failed to fetch database schema: ${r instanceof Error?r.message:"Unknown error"}`)}}async function Da(a){return Zn(a,{includeSampleData:!0,includeDescriptions:!0})}var La=d(()=>{"use strict";_a();h();at()});function xa(a){return`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 ai(t){let e=await yt.connect();try{return(await e.query(`SELECT * FROM "${t}" LIMIT 3`)).rows}catch{return[]}finally{e.release()}}function ni(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 ri(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 si(t,e={}){if(ce()==="mongodb")return aa(t,{includeSampleData:e.includeSampleData});let{includeSampleData:o=!1,includeDescriptions:a=!0}=e;try{let r=(await ti(t)).map(async i=>{let[l,m,p]=await Promise.all([Ve({tableName:i,db:t}),a?oi(i):Promise.resolve(void 0),o?ai(i):Promise.resolve([])]),u={name:i,columns:l.map(ni)};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=ri(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 si(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
+
64
+ **Your Role:**
65
+ 1. Keep responses SHORT - 2-3 sentences maximum unless generating a query
66
+ 2. When generating MongoDB queries:
67
+ - Provide 1 sentence explanation
68
+ - The MongoDB query in a JSON code block
69
+ - 1 sentence about expected results
70
+ 3. Use exact collection/field names from the schema
71
+ 4. If query is unclear, ask ONE specific clarifying question
72
+ 5. No preamble, no apologies, get straight to the answer
73
+
74
+ **Database Context:**
75
+ ${ca(t)}
76
+
77
+ **Guidelines:**
78
+ 1. Always generate syntactically correct MongoDB queries
79
+ 2. Use proper collection/field names exactly as defined in the schema
80
+ 3. When generating queries, wrap them in \`\`\`json code blocks
81
+ 4. Explain what the query does in plain language
82
+ 5. Suggest relevant follow-up questions or analyses
83
+ 6. If a request is ambiguous, ask clarifying questions
84
+ 7. Warn about potentially expensive operations (collection scans, large aggregations)
85
+ 8. Consider data privacy - remind users not to share sensitive data externally
86
+
87
+ **Query Format:**
88
+ Return a JSON object with the following shape:
89
+ {
90
+ "collection": "collectionName",
91
+ "operation": "find|aggregate|insertOne|insertMany|updateOne|updateMany|deleteOne|deleteMany|count",
92
+ "filter": { ... },
93
+ "pipeline": [ ... ],
94
+ "document": { ... } | [ ... ],
95
+ "update": { ... },
96
+ "options": { ... },
97
+ "sort": { "field": 1 },
98
+ "limit": 100,
99
+ "skip": 0
100
+ }
101
+
102
+ Only include the fields needed for the chosen operation.
103
+
104
+ **Example:**
105
+ User: "Show me the top 5 customers by revenue"
106
+
107
+ Response: "I'll aggregate orders to calculate total revenue per customer.
108
+
109
+ \`\`\`json
110
+ {
111
+ "collection": "orders",
112
+ "operation": "aggregate",
113
+ "pipeline": [
114
+ { "$group": { "_id": "$customer_id", "total": { "$sum": "$total_amount" } } },
115
+ { "$sort": { "total": -1 } },
116
+ { "$limit": 5 }
117
+ ]
118
+ }
119
+ \`\`\`
120
+
121
+ This will return the top 5 customers by revenue."`:`You are a database assistant for db-studio. Your responses must be CONCISE and FOCUSED.
63
122
 
64
123
  **Your Role:**
65
124
  1. Keep responses SHORT - 2-3 sentences maximum unless generating SQL
@@ -69,15 +128,15 @@ var sn=Object.defineProperty;var d=(a,e)=>()=>(a&&(e=a(a=0)),e);var ln=(a,e)=>{f
69
128
  - 1 sentence about expected results
70
129
  - NO verbose explanations
71
130
  3. Use exact table/column names from the schema
72
- 4. Generate valid ${a.dbType} syntax
131
+ 4. Generate valid ${o} syntax
73
132
  5. If query is unclear, ask ONE specific clarifying question
74
133
  6. No preamble, no apologies, get straight to the answer
75
134
 
76
135
  **Database Context:**
77
- ${es(a)}
136
+ ${ca(t)}
78
137
 
79
138
  **Guidelines:**
80
- 1. Always generate syntactically correct SQL for the database type (${a.dbType})
139
+ 1. Always generate syntactically correct SQL for the database type (${o})
81
140
  2. Use proper table/column names exactly as defined in the schema
82
141
  3. When generating queries, wrap them in \`\`\`sql code blocks
83
142
  4. Explain what the query does in plain language
@@ -112,34 +171,34 @@ LIMIT 5;
112
171
 
113
172
  This will return the 5 customers with the highest total order value. You might also want to see:
114
173
  - Revenue trends over time for these customers
115
- - Their most frequently ordered products"`}function es(a){let e=`Database Type: ${a.dbType}
174
+ - Their most frequently ordered products"`}function ca(t){let o=`Database Type: ${t.dbType==="pg"?"PostgreSQL":t.dbType}
116
175
 
117
- `;e+=`**Tables and Columns:**
118
- `;for(let t of a.tables){e+=`
119
- ### ${t.name}
120
- `,t.description&&(e+=`Description: ${t.description}
121
- `),e+=`Columns:
122
- `;for(let o of t.columns){let r=o.isPrimaryKey?" [PRIMARY KEY]":"",n=o.foreignKey?` [FK -> ${o.foreignKey}]`:"",l=o.nullable?"NULL":"NOT NULL";e+=` - ${o.name}: ${o.type} ${l}${r}${n}
123
- `,o.description&&(e+=` ${o.description}
124
- `)}t.sampleData&&t.sampleData.length>0&&(e+=`Sample data (${t.sampleData.length} rows):
125
- `,e+=`${JSON.stringify(t.sampleData.slice(0,3),null,2)}
126
- `)}if(a.relationships&&a.relationships.length>0){e+=`
176
+ `;o+=`**Tables and Columns:**
177
+ `;for(let a of t.tables){o+=`
178
+ ### ${a.name}
179
+ `,a.description&&(o+=`Description: ${a.description}
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}
182
+ `,n.description&&(o+=` ${n.description}
183
+ `)}a.sampleData&&a.sampleData.length>0&&(o+=`Sample data (${a.sampleData.length} rows):
184
+ `,o+=`${JSON.stringify(a.sampleData.slice(0,3),null,2)}
185
+ `)}if(t.relationships&&t.relationships.length>0){o+=`
127
186
  **Relationships:**
128
- `;for(let t of a.relationships)e+=` - ${t.fromTable}.${t.fromColumn} -> ${t.toTable}.${t.toColumn}
129
- `}return e}var Ma=d(()=>{"use strict"});import{zValidator as ts}from"@hono/zod-validator";import{Hono as as}from"hono";var Oa,Pa=d(()=>{"use strict";Ce();J();La();Ma();Oa=new as().basePath("/chat").post("/",ts("json",Kt),async a=>{let{messages:e,conversationId:t,db:o}=a.req.valid("json"),r=await Da(o),n=xa(r),l={messages:e,conversationId:t,systemPrompt:n},i=await fetch(`${ae.PROXY_URL}/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(l)});if(!i.ok){let m=await i.json();return a.json({error:m.error||"Proxy request failed"},i.status)}let{readable:s,writable:c}=new TransformStream;return i.body?.pipeTo(c),new Response(s,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})})});import{HTTPException as os}from"hono/http-exception";async function Ia({db:a,params:e}){let{tableName:t,data:o}=e,r=N(a),n=Object.keys(o),l=Object.values(o),i=n.map((p,u)=>`$${u+1}`).join(", "),s=n.map(p=>`"${p}"`).join(", "),c=`
130
- INSERT INTO "${t}" (${s})
131
- VALUES (${i})
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 ii}from"@hono/zod-validator";import{Hono as ci}from"hono";var ua,pa=f(()=>{"use strict";Pe();X();ia();ma();ua=new ci().basePath("/chat").post("/",ii("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 li}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})
190
+ VALUES (${c})
132
191
  RETURNING *
133
- `,m=await r.query(c,l);if(m.rowCount===0)throw new os(500,{message:`Failed to insert record into "${t}"`});return{insertedCount:m.rowCount??0}}var qa=d(()=>{"use strict";h()});import{HTTPException as Oe}from"hono/http-exception";var $a,va=d(()=>{"use strict";h();$a=async({tableName:a,records:e,db:t})=>{if(!e||e.length===0)throw new Oe(400,{message:"At least one record is required"});let r=await N(t).connect();try{let n=Object.keys(e[0]),l=n.map(m=>`"${m}"`).join(", "),i=0,s=0,c=[];await r.query("BEGIN");for(let m=0;m<e.length;m++){let p=e[m],u=n.map(y=>p[y]),E=n.map((y,b)=>`$${b+1}`).join(", "),T=`
134
- INSERT INTO "${a}" (${l})
135
- VALUES (${E})
192
+ `,m=await n.query(l,s);if(m.rowCount===0)throw new li(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:m.rowCount??0}}var fa=f(()=>{"use strict";h()});import{HTTPException as Qe}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 Qe(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})
194
+ VALUES (${d})
136
195
  RETURNING *
137
- `;try{await r.query(T,u),i++}catch(y){throw new Oe(500,{message:`Failed: ${y instanceof Error?y.message:String(y)}`})}}return await r.query("COMMIT"),{success:s===0,message:`Bulk insert completed: ${i} records inserted${s>0?`, ${s} failed`:""}`,successCount:i,failureCount:s,errors:c.length>0?c:void 0}}catch(n){throw await r.query("ROLLBACK"),n instanceof Oe?n:new Oe(500,{message:`Failed to bulk insert records into "${a}"`})}finally{r.release()}}});async function ka({tableData:a,db:e}){let{tableName:t,fields:o,foreignKeys:r}=a,n=N(e),l=o.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}),i=r?.map(m=>`CONSTRAINT "${`fk_${t}_${m.columnName}_${m.referencedTable}_${m.referencedColumn}`}" FOREIGN KEY ("${m.columnName}") REFERENCES "${m.referencedTable}" ("${m.referencedColumn}") ON UPDATE ${m.onUpdate} ON DELETE ${m.onDelete}`)||[],s=[...l,...i],c=`
138
- CREATE TABLE "${t}" (
139
- ${s.join(`,
196
+ `;try{await n.query(g,u),c++}catch(y){throw new Qe(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 Qe?r:new Qe(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=`
197
+ CREATE TABLE "${o}" (
198
+ ${i.join(`,
140
199
  `)}
141
200
  );
142
- `;await n.query(c)}var Ua=d(()=>{"use strict";h()});function ce(){let a=process.env.DATABASE_URL;if(!a)return{host:"localhost",port:5432};try{let e=new URL(a);return{host:e.hostname||"localhost",port:Number.parseInt(e.port,10)||5432}}catch{return{host:"localhost",port:5432}}}var Pe=d(()=>{"use strict"});import{HTTPException as ot}from"hono/http-exception";async function Fa(){let a=N(),e=`
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=`
143
202
  SELECT
144
203
  d.datname as name,
145
204
  pg_size_pretty(pg_database_size(d.datname)) as size,
@@ -148,7 +207,7 @@ This will return the 5 customers with the highest total order value. You might a
148
207
  FROM pg_catalog.pg_database d
149
208
  WHERE d.datistemplate = false
150
209
  ORDER BY d.datname;
151
- `,{rows:t}=await a.query(e);if(!t[0])throw new ot(500,{message:"No databases returned from database"});return t}async function Ha(){let a=N(),e="SELECT current_database() as database;",{rows:t}=await a.query(e);if(!t[0])throw new ot(500,{message:"No current database returned from database"});return t[0]}async function Ba(){let a=N(),e=`
210
+ `,{rows:o}=await t.query(e);if(!o[0])throw new Tt(500,{message:"No databases returned from database"});return o}async function ha(){let t=C(),e="SELECT current_database() as database;",{rows:o}=await t.query(e);if(!o[0])throw new Tt(500,{message:"No current database returned from database"});return o[0]}async function Ca(){let t=C(),e=`
152
211
  SELECT
153
212
  version() as version,
154
213
  current_database() as database,
@@ -157,17 +216,17 @@ This will return the 5 customers with the highest total order value. You might a
157
216
  inet_server_port() as port,
158
217
  (SELECT count(*) FROM pg_stat_activity WHERE datname = current_database()) as active_connections,
159
218
  (SELECT setting::int FROM pg_settings WHERE name = 'max_connections') as max_connections;
160
- `,{rows:t}=await a.query(e);if(!t[0])throw new ot(500,{message:"No connection information returned from database"});let o=oa.parse(t[0]),r=ce();return{host:o.host||r.host,port:o.port||r.port,user:o.user,database:o.database,version:o.version.toString(),active_connections:o.active_connections,max_connections:o.max_connections}}var ja=d(()=>{"use strict";J();h();Pe()});import{HTTPException as Ka}from"hono/http-exception";async function Va(a){let{tableName:e,columnName:t,cascade:o,db:r}=a,n=N(r),l=`
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 Ra}from"hono/http-exception";async function Na(t){let{tableName:e,columnName:o,cascade:a,db:n}=t,r=C(n),s=`
161
220
  SELECT EXISTS (
162
221
  SELECT 1 FROM information_schema.tables
163
222
  WHERE table_name = $1 AND table_schema = 'public'
164
223
  ) as exists;
165
- `,{rows:i}=await n.query(l,[e]);if(!i[0]?.exists)throw new Ka(404,{message:`Table "${e}" does not exist`});let s=`
224
+ `,{rows:c}=await r.query(s,[e]);if(!c[0]?.exists)throw new Ra(404,{message:`Table "${e}" does not exist`});let i=`
166
225
  SELECT EXISTS (
167
226
  SELECT 1 FROM information_schema.columns
168
227
  WHERE table_name = $1 AND column_name = $2 AND table_schema = 'public'
169
228
  ) as exists;
170
- `,{rows:c}=await n.query(s,[e,t]);if(!c[0]?.exists)throw new Ka(404,{message:`Column "${t}" does not exist in table "${e}"`});let p=`ALTER TABLE "${e}" DROP COLUMN "${t}" ${o?"CASCADE":"RESTRICT"}`,{rowCount:u}=await n.query(p);return{deletedCount:u??0}}var Wa=d(()=>{"use strict";h()});import{HTTPException as me}from"hono/http-exception";async function rt(a,e){return(await N(e).query(`
229
+ `,{rows:l}=await r.query(i,[e,o]);if(!l[0]?.exists)throw new Ra(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(`
171
230
  SELECT
172
231
  tc.constraint_name,
173
232
  tc.table_name as referencing_table,
@@ -183,25 +242,25 @@ This will return the 5 customers with the highest total order value. You might a
183
242
  AND ccu.table_schema = tc.table_schema
184
243
  WHERE tc.constraint_type = 'FOREIGN KEY'
185
244
  AND ccu.table_name = $1
186
- `,[a])).rows.map(n=>({constraintName:n.constraint_name,referencingTable:n.referencing_table,referencingColumn:n.referencing_column,referencedTable:n.referenced_table,referencedColumn:n.referenced_column}))}async function cs(a,e,t){let o=await rt(a,t);if(o.length===0)return[];let r=[],n=N(t),l=new Map;for(let s of o){let c=`${s.referencingTable}.${s.referencingColumn}`;l.has(c)||l.set(c,[]),l.get(c)?.push(s)}let i=e.map(s=>s.value);for(let[s,c]of l){let m=c[0];if(!m||!e.find(y=>y.columnName===m.referencedColumn))continue;let u=i.map((y,b)=>`$${b+1}`).join(", "),E=`
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 bi(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=`
187
246
  SELECT * FROM "${m.referencingTable}"
188
247
  WHERE "${m.referencingColumn}" IN (${u})
189
248
  LIMIT 100
190
- `,T=await n.query(E,i);T.rows.length>0&&r.push({tableName:m.referencingTable,columnName:m.referencingColumn,constraintName:m.constraintName,records:T.rows})}return r}async function Ya({tableName:a,primaryKeys:e,db:t}){let o=N(t),r=e[0]?.columnName;if(!r)throw new me(400,{message:"Primary key column name is required"});let n=e.map(s=>s.value),l=n.map((s,c)=>`$${c+1}`).join(", "),i=`
191
- DELETE FROM "${a}"
192
- WHERE "${r}" IN (${l})
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=`
250
+ DELETE FROM "${t}"
251
+ WHERE "${n}" IN (${s})
193
252
  RETURNING *
194
- `;try{await o.query("BEGIN");let s=await o.query(i,n);return await o.query("COMMIT"),{deletedCount:s.rowCount??0,fkViolation:!1,relatedRecords:[]}}catch(s){if(await o.query("ROLLBACK"),s.code==="23503")return{deletedCount:0,fkViolation:!0,relatedRecords:await cs(a,e,t)};throw s instanceof me?s:new me(500,{message:`Failed to delete records from "${a}"`})}}async function Qa({tableName:a,primaryKeys:e,db:t}){let o=N(t),r=e[0]?.columnName;if(!r)throw new me(400,{message:"Primary key column name is required"});let n=e.map(l=>l.value);await o.query("BEGIN");try{let l=await rt(a,t),i=0,s=new Set,c=async(T,y,b)=>{let g=await rt(T,t);for(let k of g){let H=b.map((U,Y)=>`$${Y+1}`).join(", "),B=`
195
- SELECT "${k.referencedColumn}" FROM "${T}"
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 bi(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=`
254
+ SELECT "${k.referencedColumn}" FROM "${g}"
196
255
  WHERE "${y}" IN (${H})
197
- `,w=(await o.query(B,b)).rows.map(({row:U})=>U[k.referencedColumn]);w.length>0&&await c(k.referencingTable,k.referencingColumn,w)}let S=b.map((k,H)=>`$${H+1}`).join(", "),_=`
198
- DELETE FROM "${T}"
199
- WHERE "${y}" IN (${S})
200
- `,v=await o.query(_,b);i+=v.rowCount??0,s.add(T)};for(let T of l)s.has(T.referencingTable)||await c(T.referencingTable,T.referencingColumn,n);let m=n.map((T,y)=>`$${y+1}`).join(", "),p=`
201
- DELETE FROM "${a}"
202
- WHERE "${r}" IN (${m})
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 R=b.map((k,H)=>`$${H+1}`).join(", "),A=`
257
+ DELETE FROM "${g}"
258
+ WHERE "${y}" IN (${R})
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=`
260
+ DELETE FROM "${t}"
261
+ WHERE "${n}" IN (${m})
203
262
  RETURNING *
204
- `,u=await o.query(p,n);return await o.query("COMMIT"),{deletedCount:(u.rowCount??0)+i}}catch(l){throw await o.query("ROLLBACK"),l instanceof me?l:new me(500,{message:`Failed to force delete records from "${a}"`})}}var za=d(()=>{"use strict";h()});import{HTTPException as nt}from"hono/http-exception";async function us(a,e){return(await N(e).query(`
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 gi(t,e){return(await C(e).query(`
205
264
  SELECT
206
265
  tc.constraint_name,
207
266
  tc.table_name as referencing_table,
@@ -217,15 +276,15 @@ This will return the 5 customers with the highest total order value. You might a
217
276
  AND ccu.table_schema = tc.table_schema
218
277
  WHERE tc.constraint_type = 'FOREIGN KEY'
219
278
  AND ccu.table_name = $1
220
- `,[a])).rows.map(n=>({constraintName:n.constraint_name,referencingTable:n.referencing_table,referencingColumn:n.referencing_column,referencedTable:n.referenced_table,referencedColumn:n.referenced_column}))}async function Ga(a,e){let t=await us(a,e);if(t.length===0)return[];let o=[],r=N(e);for(let n of t){let l=`
221
- SELECT * FROM "${n.referencingTable}"
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 gi(t,e);if(o.length===0)return[];let a=[],n=C(e);for(let r of o){let s=`
280
+ SELECT * FROM "${r.referencingTable}"
222
281
  LIMIT 100
223
- `,i=await r.query(l);i.rows.length>0&&o.push({tableName:n.referencingTable,columnName:n.referencingColumn,constraintName:n.constraintName,records:i.rows})}return o}async function ps(a,e){let o=await N(e).query(`SELECT COUNT(*) as count FROM "${a}"`);return Number.parseInt(o.rows[0]?.count??"0",10)}async function Ja(a){let{tableName:e,db:t,cascade:o}=a,r=N(t),n=`
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 Ti(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=`
224
283
  SELECT EXISTS (
225
284
  SELECT 1 FROM information_schema.tables
226
285
  WHERE table_name = $1 AND table_schema = 'public'
227
286
  ) as exists;
228
- `,{rows:l}=await r.query(n,[e]);if(!l[0]?.exists)throw new nt(404,{message:`Table "${e}" does not exist`});let i=await ps(e,t);if(!o){let s=await Ga(e,t);if(s.length>0)return{deletedCount:0,fkViolation:!0,relatedRecords:s}}try{let c=`DROP TABLE "${e}" ${o?"CASCADE":"RESTRICT"}`;return await r.query(c),{deletedCount:i,fkViolation:!1,relatedRecords:[]}}catch(s){if(s.code==="2BP01")return{deletedCount:0,fkViolation:!0,relatedRecords:await Ga(e,t)};throw s instanceof nt?s:new nt(500,{message:`Failed to delete table "${e}"`})}}var Xa=d(()=>{"use strict";h()});import{HTTPException as fs}from"hono/http-exception";async function Za({tableName:a,db:e}){let t=N(e),{rows:o}=await t.query(`SELECT * FROM "${a}"`);if(!o||o.length===0)throw new fs(404,{message:`Table "${a}" does not exist or has no data`});return{cols:Object.keys(o[0]),rows:o}}var eo=d(()=>{"use strict";h()});import{HTTPException as ys}from"hono/http-exception";function Ts(a){let e=a.match(/'([^']+)'/g);return!e||e.length===0?null:e.map(t=>t.slice(1,-1))}async function ee({tableName:a,db:e}){let t=await R(e),r=await t.request().input("tableName",a).query(`
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 Ti(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 hi}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 hi(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 Si}from"hono/http-exception";async function ka(){let a=(await(await Ue()).db().admin().listDatabases()).databases??[];if(!a[0])throw new Si(500,{message:"No databases returned from MongoDB"});return a.map(n=>({name:n.name,size:Ri(n.sizeOnDisk??0),owner:"n/a",encoding:"n/a"}))}async function va(){return{db:Fe()}}async function Ua(){let e=(await Ue()).db().admin(),o=oe(),a={};try{a=await e.serverStatus()}catch{}return{host:o.host,port:o.port,user:"n/a",database:Fe(),version:a.version??"unknown",active_connections:a.connections?.current??0,max_connections:(a.connections?.current??0)+(a.connections?.available??0)}}var Ri,Fa=f(()=>{"use strict";h();De();Ri=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 Ni}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 Ni(404,{message:`Collection "${t}" does not exist`});let n=o.collection(t),r=await n.find({}).limit(Ai).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=wi(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(R=>R!=="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 Ai,wi,Ya=f(()=>{"use strict";h();Ai=200,wi=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 Di}from"hono/http-exception";function _i(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 N(e),n=await o.request().input("tableName",t).query(`
229
288
  SELECT
230
289
  c.COLUMN_NAME AS columnName,
231
290
  c.DATA_TYPE AS dataType,
@@ -277,7 +336,7 @@ This will return the 5 customers with the highest total order value. You might a
277
336
  AND c.TABLE_NAME = @tableName
278
337
  AND c.TABLE_SCHEMA = 'dbo'
279
338
  ORDER BY c.ORDINAL_POSITION
280
- `);if(!r.recordset||r.recordset.length===0)throw new ys(404,{message:`Table "${a}" does not exist`});let n=await t.request().input("tableName",a).query(`
339
+ `);if(!n.recordset||n.recordset.length===0)throw new Di(404,{message:`Table "${t}" does not exist`});let r=await o.request().input("tableName",t).query(`
281
340
  SELECT
282
341
  cc.COLUMN_NAME AS columnName,
283
342
  chk.CHECK_CLAUSE AS checkClause
@@ -287,18 +346,18 @@ This will return the 5 customers with the highest total order value. You might a
287
346
  AND cc.TABLE_SCHEMA = 'dbo'
288
347
  WHERE cc.TABLE_NAME = @tableName
289
348
  AND cc.TABLE_CATALOG = DB_NAME()
290
- `),l=new Map;for(let i of n.recordset){let s=Ts(i.checkClause);s&&l.set(i.columnName,s)}return r.recordset.map(i=>{let s=i.dataType,c=l.get(i.columnName)??null;return{columnName:i.columnName,dataType:c?"enum":Jt(s),dataTypeLabel:c?"enum":Xt(s),isNullable:!!i.isNullable,columnDefault:i.columnDefault??null,isPrimaryKey:!!i.isPrimaryKey,isForeignKey:!!i.isForeignKey,referencedTable:i.referencedTable??null,referencedColumn:i.referencedColumn??null,enumValues:c}})}var Te=d(()=>{"use strict";J();h()});import{HTTPException as gs}from"hono/http-exception";async function to({db:a,params:e}){let{tableName:t,data:o}=e,r=await R(a),n=await ee({tableName:t,db:a}),l=new Set(n.filter(b=>b.dataTypeLabel==="boolean").map(b=>b.columnName)),i=await r.request().input("tableName",t).query("SELECT name FROM sys.columns WHERE object_id = OBJECT_ID(@tableName) AND is_identity = 1"),s=new Set(i.recordset.map(b=>b.name)),c=Object.keys(o).filter(b=>!s.has(b)),m=c.map(b=>{let g=o[b];return l.has(b)&&typeof g=="string"?g==="true"?1:0:g}),p=c.map(b=>`[${b}]`).join(", "),u=c.map((b,g)=>`@param${g}`).join(", "),E=`
291
- INSERT INTO [${t}] (${p})
349
+ `),s=new Map;for(let c of r.recordset){let i=_i(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 xi}from"hono/http-exception";async function za({db:t,params:e}){let{tableName:o,data:a}=e,n=await N(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=`
350
+ INSERT INTO [${o}] (${p})
292
351
  VALUES (${u})
293
- `,T=r.request();c.forEach((b,g)=>{T.input(`param${g}`,m[g])});let y=await T.query(E);if(y.rowsAffected[0]===0)throw new gs(500,{message:`Failed to insert record into "${t}"`});return{insertedCount:y.rowsAffected[0]??0}}var ao=d(()=>{"use strict";h();Te()});import{HTTPException as Ie}from"hono/http-exception";var oo,ro=d(()=>{"use strict";h();Te();oo=async({tableName:a,records:e,db:t})=>{if(!e||e.length===0)throw new Ie(400,{message:"At least one record is required"});let r=(await R(t)).transaction();try{let n=Object.keys(e[0]),l=n.map(c=>`[${c}]`).join(", "),i=await ee({tableName:a,db:t}),s=new Set(i.filter(c=>c.dataTypeLabel==="boolean").map(c=>c.columnName));await r.begin();for(let c=0;c<e.length;c++){let m=e[c],p=r.request(),u=n.map(y=>{let b=m[y];return s.has(y)&&typeof b=="string"?b==="true"?1:0:b}),E=n.map((y,b)=>`@p${c}_${b}`).join(", ");n.forEach((y,b)=>{p.input(`p${c}_${b}`,u[b])});let T=`
294
- INSERT INTO [${a}] (${l})
295
- VALUES (${E})
296
- `;try{await p.query(T)}catch(y){throw new Ie(500,{message:`Failed to insert record ${c+1}: ${y instanceof Error?y.message:String(y)}`})}}return await r.commit(),{success:!0,message:`Successfully inserted ${e.length} record${e.length!==1?"s":""}`,successCount:e.length,failureCount:0}}catch(n){throw await r.rollback(),n instanceof Ie?n:new Ie(500,{message:`Failed to bulk insert records into "${a}"`})}}});function Cs(a,e){let t=a.trim().toLowerCase();return t.includes("(")&&t.includes(")")?t.includes("newid()")?e.toUpperCase().includes("UNIQUEIDENTIFIER")?"NEWID()":null:t.includes("getdate")||t.includes("current_timestamp")?"GETDATE()":a.trim():t==="null"?"NULL":t==="true"||t==="false"?t==="true"?"1":"0":a.trim()}function Rs(a,e){if(e)return"NVARCHAR(MAX)";let t=a.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)"}[t]||a.toUpperCase()}async function no({tableData:a,db:e}){let{tableName:t,fields:o,foreignKeys:r}=a,n=await R(e),l=o.map(u=>{let E=Rs(u.columnType,u.isArray??!1),T=`[${u.columnName}] ${E}`;if(!u.isNullable&&!u.isPrimaryKey&&(T+=" NOT NULL"),u.defaultValue&&!E.includes("IDENTITY")){let y=Cs(u.defaultValue,E);y!==null&&(T+=` DEFAULT ${y}`)}return T}),i=o.filter(u=>u.isPrimaryKey),s=[];if(i.length>0){let u=i.map(E=>`[${E.columnName}]`).join(", ");s.push(`PRIMARY KEY (${u})`)}for(let u of o)u.isUnique&&!u.isPrimaryKey&&s.push(`UNIQUE ([${u.columnName}])`);let c=r?.map(u=>`CONSTRAINT [${`FK_${t}_${u.columnName}`}] FOREIGN KEY ([${u.columnName}]) REFERENCES [${u.referencedTable}] ([${u.referencedColumn}]) ON UPDATE ${u.onUpdate} ON DELETE ${u.onDelete}`)||[],m=[...l,...s,...c],p=`
297
- CREATE TABLE [${t}] (
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 xi(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:y.rowsAffected[0]??0}}var Ga=f(()=>{"use strict";h();_e()});import{HTTPException as We}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 We(400,{message:"At least one record is required"});let n=(await N(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})
354
+ VALUES (${d})
355
+ `;try{await p.query(g)}catch(y){throw new We(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 We?r:new We(500,{message:`Failed to bulk insert records into "${t}"`})}}});function Pi(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 Ii(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 N(e),s=a.map(u=>{let d=Ii(u.columnType,u.isArray??!1),g=`[${u.columnName}] ${d}`;if(!u.isNullable&&!u.isPrimaryKey&&(g+=" NOT NULL"),u.defaultValue&&!d.includes("IDENTITY")){let y=Pi(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=`
356
+ CREATE TABLE [${o}] (
298
357
  ${m.join(`,
299
358
  `)}
300
359
  )
301
- `;await n.request().query(p)}var so=d(()=>{"use strict";h()});import{HTTPException as st}from"hono/http-exception";async function io(){let e=await(await R()).request().query(`
360
+ `;await r.request().query(p)}var en=f(()=>{"use strict";h()});import{HTTPException as Rt}from"hono/http-exception";async function tn(){let e=await(await N()).request().query(`
302
361
  SELECT
303
362
  d.name AS name,
304
363
  CAST(
@@ -314,7 +373,7 @@ This will return the 5 customers with the highest total order value. You might a
314
373
  WHERE d.database_id > 4 -- Exclude system databases
315
374
  GROUP BY d.name, d.owner_sid, d.collation_name
316
375
  ORDER BY d.name
317
- `);if(!e.recordset[0])throw new st(500,{message:"No databases returned from server"});return e.recordset}async function lo(){let e=await(await R()).request().query("SELECT DB_NAME() AS db");if(!e.recordset[0])throw new st(500,{message:"No current database returned from server"});return e.recordset[0]}async function co(){let e=await(await R()).request().query(`
376
+ `);if(!e.recordset[0])throw new Rt(500,{message:"No databases returned from server"});return e.recordset}async function on(){let e=await(await N()).request().query("SELECT DB_NAME() AS db");if(!e.recordset[0])throw new Rt(500,{message:"No current database returned from server"});return e.recordset[0]}async function an(){let e=await(await N()).request().query(`
318
377
  SELECT
319
378
  @@VERSION AS version,
320
379
  DB_NAME() AS database_name,
@@ -323,20 +382,20 @@ This will return the 5 customers with the highest total order value. You might a
323
382
  (SELECT local_tcp_port FROM sys.dm_exec_connections WHERE session_id = @@SPID) AS port,
324
383
  @@MAX_CONNECTIONS AS max_connections,
325
384
  (SELECT COUNT(*) FROM sys.dm_exec_sessions WHERE is_user_process = 1) AS active_connections
326
- `);if(!e.recordset[0])throw new st(500,{message:"No connection information returned from server"});let t=e.recordset[0],o=ce();return{host:String(t.host||o.host),port:Number(t.port||o.port),user:String(t.user),database:String(t.database_name??""),version:String(t.version),active_connections:Number(t.active_connections??0),max_connections:Number(t.max_connections)}}var mo=d(()=>{"use strict";h();Pe()});import{HTTPException as uo}from"hono/http-exception";async function po(a){let{tableName:e,columnName:t,db:o}=a,r=await R(o),n=await r.request().input("tableName",e).query(`
385
+ `);if(!e.recordset[0])throw new Rt(500,{message:"No connection information returned from server"});let o=e.recordset[0],a=oe();return{host:String(o.host||a.host),port:Number(o.port||a.port),user:String(o.user),database:String(o.database_name??""),version:String(o.version),active_connections:Number(o.active_connections??0),max_connections:Number(o.max_connections)}}var nn=f(()=>{"use strict";h();De()});import{HTTPException as rn}from"hono/http-exception";async function sn(t){let{tableName:e,columnName:o,db:a}=t,n=await N(a),r=await n.request().input("tableName",e).query(`
327
386
  SELECT COUNT(*) as cnt
328
387
  FROM INFORMATION_SCHEMA.TABLES
329
388
  WHERE TABLE_CATALOG = DB_NAME()
330
389
  AND TABLE_NAME = @tableName
331
390
  AND TABLE_SCHEMA = 'dbo'
332
- `);if(!(Number(n.recordset[0]?.cnt??0)>0))throw new uo(404,{message:`Table "${e}" does not exist`});let i=await r.request().input("tableName",e).input("columnName",t).query(`
391
+ `);if(!(Number(r.recordset[0]?.cnt??0)>0))throw new rn(404,{message:`Table "${e}" does not exist`});let c=await n.request().input("tableName",e).input("columnName",o).query(`
333
392
  SELECT COUNT(*) as cnt
334
393
  FROM INFORMATION_SCHEMA.COLUMNS
335
394
  WHERE TABLE_CATALOG = DB_NAME()
336
395
  AND TABLE_NAME = @tableName
337
396
  AND COLUMN_NAME = @columnName
338
397
  AND TABLE_SCHEMA = 'dbo'
339
- `);if(!(Number(i.recordset[0]?.cnt??0)>0))throw new uo(404,{message:`Column "${t}" does not exist in table "${e}"`});return{deletedCount:(await r.request().query(`ALTER TABLE [${e}] DROP COLUMN [${t}]`)).rowsAffected[0]??1}}var fo=d(()=>{"use strict";h()});import{HTTPException as ue}from"hono/http-exception";async function it(a,e){return(await(await R(e)).request().input("tableName",a).query(`
398
+ `);if(!(Number(c.recordset[0]?.cnt??0)>0))throw new rn(404,{message:`Column "${o}" does not exist in table "${e}"`});return{deletedCount:(await n.request().query(`ALTER TABLE [${e}] DROP COLUMN [${o}]`)).rowsAffected[0]??1}}var cn=f(()=>{"use strict";h()});import{HTTPException as Ee}from"hono/http-exception";async function Nt(t,e){return(await(await N(e)).request().input("tableName",t).query(`
340
399
  SELECT
341
400
  fk.name AS constraint_name,
342
401
  OBJECT_NAME(fk.parent_object_id) AS referencing_table,
@@ -347,13 +406,13 @@ This will return the 5 customers with the highest total order value. You might a
347
406
  INNER JOIN sys.foreign_key_columns fkc
348
407
  ON fk.object_id = fkc.constraint_object_id
349
408
  WHERE OBJECT_NAME(fk.referenced_object_id) = @tableName
350
- `)).recordset.map(r=>({constraintName:r.constraint_name,referencingTable:r.referencing_table,referencingColumn:r.referencing_column,referencedTable:r.referenced_table,referencedColumn:r.referenced_column}))}async function Ds(a,e,t){let o=await it(a,t);if(o.length===0)return[];let r=[],n=await R(t),l=e.map(s=>s.value),i=new Map;for(let s of o){let c=`${s.referencingTable}.${s.referencingColumn}`;i.has(c)||i.set(c,[]),i.get(c)?.push(s)}for(let[s,c]of i){let m=c[0];if(!m||!e.find(y=>y.columnName===m.referencedColumn))continue;let u=n.request();l.forEach((y,b)=>{u.input(`pk${b}`,y)});let E=l.map((y,b)=>`@pk${b}`).join(", "),T=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 Ui(t,e,o){let a=await Nt(t,o);if(a.length===0)return[];let n=[],r=await N(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(`
351
410
  SELECT TOP 100 * FROM [${m.referencingTable}]
352
- WHERE [${m.referencingColumn}] IN (${E})
353
- `);T.recordset.length>0&&r.push({tableName:m.referencingTable,columnName:m.referencingColumn,constraintName:m.constraintName,records:T.recordset})}return r}async function bo({tableName:a,primaryKeys:e,db:t}){let o=await R(t),r=e[0]?.columnName;if(!r)throw new ue(400,{message:"Primary key column name is required"});let n=e.map(i=>i.value),l=o.transaction();await l.begin();try{let i=l.request();n.forEach((m,p)=>{i.input(`pk${p}`,m)});let s=n.map((m,p)=>`@pk${p}`).join(", "),c=await i.query(`DELETE FROM [${a}] WHERE [${r}] IN (${s})`);return await l.commit(),{deletedCount:c.rowsAffected[0]??0,fkViolation:!1,relatedRecords:[]}}catch(i){if(await l.rollback(),i.number===ws)return{deletedCount:0,fkViolation:!0,relatedRecords:await Ds(a,e,t)};throw i instanceof ue?i:new ue(500,{message:`Failed to delete records from "${a}"`})}}async function yo({tableName:a,primaryKeys:e,db:t}){let o=await R(t),r=e[0]?.columnName;if(!r)throw new ue(400,{message:"Primary key column name is required"});let n=e.map(i=>i.value),l=o.transaction();await l.begin();try{let i=await it(a,t),s=0,c=new Set,m=new Set,p=async(y,b,g,S)=>{let _=`${y}.${b}`;if(S.has(_))return;S.add(_);let v=await it(y,t);for(let M of v){let w=l.request();g.forEach((D,q)=>{w.input(`val${q}`,D)});let U=g.map((D,q)=>`@val${q}`).join(", "),I=(await w.query(`
354
- SELECT [${M.referencedColumn}] FROM [${y}]
355
- WHERE [${b}] IN (${U})
356
- `)).recordset.map(D=>D[M.referencedColumn]);I.length>0&&await p(M.referencingTable,M.referencingColumn,I,S)}let k=l.request();g.forEach((M,w)=>{k.input(`delVal${w}`,M)});let H=g.map((M,w)=>`@delVal${w}`).join(", "),B=await k.query(`DELETE FROM [${y}] WHERE [${b}] IN (${H})`);s+=B.rowsAffected[0]??0,c.add(y)};for(let y of i)c.has(y.referencingTable)||await p(y.referencingTable,y.referencingColumn,n,m);let u=l.request();n.forEach((y,b)=>{u.input(`mainPk${b}`,y)});let E=n.map((y,b)=>`@mainPk${b}`).join(", "),T=await u.query(`DELETE FROM [${a}] WHERE [${r}] IN (${E})`);return await l.commit(),{deletedCount:(T.rowsAffected[0]??0)+s}}catch(i){throw await l.rollback(),i instanceof ue?i:new ue(500,{message:`Failed to force delete records from "${a}"`})}}var ws,To=d(()=>{"use strict";h();ws=547});import{HTTPException as lt}from"hono/http-exception";async function go(a,e){return(await(await R(e)).request().input("tableName",a).query(`
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 N(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===vi)return{deletedCount:0,fkViolation:!0,relatedRecords:await Ui(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 N(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 Nt(t,o),i=0,l=new Set,m=new Set,p=async(y,b,E,R)=>{let A=`${y}.${b}`;if(R.has(A))return;R.add(A);let q=await Nt(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(`
413
+ SELECT [${O.referencedColumn}] FROM [${y}]
414
+ WHERE [${b}] IN (${F})
415
+ `)).recordset.map(_=>_[O.referencedColumn]);$.length>0&&await p(O.referencingTable,O.referencingColumn,$,R)}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 vi,un=f(()=>{"use strict";h();vi=547});import{HTTPException as At}from"hono/http-exception";async function dn(t,e){return(await(await N(e)).request().input("tableName",t).query(`
357
416
  SELECT
358
417
  fk.name AS constraint_name,
359
418
  OBJECT_NAME(fk.parent_object_id) AS referencing_table,
@@ -364,26 +423,26 @@ This will return the 5 customers with the highest total order value. You might a
364
423
  INNER JOIN sys.foreign_key_columns fkc
365
424
  ON fk.object_id = fkc.constraint_object_id
366
425
  WHERE OBJECT_NAME(fk.referenced_object_id) = @tableName
367
- `)).recordset.map(r=>({constraintName:r.constraint_name,referencingTable:r.referencing_table,referencingColumn:r.referencing_column,referencedTable:r.referenced_table,referencedColumn:r.referenced_column}))}async function Eo(a,e){let t=await go(a,e);if(t.length===0)return[];let o=[],r=await R(e);for(let n of t){let l=await r.request().query(`SELECT TOP 100 * FROM [${n.referencingTable}]`);l.recordset.length>0&&o.push({tableName:n.referencingTable,columnName:n.referencingColumn,constraintName:n.constraintName,records:l.recordset})}return o}async function Ms(a,e){let o=await(await R(e)).request().query(`SELECT COUNT(*) as count FROM [${a}]`);return Number(o.recordset[0]?.count??0)}async function ho(a){let{tableName:e,db:t,cascade:o}=a,r=await R(t),n=await r.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 N(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 Hi(t,e){let a=await(await N(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 N(o),r=await n.request().input("tableName",e).query(`
368
427
  SELECT COUNT(*) as cnt
369
428
  FROM INFORMATION_SCHEMA.TABLES
370
429
  WHERE TABLE_CATALOG = DB_NAME()
371
430
  AND TABLE_NAME = @tableName
372
431
  AND TABLE_SCHEMA = 'dbo'
373
- `);if(!(Number(n.recordset[0]?.cnt??0)>0))throw new lt(404,{message:`Table "${e}" does not exist`});let i=await Ms(e,t);if(!o){let s=await Eo(e,t);if(s.length>0)return{deletedCount:0,fkViolation:!0,relatedRecords:s}}try{if(o){let s=await go(e,t);for(let c of s)await r.request().query(`ALTER TABLE [${c.referencingTable}] DROP CONSTRAINT [${c.constraintName}]`)}return await r.request().query(`DROP TABLE [${e}]`),{deletedCount:i,fkViolation:!1,relatedRecords:[]}}catch(s){if(s.number===xs)return{deletedCount:0,fkViolation:!0,relatedRecords:await Eo(e,t)};throw s instanceof lt?s:new lt(500,{message:`Failed to delete table "${e}"`})}}var xs,No=d(()=>{"use strict";h();xs=3726});import{HTTPException as Ps}from"hono/http-exception";async function Co({tableName:a,db:e}){let o=await(await R(e)).request().query(`SELECT * FROM [${a}]`);if(!o.recordset||o.recordset.length===0)throw new Ps(404,{message:`Table "${a}" does not exist or has no data`});return{cols:Object.keys(o.recordset[0]),rows:o.recordset}}var Ro=d(()=>{"use strict";h()});import{HTTPException as qs}from"hono/http-exception";var Ao,So=d(()=>{"use strict";h();Ao=async({query:a,db:e})=>{let t=await R(e);if(!a||!a.trim())throw new qs(400,{message:"Query is required"});let o=a.trim().replace(/;+$/,""),r=performance.now(),n=await t.request().query(o),l=performance.now()-r;if(n.recordset){let i=n.recordset;return{columns:n.recordset.columns?Object.keys(n.recordset.columns):Object.keys(i[0]??{}),rows:i,rowCount:i.length,duration:l,message:i.length===0?"OK":void 0}}return{columns:[],rows:[],rowCount:n.rowsAffected[0]??0,duration:l,message:`OK \u2014 ${n.rowsAffected[0]??0} row(s) affected`}}});async function _o(a){let e=await R(a),o=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 Hi(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===Bi)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 Bi,bn=f(()=>{"use strict";h();Bi=3726});import{HTTPException as Ki}from"hono/http-exception";async function yn({tableName:t,db:e}){let a=await(await N(e)).request().query(`SELECT * FROM [${t}]`);if(!a.recordset||a.recordset.length===0)throw new Ki(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 Qi}from"hono/http-exception";var Tn,En=f(()=>{"use strict";h();Tn=async({query:t,db:e})=>{let o=await N(e);if(!t||!t.trim())throw new Qi(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 N(t),a=await e.request().query(`
374
433
  SELECT table_name AS tableName
375
434
  FROM information_schema.tables
376
435
  WHERE table_catalog = DB_NAME()
377
436
  AND table_type = 'BASE TABLE'
378
437
  AND table_schema = 'dbo'
379
438
  ORDER BY table_name
380
- `);return!o.recordset||o.recordset.length===0?[]:await Promise.all(o.recordset.map(async n=>{let i=(await e.request().query(`SELECT COUNT(*) as count FROM [${n.tableName}]`)).recordset[0];return{tableName:n.tableName,rowCount:i?.count??0}}))}var wo=d(()=>{"use strict";h()});import{HTTPException as Do}from"hono/http-exception";async function Lo({tableName:a,db:e}){let t=await R(e),o=await t.request().input("tableName",a).query(`
439
+ `);return!a.recordset||a.recordset.length===0?[]:await Promise.all(a.recordset.map(async r=>{let c=(await e.request().query(`SELECT COUNT(*) as count FROM [${r.tableName}]`)).recordset[0];return{tableName:r.tableName,rowCount:c?.count??0}}))}var Cn=f(()=>{"use strict";h()});import{HTTPException as Sn}from"hono/http-exception";async function Rn({tableName:t,db:e}){let o=await N(e),a=await o.request().input("tableName",t).query(`
381
440
  SELECT COUNT(*) as cnt
382
441
  FROM INFORMATION_SCHEMA.TABLES
383
442
  WHERE TABLE_CATALOG = DB_NAME()
384
443
  AND TABLE_NAME = @tableName
385
444
  AND TABLE_SCHEMA = 'dbo'
386
- `);if(!(Number(o.recordset[0]?.cnt??0)>0))throw new Do(404,{message:`Table "${a}" does not exist`});let n=await t.request().input("tableName",a).query(`
445
+ `);if(!(Number(a.recordset[0]?.cnt??0)>0))throw new Sn(404,{message:`Table "${t}" does not exist`});let r=await o.request().input("tableName",t).query(`
387
446
  SELECT
388
447
  c.COLUMN_NAME,
389
448
  c.DATA_TYPE,
@@ -428,20 +487,20 @@ This will return the 5 customers with the highest total order value. You might a
428
487
  AND c.TABLE_NAME = @tableName
429
488
  AND c.TABLE_SCHEMA = 'dbo'
430
489
  ORDER BY c.ORDINAL_POSITION
431
- `);if(!n.recordset||n.recordset.length===0)throw new Do(500,{message:`Failed to retrieve schema for table "${a}"`});let l=n.recordset.map(s=>{let c=` [${s.COLUMN_NAME}] ${s.DATA_TYPE}`;return s.CHARACTER_MAXIMUM_LENGTH?c+=s.CHARACTER_MAXIMUM_LENGTH===-1?"(MAX)":`(${s.CHARACTER_MAXIMUM_LENGTH})`:s.NUMERIC_PRECISION&&(s.NUMERIC_SCALE?c+=`(${s.NUMERIC_PRECISION},${s.NUMERIC_SCALE})`:c+=`(${s.NUMERIC_PRECISION})`),c+=s.IS_NULLABLE==="YES"?" NULL":" NOT NULL",s.COLUMN_DEFAULT&&(c+=` DEFAULT ${s.COLUMN_DEFAULT}`),c});return`CREATE TABLE [${a}] (
432
- ${l.join(`,
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(`,
433
492
  `)}
434
- )`}var xo=d(()=>{"use strict";h()});var Mo,Oo=d(()=>{"use strict";h();Mo=async({tableName:a,cursor:e="",limit:t=50,direction:o="asc",sort:r=[],order:n="asc",filters:l=[],db:i})=>{let s=await R(i),c=e?Number.parseInt(e,10):0,m=c*t,p="";Array.isArray(r)&&r.length>0?p=`ORDER BY ${r.map(v=>`[${v.columnName}] ${v.direction.toUpperCase()}`).join(", ")}`:typeof r=="string"&&r?p=`ORDER BY [${r}] ${n.toUpperCase()}`:p="ORDER BY (SELECT NULL)";let u=await s.request().query(`SELECT COUNT(*) as total FROM [${a}]`),E=Number(u.recordset[0]?.total??0),y=(await s.request().query(`
493
+ )`}var Nn=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 N(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(`
435
494
  SELECT *
436
- FROM [${a}]
495
+ FROM [${t}]
437
496
  ${p}
438
497
  OFFSET ${m} ROWS
439
- FETCH NEXT ${t+1} ROWS ONLY
440
- `)).recordset,b=y.length>t;b&&(y=y.slice(0,t));let g=b?String(c+1):null,S=c>0?String(c-1):null;return{data:y,meta:{limit:t,total:E,hasNextPage:b,hasPreviousPage:c>0,nextCursor:g,prevCursor:S}}}});import{HTTPException as qe}from"hono/http-exception";async function Po({params:a,db:e}){let{tableName:t,updates:o,primaryKey:r}=a,n=await R(e),l=await ee({tableName:t,db:e}),i=new Set(l.filter(m=>m.dataTypeLabel==="boolean").map(m=>m.columnName)),s=new Map;for(let m of o){let p=m.rowData[r];if(p==null)throw new qe(400,{message:`Primary key "${r}" 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 c=n.transaction();await c.begin();try{let m=0;for(let[p,u]of s.entries()){let E=u.map((g,S)=>`[${g.columnName}] = @value${S}`),T=c.request();u.forEach((g,S)=>{let _=g.value;_!==null&&typeof _=="object"&&(_=JSON.stringify(_)),i.has(g.columnName)&&typeof _=="string"&&(_=_==="true"?1:0),T.input(`value${S}`,_)}),T.input("pkValue",p);let y=`
441
- UPDATE [${t}]
442
- SET ${E.join(", ")}
443
- WHERE [${r}] = @pkValue
444
- `,b=await T.query(y);if(b.rowsAffected[0]===0)throw new qe(404,{message:`Record with ${r} = ${p} not found in table "${t}"`});m+=b.rowsAffected[0]??0}return await c.commit(),{updatedCount:m}}catch(m){throw await c.rollback(),m instanceof qe?m:new qe(500,{message:`Failed to update records in "${t}"`})}}var Io=d(()=>{"use strict";h();Te()});import{HTTPException as Hs}from"hono/http-exception";function Bs(a){let e=a.match(/^(?:enum|set)\((.+)\)$/i);return e?.[1]?e[1].split(",").map(t=>t.trim().replace(/^'|'$/g,"")):null}async function te({tableName:a,db:e}){let t=C(e),o=`
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,R=l>0?String(l-1):null;return{data:y,meta:{limit:o,total:d,hasNextPage:b,hasPreviousPage:l>0,nextCursor:E,prevCursor:R}}}});import{HTTPException as Ye}from"hono/http-exception";async function Dn({params:t,db:e}){let{tableName:o,updates:a,primaryKey:n}=t,r=await N(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 Ye(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,R)=>`[${E.columnName}] = @value${R}`),g=l.request();u.forEach((E,R)=>{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${R}`,A)}),g.input("pkValue",p);let y=`
500
+ UPDATE [${o}]
501
+ SET ${d.join(", ")}
502
+ WHERE [${n}] = @pkValue
503
+ `,b=await g.query(y);if(b.rowsAffected[0]===0)throw new Ye(404,{message:`Record with ${n} = ${p} not found in table "${o}"`});m+=b.rowsAffected[0]??0}return await l.commit(),{updatedCount:m}}catch(m){throw await l.rollback(),m instanceof Ye?m:new Ye(500,{message:`Failed to update records in "${o}"`})}}var _n=f(()=>{"use strict";h();_e()});import{HTTPException as Xi}from"hono/http-exception";function Zi(t){let e=t.match(/^(?:enum|set)\((.+)\)$/i);return e?.[1]?e[1].split(",").map(o=>o.trim().replace(/^'|'$/g,"")):null}async function re({tableName:t,db:e}){let o=S(e),a=`
445
504
  SELECT
446
505
  c.COLUMN_NAME AS columnName,
447
506
  c.DATA_TYPE AS dataType,
@@ -461,18 +520,18 @@ ${l.join(`,
461
520
  WHERE c.TABLE_SCHEMA = DATABASE()
462
521
  AND c.TABLE_NAME = ?
463
522
  ORDER BY c.ORDINAL_POSITION
464
- `,[r]=await t.execute(o,[a]);if(!r||r.length===0)throw new Hs(404,{message:`Table "${a}" does not exist`});return r.map(n=>{let l=n.dataType,i=n.columnType,c=l==="enum"||l==="set"?Bs(i):null;return{columnName:n.columnName,dataType:zt(l,i),dataTypeLabel:Gt(l,i),isNullable:!!n.isNullable,columnDefault:n.columnDefault??null,isPrimaryKey:!!n.isPrimaryKey,isForeignKey:!!n.isForeignKey,referencedTable:n.referencedTable??null,referencedColumn:n.referencedColumn??null,enumValues:c}})}var Ee=d(()=>{"use strict";J();h()});import{HTTPException as Ks}from"hono/http-exception";async function qo({db:a,params:e}){let{tableName:t,data:o}=e,r=C(a),n=await te({tableName:t,db:a}),l=new Set(n.filter(E=>E.dataTypeLabel==="boolean").map(E=>E.columnName)),i=Object.keys(o),s=Object.values(o).map((E,T)=>{let y=i[T];return l.has(y)&&typeof E=="string"?E==="true"?1:0:E}),c=i.map(()=>"?").join(", "),m=i.map(E=>`\`${E}\``).join(", "),p=`
465
- INSERT INTO \`${t}\` (${m})
466
- VALUES (${c})
467
- `,[u]=await r.execute(p,s);if(u.affectedRows===0)throw new Ks(500,{message:`Failed to insert record into "${t}"`});return{insertedCount:u.affectedRows}}var $o=d(()=>{"use strict";h();Ee()});import{HTTPException as $e}from"hono/http-exception";var vo,ko=d(()=>{"use strict";h();Ee();vo=async({tableName:a,records:e,db:t})=>{if(!e||e.length===0)throw new $e(400,{message:"At least one record is required"});let r=await C(t).getConnection();try{let n=Object.keys(e[0]),l=n.map(c=>`\`${c}\``).join(", "),i=await te({tableName:a,db:t}),s=new Set(i.filter(c=>c.dataTypeLabel==="boolean").map(c=>c.columnName));await r.beginTransaction();for(let c=0;c<e.length;c++){let m=e[c],p=n.map(T=>{let y=m[T];return s.has(T)&&typeof y=="string"?y==="true"?1:0:y}),u=n.map(()=>"?").join(", "),E=`
468
- INSERT INTO \`${a}\` (${l})
523
+ `,[n]=await o.execute(a,[t]);if(!n||n.length===0)throw new Xi(404,{message:`Table "${t}" does not exist`});return n.map(r=>{let s=r.dataType,c=r.columnType,l=s==="enum"||s==="set"?Zi(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 tc}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=`
524
+ INSERT INTO \`${o}\` (${m})
525
+ VALUES (${l})
526
+ `,[u]=await n.execute(p,i);if(u.affectedRows===0)throw new tc(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:u.affectedRows}}var xn=f(()=>{"use strict";h();Me()});import{HTTPException as ze}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 ze(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})
469
528
  VALUES (${u})
470
- `;try{await r.execute(E,p)}catch(T){throw new $e(500,{message:`Failed to insert record ${c+1}: ${T instanceof Error?T.message:String(T)}`})}}return await r.commit(),{success:!0,message:`Successfully inserted ${e.length} record${e.length!==1?"s":""}`,successCount:e.length,failureCount:0}}catch(n){throw await r.rollback(),n instanceof $e?n:new $e(500,{message:`Failed to bulk insert records into "${a}"`})}finally{r.release()}}});function Ys(a,e){if(!a?.trim())return null;let t=a.trim().toLowerCase();return t.includes("(")&&t.includes(")")?t.includes("uuid()")?!e.toUpperCase().includes("CHAR")&&!e.toUpperCase().includes("TEXT")?null:"(UUID())":t.includes("current_timestamp")||t.includes("now()")?"(CURRENT_TIMESTAMP)":t.includes("current_date")?"(CURRENT_DATE)":`(${a.trim()})`:t==="null"?"NULL":t==="true"||t==="false"?t==="true"?"1":"0":a.trim()}function Qs(a,e){if(e)return"JSON";let t=a.toLowerCase().trim();return{serial:"INT AUTO_INCREMENT",serial4:"INT AUTO_INCREMENT",bigserial:"BIGINT AUTO_INCREMENT",serial8:"BIGINT AUTO_INCREMENT",int:"INT",int4:"INT",integer:"INT",bigint:"BIGINT",int8:"BIGINT",smallint:"SMALLINT",int2:"SMALLINT",numeric:"DECIMAL",decimal:"DECIMAL",real:"FLOAT",float4:"FLOAT",float:"FLOAT","double precision":"DOUBLE",float8:"DOUBLE",money:"DECIMAL(19, 4)",boolean:"TINYINT(1)",bool:"TINYINT(1)",text:"LONGTEXT",varchar:"VARCHAR(255)","character varying":"VARCHAR(255)",char:"CHAR(1)",character:"CHAR(1)",bpchar:"CHAR",uuid:"CHAR(36)",json:"JSON",jsonb:"JSON",xml:"LONGTEXT",date:"DATE",time:"TIME","time without time zone":"TIME",timestamp:"DATETIME","timestamp without time zone":"DATETIME","timestamp with time zone":"DATETIME",timestamptz:"DATETIME",interval:"VARCHAR(255)",bytea:"LONGBLOB",inet:"VARCHAR(45)",cidr:"VARCHAR(45)",macaddr:"VARCHAR(17)",macaddr8:"VARCHAR(23)",point:"POINT",line:"LINESTRING",polygon:"POLYGON"}[t]||a.toUpperCase()}function pe(a,e={}){let t=Qs(a.columnType,a.isArray??!1),o=`\`${a.columnName}\` ${t}`;if(!a.isNullable&&!a.isPrimaryKey&&(o+=" NOT NULL"),a.defaultValue&&!t.includes("AUTO_INCREMENT")){let r=Ys(a.defaultValue,t);r!==null&&(o+=` DEFAULT ${r}`)}return(a.isIdentity||e.preserveAutoIncrement)&&!t.includes("AUTO_INCREMENT")&&(o+=" AUTO_INCREMENT"),e.includeUnique&&a.isUnique&&!a.isPrimaryKey&&(o+=" UNIQUE"),e.includePrimaryKey&&a.isPrimaryKey&&(o+=" PRIMARY KEY"),o}var ve=d(()=>{"use strict"});async function Uo({tableData:a,db:e}){let{tableName:t,fields:o,foreignKeys:r}=a,n=C(e),l=o.map(u=>pe(u)),i=o.filter(u=>u.isPrimaryKey),s=[];if(i.length>0){let u=i.map(E=>`\`${E.columnName}\``).join(", ");s.push(`PRIMARY KEY (${u})`)}for(let u of o)u.isUnique&&!u.isPrimaryKey&&s.push(`UNIQUE KEY \`uq_${t}_${u.columnName}\` (\`${u.columnName}\`)`);let c=r?.map(u=>`CONSTRAINT \`${`fk_${t}_${u.columnName}_${u.referencedTable}_${u.referencedColumn}`}\` FOREIGN KEY (\`${u.columnName}\`) REFERENCES \`${u.referencedTable}\` (\`${u.referencedColumn}\`) ON UPDATE ${u.onUpdate} ON DELETE ${u.onDelete}`)||[],m=[...l,...s,...c],p=`
471
- CREATE TABLE \`${t}\` (
529
+ `;try{await n.execute(d,p)}catch(g){throw new ze(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 ze?r:new ze(500,{message:`Failed to bulk insert records into "${t}"`})}finally{n.release()}}});function nc(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 rc(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=rc(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=nc(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 Ge=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=`
530
+ CREATE TABLE \`${o}\` (
472
531
  ${m.join(`,
473
532
  `)}
474
533
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
475
- `;await n.execute(p)}var Fo=d(()=>{"use strict";h();ve()});import{HTTPException as ct}from"hono/http-exception";async function Ho(){let a=C(),[e]=await a.execute(`
534
+ `;await r.execute(p)}var In=f(()=>{"use strict";h();Ge()});import{HTTPException as wt}from"hono/http-exception";async function $n(){let t=S(),[e]=await t.execute(`
476
535
  SELECT
477
536
  s.SCHEMA_NAME AS name,
478
537
  CONCAT(
@@ -489,7 +548,7 @@ ${l.join(`,
489
548
  ON t.TABLE_SCHEMA = s.SCHEMA_NAME
490
549
  GROUP BY s.SCHEMA_NAME, s.DEFAULT_CHARACTER_SET_NAME
491
550
  ORDER BY s.SCHEMA_NAME
492
- `);if(!e[0])throw new ct(500,{message:"No databases returned from server"});return e}async function Bo(){let a=C(),[e]=await a.execute("SELECT DATABASE() AS db");if(!e[0])throw new ct(500,{message:"No current database returned from server"});return e[0]}async function jo(){let a=C(),[e]=await a.execute(`
551
+ `);if(!e[0])throw new wt(500,{message:"No databases returned from server"});return e}async function qn(){let t=S(),[e]=await t.execute("SELECT DATABASE() AS db");if(!e[0])throw new wt(500,{message:"No current database returned from server"});return e[0]}async function kn(){let t=S(),[e]=await t.execute(`
493
552
  SELECT
494
553
  VERSION() AS version,
495
554
  DATABASE() AS database_name,
@@ -497,11 +556,11 @@ ${l.join(`,
497
556
  @@hostname AS host,
498
557
  @@port AS port,
499
558
  @@max_connections AS max_connections
500
- `),[t]=await a.execute("SELECT COUNT(*) AS cnt FROM information_schema.PROCESSLIST");if(!e[0])throw new ct(500,{message:"No connection information returned from server"});let o=e[0],r=Number(t[0]?.cnt??0),n=ce();return{host:String(o.host||n.host),port:Number(o.port||n.port),user:String(o.user),database:String(o.database_name??""),version:String(o.version),active_connections:r,max_connections:Number(o.max_connections)}}var Ko=d(()=>{"use strict";h();Pe()});import{HTTPException as Vo}from"hono/http-exception";async function Wo(a){let{tableName:e,columnName:t,db:o}=a,r=C(o),[n]=await r.execute(`SELECT COUNT(*) as cnt
559
+ `),[o]=await t.execute("SELECT COUNT(*) AS cnt FROM information_schema.PROCESSLIST");if(!e[0])throw new wt(500,{message:"No connection information returned from server"});let a=e[0],n=Number(o[0]?.cnt??0),r=oe();return{host:String(a.host||r.host),port:Number(a.port||r.port),user:String(a.user),database:String(a.database_name??""),version:String(a.version),active_connections:n,max_connections:Number(a.max_connections)}}var vn=f(()=>{"use strict";h();De()});import{HTTPException as Un}from"hono/http-exception";async function Fn(t){let{tableName:e,columnName:o,db:a}=t,n=S(a),[r]=await n.execute(`SELECT COUNT(*) as cnt
501
560
  FROM information_schema.TABLES
502
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(n[0]?.cnt??0)>0))throw new Vo(404,{message:`Table "${e}" does not exist`});let[i]=await r.execute(`SELECT COUNT(*) as cnt
561
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(r[0]?.cnt??0)>0))throw new Un(404,{message:`Table "${e}" does not exist`});let[c]=await n.execute(`SELECT COUNT(*) as cnt
503
562
  FROM information_schema.COLUMNS
504
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,t]);if(!(Number(i[0]?.cnt??0)>0))throw new Vo(404,{message:`Column "${t}" does not exist in table "${e}"`});let[c]=await r.execute(`ALTER TABLE \`${e}\` DROP COLUMN \`${t}\``);return{deletedCount:c.affectedRows}}var Yo=d(()=>{"use strict";h()});import{HTTPException as de}from"hono/http-exception";async function mt(a,e){let t=C(e),[o]=await t.execute(`SELECT
563
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,o]);if(!(Number(c[0]?.cnt??0)>0))throw new Un(404,{message:`Column "${o}" does not exist in table "${e}"`});let[l]=await n.execute(`ALTER TABLE \`${e}\` DROP COLUMN \`${o}\``);return{deletedCount:l.affectedRows}}var Bn=f(()=>{"use strict";h()});import{HTTPException as Ce}from"hono/http-exception";async function Dt(t,e){let o=S(e),[a]=await o.execute(`SELECT
505
564
  kcu.CONSTRAINT_NAME AS constraint_name,
506
565
  kcu.TABLE_NAME AS referencing_table,
507
566
  kcu.COLUMN_NAME AS referencing_column,
@@ -514,10 +573,10 @@ ${l.join(`,
514
573
  AND kcu.TABLE_NAME = tc.TABLE_NAME
515
574
  WHERE tc.CONSTRAINT_TYPE = 'FOREIGN KEY'
516
575
  AND kcu.TABLE_SCHEMA = DATABASE()
517
- AND kcu.REFERENCED_TABLE_NAME = ?`,[a]);return o.map(r=>({constraintName:r.constraint_name,referencingTable:r.referencing_table,referencingColumn:r.referencing_column,referencedTable:r.referenced_table,referencedColumn:r.referenced_column}))}async function Zs(a,e,t){let o=await mt(a,t);if(o.length===0)return[];let r=[],n=C(t),l=e.map(s=>s.value),i=new Map;for(let s of o){let c=`${s.referencingTable}.${s.referencingColumn}`;i.has(c)||i.set(c,[]),i.get(c)?.push(s)}for(let[s,c]of i){let m=c[0];if(!m||!e.find(T=>T.columnName===m.referencedColumn))continue;let u=l.map(()=>"?").join(", "),[E]=await n.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 mc(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}\`
518
577
  WHERE \`${m.referencingColumn}\` IN (${u})
519
- LIMIT 100`,l);E.length>0&&r.push({tableName:m.referencingTable,columnName:m.referencingColumn,constraintName:m.constraintName,records:E})}return r}async function Qo({tableName:a,primaryKeys:e,db:t}){let o=C(t),r=e[0]?.columnName;if(!r)throw new de(400,{message:"Primary key column name is required"});let n=e.map(s=>s.value),l=n.map(()=>"?").join(", "),i=await o.getConnection();await i.beginTransaction();try{let[s]=await i.execute(`DELETE FROM \`${a}\` WHERE \`${r}\` IN (${l})`,n);return await i.commit(),{deletedCount:s.affectedRows,fkViolation:!1,relatedRecords:[]}}catch(s){if(await i.rollback(),s.errno===Xs)return{deletedCount:0,fkViolation:!0,relatedRecords:await Zs(a,e,t)};throw s instanceof de?s:new de(500,{message:`Failed to delete records from "${a}"`})}finally{i.release()}}async function zo({tableName:a,primaryKeys:e,db:t}){let o=C(t),r=e[0]?.columnName;if(!r)throw new de(400,{message:"Primary key column name is required"});let n=e.map(i=>i.value),l=await o.getConnection();await l.beginTransaction();try{await l.execute("SET FOREIGN_KEY_CHECKS = 0");let i=await mt(a,t),s=0,c=new Set,m=new Set,p=async(T,y,b,g)=>{let S=`${T}.${y}`;if(g.has(S))return;g.add(S);let _=await mt(T,t);for(let H of _){let B=b.map(()=>"?").join(", "),[M]=await l.execute(`SELECT \`${H.referencedColumn}\` FROM \`${T}\`
520
- WHERE \`${y}\` IN (${B})`,b),w=M.map(U=>U[H.referencedColumn]);w.length>0&&await p(H.referencingTable,H.referencingColumn,w,g)}let v=b.map(()=>"?").join(", "),[k]=await l.execute(`DELETE FROM \`${T}\` WHERE \`${y}\` IN (${v})`,b);s+=k.affectedRows,c.add(T)};for(let T of i)c.has(T.referencingTable)||await p(T.referencingTable,T.referencingColumn,n,m);let u=n.map(()=>"?").join(", "),[E]=await l.execute(`DELETE FROM \`${a}\` WHERE \`${r}\` IN (${u})`,n);return await l.execute("SET FOREIGN_KEY_CHECKS = 1"),await l.commit(),{deletedCount:E.affectedRows+s}}catch(i){throw await l.execute("SET FOREIGN_KEY_CHECKS = 1").catch(()=>{}),await l.rollback(),i instanceof de?i:new de(500,{message:`Failed to force delete records from "${a}"`})}finally{l.release()}}var Xs,Go=d(()=>{"use strict";h();Xs=1451});import{HTTPException as ut}from"hono/http-exception";async function oi(a,e){let t=C(e),[o]=await t.execute(`SELECT
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===lc)return{deletedCount:0,fkViolation:!0,relatedRecords:await mc(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 R=`${g}.${y}`;if(E.has(R))return;E.add(R);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 lc,Kn=f(()=>{"use strict";h();lc=1451});import{HTTPException as _t}from"hono/http-exception";async function fc(t,e){let o=S(e),[a]=await o.execute(`SELECT
521
580
  kcu.CONSTRAINT_NAME AS constraint_name,
522
581
  kcu.TABLE_NAME AS referencing_table,
523
582
  kcu.COLUMN_NAME AS referencing_column,
@@ -530,37 +589,37 @@ ${l.join(`,
530
589
  AND kcu.TABLE_NAME = tc.TABLE_NAME
531
590
  WHERE tc.CONSTRAINT_TYPE = 'FOREIGN KEY'
532
591
  AND kcu.TABLE_SCHEMA = DATABASE()
533
- AND kcu.REFERENCED_TABLE_NAME = ?`,[a]);return o.map(r=>({constraintName:r.constraint_name,referencingTable:r.referencing_table,referencingColumn:r.referencing_column,referencedTable:r.referenced_table,referencedColumn:r.referenced_column}))}async function Jo(a,e){let t=await oi(a,e);if(t.length===0)return[];let o=[],r=C(e);for(let n of t){let[l]=await r.execute(`SELECT * FROM \`${n.referencingTable}\` LIMIT 100`);l.length>0&&o.push({tableName:n.referencingTable,columnName:n.referencingColumn,constraintName:n.constraintName,records:l})}return o}async function ri(a,e){let t=C(e),[o]=await t.execute(`SELECT COUNT(*) as count FROM \`${a}\``);return Number(o[0]?.count??0)}async function Xo(a){let{tableName:e,db:t,cascade:o}=a,r=C(t),[n]=await r.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 fc(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 bc(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
534
593
  FROM information_schema.TABLES
535
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(n[0]?.cnt??0)>0))throw new ut(404,{message:`Table "${e}" does not exist`});let i=await ri(e,t);if(!o){let s=await Jo(e,t);if(s.length>0)return{deletedCount:0,fkViolation:!0,relatedRecords:s}}try{if(o){let s=await r.getConnection();try{await s.execute("SET FOREIGN_KEY_CHECKS = 0"),await s.execute(`DROP TABLE \`${e}\``),await s.execute("SET FOREIGN_KEY_CHECKS = 1")}finally{s.release()}}else await r.execute(`DROP TABLE \`${e}\``);return{deletedCount:i,fkViolation:!1,relatedRecords:[]}}catch(s){await r.execute("SET FOREIGN_KEY_CHECKS = 1").catch(()=>{});let c=s;if(c.errno===ti||c.errno===ai)return{deletedCount:0,fkViolation:!0,relatedRecords:await Jo(e,t)};throw s instanceof ut?s:new ut(500,{message:`Failed to delete table "${e}"`})}}var ti,ai,Zo=d(()=>{"use strict";h();ti=1217,ai=1451});import{HTTPException as si}from"hono/http-exception";async function er({tableName:a,db:e}){let t=C(e),[o]=await t.execute(`SELECT * FROM \`${a}\``);if(!o||o.length===0)throw new si(404,{message:`Table "${a}" does not exist or has no data`});return{cols:Object.keys(o[0]),rows:o}}var tr=d(()=>{"use strict";h()});import{HTTPException as li}from"hono/http-exception";var ar,or=d(()=>{"use strict";h();ar=async({query:a,db:e})=>{let t=C(e);if(!a||!a.trim())throw new li(400,{message:"Query is required"});let o=a.trim().replace(/;+$/,""),r=performance.now(),[n,l]=await t.execute(o),i=performance.now()-r;if(Array.isArray(n)){let c=n;return{columns:l?l.map(p=>p.name):Object.keys(c[0]??{}),rows:c,rowCount:c.length,duration:i,message:c.length===0?"OK":void 0}}let s=n;return{columns:[],rows:[],rowCount:s.affectedRows,duration:i,message:`OK \u2014 ${s.affectedRows} row(s) affected`}}});async function rr(a){let e=C(a),t=`
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 bc(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===pc||l.errno===dc)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 pc,dc,Wn=f(()=>{"use strict";h();pc=1217,dc=1451});import{HTTPException as gc}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 gc(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 Ec}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 Ec(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=`
536
595
  SELECT table_name as tableName
537
596
  FROM information_schema.tables
538
597
  WHERE table_schema = DATABASE()
539
598
  AND table_type = 'BASE TABLE'
540
599
  ORDER BY table_name
541
- `,[o]=await e.execute(t);return!o||o.length===0?[]:await Promise.all(o.map(async n=>{let[l]=await e.execute(`SELECT COUNT(*) as count FROM \`${n.tableName}\``),i=l[0];return{tableName:n.tableName,rowCount:i?.count??0}}))}var nr=d(()=>{"use strict";h()});import{HTTPException as sr}from"hono/http-exception";async function ir({tableName:a,db:e}){let t=C(e),[o]=await t.execute(`SELECT COUNT(*) as cnt
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
542
601
  FROM information_schema.TABLES
543
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[a]);if(!(Number(o[0]?.cnt??0)>0))throw new sr(404,{message:`Table "${a}" does not exist`});let[n]=await t.execute(`SHOW CREATE TABLE \`${a}\``),l=n[0],i=l?.["Create Table"]??l?.create_table??"";if(!i)throw new sr(500,{message:`Failed to retrieve schema for table "${a}"`});return i}var lr=d(()=>{"use strict";h()});function cr(a){if(a.length===0)return{clause:"",values:[]};let e=[],t=[];for(let o of a){let r=`\`${o.columnName}\``;switch(o.operator){case"=":case"!=":case">":case">=":case"<":case"<=":e.push(`${r} ${o.operator} ?`),t.push(o.value);break;case"is":o.value.toLowerCase()==="null"?e.push(`${r} IS NULL`):(e.push(`${r} = ?`),t.push(o.value));break;case"is not":o.value.toLowerCase()==="null"?e.push(`${r} IS NOT NULL`):(e.push(`${r} != ?`),t.push(o.value));break;case"like":case"ilike":e.push(`${r} LIKE ?`),t.push(o.value);break;case"not like":case"not ilike":e.push(`${r} NOT LIKE ?`),t.push(o.value);break;default:break}}return e.length===0?{clause:"",values:[]}:{clause:`WHERE ${e.join(" AND ")}`,values:t}}function mr(a,e){return Array.isArray(a)?a.length===0?"":`ORDER BY ${a.map(o=>`\`${o.columnName}\` ${o.direction.toUpperCase()}`).join(", ")}`:a&&typeof a=="string"?`ORDER BY \`${a}\` ${e?.toUpperCase()||"ASC"}`:""}function ur(a,e,t){let{values:o,sortColumns:r}=a,n=[],l=[],c=t==="asc"===(e==="asc");if(r.length>0){let m=r.map(E=>`\`${E}\``).join(", "),p=r.map(()=>"?").join(", "),u=c?">":"<";n.push(`(${m}) ${u} (${p})`);for(let E of r)l.push(o[E])}return{clause:n.length>0?`(${n.join(" AND ")})`:"",values:l}}var pr=d(()=>{"use strict"});var ke,pi,di,dr,fr=d(()=>{"use strict";h();pr();ke=a=>Buffer.from(JSON.stringify(a)).toString("base64url"),pi=a=>{try{return JSON.parse(Buffer.from(a,"base64url").toString("utf-8"))}catch{return null}},di=async(a,e)=>{let[t]=await a.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}\``),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 Je,Rc,Nc,ir,cr=f(()=>{"use strict";h();sr();Je=t=>Buffer.from(JSON.stringify(t)).toString("base64url"),Rc=t=>{try{return JSON.parse(Buffer.from(t,"base64url").toString("utf-8"))}catch{return null}},Nc=async(t,e)=>{let[o]=await t.execute(`SELECT COLUMN_NAME as column_name
544
603
  FROM information_schema.COLUMNS
545
604
  WHERE TABLE_SCHEMA = DATABASE()
546
605
  AND TABLE_NAME = ?
547
606
  AND COLUMN_KEY = 'PRI'
548
- ORDER BY ORDINAL_POSITION`,[e]);return t.map(o=>o.column_name)},dr=async({tableName:a,cursor:e="",limit:t=50,direction:o="asc",sort:r=[],order:n="asc",filters:l=[],db:i})=>{let s=C(i),c=await di(s,a),m=[],p=n;Array.isArray(r)&&r.length>0?(m=r.map(I=>I.columnName),p=r[0].direction):typeof r=="string"&&r&&(m=[r]);let u=[...m,...c.filter(I=>!m.includes(I))],{clause:E,values:T}=cr(l),y="",b=[];if(e){let I=pi(e);if(I){let D=ur(I,o,p);y=D.clause,b=D.values}}let g="";E&&y?g=`WHERE ${E.replace(/^WHERE\s+/i,"")} AND ${y}`:E?g=E:y&&(g=`WHERE ${y}`);let S=mr((Array.isArray(r),r),n),_=S;o==="desc"?S?_=S.replace(/\bASC\b/gi,"TEMP_DESC").replace(/\bDESC\b/gi,"ASC").replace(/TEMP_DESC/g,"DESC"):u.length>0&&(_=`ORDER BY ${u.map(D=>`\`${D}\` ${p==="asc"?"DESC":"ASC"}`).join(", ")}`):!S&&u.length>0&&(_=`ORDER BY ${u.map(D=>`\`${D}\` ${p.toUpperCase()}`).join(", ")}`);let[v]=await s.execute(`SELECT COUNT(*) as total FROM \`${a}\` ${E}`,T),k=Number(v[0]?.total??0),H=Math.floor(t)+1,[B]=await s.execute(`SELECT * FROM \`${a}\` ${g} ${_} LIMIT ${H}`,[...T,...b]),M=B,w=M.length>t;w&&(M=M.slice(0,t)),o==="desc"&&(M=M.reverse());let U=null,Y=null;if(M.length>0&&u.length>0){let I=M[0],D=M[M.length-1],q=oe=>({values:Object.fromEntries(u.map(Ne=>[Ne,oe[Ne]])),sortColumns:u});o==="asc"?(w&&(U=ke(q(D))),e&&(Y=ke(q(I)))):(e&&(U=ke(q(D))),w&&(Y=ke(q(I))))}return{data:M,meta:{limit:t,total:k,hasNextPage:o==="asc"?w:!!e,hasPreviousPage:o==="asc"?!!e:w,nextCursor:U,prevCursor:Y}}}});import{HTTPException as Ue}from"hono/http-exception";async function br({params:a,db:e}){let{tableName:t,updates:o,primaryKey:r}=a,n=C(e),l=await te({tableName:t,db:e}),i=new Set(l.filter(m=>m.dataTypeLabel==="boolean").map(m=>m.columnName)),s=new Map;for(let m of o){let p=m.rowData[r];if(p==null)throw new Ue(400,{message:`Primary key "${r}" 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 c=await n.getConnection();await c.beginTransaction();try{let m=0;for(let[p,u]of s.entries()){let E=u.map(g=>`\`${g.columnName}\` = ?`),T=u.map(g=>g.value!==null&&typeof g.value=="object"?JSON.stringify(g.value):i.has(g.columnName)&&typeof g.value=="string"?g.value==="true"?1:0:g.value);T.push(p);let y=`
549
- UPDATE \`${t}\`
550
- SET ${E.join(", ")}
551
- WHERE \`${r}\` = ?
552
- `,[b]=await c.execute(y,T);if(b.affectedRows===0)throw new Ue(404,{message:`Record with ${r} = ${p} not found in table "${t}"`});m+=b.affectedRows}return await c.commit(),{updatedCount:m}}catch(m){throw await c.rollback(),m instanceof Ue?m:new Ue(500,{message:`Failed to update records in "${t}"`})}finally{c.release()}}var yr=d(()=>{"use strict";h();Ee()});import{HTTPException as yi}from"hono/http-exception";var Tr,Er=d(()=>{"use strict";h();Tr=async({query:a,db:e})=>{let t=N(e);if(!a||!a.trim())throw new yi(400,{message:"Query is required"});let o=a.trim().replace(/;+$/,""),r=performance.now(),n=await t.query(o),l=performance.now()-r;return{columns:n.fields.map(s=>s.name),rows:n.rows,rowCount:n.rows.length,duration:l,message:n.rows.length===0?"OK":void 0}}});import{HTTPException as Ei}from"hono/http-exception";async function gr(a){let e=N(a),t=`
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 Nc(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 $=Rc(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 R=nr((Array.isArray(n),n),r),A=R;a==="desc"?R?A=R.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(", ")}`):!R&&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=Je(v(_))),e&&(Y=Je(v($)))):(e&&(F=Je(v(_))),D&&(Y=Je(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 Xe}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 Xe(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=`
608
+ UPDATE \`${o}\`
609
+ SET ${d.join(", ")}
610
+ WHERE \`${n}\` = ?
611
+ `,[b]=await l.execute(y,g);if(b.affectedRows===0)throw new Xe(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 Xe?m:new Xe(500,{message:`Failed to update records in "${o}"`})}finally{l.release()}}var mr=f(()=>{"use strict";h();Me()});import{HTTPException as Dc}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 Dc(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 Mc}from"hono/http-exception";async function dr(t){let e=C(t),o=`
553
612
  SELECT table_name as "tableName"
554
613
  FROM information_schema.tables
555
614
  WHERE table_schema = 'public'
556
615
  AND table_type = 'BASE TABLE'
557
616
  ORDER BY table_name;
558
- `,{rows:o}=await e.query(t);if(!o[0])throw new Ei(500,{message:"No tables returned from database"});return await Promise.all(o.map(async n=>{let l=`SELECT COUNT(*)::integer as count FROM "${n.tableName}"`,{rows:i}=await e.query(l);return{tableName:n.tableName,rowCount:i[0]?.count??0}}))}var hr=d(()=>{"use strict";h()});import{HTTPException as hi}from"hono/http-exception";async function Nr({tableName:a,db:e}){let t=N(e),o=`
617
+ `,{rows:a}=await e.query(o);if(!a[0])throw new Mc(500,{message:"No tables returned from database"});return await Promise.all(a.map(async r=>{let s=`SELECT COUNT(*)::integer as count FROM "${r.tableName}"`,{rows:c}=await e.query(s);return{tableName:r.tableName,rowCount:c[0]?.count??0}}))}var fr=f(()=>{"use strict";h()});import{HTTPException as Lc}from"hono/http-exception";async function br({tableName:t,db:e}){let o=C(e),a=`
559
618
  SELECT EXISTS (
560
619
  SELECT 1 FROM information_schema.tables
561
620
  WHERE table_schema = 'public' AND table_name = $1
562
621
  ) as exists
563
- `,{rows:r}=await t.query(o,[a]);if(!r[0]?.exists)throw new hi(404,{message:`Table "${a}" does not exist`});let n=`
622
+ `,{rows:n}=await o.query(a,[t]);if(!n[0]?.exists)throw new Lc(404,{message:`Table "${t}" does not exist`});let r=`
564
623
  SELECT
565
624
  column_name,
566
625
  data_type,
@@ -573,7 +632,7 @@ ${l.join(`,
573
632
  FROM information_schema.columns
574
633
  WHERE table_schema = 'public' AND table_name = $1
575
634
  ORDER BY ordinal_position
576
- `,{rows:l}=await t.query(n,[a]),i=`
635
+ `,{rows:s}=await o.query(r,[t]),c=`
577
636
  SELECT
578
637
  tc.constraint_name,
579
638
  tc.constraint_type,
@@ -590,7 +649,7 @@ ${l.join(`,
590
649
  AND tc.constraint_type = 'FOREIGN KEY'
591
650
  WHERE tc.table_schema = 'public' AND tc.table_name = $1
592
651
  ORDER BY tc.constraint_type, tc.constraint_name
593
- `,{rows:s}=await t.query(i,[a]),c=`
652
+ `,{rows:i}=await o.query(c,[t]),l=`
594
653
  SELECT indexname, indexdef
595
654
  FROM pg_indexes
596
655
  WHERE schemaname = 'public' AND tablename = $1
@@ -599,61 +658,61 @@ ${l.join(`,
599
658
  FROM information_schema.table_constraints
600
659
  WHERE table_schema = 'public' AND table_name = $1 AND constraint_type = 'PRIMARY KEY'
601
660
  )
602
- `,{rows:m}=await t.query(c,[a]),p=[];p.push(`create table public.${a} (`);let u=[];for(let b of l){let g=` ${b.column_name} ${Ni(b)}`;b.is_nullable==="NO"&&(g+=" not null"),b.column_default!==null&&(g+=` default ${b.column_default}`),u.push(g)}let E=new Map;for(let b of s){let g=E.get(b.constraint_name)||[];g.push(b),E.set(b.constraint_name,g)}let T=[];for(let[b,g]of E){let S=g[0],_=g.map(v=>v.column_name).join(", ");if(S.constraint_type==="PRIMARY KEY")T.push(` constraint ${b} primary key (${_})`);else if(S.constraint_type==="FOREIGN KEY"){let v=S.foreign_table_name,k=S.foreign_column_name;T.push(` constraint ${b} foreign key (${_}) references ${v} (${k})`)}else S.constraint_type==="UNIQUE"&&T.push(` constraint ${b} unique (${_})`)}let y=[...u,...T];p.push(y.join(`,
603
- `)),p.push(") tablespace pg_default;");for(let b of m)Array.from(E.values()).some(S=>S[0].constraint_type==="UNIQUE"&&S[0].constraint_name===b.indexname)||(p.push(""),p.push(`${b.indexdef};`));return p.join(`
604
- `)}function Ni(a){let{data_type:e,udt_name:t,character_maximum_length:o,numeric_precision:r,numeric_scale:n}=a;return e==="USER-DEFINED"?t:e==="ARRAY"?`${t.replace(/^_/,"")}[]`:(e==="character varying"||e==="varchar")&&o?`varchar(${o})`:e==="character"&&o?`char(${o})`:e==="numeric"&&r!==null?n!==null&&n>0?`numeric(${r}, ${n})`:`numeric(${r})`:e==="timestamp with time zone"?"timestamp with time zone":e==="timestamp without time zone"?"timestamp":{"character varying":"varchar",character:"char","double precision":"float8",integer:"integer",bigint:"bigint",smallint:"smallint",boolean:"boolean",text:"text",uuid:"uuid",json:"json",jsonb:"jsonb",date:"date",time:"time",bytea:"bytea"}[e]||e}var Cr=d(()=>{"use strict";h()});function Rr(a){if(a.length===0)return{clause:"",values:[]};let e=[],t=[];for(let o of a){let r=t.length+1,n=`"${o.columnName}"`;switch(o.operator){case"=":case"!=":case">":case">=":case"<":case"<=":e.push(`${n} ${o.operator} $${r}`),t.push(o.value);break;case"is":o.value.toLowerCase()==="null"?e.push(`${n} IS NULL`):(e.push(`${n} = $${r}`),t.push(o.value));break;case"is not":o.value.toLowerCase()==="null"?e.push(`${n} IS NOT NULL`):(e.push(`${n} != $${r}`),t.push(o.value));break;case"like":e.push(`${n}::text LIKE $${r}`),t.push(o.value);break;case"not like":e.push(`${n}::text NOT LIKE $${r}`),t.push(o.value);break;case"ilike":e.push(`${n}::text ILIKE $${r}`),t.push(o.value);break;case"not ilike":e.push(`${n}::text NOT ILIKE $${r}`),t.push(o.value);break;default:break}}return e.length===0?{clause:"",values:[]}:{clause:`WHERE ${e.join(" AND ")}`,values:t}}function Ar(a,e){return Array.isArray(a)?a.length===0?"":`ORDER BY ${a.map(o=>`"${o.columnName}" ${o.direction.toUpperCase()}`).join(", ")}`:a&&typeof a=="string"?`ORDER BY "${a}" ${e?.toUpperCase()||"ASC"}`:""}function Sr(a,e,t,o){let{values:r,sortColumns:n}=a,l=[],i=[],m=t==="asc"===(e==="asc");if(n.length>0){let p=n.map(T=>`"${T}"`).join(", "),u=n.map((T,y)=>`$${o+y}`).join(", "),E=m?">":"<";l.push(`(${p}) ${E} (${u})`);for(let T of n)i.push(r[T])}return{clause:l.length>0?`(${l.join(" AND ")})`:"",values:i}}var _r=d(()=>{"use strict"});var Fe,Ri,Ai,wr,Dr=d(()=>{"use strict";h();_r();Fe=a=>Buffer.from(JSON.stringify(a)).toString("base64url"),Ri=a=>{try{return JSON.parse(Buffer.from(a,"base64url").toString("utf-8"))}catch{return null}},Ai=async(a,e)=>{let t=`"${e}"`;return(await a.query(`SELECT a.attname as column_name
661
+ `,{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} ${Oc(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 R=E[0],A=E.map(q=>q.column_name).join(", ");if(R.constraint_type==="PRIMARY KEY")g.push(` constraint ${b} primary key (${A})`);else if(R.constraint_type==="FOREIGN KEY"){let q=R.foreign_table_name,k=R.foreign_column_name;g.push(` constraint ${b} foreign key (${A}) references ${q} (${k})`)}else R.constraint_type==="UNIQUE"&&g.push(` constraint ${b} unique (${A})`)}let y=[...u,...g];p.push(y.join(`,
662
+ `)),p.push(") tablespace pg_default;");for(let b of m)Array.from(d.values()).some(R=>R[0].constraint_type==="UNIQUE"&&R[0].constraint_name===b.indexname)||(p.push(""),p.push(`${b.indexdef};`));return p.join(`
663
+ `)}function Oc(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 yr=f(()=>{"use strict";h()});function gr(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 Tr(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 Er(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 hr=f(()=>{"use strict"});var Ze,Ic,$c,Cr,Sr=f(()=>{"use strict";h();hr();Ze=t=>Buffer.from(JSON.stringify(t)).toString("base64url"),Ic=t=>{try{return JSON.parse(Buffer.from(t,"base64url").toString("utf-8"))}catch{return null}},$c=async(t,e)=>{let o=`"${e}"`;return(await t.query(`SELECT a.attname as column_name
605
664
  FROM pg_index i
606
665
  JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
607
666
  WHERE i.indrelid = $1::regclass AND i.indisprimary
608
- ORDER BY array_position(i.indkey, a.attnum)`,[t])).rows.map(r=>r.column_name)},wr=async({tableName:a,cursor:e="",limit:t=50,direction:o="asc",sort:r=[],order:n="asc",filters:l=[],db:i})=>{let s=N(i),c=await Ai(s,a),m=[],p=n;Array.isArray(r)&&r.length>0?(m=r.map(D=>D.columnName),p=r[0].direction):typeof r=="string"&&r&&(m=[r]);let u=[...m,...c.filter(D=>!m.includes(D))];u.length===0&&u.push("ctid");let{clause:E,values:T}=Rr(l),y="",b=[];if(e){let D=Ri(e);if(D){let q=Sr(D,o,p,T.length+1);y=q.clause,b=q.values}}let g="";E&&y?g=`WHERE ${E.replace(/^WHERE\s+/i,"")} AND ${y}`:E?g=E:y&&(g=`WHERE ${y}`);let S=Ar((Array.isArray(r),r),n),_=S;o==="desc"?S?_=S.replace(/\bASC\b/gi,"TEMP_DESC").replace(/\bDESC\b/gi,"ASC").replace(/TEMP_DESC/g,"DESC"):_=`ORDER BY ${u.map(q=>`"${q}" ${p==="asc"?"DESC":"ASC"}`).join(", ")}`:!S&&u.length>0&&(_=`ORDER BY ${u.map(q=>`"${q}" ${p.toUpperCase()}`).join(", ")}`);let v=await s.query(`SELECT COUNT(*) as total FROM "${a}" ${E}`,T),k=Number(v.rows[0].total),H=T.length+b.length+1,B=await s.query(`SELECT * FROM "${a}" ${g} ${_} LIMIT $${H}`,[...T,...b,t+1]),w=B.fields&&B.fields.length>0?B.rows.filter(D=>Object.keys(D).length>0):B.rows,U=w.length>t;U&&(w=w.slice(0,t)),o==="desc"&&(w=w.reverse());let Y=null,I=null;if(w.length>0){let D=w[0],q=w[w.length-1],oe=Ne=>({values:Object.fromEntries(u.map(bt=>[bt,Ne[bt]])),sortColumns:u});o==="asc"?(U&&(Y=Fe(oe(q))),e&&(I=Fe(oe(D)))):(e&&(Y=Fe(oe(q))),U&&(I=Fe(oe(D))))}return{data:w,meta:{limit:t,total:k,hasNextPage:o==="asc"?U:!!e,hasPreviousPage:o==="asc"?!!e:U,nextCursor:Y,prevCursor:I}}}});import{HTTPException as He}from"hono/http-exception";async function Lr({params:a,db:e}){let{tableName:t,updates:o,primaryKey:r}=a,n=N(e),l=new Map;for(let i of o){let s=i.rowData[r];if(s==null)throw new He(400,{message:`Primary key "${r}" not found in row data. Please ensure the row has a "${r}" column.`});l.has(s)||l.set(s,[]),l.get(s)?.push({columnName:i.columnName,value:i.value,rowData:i.rowData})}await n.query("BEGIN");try{let i=0;for(let[s,c]of l.entries()){let m=c.map((T,y)=>`"${T.columnName}" = $${y+1}`),p=c.map(T=>T.value!==null&&typeof T.value=="object"?JSON.stringify(T.value):T.value);p.push(s);let u=`
609
- UPDATE "${t}"
667
+ ORDER BY array_position(i.indkey, a.attnum)`,[o])).rows.map(n=>n.column_name)},Cr=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 $c(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}=gr(s),y="",b=[];if(e){let _=Ic(e);if(_){let v=Er(_,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 R=Tr((Array.isArray(n),n),r),A=R;a==="desc"?R?A=R.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(", ")}`:!R&&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=Ze(me(v))),e&&($=Ze(me(_)))):(e&&(Y=Ze(me(v))),F&&($=Ze(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 et}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 et(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
+ UPDATE "${o}"
610
669
  SET ${m.join(", ")}
611
- WHERE "${r}" = $${p.length}
670
+ WHERE "${n}" = $${p.length}
612
671
  RETURNING *
613
- `,E=await n.query(u,p);if(E.rowCount===0)throw new He(404,{message:`Record with ${r} = ${s} not found in table "${t}"`});i+=E.rowCount??0}return await n.query("COMMIT"),{updatedCount:i}}catch(i){throw await n.query("ROLLBACK"),i instanceof He?i:new He(500,{message:`Failed to update records in "${t}"`})}}var xr=d(()=>{"use strict";h()});function O(a){return wi[a]}var wi,ge=d(()=>{"use strict";qa();va();Ua();ja();Wa();za();Xa();eo();ao();ro();so();mo();fo();To();No();Ro();So();Te();wo();xo();Oo();Io();$o();ko();Fo();Ko();Yo();Go();Zo();tr();or();Ee();nr();lr();fr();yr();Er();at();hr();Cr();Dr();xr();wi={pg:{addRecord:Ia,bulkInsertRecords:$a,createTable:ka,getDatabasesList:Fa,getCurrentDatabase:Ha,getDatabaseConnectionInfo:Ba,deleteColumn:Va,deleteRecords:Ya,forceDeleteRecords:Qa,deleteTable:Ja,exportTableData:Za,executeQuery:Tr,getTableColumns:Me,getTablesList:gr,getTableSchema:Nr,getTableData:wr,updateRecords:Lr},mysql:{addRecord:qo,bulkInsertRecords:vo,createTable:Uo,getDatabasesList:Ho,getCurrentDatabase:Bo,getDatabaseConnectionInfo:jo,deleteColumn:Wo,deleteRecords:Qo,forceDeleteRecords:zo,deleteTable:Xo,exportTableData:er,executeQuery:ar,getTableColumns:te,getTablesList:rr,getTableSchema:ir,getTableData:dr,updateRecords:br},mssql:{addRecord:to,bulkInsertRecords:oo,createTable:no,getDatabasesList:io,getCurrentDatabase:lo,getDatabaseConnectionInfo:co,deleteColumn:po,deleteRecords:bo,forceDeleteRecords:yo,deleteTable:ho,exportTableData:Co,executeQuery:Ao,getTableColumns:ee,getTablesList:_o,getTableSchema:Lo,getTableData:Mo,updateRecords:Po}}});import{Hono as Di}from"hono";var Mr,Or=d(()=>{"use strict";ge();h();Mr=new Di().basePath("/databases").get("/",async a=>{let e=xe(),o=await O(e).getDatabasesList();return a.json({data:{databases:o,dbType:e}},200)}).get("/current",async a=>{let e=xe(),o=await O(e).getCurrentDatabase();return a.json({data:{db:o.db,dbType:e}},200)}).get("/connection",async a=>{let e=xe(),o=await O(e).getDatabaseConnectionInfo();return a.json({data:o},200)})});import{zValidator as Pr}from"@hono/zod-validator";import{Hono as Li}from"hono";var Ir,qr=d(()=>{"use strict";J();ge();Ir=new Li().basePath("/query").post("/",Pr("query",A),Pr("json",ma),async a=>{let{query:e}=a.req.valid("json"),{db:t}=a.req.valid("query"),o=a.get("dbType"),n=await O(o).executeQuery({query:e,db:t});return a.json({data:n},200)})});import{zValidator as X}from"@hono/zod-validator";import{Hono as xi}from"hono";var $r,vr=d(()=>{"use strict";J();ge();$r=new xi().basePath("/records").post("/",X("query",A),X("json",vt),async a=>{let{db:e}=a.req.valid("query"),{tableName:t,data:o}=a.req.valid("json"),r=a.get("dbType"),n=O(r),{insertedCount:l}=await n.addRecord({db:e,params:{tableName:t,data:o}});return a.json({data:`Record inserted into "${t}" with ${l} rows inserted`},200)}).patch("/",X("query",A),X("json",Na),async a=>{let{db:e}=a.req.valid("query"),{tableName:t,primaryKey:o,updates:r}=a.req.valid("json"),n=a.get("dbType"),l=O(n),{updatedCount:i}=await l.updateRecords({params:{tableName:t,primaryKey:o,updates:r},db:e});return a.json({data:`Updated ${i} records in "${t}"`},200)}).delete("/",X("query",A),X("json",Ge),async a=>{let{db:e}=a.req.valid("query"),{tableName:t,primaryKeys:o}=a.req.valid("json"),r=a.get("dbType"),n=O(r),{deletedCount:l,fkViolation:i,relatedRecords:s}=await n.deleteRecords({tableName:t,primaryKeys:o,db:e});return i?a.json({data:{deletedCount:0,fkViolation:!0,relatedRecords:s}},409):a.json({data:{deletedCount:l,fkViolation:!1,relatedRecords:[]}},200)}).delete("/force",X("query",A),X("json",Ge),async a=>{let{db:e}=a.req.valid("query"),{tableName:t,primaryKeys:o}=a.req.valid("json"),r=a.get("dbType"),l=await O(r).forceDeleteRecords({tableName:t,primaryKeys:o,db:e});return a.json({data:l},200)}).post("/bulk",X("query",A),X("json",Bt),async a=>{let{db:e}=a.req.valid("query"),{tableName:t,records:o}=a.req.valid("json"),r=a.get("dbType"),l=await O(r).bulkInsertRecords({tableName:t,records:o,db:e});return a.json({data:l},200)})});import{HTTPException as kr}from"hono/http-exception";async function Ur(a){let{tableName:e,columnName:t,columnType:o,defaultValue:r,isPrimaryKey:n,isNullable:l,isUnique:i,isIdentity:s,isArray:c,db:m}=a,p=N(m),u=`
672
+ `,d=await r.query(u,p);if(d.rowCount===0)throw new et(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 et?c:new et(500,{message:`Failed to update records in "${o}"`})}}var Nr=f(()=>{"use strict";h()});function P(t){return t==="mongodb"?Ar.mongodb:Ar[t]}var Ar,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();Nn();wn();_n();xn();On();In();vn();Bn();Kn();Wn();zn();Jn();Me();Zn();or();cr();mr();pr();gt();fr();yr();Sr();Nr();Ar={pg:{addRecord:da,bulkInsertRecords:ba,createTable:ga,getDatabasesList:Ea,getCurrentDatabase:ha,getDatabaseConnectionInfo:Ca,deleteColumn:Na,deleteRecords:wa,forceDeleteRecords:Da,deleteTable:xa,exportTableData:Oa,executeQuery:ur,getTableColumns:Ve,getTablesList:dr,getTableSchema:br,getTableData:Cr,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:je,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:Rn,getTableData:An,updateRecords:Dn}}});import{Hono as vc}from"hono";var wr,Dr=f(()=>{"use strict";xe();h();wr=new vc().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 _r}from"@hono/zod-validator";import{Hono as Uc}from"hono";var Mr,xr=f(()=>{"use strict";X();xe();Mr=new Uc().basePath("/query").post("/",_r("query",w),_r("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 Fc}from"hono";var Lr,Or=f(()=>{"use strict";X();xe();Lr=new Fc().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",lt),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",lt),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 Pr}from"hono/http-exception";async function Ir(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=`
614
673
  SELECT EXISTS (
615
674
  SELECT 1 FROM information_schema.tables
616
675
  WHERE table_name = $1 AND table_schema = 'public'
617
676
  ) as exists;
618
- `,{rows:E}=await p.query(u,[e]);if(!E[0]?.exists)throw new kr(404,{message:`Table "${e}" does not exist`});let T=`
677
+ `,{rows:d}=await p.query(u,[e]);if(!d[0]?.exists)throw new Pr(404,{message:`Table "${e}" does not exist`});let g=`
619
678
  SELECT EXISTS (
620
679
  SELECT 1 FROM information_schema.columns
621
680
  WHERE table_name = $1 AND column_name = $2 AND table_schema = 'public'
622
681
  ) as exists;
623
- `,{rows:y}=await p.query(T,[e,t]);if(y[0]?.exists)throw new kr(409,{message:`Column "${t}" already exists in table "${e}"`});let b=`"${t}" ${o}`;c&&(b+="[]"),n&&(b+=" PRIMARY KEY"),i&&!n&&(b+=" UNIQUE"),l||(b+=" NOT NULL"),s&&(b+=" GENERATED ALWAYS AS IDENTITY"),r?.trim()&&!s&&(b+=` DEFAULT ${r.trim()}`),await p.query(`ALTER TABLE "${e}" ADD COLUMN ${b}`)}var Fr=d(()=>{"use strict";h()});import{HTTPException as Hr}from"hono/http-exception";async function Br(a){let{tableName:e,columnName:t,columnType:o,isNullable:r,defaultValue:n,db:l}=a,i=N(l),s=`
682
+ `,{rows:y}=await p.query(g,[e,o]);if(y[0]?.exists)throw new Pr(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 $r=f(()=>{"use strict";h()});import{HTTPException as qr}from"hono/http-exception";async function kr(t){let{tableName:e,columnName:o,columnType:a,isNullable:n,defaultValue:r,db:s}=t,c=C(s),i=`
624
683
  SELECT EXISTS (
625
684
  SELECT 1 FROM information_schema.tables
626
685
  WHERE table_name = $1 AND table_schema = 'public'
627
686
  ) as exists;
628
- `,{rows:c}=await i.query(s,[e]);if(!c[0]?.exists)throw new Hr(404,{message:`Table "${e}" does not exist`});let m=`
687
+ `,{rows:l}=await c.query(i,[e]);if(!l[0]?.exists)throw new qr(404,{message:`Table "${e}" does not exist`});let m=`
629
688
  SELECT EXISTS (
630
689
  SELECT 1 FROM information_schema.columns
631
690
  WHERE table_name = $1 AND column_name = $2 AND table_schema = 'public'
632
691
  ) as exists;
633
- `,{rows:p}=await i.query(m,[e,t]);if(!p[0]?.exists)throw new Hr(404,{message:`Column "${t}" does not exist in table "${e}"`});let u=await i.connect();try{await u.query("BEGIN"),await u.query(`ALTER TABLE "${e}" ALTER COLUMN "${t}" TYPE ${o}`),await u.query(`ALTER TABLE "${e}" ALTER COLUMN "${t}" ${r?"DROP":"SET"} NOT NULL`),n?.trim()?await u.query(`ALTER TABLE "${e}" ALTER COLUMN "${t}" SET DEFAULT ${n.trim()}`):await u.query(`ALTER TABLE "${e}" ALTER COLUMN "${t}" DROP DEFAULT`),await u.query("COMMIT")}catch(E){throw await u.query("ROLLBACK"),E}finally{u.release()}}var jr=d(()=>{"use strict";h()});import{HTTPException as Kr}from"hono/http-exception";async function Vr(a){let{tableName:e,columnName:t,columnType:o,defaultValue:r,isPrimaryKey:n,isNullable:l,isUnique:i,isIdentity:s,isArray:c,db:m}=a,p=C(m),[u]=await p.execute(`SELECT COUNT(*) as cnt
692
+ `,{rows:p}=await c.query(m,[e,o]);if(!p[0]?.exists)throw new qr(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 vr=f(()=>{"use strict";h()});import{HTTPException as Ur}from"hono/http-exception";async function Fr({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 Ur(404,{message:`Collection "${t}" does not exist`});if(await s.collection(t).findOne({[e]:{$exists:!0}}))throw new Ur(409,{message:`Field "${e}" already exists in collection "${t}"`});let l=Bc(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 Bc,Br=f(()=>{"use strict";h();Bc=(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 Hr({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 jr({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 Kr=f(()=>{"use strict";h()});import{HTTPException as Vr}from"hono/http-exception";async function Qr(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
634
693
  FROM information_schema.TABLES
635
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(u[0]?.cnt??0)>0))throw new Kr(404,{message:`Table "${e}" does not exist`});let[T]=await p.execute(`SELECT COUNT(*) as cnt
694
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(u[0]?.cnt??0)>0))throw new Vr(404,{message:`Table "${e}" does not exist`});let[g]=await p.execute(`SELECT COUNT(*) as cnt
636
695
  FROM information_schema.COLUMNS
637
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,t]);if(Number(T[0]?.cnt??0)>0)throw new Kr(409,{message:`Column "${t}" already exists in table "${e}"`});let b=pe({columnName:t,columnType:o,defaultValue:r,isPrimaryKey:n,isNullable:l,isUnique:i,isIdentity:s,isArray:c},{includePrimaryKey:!0,includeUnique:!0});await p.execute(`ALTER TABLE \`${e}\` ADD COLUMN ${b}`)}var Wr=d(()=>{"use strict";h();ve()});import{HTTPException as Yr}from"hono/http-exception";async function Qr(a){let{tableName:e,columnName:t,columnType:o,isNullable:r,defaultValue:n,db:l}=a,i=C(l),[s]=await i.execute(`SELECT COUNT(*) as cnt
696
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,o]);if(Number(g[0]?.cnt??0)>0)throw new Vr(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 Wr=f(()=>{"use strict";h();Ge()});import{HTTPException as Yr}from"hono/http-exception";async function zr(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
638
697
  FROM information_schema.TABLES
639
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(s[0]?.cnt??0)>0))throw new Yr(404,{message:`Table "${e}" does not exist`});let[m]=await i.execute(`SELECT EXTRA
698
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(i[0]?.cnt??0)>0))throw new Yr(404,{message:`Table "${e}" does not exist`});let[m]=await c.execute(`SELECT EXTRA
640
699
  FROM information_schema.COLUMNS
641
700
  WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?
642
- LIMIT 1`,[e,t]),p=m[0];if(!p)throw new Yr(404,{message:`Column "${t}" does not exist in table "${e}"`});let u=pe({columnName:t,columnType:o,defaultValue:n,isNullable:r},{preserveAutoIncrement:p.EXTRA?.toLowerCase().includes("auto_increment")});await i.execute(`ALTER TABLE \`${e}\` MODIFY COLUMN ${u}`)}var zr=d(()=>{"use strict";h();ve()});import{HTTPException as pt}from"hono/http-exception";async function Gr(a){let{tableName:e,columnName:t,newColumnName:o,db:r}=a,n=C(r),[l]=await n.execute(`SELECT COUNT(*) as cnt
701
+ LIMIT 1`,[e,o]),p=m[0];if(!p)throw new Yr(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 Gr=f(()=>{"use strict";h();Ge()});import{HTTPException as Mt}from"hono/http-exception";async function Jr(t){let{tableName:e,columnName:o,newColumnName:a,db:n}=t,r=S(n),[s]=await r.execute(`SELECT COUNT(*) as cnt
643
702
  FROM information_schema.TABLES
644
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(l[0]?.cnt??0)>0))throw new pt(404,{message:`Table "${e}" does not exist`});let[s]=await n.execute(`SELECT COUNT(*) as cnt
703
+ 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
645
704
  FROM information_schema.COLUMNS
646
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,t]);if(!(Number(s[0]?.cnt??0)>0))throw new pt(404,{message:`Column "${t}" does not exist in table "${e}"`});let[m]=await n.execute(`SELECT COUNT(*) as cnt
705
+ 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
647
706
  FROM information_schema.COLUMNS
648
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,o]);if(Number(m[0]?.cnt??0)>0)throw new pt(409,{message:`Column "${o}" already exists in table "${e}"`});await n.execute(`ALTER TABLE \`${e}\` RENAME COLUMN \`${t}\` TO \`${o}\``)}var Jr=d(()=>{"use strict";h()});import{HTTPException as dt}from"hono/http-exception";async function Xr(a){let{tableName:e,columnName:t,newColumnName:o,db:r}=a,n=N(r),l=`
707
+ 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 Xr=f(()=>{"use strict";h()});import{HTTPException as xt}from"hono/http-exception";async function Zr(t){let{tableName:e,columnName:o,newColumnName:a,db:n}=t,r=C(n),s=`
649
708
  SELECT EXISTS (
650
709
  SELECT 1 FROM information_schema.tables
651
710
  WHERE table_name = $1 AND table_schema = 'public'
652
711
  ) as exists;
653
- `,{rows:i}=await n.query(l,[e]);if(!i[0]?.exists)throw new dt(404,{message:`Table "${e}" does not exist`});let s=`
712
+ `,{rows:c}=await r.query(s,[e]);if(!c[0]?.exists)throw new xt(404,{message:`Table "${e}" does not exist`});let i=`
654
713
  SELECT EXISTS (
655
714
  SELECT 1 FROM information_schema.columns
656
715
  WHERE table_name = $1 AND column_name = $2 AND table_schema = 'public'
657
716
  ) as exists;
658
- `,{rows:c}=await n.query(s,[e,t]);if(!c[0]?.exists)throw new dt(404,{message:`Column "${t}" does not exist in table "${e}"`});let{rows:m}=await n.query(s,[e,o]);if(m[0]?.exists)throw new dt(409,{message:`Column "${o}" already exists in table "${e}"`});await n.query(`ALTER TABLE "${e}" RENAME COLUMN "${t}" TO "${o}"`)}var Zr=d(()=>{"use strict";h()});import{utils as he,write as Mi}from"xlsx";function en({cols:a,rows:e,format:t,tableName:o}){switch(t){case"json":{let r=JSON.stringify(e??[],null,2);return new Uint8Array(Buffer.from(r,"utf-8"))}case"csv":{let r=[a,...e?.map(i=>a?.map(s=>i[s]))??[]],n=he.aoa_to_sheet(r),l=he.sheet_to_csv(n);return new Uint8Array(Buffer.from(l,"utf-8"))}case"xlsx":{let r=[a,...e?.map(s=>a?.map(c=>s[c]))??[]],n=he.aoa_to_sheet(r),l=he.book_new();he.book_append_sheet(l,n,o.slice(0,31));let i=Mi(l,{bookType:"xlsx",type:"buffer"});return new Uint8Array(i)}}}var tn=d(()=>{"use strict"});import{zValidator as x}from"@hono/zod-validator";import{Hono as Oi}from"hono";var an,on=d(()=>{"use strict";J();Fr();jr();ge();Wr();zr();Jr();Zr();tn();an=new Oi().basePath("/tables").get("/",x("query",A),async a=>{let{db:e}=a.req.valid("query"),t=a.get("dbType"),r=await O(t).getTablesList(e);return a.json({data:r},200)}).post("/",x("query",A),x("json",ta),async a=>{let{db:e}=a.req.valid("query"),t=a.req.valid("json"),o=a.get("dbType");return await O(o).createTable({tableData:t,db:e}),a.json({data:`Table ${t.tableName} created successfully`},200)}).delete("/:tableName",x("query",ia),x("param",Z),async a=>{let{db:e,cascade:t}=a.req.valid("query"),{tableName:o}=a.req.valid("param"),r=a.get("dbType"),l=await O(r).deleteTable({tableName:o,db:e,cascade:t});return a.json({data:l},200)}).delete("/:tableName/columns/:columnName",x("query",Ut),x("param",j),async a=>{let{db:e,cascade:t}=a.req.valid("query"),{tableName:o,columnName:r}=a.req.valid("param"),n=a.get("dbType"),l=O(n),{deletedCount:i}=await l.deleteColumn({tableName:o,columnName:r,cascade:t,db:e});return a.json({data:`Column "${r}" deleted successfully from table "${o}" with ${i} rows deleted`},200)}).post("/:tableName/columns",x("query",A),x("param",Z),x("json",z),async a=>{let{db:e}=a.req.valid("query"),{tableName:t}=a.req.valid("param"),o=a.req.valid("json");return a.get("dbType")==="mysql"?await Vr({tableName:t,db:e,...o}):await Ur({tableName:t,db:e,...o}),a.json({data:`Column "${o.columnName}" added successfully to table "${t}"`},200)}).patch("/:tableName/columns/:columnName/rename",x("query",A),x("param",j),x("json",Xe),async a=>{let{db:e}=a.req.valid("query"),{tableName:t,columnName:o}=a.req.valid("param"),r=a.req.valid("json");return a.get("dbType")==="mysql"?await Gr({tableName:t,columnName:o,db:e,...r}):await Xr({tableName:t,columnName:o,db:e,...r}),a.json({data:`Column "${o}" renamed to "${r.newColumnName}" in table "${t}"`},200)}).patch("/:tableName/columns/:columnName",x("query",A),x("param",j),x("json",ye),async a=>{let{db:e}=a.req.valid("query"),{tableName:t,columnName:o}=a.req.valid("param"),r=a.req.valid("json");return a.get("dbType")==="mysql"?await Qr({tableName:t,columnName:o,db:e,...r}):await Br({tableName:t,columnName:o,db:e,...r}),a.json({data:`Column "${o}" updated successfully in table "${t}"`},200)}).get("/:tableName/columns",x("query",A),x("param",Z),async a=>{let{db:e}=a.req.valid("query"),{tableName:t}=a.req.valid("param"),o=a.get("dbType"),n=await O(o).getTableColumns({tableName:t,db:e});return a.json({data:n},200)}).get("/:tableName/schema",x("query",A),x("param",Z),async a=>{let{db:e}=a.req.valid("query"),{tableName:t}=a.req.valid("param"),o=a.get("dbType"),n=await O(o).getTableSchema({tableName:t,db:e});return a.json({data:{schema:n}},200)}).get("/:tableName/data",x("param",Z),x("query",ya),async a=>{let{tableName:e}=a.req.valid("param"),{cursor:t,limit:o,direction:r,sort:n,order:l,filters:i,db:s}=a.req.valid("query"),c=a.get("dbType"),p=await O(c).getTableData({tableName:e,cursor:t,limit:o,direction:r,sort:n,order:l,filters:i,db:s});return a.json({data:p},200)}).get("/:tableName/export",x("param",Z),x("query",pa),async a=>{let{tableName:e}=a.req.valid("param"),{db:t,format:o}=a.req.valid("query"),r=a.get("dbType"),n=O(r),{cols:l,rows:i}=await n.exportTableData({tableName:e,db:t}),s=en({cols:l,rows:i,format:o,tableName:e}),c;switch(o){case"csv":c="text/csv";break;case"xlsx":c="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";break;case"json":c="application/json";break}return new Response(s,{headers:{"Content-Type":c??"","Content-Disposition":`attachment; filename="${e}_export.${o}"`}})})});var rn={};ln(rn,{createServer:()=>Ui});import Ke from"path";import{fileURLToPath as Pi}from"url";import{serveStatic as Be}from"@hono/node-server/serve-static";import{zValidator as Ii}from"@hono/zod-validator";import{Hono as qi}from"hono";import{cors as $i}from"hono/cors";import{logger as vi}from"hono/logger";import{prettyJSON as ki}from"hono/pretty-json";var je,Ui,nn=d(()=>{"use strict";J();Sa();Pa();Or();qr();vr();on();je=()=>{if(process.env.NODE_ENV==="development")return Ke.resolve(process.cwd(),"../core/dist");let a=Ke.dirname(Pi(import.meta.url));return Ke.resolve(a,"./core-dist")},Ui=()=>({app:new qi({strict:!1}).use("/*",$i()).use(ki({space:2})).use(process.env.NODE_ENV==="development"?vi():(e,t)=>t()).use("/favicon.ico",Be({path:Ke.resolve(je(),"favicon.ico")})).use("*",async(e,t)=>{e.header("Access-Control-Allow-Origin","*"),e.header("Access-Control-Allow-Methods","GET, POST, PUT, DELETE, OPTIONS"),e.header("Access-Control-Allow-Headers","Content-Type"),await t()}).onError(Ra).route("/",Mr).use("/assets/*",Be({root:je()})).use("/image.png",Be({root:je()})).use("/:dbType/*",Ii("param",qt,Aa)).use("/:dbType/*",async(e,t)=>{let o=e.req.param("dbType");e.set("dbType",o),await t()}).route("/:dbType",an).route("/:dbType",$r).route("/:dbType",Ir).route("/:dbType",Oa).use("/*",Be({root:je()}))})});Ce();import{intro as Fi,outro as Hi}from"@clack/prompts";import{serve as Bi}from"@hono/node-server";import ft from"picocolors";import{program as Rt}from"commander";var At=()=>(Rt.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),Rt.opts());import{readFile as cn}from"fs/promises";import{resolve as mn}from"path";import{cancel as Re,isCancel as We,note as St,select as un,spinner as pn,text as _t}from"@clack/prompts";import{parse as dn}from"dotenv";import Ye from"picocolors";var wt=async(a,e)=>{let t=e||"DATABASE_URL";if(a?.[t])return a[t];if(process.env[t])return process.env[t];let o=pn();o.start("Looking for database connection..."),a?St(Ye.red(`${t} not found in .env or process.env`)):St(Ye.red(`No .env file found and ${t} not set in process.env`));let r=await un({message:`How do you want to provide ${t}?`,options:[{value:"manual",label:"Enter connection string manually"},{value:"other-env",label:"Use different .env file"},{value:"cancel",label:"Cancel / Exit"}],initialValue:"manual"});if((We(r)||r==="cancel")&&(Re("No database connection provided. Exiting..."),process.exit(0)),r==="other-env"){o.start("Waiting for path...");let l=await _t({message:"Enter path to .env file",placeholder:"~/projects/myapp/.env.local or ./special.env",validate(s){if(!s?.trim())return"Path is required"}});We(l)&&(Re("Cancelled."),process.exit(0)),o.stop("Trying custom .env...");let i=mn(l);try{let s=await cn(i,"utf-8"),c=dn(s);if(c[t])return c[t];throw new Error(`${t} still missing in custom file`)}catch(s){let c=s;Re(`Cannot read or parse file: ${Ye.dim(c.message)}`),process.exit(1)}}o.stop("Manual input...");let n=await _t({message:`Paste your ${t}`,placeholder:"postgresql://user:password@localhost:5432/mydb",validate(l){if(!l?.trim())return"Connection string is required!";try{new URL(l);return}catch{return"Must be a valid URL format"}}});return We(n)&&(Re("Cancelled."),process.exit(0)),n.trim()};import{access as fn,readFile as bn}from"fs/promises";import{dirname as yn,resolve as Qe}from"path";import{parse as Tn}from"dotenv";var En=async a=>{let e=Qe(a);for(;;){let t=Qe(e,".env");try{return await fn(t),t}catch{}let o=yn(e);if(o===e)return null;e=o}},re=async a=>{let e;if(a?e=Qe(a):e=await En(process.cwd()),!e)return null;try{let t=await bn(e,"utf-8");return Tn(t)}catch(t){if(t instanceof Error&&t.message.includes("ENOENT"))return null;throw t}};Ve();import{intro as gn,outro as hn}from"@clack/prompts";import Dt from"picocolors";var Lt=()=>{gn(Dt.inverse(" db-studio ")),hn(Dt.green(`For more information, visit: ${Nt.SITE_DOCS_LINK}`))};Ce();import{intro as Nn,note as Cn,outro as xt}from"@clack/prompts";import Ae from"picocolors";var Mt=async(a,e,t)=>{Nn(Ae.inverse(" db-studio "));let o=t||ae.VAR_NAME,r=null;if(e)r=e;else{let n=a?await re(a):await re();n?.[o]?r=n[o]:process.env[o]&&(r=process.env[o]??null)}r?xt(Ae.green(`\u2713 Database connection configured (using ${o})`)):(Cn(Ae.red(`\u2717 ${o} not found`),"Status"),xt(Ae.yellow("\u26A0 No database connection configured")))};import{intro as An,outro as Sn}from"@clack/prompts";import Pt from"picocolors";var Ot={name:"db-studio",type:"module",version:"1.6.2",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",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 It=()=>{An(Pt.inverse(" db-studio ")),Sn(Pt.green(`\u{1F680} db-studio v${Ot.version}`))};var ji=async()=>{let{env:a,port:e,databaseUrl:t,varName:o,status:r,help:n,version:l}=At();n&&(Lt(),process.exit(0)),l&&(It(),process.exit(0)),r&&(await Mt(a,t,o),process.exit(0)),Fi(ft.inverse(" db-studio "));let i=e?parseInt(e,10):ae.PORT,s=o||ae.VAR_NAME,c=a?await re(a):await re(),m=t||await wt(c,s);process.env.DATABASE_URL=m;let{createServer:p}=await Promise.resolve().then(()=>(nn(),rn)),{app:u}=p();Bi({fetch:u.fetch,port:i}),Hi(ft.green(`Server running at ${ft.cyan(`http://localhost:${i}`)}`))};ji().catch(a=>{process.exit(1)});export{ji as main};
717
+ `,{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 es=f(()=>{"use strict";h()});import{utils as Le,write as Hc}from"xlsx";function ts({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=Hc(s,{bookType:"xlsx",type:"buffer"});return new Uint8Array(c)}}}var os=f(()=>{"use strict"});import{zValidator as L}from"@hono/zod-validator";import{Hono as jc}from"hono";var as,ns=f(()=>{"use strict";X();$r();vr();xe();Br();Kr();Wr();Gr();Xr();es();os();as=new jc().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 Qr({tableName:o,db:e,...a}):n==="mongodb"?await Fr({tableName:o,db:e,...a}):await Ir({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",ut),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 Jr({tableName:o,columnName:a,db:e,...n}):r==="mongodb"?await Hr({tableName:o,columnName:a,db:e,...n}):await Zr({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 zr({tableName:o,columnName:a,db:e,...n}):r==="mongodb"?await jr({tableName:o,columnName:a,db:e,...n}):await kr({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=ts({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 rs={};Pt(rs,{createServer:()=>Gc});import at from"path";import{fileURLToPath as Kc}from"url";import{serveStatic as tt}from"@hono/node-server/serve-static";import{zValidator as Vc}from"@hono/zod-validator";import{Hono as Qc}from"hono";import{cors as Wc}from"hono/cors";import{logger as Yc}from"hono/logger";import{prettyJSON as zc}from"hono/pretty-json";var ot,Gc,ss=f(()=>{"use strict";X();Ko();pa();Dr();xr();Or();ns();ot=()=>{if(process.env.NODE_ENV==="development")return at.resolve(process.cwd(),"../core/dist");let t=at.dirname(Kc(import.meta.url));return at.resolve(t,"./core-dist")},Gc=()=>({app:new Qc({strict:!1}).use("/*",Wc()).use(zc({space:2})).use(process.env.NODE_ENV==="development"?Yc():(e,o)=>o()).use("/favicon.ico",tt({path:at.resolve(ot(),"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("/",wr).use("/assets/*",tt({root:ot()})).use("/image.png",tt({root:ot()})).use("/:dbType/*",Vc("param",Zt,jo)).use("/:dbType/*",async(e,o)=>{let a=e.req.param("dbType");e.set("dbType",a),await o()}).route("/:dbType",as).route("/:dbType",Lr).route("/:dbType",Mr).route("/:dbType",ua).use("/*",tt({root:ot()}))})});Pe();import{intro as Jc,outro as Xc}from"@clack/prompts";import{serve as Zc}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 cs}from"fs/promises";import{resolve as ls}from"path";import{cancel as Ie,isCancel as rt,note as jt,select as ms,spinner as us,text as Kt}from"@clack/prompts";import{parse as ps}from"dotenv";import st 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=us();a.start("Looking for database connection..."),t?jt(st.red(`${o} not found in .env or process.env`)):jt(st.red(`No .env file found and ${o} not set in process.env`));let n=await ms({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((rt(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"}});rt(s)&&(Ie("Cancelled."),process.exit(0)),a.stop("Trying custom .env...");let c=ls(s);try{let i=await cs(c,"utf-8"),l=ps(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: ${st.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 rt(r)&&(Ie("Cancelled."),process.exit(0)),r.trim()};import{access as ds,readFile as fs}from"fs/promises";import{dirname as bs,resolve as it}from"path";import{parse as ys}from"dotenv";var gs=async t=>{let e=it(t);for(;;){let o=it(e,".env");try{return await ds(o),o}catch{}let a=bs(e);if(a===e)return null;e=a}},ue=async t=>{let e;if(t?e=it(t):e=await gs(process.cwd()),!e)return null;try{let o=await fs(e,"utf-8");return ys(o)}catch(o){if(o instanceof Error&&o.message.includes("ENOENT"))return null;throw o}};nt();import{intro as Ts,outro as Es}from"@clack/prompts";import Qt from"picocolors";var Wt=()=>{Ts(Qt.inverse(" db-studio ")),Es(Qt.green(`For more information, visit: ${Ut.SITE_DOCS_LINK}`))};Pe();import{intro as hs,note as Cs,outro as Yt}from"@clack/prompts";import $e from"picocolors";var zt=async(t,e,o)=>{hs($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})`)):(Cs($e.red(`\u2717 ${a} not found`),"Status"),Yt($e.yellow("\u26A0 No database connection configured")))};import{intro as Rs,outro as Ns}from"@clack/prompts";import Jt from"picocolors";var Gt={name:"db-studio",type:"module",version:"1.7.0",description:"Modern database client for PostgreSQL with spreadsheet-like grid, AI-powered SQL assistance, ER diagrams, fast data browsing and editing. CLI tool, upcoming desktop & web versions.",keywords:["database 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=()=>{Rs(Jt.inverse(" db-studio ")),Ns(Jt.green(`\u{1F680} db-studio v${Gt.version}`))};var el=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)),Jc(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(()=>(ss(),rs)),{app:u}=p();Zc({fetch:u.fetch,port:c}),Xc(Lt.green(`Server running at ${Lt.cyan(`http://localhost:${c}`)}`))};el().catch(t=>{process.exit(1)});export{el as main};
659
718
  //# sourceMappingURL=index.js.map