db-studio 1.7.9 → 1.7.10

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 ls=Object.defineProperty;var f=(t,e)=>()=>(t&&(e=t(t=0)),e);var Pt=(t,e)=>{for(var o in e)ls(t,o,{get:e[o],enumerable:!0})};var It=f(()=>{"use strict"});var $t=f(()=>{"use strict"});var qt=f(()=>{"use strict"});var kt,oe,vt=f(()=>{"use strict";kt=globalThis.process?.env?.NODE_ENV,oe={PORT:3333,ENV:".env",VAR_NAME:"DATABASE_URL",BASE_URL:"http://localhost:3333",IS_DEV:kt==="development",PROXY_URL:kt==="development"?"http://localhost:8787":"https://db-studio-proxy.husamql3.workers.dev"}});var Ut=f(()=>{"use strict"});var Ft,rt=f(()=>{"use strict";Ft={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 Bt=f(()=>{"use strict"});var Pe=f(()=>{"use strict";It();$t();qt();vt();Ut();rt();Bt()});import{z as de}from"zod";var w,Ds,qe,Ql,eo,te,Q=f(()=>{"use strict";w=de.object({db:de.string("Database name is required")}),Ds=["pg","mysql","mssql","mongodb"],qe=de.enum(Ds,{message:"Invalid database type"}),Ql=w.extend({dbType:qe}),eo=de.object({dbType:qe}),te=de.object({tableName:de.string("Table name is required")})});import{z as G}from"zod";var J,Gl,to=f(()=>{"use strict";Q();J=G.object({columnName:G.string("Column name is required"),columnType:G.string("Column type is required"),defaultValue:G.string().optional(),isPrimaryKey:G.boolean().default(!1),isNullable:G.boolean().default(!1),isUnique:G.boolean().default(!1),isIdentity:G.boolean().default(!1),isArray:G.boolean().default(!1)}),Gl=G.object({db:w.shape.db,tableName:te.shape.tableName,columnName:J.shape.columnName,columnType:J.shape.columnType,defaultValue:J.shape.defaultValue,isPrimaryKey:J.shape.isPrimaryKey,isNullable:J.shape.isNullable,isUnique:J.shape.isUnique,isIdentity:J.shape.isIdentity,isArray:J.shape.isArray})});import{z as Ne}from"zod";var oo,ao=f(()=>{"use strict";oo=Ne.object({tableName:Ne.string("Table name is required"),data:Ne.record(Ne.string("Column name is required"),Ne.any())})});import{z as W}from"zod";var no,K,om,am,ke=f(()=>{"use strict";Q();no=w.extend({cascade:W.string().optional().transform(t=>t==="true")}),K=W.object({tableName:W.string("Table name is required"),columnName:W.string("Column name is required")}),om=W.object({db:w.shape.db,tableName:K.shape.tableName,columnName:K.shape.columnName,cascade:W.boolean().optional()}),am=W.object({message:W.string("Message is required"),tableName:W.string("Table name is required"),columnName:W.string("Column name is required"),deletedCount:W.number("Deleted count is required").default(0)})});import{z as Re}from"zod";var Ae,cm,ro=f(()=>{"use strict";Q();ke();Ae=Re.object({columnType:Re.string("Column type is required"),isNullable:Re.boolean(),defaultValue:Re.string().nullable().optional()}),cm=Re.object({db:w.shape.db,tableName:K.shape.tableName,columnName:K.shape.columnName,columnType:Ae.shape.columnType,isNullable:Ae.shape.isNullable,defaultValue:Ae.shape.defaultValue})});var so=f(()=>{"use strict"});import{z as fe}from"zod";var io,co=f(()=>{"use strict";io=fe.object({tableName:fe.string().min(1,"Table name is required"),records:fe.array(fe.record(fe.string(),fe.any())).min(1,"At least one record is required")})});import{z as Y}from"zod";var _s,lo,mo=f(()=>{"use strict";Q();_s=Y.object({type:Y.string(),content:Y.string().optional()}).passthrough(),lo=Y.object({messages:Y.array(Y.object({id:Y.string(),role:Y.enum(["user","assistant","system","tool"]),parts:Y.array(_s)}).passthrough()),data:Y.object({conversationId:Y.string().optional(),db:w.shape.db})})});var uo=f(()=>{"use strict"});import{z as V}from"zod";var xs,Ms,I,Ls,Os,ym,lt=f(()=>{"use strict";xs=["text","boolean","number","enum","json","date","array"],Ms=V.enum(xs),I={text:"text",boolean:"boolean",number:"number",enum:"enum",json:"json",date:"date",array:"array"},Ls=["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"],Os=V.enum(Ls),ym=V.object({columnName:V.string(),dataType:Ms,dataTypeLabel:Os,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 po(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 fo(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 bo(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 yo(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 go(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 To(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,Eo=f(()=>{"use strict";lt();T={int:"int",bigint:"bigint",smallint:"smallint",numeric:"numeric",float:"float",double:"double",money:"money",tinyint:"tinyint",mediumint:"mediumint",bit:"bit",boolean:"boolean",text:"text",varchar:"varchar",char:"char",tinytext:"tinytext",mediumtext:"mediumtext",longtext:"longtext",json:"json",jsonb:"jsonb",xml:"xml",uuid:"uuid",date:"date",time:"time",timestamp:"timestamp",timestamptz:"timestamptz",interval:"interval",datetime:"datetime",year:"year",bytea:"bytea",inet:"inet",cidr:"cidr",macaddr:"macaddr",macaddr8:"macaddr8",point:"point",line:"line",polygon:"polygon",binary:"binary",varbinary:"varbinary",blob:"blob",tinyblob:"tinyblob",mediumblob:"mediumblob",longblob:"longblob",array:"array",enum:"enum",set:"set"}});import{z as U}from"zod";var Ps,ho,Is,$s,Co,So=f(()=>{"use strict";Ps=["CASCADE","SET NULL","SET DEFAULT","RESTRICT","NO ACTION"],ho=U.enum(Ps),Is=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)}),$s=U.object({columnName:U.string("Column name is required"),referencedTable:U.string("Referenced table is required"),referencedColumn:U.string("Referenced column is required"),onUpdate:ho.default("NO ACTION"),onDelete:ho.default("NO ACTION")}),Co=U.object({tableName:U.string("Table name is required"),fields:U.array(Is).min(1,"At least one field is required"),foreignKeys:U.array($s).optional()})});import{z as B}from"zod";var qs,Rm,No,Ro=f(()=>{"use strict";Q();qs=B.object({name:B.string("Name is required"),size:B.string("Size is required"),owner:B.string("Owner is required"),encoding:B.string("Encoding is required")}),Rm=B.object({databases:B.array(qs),dbType:qe}),No=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 Ao=f(()=>{"use strict"});import{z as be}from"zod";var mt,wo=f(()=>{"use strict";mt=be.object({tableName:be.string("Table name is required"),primaryKeys:be.array(be.object({columnName:be.string("Column name is required"),value:be.any()})).min(1,"At least one primary key is required")})});import{z as ks}from"zod";var Do,_o=f(()=>{"use strict";Q();Do=w.extend({cascade:ks.string().optional().transform(t=>t==="true")})});import{z as xo}from"zod";var Mo,Lo=f(()=>{"use strict";Mo=xo.object({query:xo.string("Query is required")})});import{z as vs}from"zod";var Us,Oo,Po=f(()=>{"use strict";Q();Us=["csv","xlsx","json"],Oo=w.extend({format:vs.enum(Us,{message:"Invalid format. Supported formats: csv, xlsx, json"})})});var Io=f(()=>{"use strict"});import{z as ut}from"zod";var pt,Um,$o=f(()=>{"use strict";Q();ke();pt=ut.object({newColumnName:ut.string("New column name is required")}),Um=ut.object({db:w.shape.db,tableName:K.shape.tableName,columnName:K.shape.columnName,newColumnName:pt.shape.newColumnName})});import{z as x}from"zod";var jm,ve,Km,Fs,Vm,qo,ko=f(()=>{"use strict";Q();jm=x.object({columnName:x.string(),operator:x.string(),value:x.string()}),ve=["asc","desc"],Km=x.object({columnName:x.string(),direction:x.enum(ve)}),Fs=x.object({limit:x.number(),total:x.number(),hasNextPage:x.boolean(),hasPreviousPage:x.boolean(),nextCursor:x.string().nullable(),prevCursor:x.string().nullable()}),Vm=x.object({data:x.array(x.record(x.string(),x.unknown())),meta:Fs}),qo=x.object({db:w.shape.db,cursor:x.string().optional(),limit:x.string().optional().default("50").transform(Number),direction:x.enum(ve).optional().default(ve[0]),sort:x.string().optional().transform(t=>{if(!t)return"";try{let e=JSON.parse(t);return Array.isArray(e)?e:t}catch{return t}}),order:x.enum(ve).optional(),filters:x.string().optional().transform(t=>{if(!t)return[];try{return JSON.parse(t)}catch{return[]}})})});import{z as Ue}from"zod";var Ym,vo=f(()=>{"use strict";Ym=Ue.object({tableName:Ue.string("Table name is required"),schemaName:Ue.string().optional(),rowCount:Ue.coerce.number("Row count is required")})});import{z as Uo}from"zod";var Jm,Fo=f(()=>{"use strict";Jm=Uo.object({schema:Uo.string()})});import{z as X}from"zod";var Bo,Ho=f(()=>{"use strict";Bo=X.object({tableName:X.string("Table name is required"),primaryKey:X.string("Primary key is required").default("id"),updates:X.array(X.object({rowData:X.record(X.string("Column name is required"),X.any()),columnName:X.string("Column name is required"),value:X.any()},{message:"Each update must have a row data, column name, and value."})).min(1,"At least one update is required")})});var Z=f(()=>{"use strict";to();ao();ro();so();co();mo();uo();Eo();lt();So();Q();Ro();Ao();ke();wo();_o();Lo();Po();Io();$o();ko();vo();Fo();Ho()});import{HTTPException as Bs}from"hono/http-exception";import{DatabaseError as Hs}from"pg";import{ZodError as js}from"zod";function jo(t,e){if(t instanceof Bs)return e.json({error:t.message??"Internal server error"},t.status);if(t instanceof js){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 Hs&&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 Ko,Vo=f(()=>{"use strict";Ko=(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 Wo={};Pt(Wo,{coerceObjectId:()=>je,getDbPool:()=>C,getDbType:()=>le,getMongoClient:()=>Fe,getMongoDb:()=>M,getMongoDbName:()=>Be,getMssqlPool:()=>R,getMysqlPool:()=>S,isValidObjectId:()=>He});import{MongoClient as Ks,ObjectId as dt}from"mongodb";import Vs from"mssql";import{createPool as Qs}from"mysql2/promise";import{Pool as Qo}from"pg";var ft,ce,C,S,R,le,Fe,Be,M,He,je,h=f(()=>{"use strict";ft=class{pgPools=new Map;mysqlPools=new Map;mssqlPools=new Map;mongoClient=null;baseConfig=null;constructor(){this.initializeBaseConfig()}detectDbType(e){let o=e.protocol.replace(":","");switch(o){case"postgres":case"postgresql":return"pg";case"mysql":case"mysql2":return"mysql";case"mssql":case"sqlserver":return"mssql";case"mongodb":case"mongodb+srv":return"mongodb";default:throw new Error(`Unsupported database type: ${o}. Supported types: PostgreSQL (postgres://), MySQL (mysql://), SQL Server (mssql://), MongoDB (mongodb://).`)}}initializeBaseConfig(){let e=process.env.DATABASE_URL;if(!e)throw new Error("DATABASE_URL is not set. Please provide a database connection string.");try{let o=new URL(e);this.baseConfig={url:e,host:o.hostname,port:Number.parseInt(o.port,10)||(this.detectDbType(o)==="mysql"?3306:this.detectDbType(o)==="mssql"?1433:5432),user:o.username,password:o.password,dbType:this.detectDbType(o)}}catch(o){throw new Error(o instanceof Error?o.message:String(o))}}getDbType(){if(!this.baseConfig)throw new Error("Base configuration not initialized");return this.baseConfig.dbType}buildConnectionString(e){if(!this.baseConfig)throw new Error("Base configuration not initialized");e||(e=new URL(this.baseConfig.url).pathname.slice(1));try{let o=new URL(this.baseConfig.url);return o.pathname=`/${e}`,o.toString()}catch(o){throw new Error(`Failed to build connection string for database "${e}": ${o instanceof Error?o.message:String(o)}`)}}getPgPool(e){let o=this.buildConnectionString(e);if(!this.pgPools.has(o)){let a={connectionString:o,max:10,idleTimeoutMillis:3e4,connectionTimeoutMillis:2e3},n=new Qo(a);n.on("error",r=>{}),this.pgPools.set(o,n)}return this.pgPools.get(o)??new Qo({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=Qs({host:this.baseConfig.host,port:this.baseConfig.port,user:this.baseConfig.user,password:this.baseConfig.password,database:n||void 0,waitForConnections:!0,connectionLimit:10,idleTimeout:3e4,connectTimeout:2e3,multipleStatements:!1});this.mysqlPools.set(o,r)}return this.mysqlPools.get(o)}async getMssqlPool(e){if(!this.baseConfig)throw new Error("Base configuration not initialized");let o=this.buildConnectionString(e);if(!this.mssqlPools.has(o)){let n=new URL(o).pathname.slice(1),r={server:this.baseConfig.host,port:this.baseConfig.port,user:this.baseConfig.user,password:this.baseConfig.password,database:n||void 0,options:{encrypt:!1,trustServerCertificate:!0,enableArithAbort:!0,connectTimeout:2e3},pool:{max:10,min:0,idleTimeoutMillis:3e4}},i=await new Vs.ConnectionPool(r).connect();i.on("error",c=>{}),this.mssqlPools.set(o,i)}return this.mssqlPools.get(o)}getPool(e){return this.getPgPool(e)}async closePgPool(e){let o=this.pgPools.get(e);o&&(await o.end(),this.pgPools.delete(e))}async closeMysqlPool(e){let o=this.mysqlPools.get(e);o&&(await o.end(),this.mysqlPools.delete(e))}async closeMssqlPool(e){let o=this.mssqlPools.get(e);o&&(await o.close(),this.mssqlPools.delete(e))}async closePool(e){await this.closePgPool(e),await this.closeMysqlPool(e),await this.closeMssqlPool(e)}async closePoolByDatabase(e){let o=this.buildConnectionString(e);await this.closePool(o)}async getMongoClient(){if(!this.mongoClient){if(!this.baseConfig)throw new Error("Base configuration not initialized");let e=new Ks(this.baseConfig.url);try{await e.connect(),this.mongoClient=e}catch(o){try{await e.close()}catch{}throw o}}return this.mongoClient}getMongoDbName(){if(!this.baseConfig)throw new Error("Base configuration not initialized");return new URL(this.baseConfig.url).pathname?.replace(/^\//,"")||"admin"}async getMongoDb(e){return(await this.getMongoClient()).db(e??this.getMongoDbName())}async closeAll(){let e=Array.from(this.pgPools.entries()).map(async([n,r])=>{await r.end()}),o=Array.from(this.mysqlPools.entries()).map(async([n,r])=>{await r.end()}),a=Array.from(this.mssqlPools.entries()).map(async([n,r])=>{await r.close()});await Promise.all([...e,...o,...a]),this.pgPools.clear(),this.mysqlPools.clear(),this.mssqlPools.clear(),this.mongoClient&&(await this.mongoClient.close(),this.mongoClient=null)}getActivePools(){return[...Array.from(this.pgPools.keys()),...Array.from(this.mysqlPools.keys()),...Array.from(this.mssqlPools.keys())]}},ce=new ft,C=t=>ce.getPgPool(t),S=t=>ce.getMysqlPool(t),R=async t=>ce.getMssqlPool(t),le=()=>ce.getDbType(),Fe=()=>ce.getMongoClient(),Be=()=>ce.getMongoDbName(),M=t=>ce.getMongoDb(t),He=t=>typeof t=="string"&&dt.isValid(t),je=t=>typeof t=="string"&&dt.isValid(t)?new dt(t):t});import{HTTPException as Yo}from"hono/http-exception";async function Xo(t){let e=await M(t),o=await e.listCollections().toArray(),a=[];for(let n of o){let r=n.name,i=await e.collection(r).estimatedDocumentCount();a.push({tableName:r,rowCount:i})}return a}async function Ke({tableName:t,db:e}){let n=await(await M(e)).collection(t).find({}).limit(Ys).toArray(),r=n.length,i=new Map,c=(s,l)=>{let m=Gs(l);if(!i.has(s))i.set(s,{types:new Set([m]),nullable:!1,presentCount:1});else{let p=i.get(s);p&&(p.types.add(m),p.presentCount+=1)}};for(let s of n)for(let[l,m]of Object.entries(s)){if(m==null){if(!i.has(l))i.set(l,{types:new Set(["text"]),nullable:!0,presentCount:1});else{let p=i.get(l);p&&(p.nullable=!0),p&&(p.presentCount+=1)}continue}c(l,m)}if(r>0)for(let s of i.values())s.presentCount<r&&(s.nullable=!0);return i.has("_id")||i.set("_id",{types:new Set(["text"]),nullable:!1,presentCount:r}),Array.from(i.entries()).map(([s,l])=>{let m=l.types.values().next().value??"text";return{columnName:s,dataType:m,dataTypeLabel:Js(m),isNullable:l.nullable,columnDefault:null,isPrimaryKey:s==="_id",isForeignKey:!1,referencedTable:null,referencedColumn:null,enumValues:null}})}async function Zo({tableName:t,cursor:e,limit:o,direction:a,sort:n,order:r,filters:i,db:c}){let l=(await M(c)).collection(t),m=Xs(i??[]),p=Jo(n??"",r),u=o&&o>0?o:50,d=zs(e),g=Number.isFinite(d)&&d>=0?d:0,y=a==="desc"?Math.max(g-u,0):g,[b,E]=await Promise.all([l.countDocuments(m),l.find(m).sort(p).skip(y).limit(u).toArray()]),N=E.map(k=>we(k)),A=y+u,q=Math.max(y-u,0);return{data:N,meta:{limit:u,total:b,hasNextPage:A<b,hasPreviousPage:y>0,nextCursor:A<b?zo(A):null,prevCursor:y>0?zo(q):null}}}async function ea({tableName:t,tableData:e,db:o}){let a=await M(o);if((await a.listCollections({name:t}).toArray()).length>0)throw new Yo(400,{message:`Collection "${t}" already exists`});let r=e?.fields??[];if(r.length===0){await a.createCollection(t);return}let i={},c=[];for(let s of r){let l=Ws(s.columnType);if(!Go.has(l))throw new Yo(400,{message:`Unsupported MongoDB BSON type "${s.columnType}" for field "${s.columnName}"`});s.isArray?i[s.columnName]={bsonType:"array",...l!=="array"?{items:{bsonType:l}}:{}}:i[s.columnName]={bsonType:l},s.isNullable||c.push(s.columnName)}await a.createCollection(t,{validator:{$jsonSchema:{bsonType:"object",required:c,properties:i,additionalProperties:!0}},validationAction:"error"})}async function ta({tableName:t,columnName:e,db:o}){return{deletedCount:(await(await M(o)).collection(t).updateMany({},{$unset:{[e]:""}})).modifiedCount}}async function oa({tableName:t,db:e}){let r=(await(await M(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 Go,Ws,Ys,zo,zs,we,Gs,Js,Xs,Jo,ae,aa,me,bt,ye=f(()=>{"use strict";h();Go=new Set(["double","string","object","array","binData","undefined","objectId","bool","date","null","regex","dbPointer","javascript","symbol","javascriptWithScope","int","timestamp","long","decimal","minKey","maxKey"]),Ws=t=>{let e=t.trim();if(Go.has(e))return e;switch(e.toLowerCase()){case"boolean":return"bool";case"objectid":return"objectId";case"binary":return"binData";default:return e}},Ys=200,zo=t=>Buffer.from(JSON.stringify({offset:t})).toString("base64url"),zs=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},Gs=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",Js=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"}},Xs=t=>{if(!t||t.length===0)return{};let e=[],o=n=>n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=n=>{let r=n.trim();if(r==="null")return null;if(r==="true")return!0;if(r==="false")return!1;let i=Number(r);return!Number.isNaN(i)&&r!==""?i:He(r)?je(r):r};for(let n of t){let r=n.columnName,i=a(n.value),c=n.operator.toLowerCase();if(r)switch(c){case"=":e.push({[r]:i});break;case"!=":e.push({[r]:{$ne:i}});break;case">":e.push({[r]:{$gt:i}});break;case">=":e.push({[r]:{$gte:i}});break;case"<":e.push({[r]:{$lt:i}});break;case"<=":e.push({[r]:{$lte:i}});break;case"is":e.push({[r]:i});break;case"is not":e.push({[r]:{$ne:i}});break;case"like":e.push({[r]:{$regex:o(String(i)),$options:""}});break;case"not like":e.push({[r]:{$not:{$regex:o(String(i)),$options:""}}});break;case"ilike":e.push({[r]:{$regex:o(String(i)),$options:"i"}});break;case"not ilike":e.push({[r]:{$not:{$regex:o(String(i)),$options:"i"}}});break;default:e.push({[r]:i});break}}return e.length?{$and:e}:{}},Jo=(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}};ae=we,aa=Jo,me=je,bt=He});async function na(t,e={}){let{includeSampleData:o=!1,maxTables:a}=e,n=await M(t),r=await n.listCollections().toArray(),c=(typeof a=="number"&&a>0?r.slice(0,a):r).map(async l=>{let m=l.name,p=await Ke({tableName:m,db:t}),u={name:m,columns:p.map(Zs)};if(o){let g=(await n.collection(m).find({}).limit(3).toArray()).map(y=>ae(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 Zs,ra=f(()=>{"use strict";h();ye();Zs=t=>({name:t.columnName,type:t.dataTypeLabel,nullable:t.isNullable,isPrimaryKey:t.isPrimaryKey})});import{Pool as ei}from"pg";var Ve,ti,yt,sa=f(()=>{"use strict";Ve=null,ti=()=>{if(!Ve){if(!process.env.DATABASE_URL)throw new Error("DATABASE_URL is not set. Please provide a database connection string.");try{Ve=new ei({connectionString:process.env.DATABASE_URL}),Ve.on("error",t=>{})}catch(t){throw t}}return Ve},yt=new Proxy({},{get(t,e){try{return ti()[e]}catch(o){throw o}}})});import{HTTPException as oi}from"hono/http-exception";async function Qe({tableName:t,db:e}){let o=C(e),a=`
2
+ var hs=Object.defineProperty;var d=(t,e)=>()=>(t&&(e=t(t=0)),e);var Cs=(t,e)=>{for(var o in e)hs(t,o,{get:e[o],enumerable:!0})};var qt=d(()=>{"use strict"});var kt=d(()=>{"use strict"});var vt=d(()=>{"use strict"});var Ut,re,Ft=d(()=>{"use strict";Ut=globalThis.process?.env?.NODE_ENV,re={PORT:3333,ENV:".env",VAR_NAME:"DATABASE_URL",BASE_URL:"http://localhost:3333",IS_DEV:Ut==="development",PROXY_URL:Ut==="development"?"http://localhost:8787":"https://db-studio-proxy.husamql3.workers.dev"}});var Bt=d(()=>{"use strict"});var Ht,st=d(()=>{"use strict";Ht={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 jt=d(()=>{"use strict"});var Oe=d(()=>{"use strict";qt();kt();vt();Ft();Bt();st();jt()});import{z as de}from"zod";var w,Us,$e,ym,oo,ne,W=d(()=>{"use strict";w=de.object({db:de.string("Database name is required")}),Us=["pg","mysql","mssql","mongodb"],$e=de.enum(Us,{message:"Invalid database type"}),ym=w.extend({dbType:$e}),oo=de.object({dbType:$e}),ne=de.object({tableName:de.string("Table name is required")})});import{z as J}from"zod";var X,hm,ao=d(()=>{"use strict";W();X=J.object({columnName:J.string("Column name is required"),columnType:J.string("Column type is required"),defaultValue:J.string().optional(),isPrimaryKey:J.boolean().default(!1),isNullable:J.boolean().default(!1),isUnique:J.boolean().default(!1),isIdentity:J.boolean().default(!1),isArray:J.boolean().default(!1)}),hm=J.object({db:w.shape.db,tableName:ne.shape.tableName,columnName:X.shape.columnName,columnType:X.shape.columnType,defaultValue:X.shape.defaultValue,isPrimaryKey:X.shape.isPrimaryKey,isNullable:X.shape.isNullable,isUnique:X.shape.isUnique,isIdentity:X.shape.isIdentity,isArray:X.shape.isArray})});import{z as Re}from"zod";var no,ro=d(()=>{"use strict";no=Re.object({tableName:Re.string("Table name is required"),data:Re.record(Re.string("Column name is required"),Re.any())})});import{z as Y}from"zod";var so,V,wm,Dm,qe=d(()=>{"use strict";W();so=w.extend({cascade:Y.string().optional().transform(t=>t==="true")}),V=Y.object({tableName:Y.string("Table name is required"),columnName:Y.string("Column name is required")}),wm=Y.object({db:w.shape.db,tableName:V.shape.tableName,columnName:V.shape.columnName,cascade:Y.boolean().optional()}),Dm=Y.object({message:Y.string("Message is required"),tableName:Y.string("Table name is required"),columnName:Y.string("Column name is required"),deletedCount:Y.number("Deleted count is required").default(0)})});import{z as Ne}from"zod";var Ae,Om,io=d(()=>{"use strict";W();qe();Ae=Ne.object({columnType:Ne.string("Column type is required"),isNullable:Ne.boolean(),defaultValue:Ne.string().nullable().optional()}),Om=Ne.object({db:w.shape.db,tableName:V.shape.tableName,columnName:V.shape.columnName,columnType:Ae.shape.columnType,isNullable:Ae.shape.isNullable,defaultValue:Ae.shape.defaultValue})});var co=d(()=>{"use strict"});import{z as fe}from"zod";var lo,mo=d(()=>{"use strict";lo=fe.object({tableName:fe.string().min(1,"Table name is required"),records:fe.array(fe.record(fe.string(),fe.any())).min(1,"At least one record is required")})});import{z}from"zod";var Fs,uo,po=d(()=>{"use strict";W();Fs=z.object({type:z.string(),content:z.string().optional()}).passthrough(),uo=z.object({messages:z.array(z.object({id:z.string(),role:z.enum(["user","assistant","system","tool"]),parts:z.array(Fs)}).passthrough()),data:z.object({conversationId:z.string().optional(),db:w.shape.db})})});var fo=d(()=>{"use strict"});import{z as Q}from"zod";var Bs,Hs,I,js,Ks,Fm,mt=d(()=>{"use strict";Bs=["text","boolean","number","enum","json","date","array"],Hs=Q.enum(Bs),I={text:"text",boolean:"boolean",number:"number",enum:"enum",json:"json",date:"date",array:"array"},js=["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"],Ks=Q.enum(js),Fm=Q.object({columnName:Q.string(),dataType:Hs,dataTypeLabel:Ks,isNullable:Q.boolean(),columnDefault:Q.string().nullable(),isPrimaryKey:Q.boolean(),isForeignKey:Q.boolean(),referencedTable:Q.string().nullable(),referencedColumn:Q.string().nullable(),enumValues:Q.array(Q.string()).nullable()})});function bo(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 yo(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 go(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 To(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 Eo(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 ho(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,Co=d(()=>{"use strict";mt();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 Vs,So,Qs,Ws,Ro,No=d(()=>{"use strict";Vs=["CASCADE","SET NULL","SET DEFAULT","RESTRICT","NO ACTION"],So=U.enum(Vs),Qs=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)}),Ws=U.object({columnName:U.string("Column name is required"),referencedTable:U.string("Referenced table is required"),referencedColumn:U.string("Referenced column is required"),onUpdate:So.default("NO ACTION"),onDelete:So.default("NO ACTION")}),Ro=U.object({tableName:U.string("Table name is required"),fields:U.array(Qs).min(1,"At least one field is required"),foreignKeys:U.array(Ws).optional()})});import{z as B}from"zod";var Ys,Ym,Ao,wo=d(()=>{"use strict";W();Ys=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")}),Ym=B.object({databases:B.array(Ys),dbType:$e}),Ao=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 Do=d(()=>{"use strict"});import{z as be}from"zod";var ut,_o=d(()=>{"use strict";ut=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 zs}from"zod";var xo,Mo=d(()=>{"use strict";W();xo=w.extend({cascade:zs.string().optional().transform(t=>t==="true")})});import{z as Lo}from"zod";var Oo,Po=d(()=>{"use strict";Oo=Lo.object({query:Lo.string("Query is required")})});import{z as Gs}from"zod";var Js,Io,$o=d(()=>{"use strict";W();Js=["csv","xlsx","json"],Io=w.extend({format:Gs.enum(Js,{message:"Invalid format. Supported formats: csv, xlsx, json"})})});var qo=d(()=>{"use strict"});import{z as pt}from"zod";var dt,lu,ko=d(()=>{"use strict";W();qe();dt=pt.object({newColumnName:pt.string("New column name is required")}),lu=pt.object({db:w.shape.db,tableName:V.shape.tableName,columnName:V.shape.columnName,newColumnName:dt.shape.newColumnName})});import{z as M}from"zod";var du,ke,fu,Xs,bu,vo,Uo=d(()=>{"use strict";W();du=M.object({columnName:M.string(),operator:M.string(),value:M.string()}),ke=["asc","desc"],fu=M.object({columnName:M.string(),direction:M.enum(ke)}),Xs=M.object({limit:M.number(),total:M.number(),hasNextPage:M.boolean(),hasPreviousPage:M.boolean(),nextCursor:M.string().nullable(),prevCursor:M.string().nullable()}),bu=M.object({data:M.array(M.record(M.string(),M.unknown())),meta:Xs}),vo=M.object({db:w.shape.db,cursor:M.string().optional(),limit:M.string().optional().default("50").transform(Number),direction:M.enum(ke).optional().default(ke[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(ke).optional(),filters:M.string().optional().transform(t=>{if(!t)return[];try{return JSON.parse(t)}catch{return[]}})})});import{z as ve}from"zod";var Tu,Fo=d(()=>{"use strict";Tu=ve.object({tableName:ve.string("Table name is required"),schemaName:ve.string().optional(),rowCount:ve.coerce.number("Row count is required")})});import{z as Bo}from"zod";var Cu,Ho=d(()=>{"use strict";Cu=Bo.object({schema:Bo.string()})});import{z as Z}from"zod";var jo,Ko=d(()=>{"use strict";jo=Z.object({tableName:Z.string("Table name is required"),primaryKey:Z.string("Primary key is required").default("id"),updates:Z.array(Z.object({rowData:Z.record(Z.string("Column name is required"),Z.any()),columnName:Z.string("Column name is required"),value:Z.any()},{message:"Each update must have a row data, column name, and value."})).min(1,"At least one update is required")})});var ee=d(()=>{"use strict";ao();ro();io();co();mo();po();fo();Co();mt();No();W();wo();Do();qe();_o();Mo();Po();$o();qo();ko();Uo();Fo();Ho();Ko()});import{HTTPException as Zs}from"hono/http-exception";import{DatabaseError as ei}from"pg";import{ZodError as ti}from"zod";function Vo(t,e){if(t instanceof Zs)return e.json({error:t.message??"Internal server error"},t.status);if(t instanceof ti){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 ei&&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 Qo,Wo=d(()=>{"use strict";Qo=(t,e)=>{if(!t.success){let o=t.error?.issues[0];return e.json({error:"Validation error",details:o?.message??"Unknown validation error"},400)}}});import{MongoClient as oi,ObjectId as ft}from"mongodb";import ai from"mssql";import{createPool as ni}from"mysql2/promise";import{Pool as Yo}from"pg";var bt,me,C,S,N,ye,yt,gt,D,Tt,te,E=d(()=>{"use strict";bt=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 Yo(a);n.on("error",r=>{}),this.pgPools.set(o,n)}return this.pgPools.get(o)??new Yo({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=ni({host:this.baseConfig.host,port:this.baseConfig.port,user:this.baseConfig.user,password:this.baseConfig.password,database:n||void 0,waitForConnections:!0,connectionLimit:10,idleTimeout:3e4,connectTimeout:2e3,multipleStatements:!1});this.mysqlPools.set(o,r)}return this.mysqlPools.get(o)}async getMssqlPool(e){if(!this.baseConfig)throw new Error("Base configuration not initialized");let o=this.buildConnectionString(e);if(!this.mssqlPools.has(o)){let n=new URL(o).pathname.slice(1),r={server:this.baseConfig.host,port:this.baseConfig.port,user:this.baseConfig.user,password:this.baseConfig.password,database:n||void 0,options:{encrypt:!1,trustServerCertificate:!0,enableArithAbort:!0,connectTimeout:2e3},pool:{max:10,min:0,idleTimeoutMillis:3e4}},i=await new ai.ConnectionPool(r).connect();i.on("error",c=>{}),this.mssqlPools.set(o,i)}return this.mssqlPools.get(o)}getPool(e){return this.getPgPool(e)}async closePgPool(e){let o=this.pgPools.get(e);o&&(await o.end(),this.pgPools.delete(e))}async closeMysqlPool(e){let o=this.mysqlPools.get(e);o&&(await o.end(),this.mysqlPools.delete(e))}async closeMssqlPool(e){let o=this.mssqlPools.get(e);o&&(await o.close(),this.mssqlPools.delete(e))}async closePool(e){await this.closePgPool(e),await this.closeMysqlPool(e),await this.closeMssqlPool(e)}async closePoolByDatabase(e){let o=this.buildConnectionString(e);await this.closePool(o)}async getMongoClient(){if(!this.mongoClient){if(!this.baseConfig)throw new Error("Base configuration not initialized");let e=new oi(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())]}},me=new bt,C=t=>me.getPgPool(t),S=t=>me.getMysqlPool(t),N=async t=>me.getMssqlPool(t),ye=()=>me.getDbType(),yt=()=>me.getMongoClient(),gt=()=>me.getMongoDbName(),D=t=>me.getMongoDb(t),Tt=t=>typeof t=="string"&&ft.isValid(t),te=t=>typeof t=="string"&&ft.isValid(t)?new ft(t):t});function Fe(t){return typeof t=="string"&&Tt(t)}var j,zo,Go,Jo,Ue,oe=d(()=>{"use strict";E();j=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=>j(o));let e=Object.entries(t).map(([o,a])=>[o,j(a)]);return Object.fromEntries(e)}return t},zo=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",Go=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"}},Jo=t=>{if(!t||t.length===0)return{};let e=[],o=n=>n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=n=>{let r=n.trim();if(r==="null")return null;if(r==="true")return!0;if(r==="false")return!1;let i=Number(r);return!Number.isNaN(i)&&r!==""?i:Tt(r)?te(r):r};for(let n of t){let r=n.columnName,i=a(n.value),c=n.operator.toLowerCase();if(r)switch(c){case"=":e.push({[r]:i});break;case"!=":e.push({[r]:{$ne:i}});break;case">":e.push({[r]:{$gt:i}});break;case">=":e.push({[r]:{$gte:i}});break;case"<":e.push({[r]:{$lt:i}});break;case"<=":e.push({[r]:{$lte:i}});break;case"is":e.push({[r]:i});break;case"is not":e.push({[r]:{$ne:i}});break;case"like":e.push({[r]:{$regex:o(String(i)),$options:""}});break;case"not like":e.push({[r]:{$not:{$regex:o(String(i)),$options:""}}});break;case"ilike":e.push({[r]:{$regex:o(String(i)),$options:"i"}});break;case"not ilike":e.push({[r]:{$not:{$regex:o(String(i)),$options:"i"}}});break;default:e.push({[r]:i});break}}return e.length?{$and:e}:{}},Ue=(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}}});async function Be({tableName:t,db:e}){let n=await(await D(e)).collection(t).find({}).limit(ri).toArray(),r=n.length,i=new Map,c=(s,l)=>{let m=zo(l);if(!i.has(s))i.set(s,{types:new Set([m]),nullable:!1,presentCount:1});else{let p=i.get(s);p&&(p.types.add(m),p.presentCount+=1)}};for(let s of n)for(let[l,m]of Object.entries(s)){if(m==null){if(!i.has(l))i.set(l,{types:new Set(["text"]),nullable:!0,presentCount:1});else{let p=i.get(l);p&&(p.nullable=!0),p&&(p.presentCount+=1)}continue}c(l,m)}if(r>0)for(let s of i.values())s.presentCount<r&&(s.nullable=!0);return i.has("_id")||i.set("_id",{types:new Set(["text"]),nullable:!1,presentCount:r}),Array.from(i.entries()).map(([s,l])=>{let m=l.types.values().next().value??"text";return{columnName:s,dataType:m,dataTypeLabel:Go(m),isNullable:l.nullable,columnDefault:null,isPrimaryKey:s==="_id",isForeignKey:!1,referencedTable:null,referencedColumn:null,enumValues:null}})}var ri,Et=d(()=>{"use strict";E();oe();ri=200});async function Xo(t,e={}){let{includeSampleData:o=!1,maxTables:a}=e,n=await D(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 Be({tableName:m,db:t}),u={name:m,columns:p.map(ii)};if(o){let g=(await n.collection(m).find({}).limit(3).toArray()).map(y=>j(y));u.sampleData=g.map(y=>Object.fromEntries(Object.entries(y).map(([b,h])=>[b,String(h)])))}return u});return{dbType:"mongodb",tables:await Promise.all(c),relationships:[]}}var ii,Zo=d(()=>{"use strict";E();oe();Et();ii=t=>({name:t.columnName,type:t.dataTypeLabel,nullable:t.isNullable,isPrimaryKey:t.isPrimaryKey})});import{Pool as ci}from"pg";var He,li,ht,ea=d(()=>{"use strict";He=null,li=()=>{if(!He){if(!process.env.DATABASE_URL)throw new Error("DATABASE_URL is not set. Please provide a database connection string.");try{He=new ci({connectionString:process.env.DATABASE_URL}),He.on("error",t=>{})}catch(t){throw t}}return He},ht=new Proxy({},{get(t,e){try{return li()[e]}catch(o){throw o}}})});import{HTTPException as mi}from"hono/http-exception";async function je({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,18 @@ var ls=Object.defineProperty;var f=(t,e)=>()=>(t&&(e=t(t=0)),e);var Pt=(t,e)=>{f
48
48
  WHERE c.table_schema = 'public'
49
49
  AND c.table_name = $1
50
50
  ORDER BY c.ordinal_position;
51
- `,{rows:n}=await o.query(a,[t]);if(!n||n.length===0)throw new oi(404,{message:`Table "${t}" does not exist`});return n.map(r=>{let i=null;return r.enumValues&&(Array.isArray(r.enumValues)?i=r.enumValues:typeof r.enumValues=="string"&&(i=r.enumValues.replace(/[{}]/g,"").split(",").filter(Boolean))),{columnName:r.columnName,dataType:po(r.dataType),dataTypeLabel:fo(r.dataType),isNullable:r.isNullable,columnDefault:r.columnDefault,isPrimaryKey:r.isPrimaryKey,isForeignKey:r.isForeignKey,referencedTable:r.referencedTable,referencedColumn:r.referencedColumn,enumValues:i}})}var gt=f(()=>{"use strict";Z();h()});async function ni(t){let e=C(t),o=`
51
+ `,{rows:n}=await o.query(a,[t]);if(!n||n.length===0)throw new mi(404,{message:`Table "${t}" does not exist`});return n.map(r=>{let i=null;return r.enumValues&&(Array.isArray(r.enumValues)?i=r.enumValues:typeof r.enumValues=="string"&&(i=r.enumValues.replace(/[{}]/g,"").split(",").filter(Boolean))),{columnName:r.columnName,dataType:bo(r.dataType),dataTypeLabel:yo(r.dataType),isNullable:r.isNullable,columnDefault:r.columnDefault,isPrimaryKey:r.isPrimaryKey,isForeignKey:r.isForeignKey,referencedTable:r.referencedTable,referencedColumn:r.referencedColumn,enumValues:i}})}var Ct=d(()=>{"use strict";ee();E()});async function pi(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:a}=await e.query(o);return a.map(n=>n.table_name)}async function ri(t){let e=await yt.connect();try{return(await e.query(`
57
+ `,{rows:a}=await e.query(o);return a.map(n=>n.table_name)}async function di(t){let e=await ht.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
- `,[t])).rows[0]?.description||void 0}finally{e.release()}}async function si(t){let e=await yt.connect();try{return(await e.query(`SELECT * FROM "${t}" LIMIT 3`)).rows}catch{return[]}finally{e.release()}}function ii(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 ci(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 li(t,e={}){if(le()==="mongodb")return na(t,{includeSampleData:e.includeSampleData});let{includeSampleData:o=!1,includeDescriptions:a=!0}=e;try{let r=(await ni(t)).map(async s=>{let[l,m,p]=await Promise.all([Qe({tableName:s,db:t}),a?ri(s):Promise.resolve(void 0),o?si(s):Promise.resolve([])]),u={name:s,columns:l.map(ii)};return m&&(u.description=m),p.length>0&&(u.sampleData=p.map(d=>Object.fromEntries(Object.entries(d).map(([g,y])=>[g,String(y)])))),u}),i=await Promise.all(r),c=ci(i);return{dbType:"pg",tables:i,relationships:c}}catch(n){throw new Error(`Failed to fetch database schema: ${n instanceof Error?n.message:"Unknown error"}`)}}async function ia(t){return li(t,{includeSampleData:!0,includeDescriptions:!0})}var ca=f(()=>{"use strict";ra();sa();h();gt()});function ma(t){let e=t.dbType.toLowerCase(),o=t.dbType==="pg"?"PostgreSQL":t.dbType;return e.includes("mongo")?`You are a database assistant for db-studio. Your responses must be CONCISE and FOCUSED.
62
+ `,[t])).rows[0]?.description||void 0}finally{e.release()}}async function fi(t){let e=await ht.connect();try{return(await e.query(`SELECT * FROM "${t}" LIMIT 3`)).rows}catch{return[]}finally{e.release()}}function bi(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 yi(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 gi(t,e={}){if(ye()==="mongodb")return Xo(t,{includeSampleData:e.includeSampleData});let{includeSampleData:o=!1,includeDescriptions:a=!0}=e;try{let r=(await pi(t)).map(async s=>{let[l,m,p]=await Promise.all([je({tableName:s,db:t}),a?di(s):Promise.resolve(void 0),o?fi(s):Promise.resolve([])]),u={name:s,columns:l.map(bi)};return m&&(u.description=m),p.length>0&&(u.sampleData=p.map(f=>Object.fromEntries(Object.entries(f).map(([g,y])=>[g,String(y)])))),u}),i=await Promise.all(r),c=yi(i);return{dbType:"pg",tables:i,relationships:c}}catch(n){throw new Error(`Failed to fetch database schema: ${n instanceof Error?n.message:"Unknown error"}`)}}async function ta(t){return gi(t,{includeSampleData:!0,includeDescriptions:!0})}var oa=d(()=>{"use strict";Zo();ea();E();Ct()});function na(t){let e=t.dbType.toLowerCase(),o=t.dbType==="pg"?"PostgreSQL":t.dbType;return e.includes("mongo")?`You are a database assistant for db-studio. Your responses must be CONCISE and FOCUSED.
63
63
 
64
64
  **Your Role:**
65
65
  1. Keep responses SHORT - 2-3 sentences maximum unless generating a query
@@ -73,7 +73,7 @@ var ls=Object.defineProperty;var f=(t,e)=>()=>(t&&(e=t(t=0)),e);var Pt=(t,e)=>{f
73
73
  6. IMPORTANT: When the user asks about collections, fields, or any schema information, answer DIRECTLY from the "Database Context" above \u2014 do NOT generate a query to retrieve schema info you already have
74
74
 
75
75
  **Database Context:**
76
- ${la(t)}
76
+ ${aa(t)}
77
77
 
78
78
  **Guidelines:**
79
79
  1. Always generate syntactically correct MongoDB queries
@@ -135,7 +135,7 @@ This will return the top 5 customers by revenue."`:`You are a database assistant
135
135
  7. IMPORTANT: When the user asks about tables, columns, relationships, or any schema information, answer DIRECTLY from the "Database Context" above \u2014 do NOT generate a SQL query to retrieve schema info you already have
136
136
 
137
137
  **Database Context:**
138
- ${la(t)}
138
+ ${aa(t)}
139
139
 
140
140
  **Guidelines:**
141
141
  1. Always generate syntactically correct SQL for the database type (${o})
@@ -173,7 +173,7 @@ LIMIT 5;
173
173
 
174
174
  This will return the 5 customers with the highest total order value. You might also want to see:
175
175
  - Revenue trends over time for these customers
176
- - Their most frequently ordered products"`}function la(t){let o=`Database Type: ${t.dbType==="pg"?"PostgreSQL":t.dbType}
176
+ - Their most frequently ordered products"`}function aa(t){let o=`Database Type: ${t.dbType==="pg"?"PostgreSQL":t.dbType}
177
177
 
178
178
  `;o+=`**Tables and Columns:**
179
179
  `;for(let a of t.tables){o+=`
@@ -187,20 +187,20 @@ This will return the 5 customers with the highest total order value. You might a
187
187
  `)}if(t.relationships&&t.relationships.length>0){o+=`
188
188
  **Relationships:**
189
189
  `;for(let a of t.relationships)o+=` - ${a.fromTable}.${a.fromColumn} -> ${a.toTable}.${a.toColumn}
190
- `}return o}var ua=f(()=>{"use strict"});import{zValidator as mi}from"@hono/zod-validator";import{Hono as ui}from"hono";var pa,da=f(()=>{"use strict";Pe();Z();ca();ua();pa=new ui().basePath("/chat").get("/limit",async t=>{let e=await fetch(`${oe.PROXY_URL}/chat/limit`,{headers:{"cf-connecting-ip":t.req.header("cf-connecting-ip")??"","x-real-ip":t.req.header("x-real-ip")??"","x-forwarded-for":t.req.header("x-forwarded-for")??"","x-api-key":t.req.header("x-api-key")??""}}),o=await e.json();return t.json(o,e.status)}).post("/",mi("json",lo),async t=>{let{messages:e,data:o}=t.req.valid("json"),{db:a,conversationId:n}=o,r=await ia(a),i=ma(r),c={messages:e,conversationId:n,systemPrompt:i},s=await fetch(`${oe.PROXY_URL}/chat`,{method:"POST",headers:{"Content-Type":"application/json","cf-connecting-ip":t.req.header("cf-connecting-ip")??"","x-real-ip":t.req.header("x-real-ip")??"","x-forwarded-for":t.req.header("x-forwarded-for")??"","x-api-key":t.req.header("x-api-key")??""},body:JSON.stringify(c)});if(!s.ok){let p=await s.json();return t.json({error:p.error||"Proxy request failed"},s.status)}let{readable:l,writable:m}=new TransformStream;return s.body?.pipeTo(m),new Response(l,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})})});import{HTTPException as pi}from"hono/http-exception";async function fa({db:t,params:e}){let{tableName:o,data:a}=e,n=C(t),r=Object.keys(a),i=Object.values(a),c=r.map((p,u)=>`$${u+1}`).join(", "),s=r.map(p=>`"${p}"`).join(", "),l=`
190
+ `}return o}var ra=d(()=>{"use strict"});import{zValidator as Ti}from"@hono/zod-validator";import{Hono as Ei}from"hono";var sa,ia=d(()=>{"use strict";Oe();ee();oa();ra();sa=new Ei().basePath("/chat").get("/limit",async t=>{let e=await fetch(`${re.PROXY_URL}/chat/limit`,{headers:{"cf-connecting-ip":t.req.header("cf-connecting-ip")??"","x-real-ip":t.req.header("x-real-ip")??"","x-forwarded-for":t.req.header("x-forwarded-for")??"","x-api-key":t.req.header("x-api-key")??""}}),o=await e.json();return t.json(o,e.status)}).post("/",Ti("json",uo),async t=>{let{messages:e,data:o}=t.req.valid("json"),{db:a,conversationId:n}=o,r=await ta(a),i=na(r),c={messages:e,conversationId:n,systemPrompt:i},s=await fetch(`${re.PROXY_URL}/chat`,{method:"POST",headers:{"Content-Type":"application/json","cf-connecting-ip":t.req.header("cf-connecting-ip")??"","x-real-ip":t.req.header("x-real-ip")??"","x-forwarded-for":t.req.header("x-forwarded-for")??"","x-api-key":t.req.header("x-api-key")??""},body:JSON.stringify(c)});if(!s.ok){let p=await s.json();return t.json({error:p.error||"Proxy request failed"},s.status)}let{readable:l,writable:m}=new TransformStream;return s.body?.pipeTo(m),new Response(l,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})})});import{HTTPException as hi}from"hono/http-exception";async function ca({db:t,params:e}){let{tableName:o,data:a}=e,n=C(t),r=Object.keys(a),i=Object.values(a),c=r.map((p,u)=>`$${u+1}`).join(", "),s=r.map(p=>`"${p}"`).join(", "),l=`
191
191
  INSERT INTO "${o}" (${s})
192
192
  VALUES (${c})
193
193
  RETURNING *
194
- `,m=await n.query(l,i);if(m.rowCount===0)throw new pi(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:m.rowCount??0}}var ba=f(()=>{"use strict";h()});import{HTTPException as We}from"hono/http-exception";var ya,ga=f(()=>{"use strict";h();ya=async({tableName:t,records:e,db:o})=>{if(!e||e.length===0)throw new We(400,{message:"At least one record is required"});let n=await C(o).connect();try{let r=Object.keys(e[0]),i=r.map(m=>`"${m}"`).join(", "),c=0,s=0,l=[];await n.query("BEGIN");for(let m=0;m<e.length;m++){let p=e[m],u=r.map(y=>p[y]),d=r.map((y,b)=>`$${b+1}`).join(", "),g=`
194
+ `,m=await n.query(l,i);if(m.rowCount===0)throw new hi(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:m.rowCount??0}}var la=d(()=>{"use strict";E()});import{HTTPException as Ke}from"hono/http-exception";var ma,ua=d(()=>{"use strict";E();ma=async({tableName:t,records:e,db:o})=>{if(!e||e.length===0)throw new Ke(400,{message:"At least one record is required"});let n=await C(o).connect();try{let r=Object.keys(e[0]),i=r.map(m=>`"${m}"`).join(", "),c=0,s=0,l=[];await n.query("BEGIN");for(let m=0;m<e.length;m++){let p=e[m],u=r.map(y=>p[y]),f=r.map((y,b)=>`$${b+1}`).join(", "),g=`
195
195
  INSERT INTO "${t}" (${i})
196
- VALUES (${d})
196
+ VALUES (${f})
197
197
  RETURNING *
198
- `;try{await n.query(g,u),c++}catch(y){throw new We(500,{message:`Failed: ${y instanceof Error?y.message:String(y)}`})}}return await n.query("COMMIT"),{success:s===0,message:`Bulk insert completed: ${c} records inserted${s>0?`, ${s} failed`:""}`,successCount:c,failureCount:s,errors:l.length>0?l:void 0}}catch(r){throw await n.query("ROLLBACK"),r instanceof We?r:new We(500,{message:`Failed to bulk insert records into "${t}"`})}finally{n.release()}}});async function Ta({tableData:t,db:e}){let{tableName:o,fields:a,foreignKeys:n}=t,r=C(e),i=a.map(m=>{let p=`"${m.columnName}" ${m.columnType}`;return m.isArray&&(p+="[]"),m.isPrimaryKey&&(p+=" PRIMARY KEY"),m.isUnique&&!m.isPrimaryKey&&(p+=" UNIQUE"),m.isNullable||(p+=" NOT NULL"),m.isIdentity&&(p+=" GENERATED ALWAYS AS IDENTITY"),m.defaultValue&&!m.isIdentity&&(p+=` DEFAULT ${m.defaultValue}`),p}),c=n?.map(m=>`CONSTRAINT "${`fk_${o}_${m.columnName}_${m.referencedTable}_${m.referencedColumn}`}" FOREIGN KEY ("${m.columnName}") REFERENCES "${m.referencedTable}" ("${m.referencedColumn}") ON UPDATE ${m.onUpdate} ON DELETE ${m.onDelete}`)||[],s=[...i,...c],l=`
198
+ `;try{await n.query(g,u),c++}catch(y){throw new Ke(500,{message:`Failed: ${y instanceof Error?y.message:String(y)}`})}}return await n.query("COMMIT"),{success:s===0,message:`Bulk insert completed: ${c} records inserted${s>0?`, ${s} failed`:""}`,successCount:c,failureCount:s,errors:l.length>0?l:void 0}}catch(r){throw await n.query("ROLLBACK"),r instanceof Ke?r:new Ke(500,{message:`Failed to bulk insert records into "${t}"`})}finally{n.release()}}});async function pa({tableData:t,db:e}){let{tableName:o,fields:a,foreignKeys:n}=t,r=C(e),i=a.map(m=>{let p=`"${m.columnName}" ${m.columnType}`;return m.isArray&&(p+="[]"),m.isPrimaryKey&&(p+=" PRIMARY KEY"),m.isUnique&&!m.isPrimaryKey&&(p+=" UNIQUE"),m.isNullable||(p+=" NOT NULL"),m.isIdentity&&(p+=" GENERATED ALWAYS AS IDENTITY"),m.defaultValue&&!m.isIdentity&&(p+=` DEFAULT ${m.defaultValue}`),p}),c=n?.map(m=>`CONSTRAINT "${`fk_${o}_${m.columnName}_${m.referencedTable}_${m.referencedColumn}`}" FOREIGN KEY ("${m.columnName}") REFERENCES "${m.referencedTable}" ("${m.referencedColumn}") ON UPDATE ${m.onUpdate} ON DELETE ${m.onDelete}`)||[],s=[...i,...c],l=`
199
199
  CREATE TABLE "${o}" (
200
200
  ${s.join(`,
201
201
  `)}
202
202
  );
203
- `;await r.query(l)}var Ea=f(()=>{"use strict";h()});function ne(){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 ha(){let t=C(),e=`
203
+ `;await r.query(l)}var da=d(()=>{"use strict";E()});function se(){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 we=d(()=>{"use strict"});import{HTTPException as St}from"hono/http-exception";async function fa(){let t=C(),e=`
204
204
  SELECT
205
205
  d.datname as name,
206
206
  pg_size_pretty(pg_database_size(d.datname)) as size,
@@ -209,7 +209,7 @@ This will return the 5 customers with the highest total order value. You might a
209
209
  FROM pg_catalog.pg_database d
210
210
  WHERE d.datistemplate = false
211
211
  ORDER BY d.datname;
212
- `,{rows:o}=await t.query(e);if(!o[0])throw new Tt(500,{message:"No databases returned from database"});return o}async function Ca(){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 Sa(){let t=C(),e=`
212
+ `,{rows:o}=await t.query(e);if(!o[0])throw new St(500,{message:"No databases returned from database"});return o}async function ba(){let t=C(),e="SELECT current_database() as database;",{rows:o}=await t.query(e);if(!o[0])throw new St(500,{message:"No current database returned from database"});return o[0]}async function ya(){let t=C(),e=`
213
213
  SELECT
214
214
  version() as version,
215
215
  current_database() as database,
@@ -218,17 +218,17 @@ This will return the 5 customers with the highest total order value. You might a
218
218
  inet_server_port() as port,
219
219
  (SELECT count(*) FROM pg_stat_activity WHERE datname = current_database()) as active_connections,
220
220
  (SELECT setting::int FROM pg_settings WHERE name = 'max_connections') as max_connections;
221
- `,{rows:o}=await t.query(e);if(!o[0])throw new Tt(500,{message:"No connection information returned from database"});let a=No.parse(o[0]),n=ne();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 Na=f(()=>{"use strict";Z();h();De()});import{HTTPException as Ra}from"hono/http-exception";async function Aa(t){let{tableName:e,columnName:o,cascade:a,db:n}=t,r=C(n),i=`
221
+ `,{rows:o}=await t.query(e);if(!o[0])throw new St(500,{message:"No connection information returned from database"});let a=Ao.parse(o[0]),n=se();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 ga=d(()=>{"use strict";ee();E();we()});import{HTTPException as Ta}from"hono/http-exception";async function Ea(t){let{tableName:e,columnName:o,cascade:a,db:n}=t,r=C(n),i=`
222
222
  SELECT EXISTS (
223
223
  SELECT 1 FROM information_schema.tables
224
224
  WHERE table_name = $1 AND table_schema = 'public'
225
225
  ) as exists;
226
- `,{rows:c}=await r.query(i,[e]);if(!c[0]?.exists)throw new Ra(404,{message:`Table "${e}" does not exist`});let s=`
226
+ `,{rows:c}=await r.query(i,[e]);if(!c[0]?.exists)throw new Ta(404,{message:`Table "${e}" does not exist`});let s=`
227
227
  SELECT EXISTS (
228
228
  SELECT 1 FROM information_schema.columns
229
229
  WHERE table_name = $1 AND column_name = $2 AND table_schema = 'public'
230
230
  ) as exists;
231
- `,{rows:l}=await r.query(s,[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 wa=f(()=>{"use strict";h()});import{HTTPException as ge}from"hono/http-exception";async function Et(t,e){return(await C(e).query(`
231
+ `,{rows:l}=await r.query(s,[e,o]);if(!l[0]?.exists)throw new Ta(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 ha=d(()=>{"use strict";E()});import{HTTPException as ge}from"hono/http-exception";async function Rt(t,e){return(await C(e).query(`
232
232
  SELECT
233
233
  tc.constraint_name,
234
234
  tc.table_name as referencing_table,
@@ -244,25 +244,25 @@ This will return the 5 customers with the highest total order value. You might a
244
244
  AND ccu.table_schema = tc.table_schema
245
245
  WHERE tc.constraint_type = 'FOREIGN KEY'
246
246
  AND ccu.table_name = $1
247
- `,[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 Ti(t,e,o){let a=await Et(t,o);if(a.length===0)return[];let n=[],r=C(o),i=new Map;for(let s of a){let l=`${s.referencingTable}.${s.referencingColumn}`;i.has(l)||i.set(l,[]),i.get(l)?.push(s)}let c=e.map(s=>s.value);for(let[s,l]of i){let m=l[0];if(!m||!e.find(y=>y.columnName===m.referencedColumn))continue;let u=c.map((y,b)=>`$${b+1}`).join(", "),d=`
247
+ `,[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 wi(t,e,o){let a=await Rt(t,o);if(a.length===0)return[];let n=[],r=C(o),i=new Map;for(let s of a){let l=`${s.referencingTable}.${s.referencingColumn}`;i.has(l)||i.set(l,[]),i.get(l)?.push(s)}let c=e.map(s=>s.value);for(let[s,l]of i){let m=l[0];if(!m||!e.find(y=>y.columnName===m.referencedColumn))continue;let u=c.map((y,b)=>`$${b+1}`).join(", "),f=`
248
248
  SELECT * FROM "${m.referencingTable}"
249
249
  WHERE "${m.referencingColumn}" IN (${u})
250
250
  LIMIT 100
251
- `,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 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),i=r.map((s,l)=>`$${l+1}`).join(", "),c=`
251
+ `,g=await r.query(f,c);g.rows.length>0&&n.push({tableName:m.referencingTable,columnName:m.referencingColumn,constraintName:m.constraintName,records:g.rows})}return n}async function Ca({tableName:t,primaryKeys:e,db:o}){let a=C(o),n=e[0]?.columnName;if(!n)throw new ge(400,{message:"Primary key column name is required"});let r=e.map(s=>s.value),i=r.map((s,l)=>`$${l+1}`).join(", "),c=`
252
252
  DELETE FROM "${t}"
253
253
  WHERE "${n}" IN (${i})
254
254
  RETURNING *
255
- `;try{await a.query("BEGIN");let s=await a.query(c,r);return await a.query("COMMIT"),{deletedCount:s.rowCount??0,fkViolation:!1,relatedRecords:[]}}catch(s){if(await a.query("ROLLBACK"),s.code==="23503")return{deletedCount:0,fkViolation:!0,relatedRecords:await Ti(t,e,o)};throw s instanceof ge?s:new ge(500,{message:`Failed to delete records from "${t}"`})}}async function _a({tableName:t,primaryKeys:e,db:o}){let a=C(o),n=e[0]?.columnName;if(!n)throw new ge(400,{message:"Primary key column name is required"});let r=e.map(i=>i.value);await a.query("BEGIN");try{let i=await Et(t,o),c=0,s=new Set,l=async(g,y,b)=>{let E=await Et(g,o);for(let k of E){let H=b.map((F,z)=>`$${z+1}`).join(", "),j=`
255
+ `;try{await a.query("BEGIN");let s=await a.query(c,r);return await a.query("COMMIT"),{deletedCount:s.rowCount??0,fkViolation:!1,relatedRecords:[]}}catch(s){if(await a.query("ROLLBACK"),s.code==="23503")return{deletedCount:0,fkViolation:!0,relatedRecords:await wi(t,e,o)};throw s instanceof ge?s:new ge(500,{message:`Failed to delete records from "${t}"`})}}async function Sa({tableName:t,primaryKeys:e,db:o}){let a=C(o),n=e[0]?.columnName;if(!n)throw new ge(400,{message:"Primary key column name is required"});let r=e.map(i=>i.value);await a.query("BEGIN");try{let i=await Rt(t,o),c=0,s=new Set,l=async(g,y,b)=>{let h=await Rt(g,o);for(let k of h){let H=b.map((F,G)=>`$${G+1}`).join(", "),K=`
256
256
  SELECT "${k.referencedColumn}" FROM "${g}"
257
257
  WHERE "${y}" IN (${H})
258
- `,D=(await a.query(j,b)).rows.map(({row:F})=>F[k.referencedColumn]);D.length>0&&await l(k.referencingTable,k.referencingColumn,D)}let N=b.map((k,H)=>`$${H+1}`).join(", "),A=`
258
+ `,_=(await a.query(K,b)).rows.map(({row:F})=>F[k.referencedColumn]);_.length>0&&await l(k.referencingTable,k.referencingColumn,_)}let R=b.map((k,H)=>`$${H+1}`).join(", "),A=`
259
259
  DELETE FROM "${g}"
260
- WHERE "${y}" IN (${N})
260
+ WHERE "${y}" IN (${R})
261
261
  `,q=await a.query(A,b);c+=q.rowCount??0,s.add(g)};for(let g of i)s.has(g.referencingTable)||await l(g.referencingTable,g.referencingColumn,r);let m=r.map((g,y)=>`$${y+1}`).join(", "),p=`
262
262
  DELETE FROM "${t}"
263
263
  WHERE "${n}" IN (${m})
264
264
  RETURNING *
265
- `,u=await a.query(p,r);return await a.query("COMMIT"),{deletedCount:(u.rowCount??0)+c}}catch(i){throw await a.query("ROLLBACK"),i instanceof ge?i:new ge(500,{message:`Failed to force delete records from "${t}"`})}}var xa=f(()=>{"use strict";h()});import{HTTPException as ht}from"hono/http-exception";async function hi(t,e){return(await C(e).query(`
265
+ `,u=await a.query(p,r);return await a.query("COMMIT"),{deletedCount:(u.rowCount??0)+c}}catch(i){throw await a.query("ROLLBACK"),i instanceof ge?i:new ge(500,{message:`Failed to force delete records from "${t}"`})}}var Ra=d(()=>{"use strict";E()});import{HTTPException as Nt}from"hono/http-exception";async function _i(t,e){return(await C(e).query(`
266
266
  SELECT
267
267
  tc.constraint_name,
268
268
  tc.table_name as referencing_table,
@@ -278,15 +278,15 @@ This will return the 5 customers with the highest total order value. You might a
278
278
  AND ccu.table_schema = tc.table_schema
279
279
  WHERE tc.constraint_type = 'FOREIGN KEY'
280
280
  AND ccu.table_name = $1
281
- `,[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 hi(t,e);if(o.length===0)return[];let a=[],n=C(e);for(let r of o){let i=`
281
+ `,[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 Na(t,e){let o=await _i(t,e);if(o.length===0)return[];let a=[],n=C(e);for(let r of o){let i=`
282
282
  SELECT * FROM "${r.referencingTable}"
283
283
  LIMIT 100
284
- `,c=await n.query(i);c.rows.length>0&&a.push({tableName:r.referencingTable,columnName:r.referencingColumn,constraintName:r.constraintName,records:c.rows})}return a}async function Ci(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 La(t){let{tableName:e,db:o,cascade:a}=t,n=C(o),r=`
284
+ `,c=await n.query(i);c.rows.length>0&&a.push({tableName:r.referencingTable,columnName:r.referencingColumn,constraintName:r.constraintName,records:c.rows})}return a}async function xi(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 Aa(t){let{tableName:e,db:o,cascade:a}=t,n=C(o),r=`
285
285
  SELECT EXISTS (
286
286
  SELECT 1 FROM information_schema.tables
287
287
  WHERE table_name = $1 AND table_schema = 'public'
288
288
  ) as exists;
289
- `,{rows:i}=await n.query(r,[e]);if(!i[0]?.exists)throw new ht(404,{message:`Table "${e}" does not exist`});let c=await Ci(e,o);if(!a){let s=await Ma(e,o);if(s.length>0)return{deletedCount:0,fkViolation:!0,relatedRecords:s}}try{let l=`DROP TABLE "${e}" ${a?"CASCADE":"RESTRICT"}`;return await n.query(l),{deletedCount:c,fkViolation:!1,relatedRecords:[]}}catch(s){if(s.code==="2BP01")return{deletedCount:0,fkViolation:!0,relatedRecords:await Ma(e,o)};throw s instanceof ht?s:new ht(500,{message:`Failed to delete table "${e}"`})}}var Oa=f(()=>{"use strict";h()});import{HTTPException as Ni}from"hono/http-exception";async function Pa({tableName:t,db:e}){let o=C(e),{rows:a}=await o.query(`SELECT * FROM "${t}"`);if(!a||a.length===0)throw new Ni(404,{message:`Table "${t}" does not exist or has no data`});return{cols:Object.keys(a[0]),rows:a}}var Ia=f(()=>{"use strict";h()});import{HTTPException as $a}from"hono/http-exception";var qa,ka=f(()=>{"use strict";h();ye();qa=async({tableName:t,records:e,db:o})=>{if(!e||e.length===0)throw new $a(400,{message:"At least one record is required"});let n=(await M(o)).collection(t),r=e.map(i=>{let c=ae(i);return(c._id===""||c._id===null)&&delete c._id,c});try{let i=await n.insertMany(r,{ordered:!1});return{success:!0,message:`Successfully inserted ${i.insertedCount} record${i.insertedCount!==1?"s":""}`,successCount:i.insertedCount,failureCount:e.length-i.insertedCount}}catch(i){throw new $a(500,{message:`Bulk insert failed: ${i instanceof Error?i.message:String(i)}`})}}});import{HTTPException as Ai}from"hono/http-exception";async function va(){let a=(await(await Fe()).db().admin().listDatabases()).databases??[];if(!a[0])throw new Ai(500,{message:"No databases returned from MongoDB"});return a.map(n=>({name:n.name,size:wi(n.sizeOnDisk??0),owner:"n/a",encoding:"n/a"}))}async function Ua(){return{db:Be()}}async function Fa(){let e=(await Fe()).db().admin(),o=ne(),a={};try{a=await e.serverStatus()}catch{}return{host:o.host,port:o.port,user:"n/a",database:Be(),version:a.version??"unknown",active_connections:a.connections?.current??0,max_connections:(a.connections?.current??0)+(a.connections?.available??0)}}var wi,Ba=f(()=>{"use strict";h();De();wi=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 re}from"hono/http-exception";var Te,Ha,ja=f(()=>{"use strict";h();ye();Te=t=>{if(t._id&&typeof t._id=="string")return{...t,_id:me(t._id)};if(t._id&&typeof t._id=="object"){let e=t._id;if(Array.isArray(e.$in))return{...t,_id:{...e,$in:e.$in.map(o=>typeof o=="string"?me(o):o)}};if(Array.isArray(e.$nin))return{...t,_id:{...e,$nin:e.$nin.map(o=>typeof o=="string"?me(o):o)}}}return t},Ha=async({query:t,db:e})=>{if(!t||!t.trim())throw new re(400,{message:"Query is required"});let o;try{o=JSON.parse(t)}catch{throw new re(400,{message:"Mongo query must be valid JSON"})}if(!o.collection||!o.operation)throw new re(400,{message:"Mongo query must include collection and operation"});let n=(await M(e)).collection(o.collection),r=performance.now(),i=[],c=0,s;switch(o.operation){case"find":{let u=Te(o.filter??{}),d=n.find(u,o.options??{}),g=o.sort??aa("",void 0);d.sort(g),o.skip&&d.skip(o.skip),o.limit&&d.limit(o.limit),i=await d.toArray(),c=i.length;break}case"aggregate":{let u=o.pipeline??[];i=await n.aggregate(u,o.options??{}).toArray(),c=i.length;break}case"insertOne":{let u=o.document;if(!u)throw new re(400,{message:"document is required"});c=(await n.insertOne(u)).insertedId?1:0,s="OK";break}case"insertMany":{let u=o.document;if(!Array.isArray(u))throw new re(400,{message:"document array is required"});c=(await n.insertMany(u)).insertedCount??0,s="OK";break}case"updateOne":{let u=Te(o.filter??{});if(!o.update)throw new re(400,{message:"update is required"});let d=await n.updateOne(u,o.update,o.options??{});c=d.matchedCount??0,s=`OK (${d.modifiedCount??0} modified)`;break}case"updateMany":{let u=Te(o.filter??{});if(!o.update)throw new re(400,{message:"update is required"});let d=await n.updateMany(u,o.update,o.options??{});c=d.matchedCount??0,s=`OK (${d.modifiedCount??0} modified)`;break}case"deleteOne":{let u=Te(o.filter??{});c=(await n.deleteOne(u,o.options??{})).deletedCount??0,s="OK";break}case"deleteMany":{let u=Te(o.filter??{});c=(await n.deleteMany(u,o.options??{})).deletedCount??0,s="OK";break}case"count":{let u=Te(o.filter??{});c=await n.countDocuments(u),i=[{count:c}],s="OK";break}default:throw new re(400,{message:"Unsupported Mongo operation"})}let l=performance.now()-r,m=i.map(u=>ae(u));return{columns:m[0]?Object.keys(m[0]):[],rows:m,rowCount:c,duration:l,message:s}}});import{HTTPException as Ct}from"hono/http-exception";async function Ka({db:t,params:e}){let{tableName:o,data:a}=e,r=(await M(t)).collection(o),i=ae(a);if((i._id===""||i._id===null)&&delete i._id,!(await r.insertOne(i)).insertedId)throw new Ct(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:1}}async function Va({params:t,db:e}){let{tableName:o,updates:a,primaryKey:n}=t,i=(await M(e)).collection(o),c=0,s=n||"_id",l=new Map;for(let m of a){let p=m.rowData[s];if(p==null)throw new Ct(400,{message:`Primary key "${s}" not found in row data.`});l.has(p)||l.set(p,{}),l.get(p)[m.columnName]=m.value}for(let[m,p]of l.entries()){let u=s==="_id"&&bt(m)?me(m):m,d=await i.updateOne({[s]:u},{$set:p});if(d.matchedCount===0)throw new Ct(404,{message:`Record with ${s} = ${String(m)} not found in "${o}"`});c+=d.modifiedCount}return{updatedCount:c}}async function St({tableName:t,primaryKeys:e,db:o}){let n=(await M(o)).collection(t),r=e[0]?.columnName??"_id",i=e.map(s=>r==="_id"&&bt(s.value)?me(s.value):s.value);return{deletedCount:(await n.deleteMany({[r]:{$in:i}})).deletedCount??0}}async function Qa({tableName:t,primaryKeys:e,db:o}){return{deletedCount:(await St({tableName:t,primaryKeys:e,db:o})).deletedCount}}var Wa=f(()=>{"use strict";h();ye()});import{HTTPException as Di}from"hono/http-exception";async function Ya({tableName:t,db:e}){let o=await M(e);if((await o.listCollections({name:t}).toArray()).length===0)throw new Di(404,{message:`Collection "${t}" does not exist`});let n=o.collection(t),r=await n.find({}).limit(_i).toArray(),i=await n.estimatedDocumentCount(),c=new Map,s=new Map;for(let u of r)for(let[d,g]of Object.entries(u)){let y=xi(g);c.has(d)||(c.set(d,new Set),s.set(d,0)),c.get(d)?.add(y),s.set(d,(s.get(d)??0)+1)}let l={},m=[];for(let[u,d]of c.entries()){let g=s.get(u)??0,y=g===r.length&&r.length>0,b=Array.from(d).filter(N=>N!=="null"),E=d.has("null")||g<r.length;y&&!E&&m.push(u),l[u]=b.length===1?{bsonType:E?[b[0],"null"]:b[0]}:{bsonType:E?[...b,"null"]:b}}let p={collection:t,estimatedDocumentCount:i,sampledDocuments:r.length,jsonSchema:{bsonType:"object",required:m.length>0?m:void 0,properties:l}};return JSON.stringify(p,null,2)}var _i,xi,za=f(()=>{"use strict";h();_i=200,xi=t=>{if(t==null)return"null";if(t instanceof Date)return"date";if(typeof t=="boolean")return"bool";if(typeof t=="number")return Number.isInteger(t)?"int":"double";if(typeof t=="bigint")return"long";if(Array.isArray(t))return"array";if(typeof t=="object"){if("_bsontype"in t){let e=t._bsontype;return e==="ObjectId"?"objectId":e==="Decimal128"?"decimal":e==="Binary"?"binData":e==="Timestamp"?"timestamp":e.toLowerCase()}return"object"}return"string"}});import{HTTPException as Mi}from"hono/http-exception";function Li(t){let e=t.match(/'([^']+)'/g);return!e||e.length===0?null:e.map(o=>o.slice(1,-1))}async function se({tableName:t,db:e}){let o=await R(e),n=await o.request().input("tableName",t).query(`
289
+ `,{rows:i}=await n.query(r,[e]);if(!i[0]?.exists)throw new Nt(404,{message:`Table "${e}" does not exist`});let c=await xi(e,o);if(!a){let s=await Na(e,o);if(s.length>0)return{deletedCount:0,fkViolation:!0,relatedRecords:s}}try{let l=`DROP TABLE "${e}" ${a?"CASCADE":"RESTRICT"}`;return await n.query(l),{deletedCount:c,fkViolation:!1,relatedRecords:[]}}catch(s){if(s.code==="2BP01")return{deletedCount:0,fkViolation:!0,relatedRecords:await Na(e,o)};throw s instanceof Nt?s:new Nt(500,{message:`Failed to delete table "${e}"`})}}var wa=d(()=>{"use strict";E()});import{HTTPException as Li}from"hono/http-exception";async function Da({tableName:t,db:e}){let o=C(e),{rows:a}=await o.query(`SELECT * FROM "${t}"`);if(!a||a.length===0)throw new Li(404,{message:`Table "${t}" does not exist or has no data`});return{cols:Object.keys(a[0]),rows:a}}var _a=d(()=>{"use strict";E()});import{HTTPException as Pi}from"hono/http-exception";async function xa({db:t,params:e}){let{tableName:o,data:a}=e,r=(await D(t)).collection(o),i=j(a);if((i._id===""||i._id===null)&&delete i._id,!(await r.insertOne(i)).insertedId)throw new Pi(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:1}}var Ma=d(()=>{"use strict";E();oe()});import{HTTPException as La}from"hono/http-exception";var Oa,Pa=d(()=>{"use strict";E();oe();Oa=async({tableName:t,records:e,db:o})=>{if(!e||e.length===0)throw new La(400,{message:"At least one record is required"});let n=(await D(o)).collection(t),r=e.map(i=>{let c=j(i);return(c._id===""||c._id===null)&&delete c._id,c});try{let i=await n.insertMany(r,{ordered:!1});return{success:!0,message:`Successfully inserted ${i.insertedCount} record${i.insertedCount!==1?"s":""}`,successCount:i.insertedCount,failureCount:e.length-i.insertedCount}}catch(i){throw new La(500,{message:`Bulk insert failed: ${i instanceof Error?i.message:String(i)}`})}}});import{HTTPException as Ia}from"hono/http-exception";async function qa({tableData:t,db:e}){let o=t?.tableName??"",a=await D(e);if((await a.listCollections({name:o}).toArray()).length>0)throw new Ia(400,{message:`Collection "${o}" already exists`});let r=t?.fields??[];if(r.length===0){await a.createCollection(o);return}let i={},c=[];for(let s of r){let l=qi(s.columnType);if(!$a.has(l))throw new Ia(400,{message:`Unsupported MongoDB BSON type "${s.columnType}" for field "${s.columnName}"`});s.isArray?i[s.columnName]={bsonType:"array",...l!=="array"?{items:{bsonType:l}}:{}}:i[s.columnName]={bsonType:l},s.isNullable||c.push(s.columnName)}await a.createCollection(o,{validator:{$jsonSchema:{bsonType:"object",required:c,properties:i,additionalProperties:!0}},validationAction:"error"})}var $a,qi,ka=d(()=>{"use strict";E();$a=new Set(["double","string","object","array","binData","undefined","objectId","bool","date","null","regex","dbPointer","javascript","symbol","javascriptWithScope","int","timestamp","long","decimal","minKey","maxKey"]),qi=t=>{let e=t.trim();if($a.has(e))return e;switch(e.toLowerCase()){case"boolean":return"bool";case"objectid":return"objectId";case"binary":return"binData";default:return e}}});import{HTTPException as vi}from"hono/http-exception";async function Ve(){let a=(await(await yt()).db().admin().listDatabases()).databases??[];if(!a[0])throw new vi(500,{message:"No databases returned from MongoDB"});return a.map(n=>({name:n.name,size:Ui(n.sizeOnDisk??0),owner:"n/a",encoding:"n/a"}))}async function Qe(){return{db:gt()}}async function We(){let e=(await yt()).db().admin(),o=se(),a={};try{a=await e.serverStatus()}catch{}return{host:o.host,port:o.port,user:"n/a",database:gt(),version:a.version??"unknown",active_connections:a.connections?.current??0,max_connections:(a.connections?.current??0)+(a.connections?.available??0)}}var Ui,va=d(()=>{"use strict";E();we();Ui=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]}`}});var Ua=d(()=>{"use strict";va()});async function Fa({tableName:t,columnName:e,db:o}){return{deletedCount:(await(await D(o)).collection(t).updateMany({},{$unset:{[e]:""}})).modifiedCount}}var Ba=d(()=>{"use strict";E()});async function At({tableName:t,primaryKeys:e,db:o}){let n=(await D(o)).collection(t),r=e[0]?.columnName??"_id",i=e.map(s=>r==="_id"&&Fe(s.value)?te(s.value):s.value);return{deletedCount:(await n.deleteMany({[r]:{$in:i}})).deletedCount??0}}async function Ha({tableName:t,primaryKeys:e,db:o}){return{deletedCount:(await At({tableName:t,primaryKeys:e,db:o})).deletedCount}}var ja=d(()=>{"use strict";E();oe()});import{HTTPException as Ka}from"hono/http-exception";async function Va({tableName:t,db:e}){let a=(await D(e)).collection(t);try{let n=await a.estimatedDocumentCount();return await a.drop(),{deletedCount:n,fkViolation:!1,relatedRecords:[]}}catch(n){throw n instanceof Ka?n:new Ka(500,{message:`Failed to delete table "${t}"`})}}var Qa=d(()=>{"use strict";E()});async function Wa({tableName:t,db:e}){let r=(await(await D(e)).collection(t).find({}).limit(1e4).toArray()).map(c=>j(c));return{cols:Array.from(new Set(r.flatMap(c=>Object.keys(c)))),rows:r}}var Ya=d(()=>{"use strict";E();oe()});import{HTTPException as ie}from"hono/http-exception";var Te,Ye,za=d(()=>{"use strict";E();oe();Te=t=>{if(t._id&&typeof t._id=="string")return{...t,_id:te(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"?te(o):o)}};if(Array.isArray(e.$nin))return{...t,_id:{...e,$nin:e.$nin.map(o=>typeof o=="string"?te(o):o)}}}return t},Ye=async({query:t,db:e})=>{if(!t||!t.trim())throw new ie(400,{message:"Query is required"});let o;try{o=JSON.parse(t)}catch{throw new ie(400,{message:"Mongo query must be valid JSON"})}if(!o.collection||!o.operation)throw new ie(400,{message:"Mongo query must include collection and operation"});let n=(await D(e)).collection(o.collection),r=performance.now(),i=[],c=0,s;switch(o.operation){case"find":{let u=Te(o.filter??{}),f=n.find(u,o.options??{}),g=o.sort??Ue("",void 0);f.sort(g),o.skip&&f.skip(o.skip),o.limit&&f.limit(o.limit),i=await f.toArray(),c=i.length;break}case"aggregate":{let u=o.pipeline??[];i=await n.aggregate(u,o.options??{}).toArray(),c=i.length;break}case"insertOne":{let u=o.document;if(!u)throw new ie(400,{message:"document is required"});c=(await n.insertOne(u)).insertedId?1:0,s="OK";break}case"insertMany":{let u=o.document;if(!Array.isArray(u))throw new ie(400,{message:"document array is required"});c=(await n.insertMany(u)).insertedCount??0,s="OK";break}case"updateOne":{let u=Te(o.filter??{});if(!o.update)throw new ie(400,{message:"update is required"});let f=await n.updateOne(u,o.update,o.options??{});c=f.matchedCount??0,s=`OK (${f.modifiedCount??0} modified)`;break}case"updateMany":{let u=Te(o.filter??{});if(!o.update)throw new ie(400,{message:"update is required"});let f=await n.updateMany(u,o.update,o.options??{});c=f.matchedCount??0,s=`OK (${f.modifiedCount??0} modified)`;break}case"deleteOne":{let u=Te(o.filter??{});c=(await n.deleteOne(u,o.options??{})).deletedCount??0,s="OK";break}case"deleteMany":{let u=Te(o.filter??{});c=(await n.deleteMany(u,o.options??{})).deletedCount??0,s="OK";break}case"count":{let u=Te(o.filter??{});c=await n.countDocuments(u),i=[{count:c}],s="OK";break}default:throw new ie(400,{message:"Unsupported Mongo operation"})}let l=performance.now()-r,m=i.map(u=>j(u));return{columns:m[0]?Object.keys(m[0]):[],rows:m,rowCount:c,duration:l,message:s}}});var Ga=d(()=>{"use strict";za()});async function Ja(t){let e=await D(t),o=await e.listCollections().toArray(),a=[];for(let n of o){let r=n.name,i=await e.collection(r).estimatedDocumentCount();a.push({tableName:r,rowCount:i})}return a}var Xa=d(()=>{"use strict";E()});import{HTTPException as Wi}from"hono/http-exception";async function Za({tableName:t,db:e}){let o=await D(e);if((await o.listCollections({name:t}).toArray()).length===0)throw new Wi(404,{message:`Collection "${t}" does not exist`});let n=o.collection(t),r=await n.find({}).limit(Yi).toArray(),i=await n.estimatedDocumentCount(),c=new Map,s=new Map;for(let u of r)for(let[f,g]of Object.entries(u)){let y=zi(g);c.has(f)||(c.set(f,new Set),s.set(f,0)),c.get(f)?.add(y),s.set(f,(s.get(f)??0)+1)}let l={},m=[];for(let[u,f]of c.entries()){let g=s.get(u)??0,y=g===r.length&&r.length>0,b=Array.from(f).filter(R=>R!=="null"),h=f.has("null")||g<r.length;y&&!h&&m.push(u),l[u]=b.length===1?{bsonType:h?[b[0],"null"]:b[0]}:{bsonType:h?[...b,"null"]:b}}let p={collection:t,estimatedDocumentCount:i,sampledDocuments:r.length,jsonSchema:{bsonType:"object",required:m.length>0?m:void 0,properties:l}};return JSON.stringify(p,null,2)}var Yi,zi,en=d(()=>{"use strict";E();Yi=200,zi=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"}});async function on({tableName:t,cursor:e,limit:o,direction:a,sort:n,order:r,filters:i,db:c}){let l=(await D(c)).collection(t),m=Jo(i??[]),p=Ue(n??"",r),u=o&&o>0?o:50,f=Ji(e),g=Number.isFinite(f)&&f>=0?f:0,y=a==="desc"?Math.max(g-u,0):g,[b,h]=await Promise.all([l.countDocuments(m),l.find(m).sort(p).skip(y).limit(u).toArray()]),R=h.map(k=>j(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?tn(A):null,prevCursor:y>0?tn(q):null}}}var tn,Ji,an=d(()=>{"use strict";E();oe();tn=t=>Buffer.from(JSON.stringify({offset:t})).toString("base64url"),Ji=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}}});import{HTTPException as nn}from"hono/http-exception";async function rn({params:t,db:e}){let{tableName:o,updates:a,primaryKey:n}=t,i=(await D(e)).collection(o),c=0,s=n||"_id",l=new Map;for(let m of a){let p=m.rowData[s];if(p==null)throw new nn(400,{message:`Primary key "${s}" not found in row data.`});l.has(p)||l.set(p,{}),l.get(p)[m.columnName]=m.value}for(let[m,p]of l.entries()){let u=s==="_id"&&Fe(m)?te(m):m,f=await i.updateOne({[s]:u},{$set:p});if(f.matchedCount===0)throw new nn(404,{message:`Record with ${s} = ${String(m)} not found in "${o}"`});c+=f.modifiedCount}return{updatedCount:c}}var sn=d(()=>{"use strict";E();oe()});import{HTTPException as ec}from"hono/http-exception";function tc(t){let e=t.match(/'([^']+)'/g);return!e||e.length===0?null:e.map(o=>o.slice(1,-1))}async function ce({tableName:t,db:e}){let o=await N(e),n=await o.request().input("tableName",t).query(`
290
290
  SELECT
291
291
  c.COLUMN_NAME AS columnName,
292
292
  c.DATA_TYPE AS dataType,
@@ -338,7 +338,7 @@ This will return the 5 customers with the highest total order value. You might a
338
338
  AND c.TABLE_NAME = @tableName
339
339
  AND c.TABLE_SCHEMA = 'dbo'
340
340
  ORDER BY c.ORDINAL_POSITION
341
- `);if(!n.recordset||n.recordset.length===0)throw new Mi(404,{message:`Table "${t}" does not exist`});let r=await o.request().input("tableName",t).query(`
341
+ `);if(!n.recordset||n.recordset.length===0)throw new ec(404,{message:`Table "${t}" does not exist`});let r=await o.request().input("tableName",t).query(`
342
342
  SELECT
343
343
  cc.COLUMN_NAME AS columnName,
344
344
  chk.CHECK_CLAUSE AS checkClause
@@ -348,18 +348,18 @@ This will return the 5 customers with the highest total order value. You might a
348
348
  AND cc.TABLE_SCHEMA = 'dbo'
349
349
  WHERE cc.TABLE_NAME = @tableName
350
350
  AND cc.TABLE_CATALOG = DB_NAME()
351
- `),i=new Map;for(let c of r.recordset){let s=Li(c.checkClause);s&&i.set(c.columnName,s)}return n.recordset.map(c=>{let s=c.dataType,l=i.get(c.columnName)??null;return{columnName:c.columnName,dataType:l?"enum":go(s),dataTypeLabel:l?"enum":To(s),isNullable:!!c.isNullable,columnDefault:c.columnDefault??null,isPrimaryKey:!!c.isPrimaryKey,isForeignKey:!!c.isForeignKey,referencedTable:c.referencedTable??null,referencedColumn:c.referencedColumn??null,enumValues:l}})}var _e=f(()=>{"use strict";Z();h()});import{HTTPException as Pi}from"hono/http-exception";async function Ga({db:t,params:e}){let{tableName:o,data:a}=e,n=await R(t),r=await se({tableName:o,db:t}),i=new Set(r.filter(b=>b.dataTypeLabel==="boolean").map(b=>b.columnName)),c=await n.request().input("tableName",o).query("SELECT name FROM sys.columns WHERE object_id = OBJECT_ID(@tableName) AND is_identity = 1"),s=new Set(c.recordset.map(b=>b.name)),l=Object.keys(a).filter(b=>!s.has(b)),m=l.map(b=>{let E=a[b];return i.has(b)&&typeof E=="string"?E==="true"?1:0:E}),p=l.map(b=>`[${b}]`).join(", "),u=l.map((b,E)=>`@param${E}`).join(", "),d=`
351
+ `),i=new Map;for(let c of r.recordset){let s=tc(c.checkClause);s&&i.set(c.columnName,s)}return n.recordset.map(c=>{let s=c.dataType,l=i.get(c.columnName)??null;return{columnName:c.columnName,dataType:l?"enum":Eo(s),dataTypeLabel:l?"enum":ho(s),isNullable:!!c.isNullable,columnDefault:c.columnDefault??null,isPrimaryKey:!!c.isPrimaryKey,isForeignKey:!!c.isForeignKey,referencedTable:c.referencedTable??null,referencedColumn:c.referencedColumn??null,enumValues:l}})}var De=d(()=>{"use strict";ee();E()});import{HTTPException as ac}from"hono/http-exception";async function cn({db:t,params:e}){let{tableName:o,data:a}=e,n=await N(t),r=await ce({tableName:o,db:t}),i=new Set(r.filter(b=>b.dataTypeLabel==="boolean").map(b=>b.columnName)),c=await n.request().input("tableName",o).query("SELECT name FROM sys.columns WHERE object_id = OBJECT_ID(@tableName) AND is_identity = 1"),s=new Set(c.recordset.map(b=>b.name)),l=Object.keys(a).filter(b=>!s.has(b)),m=l.map(b=>{let h=a[b];return i.has(b)&&typeof h=="string"?h==="true"?1:0:h}),p=l.map(b=>`[${b}]`).join(", "),u=l.map((b,h)=>`@param${h}`).join(", "),f=`
352
352
  INSERT INTO [${o}] (${p})
353
353
  VALUES (${u})
354
- `,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 Pi(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:y.rowsAffected[0]??0}}var Ja=f(()=>{"use strict";h();_e()});import{HTTPException as Ye}from"hono/http-exception";var Xa,Za=f(()=>{"use strict";h();_e();Xa=async({tableName:t,records:e,db:o})=>{if(!e||e.length===0)throw new Ye(400,{message:"At least one record is required"});let n=(await R(o)).transaction();try{let r=Object.keys(e[0]),i=r.map(l=>`[${l}]`).join(", "),c=await se({tableName:t,db:o}),s=new Set(c.filter(l=>l.dataTypeLabel==="boolean").map(l=>l.columnName));await n.begin();for(let l=0;l<e.length;l++){let m=e[l],p=n.request(),u=r.map(y=>{let b=m[y];return s.has(y)&&typeof b=="string"?b==="true"?1:0:b}),d=r.map((y,b)=>`@p${l}_${b}`).join(", ");r.forEach((y,b)=>{p.input(`p${l}_${b}`,u[b])});let g=`
354
+ `,g=n.request();l.forEach((b,h)=>{g.input(`param${h}`,m[h])});let y=await g.query(f);if(y.rowsAffected[0]===0)throw new ac(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:y.rowsAffected[0]??0}}var ln=d(()=>{"use strict";E();De()});import{HTTPException as ze}from"hono/http-exception";var mn,un=d(()=>{"use strict";E();De();mn=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 N(o)).transaction();try{let r=Object.keys(e[0]),i=r.map(l=>`[${l}]`).join(", "),c=await ce({tableName:t,db:o}),s=new Set(c.filter(l=>l.dataTypeLabel==="boolean").map(l=>l.columnName));await n.begin();for(let l=0;l<e.length;l++){let m=e[l],p=n.request(),u=r.map(y=>{let b=m[y];return s.has(y)&&typeof b=="string"?b==="true"?1:0:b}),f=r.map((y,b)=>`@p${l}_${b}`).join(", ");r.forEach((y,b)=>{p.input(`p${l}_${b}`,u[b])});let g=`
355
355
  INSERT INTO [${t}] (${i})
356
- VALUES (${d})
357
- `;try{await p.query(g)}catch(y){throw new Ye(500,{message:`Failed to insert record ${l+1}: ${y instanceof Error?y.message:String(y)}`})}}return await n.commit(),{success:!0,message:`Successfully inserted ${e.length} record${e.length!==1?"s":""}`,successCount:e.length,failureCount:0}}catch(r){throw await n.rollback(),r instanceof Ye?r:new Ye(500,{message:`Failed to bulk insert records into "${t}"`})}}});function qi(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 ki(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 en({tableData:t,db:e}){let{tableName:o,fields:a,foreignKeys:n}=t,r=await R(e),i=a.map(u=>{let d=ki(u.columnType,u.isArray??!1),g=`[${u.columnName}] ${d}`;if(!u.isNullable&&!u.isPrimaryKey&&(g+=" NOT NULL"),u.defaultValue&&!d.includes("IDENTITY")){let y=qi(u.defaultValue,d);y!==null&&(g+=` DEFAULT ${y}`)}return g}),c=a.filter(u=>u.isPrimaryKey),s=[];if(c.length>0){let u=c.map(d=>`[${d.columnName}]`).join(", ");s.push(`PRIMARY KEY (${u})`)}for(let u of a)u.isUnique&&!u.isPrimaryKey&&s.push(`UNIQUE ([${u.columnName}])`);let l=n?.map(u=>`CONSTRAINT [${`FK_${o}_${u.columnName}`}] FOREIGN KEY ([${u.columnName}]) REFERENCES [${u.referencedTable}] ([${u.referencedColumn}]) ON UPDATE ${u.onUpdate} ON DELETE ${u.onDelete}`)||[],m=[...i,...s,...l],p=`
356
+ VALUES (${f})
357
+ `;try{await p.query(g)}catch(y){throw new ze(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 ze?r:new ze(500,{message:`Failed to bulk insert records into "${t}"`})}}});function sc(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 ic(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 pn({tableData:t,db:e}){let{tableName:o,fields:a,foreignKeys:n}=t,r=await N(e),i=a.map(u=>{let f=ic(u.columnType,u.isArray??!1),g=`[${u.columnName}] ${f}`;if(!u.isNullable&&!u.isPrimaryKey&&(g+=" NOT NULL"),u.defaultValue&&!f.includes("IDENTITY")){let y=sc(u.defaultValue,f);y!==null&&(g+=` DEFAULT ${y}`)}return g}),c=a.filter(u=>u.isPrimaryKey),s=[];if(c.length>0){let u=c.map(f=>`[${f.columnName}]`).join(", ");s.push(`PRIMARY KEY (${u})`)}for(let u of a)u.isUnique&&!u.isPrimaryKey&&s.push(`UNIQUE ([${u.columnName}])`);let l=n?.map(u=>`CONSTRAINT [${`FK_${o}_${u.columnName}`}] FOREIGN KEY ([${u.columnName}]) REFERENCES [${u.referencedTable}] ([${u.referencedColumn}]) ON UPDATE ${u.onUpdate} ON DELETE ${u.onDelete}`)||[],m=[...i,...s,...l],p=`
358
358
  CREATE TABLE [${o}] (
359
359
  ${m.join(`,
360
360
  `)}
361
361
  )
362
- `;await r.request().query(p)}var tn=f(()=>{"use strict";h()});import{HTTPException as Nt}from"hono/http-exception";async function on(){let e=await(await R()).request().query(`
362
+ `;await r.request().query(p)}var dn=d(()=>{"use strict";E()});import{HTTPException as wt}from"hono/http-exception";async function fn(){let e=await(await N()).request().query(`
363
363
  SELECT
364
364
  d.name AS name,
365
365
  CAST(
@@ -375,7 +375,7 @@ This will return the 5 customers with the highest total order value. You might a
375
375
  WHERE d.database_id > 4 -- Exclude system databases
376
376
  GROUP BY d.name, d.owner_sid, d.collation_name
377
377
  ORDER BY d.name
378
- `);if(!e.recordset[0])throw new Nt(500,{message:"No databases returned from server"});return e.recordset}async function an(){let e=await(await R()).request().query("SELECT DB_NAME() AS db");if(!e.recordset[0])throw new Nt(500,{message:"No current database returned from server"});return e.recordset[0]}async function nn(){let e=await(await R()).request().query(`
378
+ `);if(!e.recordset[0])throw new wt(500,{message:"No databases returned from server"});return e.recordset}async function bn(){let e=await(await N()).request().query("SELECT DB_NAME() AS db");if(!e.recordset[0])throw new wt(500,{message:"No current database returned from server"});return e.recordset[0]}async function yn(){let e=await(await N()).request().query(`
379
379
  SELECT
380
380
  @@VERSION AS version,
381
381
  DB_NAME() AS database_name,
@@ -384,20 +384,20 @@ This will return the 5 customers with the highest total order value. You might a
384
384
  (SELECT local_tcp_port FROM sys.dm_exec_connections WHERE session_id = @@SPID) AS port,
385
385
  @@MAX_CONNECTIONS AS max_connections,
386
386
  (SELECT COUNT(*) FROM sys.dm_exec_sessions WHERE is_user_process = 1) AS active_connections
387
- `);if(!e.recordset[0])throw new Nt(500,{message:"No connection information returned from server"});let o=e.recordset[0],a=ne();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 rn=f(()=>{"use strict";h();De()});import{HTTPException as sn}from"hono/http-exception";async function cn(t){let{tableName:e,columnName:o,db:a}=t,n=await R(a),r=await n.request().input("tableName",e).query(`
387
+ `);if(!e.recordset[0])throw new wt(500,{message:"No connection information returned from server"});let o=e.recordset[0],a=se();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 gn=d(()=>{"use strict";E();we()});import{HTTPException as Tn}from"hono/http-exception";async function En(t){let{tableName:e,columnName:o,db:a}=t,n=await N(a),r=await n.request().input("tableName",e).query(`
388
388
  SELECT COUNT(*) as cnt
389
389
  FROM INFORMATION_SCHEMA.TABLES
390
390
  WHERE TABLE_CATALOG = DB_NAME()
391
391
  AND TABLE_NAME = @tableName
392
392
  AND TABLE_SCHEMA = 'dbo'
393
- `);if(!(Number(r.recordset[0]?.cnt??0)>0))throw new sn(404,{message:`Table "${e}" does not exist`});let c=await n.request().input("tableName",e).input("columnName",o).query(`
393
+ `);if(!(Number(r.recordset[0]?.cnt??0)>0))throw new Tn(404,{message:`Table "${e}" does not exist`});let c=await n.request().input("tableName",e).input("columnName",o).query(`
394
394
  SELECT COUNT(*) as cnt
395
395
  FROM INFORMATION_SCHEMA.COLUMNS
396
396
  WHERE TABLE_CATALOG = DB_NAME()
397
397
  AND TABLE_NAME = @tableName
398
398
  AND COLUMN_NAME = @columnName
399
399
  AND TABLE_SCHEMA = 'dbo'
400
- `);if(!(Number(c.recordset[0]?.cnt??0)>0))throw new sn(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 ln=f(()=>{"use strict";h()});import{HTTPException as Ee}from"hono/http-exception";async function Rt(t,e){return(await(await R(e)).request().input("tableName",t).query(`
400
+ `);if(!(Number(c.recordset[0]?.cnt??0)>0))throw new Tn(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 hn=d(()=>{"use strict";E()});import{HTTPException as Ee}from"hono/http-exception";async function Dt(t,e){return(await(await N(e)).request().input("tableName",t).query(`
401
401
  SELECT
402
402
  fk.name AS constraint_name,
403
403
  OBJECT_NAME(fk.parent_object_id) AS referencing_table,
@@ -408,13 +408,13 @@ This will return the 5 customers with the highest total order value. You might a
408
408
  INNER JOIN sys.foreign_key_columns fkc
409
409
  ON fk.object_id = fkc.constraint_object_id
410
410
  WHERE OBJECT_NAME(fk.referenced_object_id) = @tableName
411
- `)).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 Hi(t,e,o){let a=await Rt(t,o);if(a.length===0)return[];let n=[],r=await R(o),i=e.map(s=>s.value),c=new Map;for(let s of a){let l=`${s.referencingTable}.${s.referencingColumn}`;c.has(l)||c.set(l,[]),c.get(l)?.push(s)}for(let[s,l]of c){let m=l[0];if(!m||!e.find(y=>y.columnName===m.referencedColumn))continue;let u=r.request();i.forEach((y,b)=>{u.input(`pk${b}`,y)});let d=i.map((y,b)=>`@pk${b}`).join(", "),g=await u.query(`
411
+ `)).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 pc(t,e,o){let a=await Dt(t,o);if(a.length===0)return[];let n=[],r=await N(o),i=e.map(s=>s.value),c=new Map;for(let s of a){let l=`${s.referencingTable}.${s.referencingColumn}`;c.has(l)||c.set(l,[]),c.get(l)?.push(s)}for(let[s,l]of c){let m=l[0];if(!m||!e.find(y=>y.columnName===m.referencedColumn))continue;let u=r.request();i.forEach((y,b)=>{u.input(`pk${b}`,y)});let f=i.map((y,b)=>`@pk${b}`).join(", "),g=await u.query(`
412
412
  SELECT TOP 100 * FROM [${m.referencingTable}]
413
- WHERE [${m.referencingColumn}] IN (${d})
414
- `);g.recordset.length>0&&n.push({tableName:m.referencingTable,columnName:m.referencingColumn,constraintName:m.constraintName,records:g.recordset})}return n}async function mn({tableName:t,primaryKeys:e,db:o}){let a=await R(o),n=e[0]?.columnName;if(!n)throw new Ee(400,{message:"Primary key column name is required"});let r=e.map(c=>c.value),i=a.transaction();await i.begin();try{let c=i.request();r.forEach((m,p)=>{c.input(`pk${p}`,m)});let s=r.map((m,p)=>`@pk${p}`).join(", "),l=await c.query(`DELETE FROM [${t}] WHERE [${n}] IN (${s})`);return await i.commit(),{deletedCount:l.rowsAffected[0]??0,fkViolation:!1,relatedRecords:[]}}catch(c){if(await i.rollback(),c.number===Bi)return{deletedCount:0,fkViolation:!0,relatedRecords:await Hi(t,e,o)};throw c instanceof Ee?c:new Ee(500,{message:`Failed to delete records from "${t}"`})}}async function un({tableName:t,primaryKeys:e,db:o}){let a=await R(o),n=e[0]?.columnName;if(!n)throw new Ee(400,{message:"Primary key column name is required"});let r=e.map(c=>c.value),i=a.transaction();await i.begin();try{let c=await Rt(t,o),s=0,l=new Set,m=new Set,p=async(y,b,E,N)=>{let A=`${y}.${b}`;if(N.has(A))return;N.add(A);let q=await Rt(y,o);for(let O of q){let D=i.request();E.forEach((_,v)=>{D.input(`val${v}`,_)});let F=E.map((_,v)=>`@val${v}`).join(", "),$=(await D.query(`
413
+ WHERE [${m.referencingColumn}] IN (${f})
414
+ `);g.recordset.length>0&&n.push({tableName:m.referencingTable,columnName:m.referencingColumn,constraintName:m.constraintName,records:g.recordset})}return n}async function Cn({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),i=a.transaction();await i.begin();try{let c=i.request();r.forEach((m,p)=>{c.input(`pk${p}`,m)});let s=r.map((m,p)=>`@pk${p}`).join(", "),l=await c.query(`DELETE FROM [${t}] WHERE [${n}] IN (${s})`);return await i.commit(),{deletedCount:l.rowsAffected[0]??0,fkViolation:!1,relatedRecords:[]}}catch(c){if(await i.rollback(),c.number===uc)return{deletedCount:0,fkViolation:!0,relatedRecords:await pc(t,e,o)};throw c instanceof Ee?c:new Ee(500,{message:`Failed to delete records from "${t}"`})}}async function Sn({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),i=a.transaction();await i.begin();try{let c=await Dt(t,o),s=0,l=new Set,m=new Set,p=async(y,b,h,R)=>{let A=`${y}.${b}`;if(R.has(A))return;R.add(A);let q=await Dt(y,o);for(let O of q){let _=i.request();h.forEach((x,v)=>{_.input(`val${v}`,x)});let F=h.map((x,v)=>`@val${v}`).join(", "),$=(await _.query(`
415
415
  SELECT [${O.referencedColumn}] FROM [${y}]
416
416
  WHERE [${b}] IN (${F})
417
- `)).recordset.map(_=>_[O.referencedColumn]);$.length>0&&await p(O.referencingTable,O.referencingColumn,$,N)}let k=i.request();E.forEach((O,D)=>{k.input(`delVal${D}`,O)});let H=E.map((O,D)=>`@delVal${D}`).join(", "),j=await k.query(`DELETE FROM [${y}] WHERE [${b}] IN (${H})`);s+=j.rowsAffected[0]??0,l.add(y)};for(let y of c)l.has(y.referencingTable)||await p(y.referencingTable,y.referencingColumn,r,m);let u=i.request();r.forEach((y,b)=>{u.input(`mainPk${b}`,y)});let d=r.map((y,b)=>`@mainPk${b}`).join(", "),g=await u.query(`DELETE FROM [${t}] WHERE [${n}] IN (${d})`);return await i.commit(),{deletedCount:(g.rowsAffected[0]??0)+s}}catch(c){throw await i.rollback(),c instanceof Ee?c:new Ee(500,{message:`Failed to force delete records from "${t}"`})}}var Bi,pn=f(()=>{"use strict";h();Bi=547});import{HTTPException as At}from"hono/http-exception";async function fn(t,e){return(await(await R(e)).request().input("tableName",t).query(`
417
+ `)).recordset.map(x=>x[O.referencedColumn]);$.length>0&&await p(O.referencingTable,O.referencingColumn,$,R)}let k=i.request();h.forEach((O,_)=>{k.input(`delVal${_}`,O)});let H=h.map((O,_)=>`@delVal${_}`).join(", "),K=await k.query(`DELETE FROM [${y}] WHERE [${b}] IN (${H})`);s+=K.rowsAffected[0]??0,l.add(y)};for(let y of c)l.has(y.referencingTable)||await p(y.referencingTable,y.referencingColumn,r,m);let u=i.request();r.forEach((y,b)=>{u.input(`mainPk${b}`,y)});let f=r.map((y,b)=>`@mainPk${b}`).join(", "),g=await u.query(`DELETE FROM [${t}] WHERE [${n}] IN (${f})`);return await i.commit(),{deletedCount:(g.rowsAffected[0]??0)+s}}catch(c){throw await i.rollback(),c instanceof Ee?c:new Ee(500,{message:`Failed to force delete records from "${t}"`})}}var uc,Rn=d(()=>{"use strict";E();uc=547});import{HTTPException as _t}from"hono/http-exception";async function An(t,e){return(await(await N(e)).request().input("tableName",t).query(`
418
418
  SELECT
419
419
  fk.name AS constraint_name,
420
420
  OBJECT_NAME(fk.parent_object_id) AS referencing_table,
@@ -425,26 +425,26 @@ This will return the 5 customers with the highest total order value. You might a
425
425
  INNER JOIN sys.foreign_key_columns fkc
426
426
  ON fk.object_id = fkc.constraint_object_id
427
427
  WHERE OBJECT_NAME(fk.referenced_object_id) = @tableName
428
- `)).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 dn(t,e){let o=await fn(t,e);if(o.length===0)return[];let a=[],n=await R(e);for(let r of o){let i=await n.request().query(`SELECT TOP 100 * FROM [${r.referencingTable}]`);i.recordset.length>0&&a.push({tableName:r.referencingTable,columnName:r.referencingColumn,constraintName:r.constraintName,records:i.recordset})}return a}async function Vi(t,e){let a=await(await R(e)).request().query(`SELECT COUNT(*) as count FROM [${t}]`);return Number(a.recordset[0]?.count??0)}async function bn(t){let{tableName:e,db:o,cascade:a}=t,n=await R(o),r=await n.request().input("tableName",e).query(`
428
+ `)).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 Nn(t,e){let o=await An(t,e);if(o.length===0)return[];let a=[],n=await N(e);for(let r of o){let i=await n.request().query(`SELECT TOP 100 * FROM [${r.referencingTable}]`);i.recordset.length>0&&a.push({tableName:r.referencingTable,columnName:r.referencingColumn,constraintName:r.constraintName,records:i.recordset})}return a}async function bc(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 wn(t){let{tableName:e,db:o,cascade:a}=t,n=await N(o),r=await n.request().input("tableName",e).query(`
429
429
  SELECT COUNT(*) as cnt
430
430
  FROM INFORMATION_SCHEMA.TABLES
431
431
  WHERE TABLE_CATALOG = DB_NAME()
432
432
  AND TABLE_NAME = @tableName
433
433
  AND TABLE_SCHEMA = 'dbo'
434
- `);if(!(Number(r.recordset[0]?.cnt??0)>0))throw new At(404,{message:`Table "${e}" does not exist`});let c=await Vi(e,o);if(!a){let s=await dn(e,o);if(s.length>0)return{deletedCount:0,fkViolation:!0,relatedRecords:s}}try{if(a){let s=await fn(e,o);for(let l of s)await n.request().query(`ALTER TABLE [${l.referencingTable}] DROP CONSTRAINT [${l.constraintName}]`)}return await n.request().query(`DROP TABLE [${e}]`),{deletedCount:c,fkViolation:!1,relatedRecords:[]}}catch(s){if(s.number===Ki)return{deletedCount:0,fkViolation:!0,relatedRecords:await dn(e,o)};throw s instanceof At?s:new At(500,{message:`Failed to delete table "${e}"`})}}var Ki,yn=f(()=>{"use strict";h();Ki=3726});import{HTTPException as Wi}from"hono/http-exception";async function gn({tableName:t,db:e}){let a=await(await R(e)).request().query(`SELECT * FROM [${t}]`);if(!a.recordset||a.recordset.length===0)throw new Wi(404,{message:`Table "${t}" does not exist or has no data`});return{cols:Object.keys(a.recordset[0]),rows:a.recordset}}var Tn=f(()=>{"use strict";h()});import{HTTPException as zi}from"hono/http-exception";var En,hn=f(()=>{"use strict";h();En=async({query:t,db:e})=>{let o=await R(e);if(!t||!t.trim())throw new zi(400,{message:"Query is required"});let a=t.trim().replace(/;+$/,""),n=performance.now(),r=await o.request().query(a),i=performance.now()-n;if(r.recordset){let c=r.recordset;return{columns:r.recordset.columns?Object.keys(r.recordset.columns):Object.keys(c[0]??{}),rows:c,rowCount:c.length,duration:i,message:c.length===0?"OK":void 0}}return{columns:[],rows:[],rowCount:r.rowsAffected[0]??0,duration:i,message:`OK \u2014 ${r.rowsAffected[0]??0} row(s) affected`}}});async function Cn(t){let e=await R(t),a=await e.request().query(`
434
+ `);if(!(Number(r.recordset[0]?.cnt??0)>0))throw new _t(404,{message:`Table "${e}" does not exist`});let c=await bc(e,o);if(!a){let s=await Nn(e,o);if(s.length>0)return{deletedCount:0,fkViolation:!0,relatedRecords:s}}try{if(a){let s=await An(e,o);for(let l of s)await n.request().query(`ALTER TABLE [${l.referencingTable}] DROP CONSTRAINT [${l.constraintName}]`)}return await n.request().query(`DROP TABLE [${e}]`),{deletedCount:c,fkViolation:!1,relatedRecords:[]}}catch(s){if(s.number===fc)return{deletedCount:0,fkViolation:!0,relatedRecords:await Nn(e,o)};throw s instanceof _t?s:new _t(500,{message:`Failed to delete table "${e}"`})}}var fc,Dn=d(()=>{"use strict";E();fc=3726});import{HTTPException as gc}from"hono/http-exception";async function _n({tableName:t,db:e}){let a=await(await N(e)).request().query(`SELECT * FROM [${t}]`);if(!a.recordset||a.recordset.length===0)throw new gc(404,{message:`Table "${t}" does not exist or has no data`});return{cols:Object.keys(a.recordset[0]),rows:a.recordset}}var xn=d(()=>{"use strict";E()});import{HTTPException as Ec}from"hono/http-exception";var Mn,Ln=d(()=>{"use strict";E();Mn=async({query:t,db:e})=>{let o=await N(e);if(!t||!t.trim())throw new Ec(400,{message:"Query is required"});let a=t.trim().replace(/;+$/,""),n=performance.now(),r=await o.request().query(a),i=performance.now()-n;if(r.recordset){let c=r.recordset;return{columns:r.recordset.columns?Object.keys(r.recordset.columns):Object.keys(c[0]??{}),rows:c,rowCount:c.length,duration:i,message:c.length===0?"OK":void 0}}return{columns:[],rows:[],rowCount:r.rowsAffected[0]??0,duration:i,message:`OK \u2014 ${r.rowsAffected[0]??0} row(s) affected`}}});async function On(t){let e=await N(t),a=await e.request().query(`
435
435
  SELECT table_name AS tableName
436
436
  FROM information_schema.tables
437
437
  WHERE table_catalog = DB_NAME()
438
438
  AND table_type = 'BASE TABLE'
439
439
  AND table_schema = 'dbo'
440
440
  ORDER BY table_name
441
- `);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 Sn=f(()=>{"use strict";h()});import{HTTPException as Nn}from"hono/http-exception";async function Rn({tableName:t,db:e}){let o=await R(e),a=await o.request().input("tableName",t).query(`
441
+ `);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 Pn=d(()=>{"use strict";E()});import{HTTPException as In}from"hono/http-exception";async function $n({tableName:t,db:e}){let o=await N(e),a=await o.request().input("tableName",t).query(`
442
442
  SELECT COUNT(*) as cnt
443
443
  FROM INFORMATION_SCHEMA.TABLES
444
444
  WHERE TABLE_CATALOG = DB_NAME()
445
445
  AND TABLE_NAME = @tableName
446
446
  AND TABLE_SCHEMA = 'dbo'
447
- `);if(!(Number(a.recordset[0]?.cnt??0)>0))throw new Nn(404,{message:`Table "${t}" does not exist`});let r=await o.request().input("tableName",t).query(`
447
+ `);if(!(Number(a.recordset[0]?.cnt??0)>0))throw new In(404,{message:`Table "${t}" does not exist`});let r=await o.request().input("tableName",t).query(`
448
448
  SELECT
449
449
  c.COLUMN_NAME,
450
450
  c.DATA_TYPE,
@@ -489,20 +489,20 @@ This will return the 5 customers with the highest total order value. You might a
489
489
  AND c.TABLE_NAME = @tableName
490
490
  AND c.TABLE_SCHEMA = 'dbo'
491
491
  ORDER BY c.ORDINAL_POSITION
492
- `);if(!r.recordset||r.recordset.length===0)throw new Nn(500,{message:`Failed to retrieve schema for table "${t}"`});let i=r.recordset.map(s=>{let l=` [${s.COLUMN_NAME}] ${s.DATA_TYPE}`;return s.CHARACTER_MAXIMUM_LENGTH?l+=s.CHARACTER_MAXIMUM_LENGTH===-1?"(MAX)":`(${s.CHARACTER_MAXIMUM_LENGTH})`:s.NUMERIC_PRECISION&&(s.NUMERIC_SCALE?l+=`(${s.NUMERIC_PRECISION},${s.NUMERIC_SCALE})`:l+=`(${s.NUMERIC_PRECISION})`),l+=s.IS_NULLABLE==="YES"?" NULL":" NOT NULL",s.COLUMN_DEFAULT&&(l+=` DEFAULT ${s.COLUMN_DEFAULT}`),l});return`CREATE TABLE [${t}] (
492
+ `);if(!r.recordset||r.recordset.length===0)throw new In(500,{message:`Failed to retrieve schema for table "${t}"`});let i=r.recordset.map(s=>{let l=` [${s.COLUMN_NAME}] ${s.DATA_TYPE}`;return s.CHARACTER_MAXIMUM_LENGTH?l+=s.CHARACTER_MAXIMUM_LENGTH===-1?"(MAX)":`(${s.CHARACTER_MAXIMUM_LENGTH})`:s.NUMERIC_PRECISION&&(s.NUMERIC_SCALE?l+=`(${s.NUMERIC_PRECISION},${s.NUMERIC_SCALE})`:l+=`(${s.NUMERIC_PRECISION})`),l+=s.IS_NULLABLE==="YES"?" NULL":" NOT NULL",s.COLUMN_DEFAULT&&(l+=` DEFAULT ${s.COLUMN_DEFAULT}`),l});return`CREATE TABLE [${t}] (
493
493
  ${i.join(`,
494
494
  `)}
495
- )`}var An=f(()=>{"use strict";h()});var wn,Dn=f(()=>{"use strict";h();wn=async({tableName:t,cursor:e="",limit:o=50,direction:a="asc",sort:n=[],order:r="asc",filters:i=[],db:c})=>{let s=await R(c),l=e?Number.parseInt(e,10):0,m=l*o,p="";Array.isArray(n)&&n.length>0?p=`ORDER BY ${n.map(q=>`[${q.columnName}] ${q.direction.toUpperCase()}`).join(", ")}`:typeof n=="string"&&n?p=`ORDER BY [${n}] ${r.toUpperCase()}`:p="ORDER BY (SELECT NULL)";let u=await s.request().query(`SELECT COUNT(*) as total FROM [${t}]`),d=Number(u.recordset[0]?.total??0),y=(await s.request().query(`
495
+ )`}var qn=d(()=>{"use strict";E()});var kn,vn=d(()=>{"use strict";E();kn=async({tableName:t,cursor:e="",limit:o=50,direction:a="asc",sort:n=[],order:r="asc",filters:i=[],db:c})=>{let s=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 s.request().query(`SELECT COUNT(*) as total FROM [${t}]`),f=Number(u.recordset[0]?.total??0),y=(await s.request().query(`
496
496
  SELECT *
497
497
  FROM [${t}]
498
498
  ${p}
499
499
  OFFSET ${m} ROWS
500
500
  FETCH NEXT ${o+1} ROWS ONLY
501
- `)).recordset,b=y.length>o;b&&(y=y.slice(0,o));let E=b?String(l+1):null,N=l>0?String(l-1):null;return{data:y,meta:{limit:o,total:d,hasNextPage:b,hasPreviousPage:l>0,nextCursor:E,prevCursor:N}}}});import{HTTPException as ze}from"hono/http-exception";async function _n({params:t,db:e}){let{tableName:o,updates:a,primaryKey:n}=t,r=await R(e),i=await se({tableName:o,db:e}),c=new Set(i.filter(m=>m.dataTypeLabel==="boolean").map(m=>m.columnName)),s=new Map;for(let m of a){let p=m.rowData[n];if(p==null)throw new ze(400,{message:`Primary key "${n}" not found in row data.`});s.has(p)||s.set(p,[]),s.get(p)?.push({columnName:m.columnName,value:m.value,rowData:m.rowData})}let l=r.transaction();await l.begin();try{let m=0;for(let[p,u]of s.entries()){let d=u.map((E,N)=>`[${E.columnName}] = @value${N}`),g=l.request();u.forEach((E,N)=>{let A=E.value;A!==null&&typeof A=="object"&&(A=JSON.stringify(A)),c.has(E.columnName)&&typeof A=="string"&&(A=A==="true"?1:0),g.input(`value${N}`,A)}),g.input("pkValue",p);let y=`
501
+ `)).recordset,b=y.length>o;b&&(y=y.slice(0,o));let h=b?String(l+1):null,R=l>0?String(l-1):null;return{data:y,meta:{limit:o,total:f,hasNextPage:b,hasPreviousPage:l>0,nextCursor:h,prevCursor:R}}}});import{HTTPException as Ge}from"hono/http-exception";async function Un({params:t,db:e}){let{tableName:o,updates:a,primaryKey:n}=t,r=await N(e),i=await ce({tableName:o,db:e}),c=new Set(i.filter(m=>m.dataTypeLabel==="boolean").map(m=>m.columnName)),s=new Map;for(let m of a){let p=m.rowData[n];if(p==null)throw new Ge(400,{message:`Primary key "${n}" not found in row data.`});s.has(p)||s.set(p,[]),s.get(p)?.push({columnName:m.columnName,value:m.value,rowData:m.rowData})}let l=r.transaction();await l.begin();try{let m=0;for(let[p,u]of s.entries()){let f=u.map((h,R)=>`[${h.columnName}] = @value${R}`),g=l.request();u.forEach((h,R)=>{let A=h.value;A!==null&&typeof A=="object"&&(A=JSON.stringify(A)),c.has(h.columnName)&&typeof A=="string"&&(A=A==="true"?1:0),g.input(`value${R}`,A)}),g.input("pkValue",p);let y=`
502
502
  UPDATE [${o}]
503
- SET ${d.join(", ")}
503
+ SET ${f.join(", ")}
504
504
  WHERE [${n}] = @pkValue
505
- `,b=await g.query(y);if(b.rowsAffected[0]===0)throw new ze(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 ze?m:new ze(500,{message:`Failed to update records in "${o}"`})}}var xn=f(()=>{"use strict";h();_e()});import{HTTPException as tc}from"hono/http-exception";function oc(t){let e=t.match(/^(?:enum|set)\((.+)\)$/i);return e?.[1]?e[1].split(",").map(o=>o.trim().replace(/^'|'$/g,"")):null}async function ie({tableName:t,db:e}){let o=S(e),a=`
505
+ `,b=await g.query(y);if(b.rowsAffected[0]===0)throw new Ge(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 Ge?m:new Ge(500,{message:`Failed to update records in "${o}"`})}}var Fn=d(()=>{"use strict";E();De()});import{HTTPException as Ac}from"hono/http-exception";function wc(t){let e=t.match(/^(?:enum|set)\((.+)\)$/i);return e?.[1]?e[1].split(",").map(o=>o.trim().replace(/^'|'$/g,"")):null}async function le({tableName:t,db:e}){let o=S(e),a=`
506
506
  SELECT
507
507
  c.COLUMN_NAME AS columnName,
508
508
  c.DATA_TYPE AS dataType,
@@ -522,18 +522,18 @@ ${i.join(`,
522
522
  WHERE c.TABLE_SCHEMA = DATABASE()
523
523
  AND c.TABLE_NAME = ?
524
524
  ORDER BY c.ORDINAL_POSITION
525
- `,[n]=await o.execute(a,[t]);if(!n||n.length===0)throw new tc(404,{message:`Table "${t}" does not exist`});return n.map(r=>{let i=r.dataType,c=r.columnType,l=i==="enum"||i==="set"?oc(c):null;return{columnName:r.columnName,dataType:bo(i,c),dataTypeLabel:yo(i,c),isNullable:!!r.isNullable,columnDefault:r.columnDefault??null,isPrimaryKey:!!r.isPrimaryKey,isForeignKey:!!r.isForeignKey,referencedTable:r.referencedTable??null,referencedColumn:r.referencedColumn??null,enumValues:l}})}var xe=f(()=>{"use strict";Z();h()});import{HTTPException as nc}from"hono/http-exception";async function Mn({db:t,params:e}){let{tableName:o,data:a}=e,n=S(t),r=await ie({tableName:o,db:t}),i=new Set(r.filter(d=>d.dataTypeLabel==="boolean").map(d=>d.columnName)),c=Object.keys(a),s=Object.values(a).map((d,g)=>{let y=c[g];return i.has(y)&&typeof d=="string"?d==="true"?1:0:d}),l=c.map(()=>"?").join(", "),m=c.map(d=>`\`${d}\``).join(", "),p=`
525
+ `,[n]=await o.execute(a,[t]);if(!n||n.length===0)throw new Ac(404,{message:`Table "${t}" does not exist`});return n.map(r=>{let i=r.dataType,c=r.columnType,l=i==="enum"||i==="set"?wc(c):null;return{columnName:r.columnName,dataType:go(i,c),dataTypeLabel:To(i,c),isNullable:!!r.isNullable,columnDefault:r.columnDefault??null,isPrimaryKey:!!r.isPrimaryKey,isForeignKey:!!r.isForeignKey,referencedTable:r.referencedTable??null,referencedColumn:r.referencedColumn??null,enumValues:l}})}var _e=d(()=>{"use strict";ee();E()});import{HTTPException as _c}from"hono/http-exception";async function Bn({db:t,params:e}){let{tableName:o,data:a}=e,n=S(t),r=await le({tableName:o,db:t}),i=new Set(r.filter(f=>f.dataTypeLabel==="boolean").map(f=>f.columnName)),c=Object.keys(a),s=Object.values(a).map((f,g)=>{let y=c[g];return i.has(y)&&typeof f=="string"?f==="true"?1:0:f}),l=c.map(()=>"?").join(", "),m=c.map(f=>`\`${f}\``).join(", "),p=`
526
526
  INSERT INTO \`${o}\` (${m})
527
527
  VALUES (${l})
528
- `,[u]=await n.execute(p,s);if(u.affectedRows===0)throw new nc(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:u.affectedRows}}var Ln=f(()=>{"use strict";h();xe()});import{HTTPException as Ge}from"hono/http-exception";var On,Pn=f(()=>{"use strict";h();xe();On=async({tableName:t,records:e,db:o})=>{if(!e||e.length===0)throw new Ge(400,{message:"At least one record is required"});let n=await S(o).getConnection();try{let r=Object.keys(e[0]),i=r.map(l=>`\`${l}\``).join(", "),c=await ie({tableName:t,db:o}),s=new Set(c.filter(l=>l.dataTypeLabel==="boolean").map(l=>l.columnName));await n.beginTransaction();for(let l=0;l<e.length;l++){let m=e[l],p=r.map(g=>{let y=m[g];return s.has(g)&&typeof y=="string"?y==="true"?1:0:y}),u=r.map(()=>"?").join(", "),d=`
528
+ `,[u]=await n.execute(p,s);if(u.affectedRows===0)throw new _c(500,{message:`Failed to insert record into "${o}"`});return{insertedCount:u.affectedRows}}var Hn=d(()=>{"use strict";E();_e()});import{HTTPException as Je}from"hono/http-exception";var jn,Kn=d(()=>{"use strict";E();_e();jn=async({tableName:t,records:e,db:o})=>{if(!e||e.length===0)throw new Je(400,{message:"At least one record is required"});let n=await S(o).getConnection();try{let r=Object.keys(e[0]),i=r.map(l=>`\`${l}\``).join(", "),c=await le({tableName:t,db:o}),s=new Set(c.filter(l=>l.dataTypeLabel==="boolean").map(l=>l.columnName));await n.beginTransaction();for(let l=0;l<e.length;l++){let m=e[l],p=r.map(g=>{let y=m[g];return s.has(g)&&typeof y=="string"?y==="true"?1:0:y}),u=r.map(()=>"?").join(", "),f=`
529
529
  INSERT INTO \`${t}\` (${i})
530
530
  VALUES (${u})
531
- `;try{await n.execute(d,p)}catch(g){throw new Ge(500,{message:`Failed to insert record ${l+1}: ${g instanceof Error?g.message:String(g)}`})}}return await n.commit(),{success:!0,message:`Successfully inserted ${e.length} record${e.length!==1?"s":""}`,successCount:e.length,failureCount:0}}catch(r){throw await n.rollback(),r instanceof Ge?r:new Ge(500,{message:`Failed to bulk insert records into "${t}"`})}finally{n.release()}}});function ic(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 cc(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=cc(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=ic(t.defaultValue,o);n!==null&&(a+=` DEFAULT ${n}`)}return(t.isIdentity||e.preserveAutoIncrement)&&!o.includes("AUTO_INCREMENT")&&(a+=" AUTO_INCREMENT"),e.includeUnique&&t.isUnique&&!t.isPrimaryKey&&(a+=" UNIQUE"),e.includePrimaryKey&&t.isPrimaryKey&&(a+=" PRIMARY KEY"),a}var Je=f(()=>{"use strict"});async function In({tableData:t,db:e}){let{tableName:o,fields:a,foreignKeys:n}=t,r=S(e),i=a.map(u=>he(u)),c=a.filter(u=>u.isPrimaryKey),s=[];if(c.length>0){let u=c.map(d=>`\`${d.columnName}\``).join(", ");s.push(`PRIMARY KEY (${u})`)}for(let u of a)u.isUnique&&!u.isPrimaryKey&&s.push(`UNIQUE KEY \`uq_${o}_${u.columnName}\` (\`${u.columnName}\`)`);let l=n?.map(u=>`CONSTRAINT \`${`fk_${o}_${u.columnName}_${u.referencedTable}_${u.referencedColumn}`}\` FOREIGN KEY (\`${u.columnName}\`) REFERENCES \`${u.referencedTable}\` (\`${u.referencedColumn}\`) ON UPDATE ${u.onUpdate} ON DELETE ${u.onDelete}`)||[],m=[...i,...s,...l],p=`
531
+ `;try{await n.execute(f,p)}catch(g){throw new Je(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 Je?r:new Je(500,{message:`Failed to bulk insert records into "${t}"`})}finally{n.release()}}});function Lc(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 Oc(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=Oc(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=Lc(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 Xe=d(()=>{"use strict"});async function Vn({tableData:t,db:e}){let{tableName:o,fields:a,foreignKeys:n}=t,r=S(e),i=a.map(u=>he(u)),c=a.filter(u=>u.isPrimaryKey),s=[];if(c.length>0){let u=c.map(f=>`\`${f.columnName}\``).join(", ");s.push(`PRIMARY KEY (${u})`)}for(let u of a)u.isUnique&&!u.isPrimaryKey&&s.push(`UNIQUE KEY \`uq_${o}_${u.columnName}\` (\`${u.columnName}\`)`);let l=n?.map(u=>`CONSTRAINT \`${`fk_${o}_${u.columnName}_${u.referencedTable}_${u.referencedColumn}`}\` FOREIGN KEY (\`${u.columnName}\`) REFERENCES \`${u.referencedTable}\` (\`${u.referencedColumn}\`) ON UPDATE ${u.onUpdate} ON DELETE ${u.onDelete}`)||[],m=[...i,...s,...l],p=`
532
532
  CREATE TABLE \`${o}\` (
533
533
  ${m.join(`,
534
534
  `)}
535
535
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
536
- `;await r.execute(p)}var $n=f(()=>{"use strict";h();Je()});import{HTTPException as wt}from"hono/http-exception";async function qn(){let t=S(),[e]=await t.execute(`
536
+ `;await r.execute(p)}var Qn=d(()=>{"use strict";E();Xe()});import{HTTPException as xt}from"hono/http-exception";async function Wn(){let t=S(),[e]=await t.execute(`
537
537
  SELECT
538
538
  s.SCHEMA_NAME AS name,
539
539
  CONCAT(
@@ -550,7 +550,7 @@ ${i.join(`,
550
550
  ON t.TABLE_SCHEMA = s.SCHEMA_NAME
551
551
  GROUP BY s.SCHEMA_NAME, s.DEFAULT_CHARACTER_SET_NAME
552
552
  ORDER BY s.SCHEMA_NAME
553
- `);if(!e[0])throw new wt(500,{message:"No databases returned from server"});return e}async function kn(){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 vn(){let t=S(),[e]=await t.execute(`
553
+ `);if(!e[0])throw new xt(500,{message:"No databases returned from server"});return e}async function Yn(){let t=S(),[e]=await t.execute("SELECT DATABASE() AS db");if(!e[0])throw new xt(500,{message:"No current database returned from server"});return e[0]}async function zn(){let t=S(),[e]=await t.execute(`
554
554
  SELECT
555
555
  VERSION() AS version,
556
556
  DATABASE() AS database_name,
@@ -558,11 +558,11 @@ ${i.join(`,
558
558
  @@hostname AS host,
559
559
  @@port AS port,
560
560
  @@max_connections AS max_connections
561
- `),[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=ne();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 Un=f(()=>{"use strict";h();De()});import{HTTPException as Fn}from"hono/http-exception";async function Bn(t){let{tableName:e,columnName:o,db:a}=t,n=S(a),[r]=await n.execute(`SELECT COUNT(*) as cnt
561
+ `),[o]=await t.execute("SELECT COUNT(*) AS cnt FROM information_schema.PROCESSLIST");if(!e[0])throw new xt(500,{message:"No connection information returned from server"});let a=e[0],n=Number(o[0]?.cnt??0),r=se();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 Gn=d(()=>{"use strict";E();we()});import{HTTPException as Jn}from"hono/http-exception";async function Xn(t){let{tableName:e,columnName:o,db:a}=t,n=S(a),[r]=await n.execute(`SELECT COUNT(*) as cnt
562
562
  FROM information_schema.TABLES
563
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(r[0]?.cnt??0)>0))throw new Fn(404,{message:`Table "${e}" does not exist`});let[c]=await n.execute(`SELECT COUNT(*) as cnt
563
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(r[0]?.cnt??0)>0))throw new Jn(404,{message:`Table "${e}" does not exist`});let[c]=await n.execute(`SELECT COUNT(*) as cnt
564
564
  FROM information_schema.COLUMNS
565
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,o]);if(!(Number(c[0]?.cnt??0)>0))throw new Fn(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 Hn=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
565
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,o]);if(!(Number(c[0]?.cnt??0)>0))throw new Jn(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 Zn=d(()=>{"use strict";E()});import{HTTPException as Ce}from"hono/http-exception";async function Mt(t,e){let o=S(e),[a]=await o.execute(`SELECT
566
566
  kcu.CONSTRAINT_NAME AS constraint_name,
567
567
  kcu.TABLE_NAME AS referencing_table,
568
568
  kcu.COLUMN_NAME AS referencing_column,
@@ -575,10 +575,10 @@ ${i.join(`,
575
575
  AND kcu.TABLE_NAME = tc.TABLE_NAME
576
576
  WHERE tc.CONSTRAINT_TYPE = 'FOREIGN KEY'
577
577
  AND kcu.TABLE_SCHEMA = DATABASE()
578
- 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 dc(t,e,o){let a=await Dt(t,o);if(a.length===0)return[];let n=[],r=S(o),i=e.map(s=>s.value),c=new Map;for(let s of a){let l=`${s.referencingTable}.${s.referencingColumn}`;c.has(l)||c.set(l,[]),c.get(l)?.push(s)}for(let[s,l]of c){let m=l[0];if(!m||!e.find(g=>g.columnName===m.referencedColumn))continue;let u=i.map(()=>"?").join(", "),[d]=await r.execute(`SELECT * FROM \`${m.referencingTable}\`
578
+ 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 kc(t,e,o){let a=await Mt(t,o);if(a.length===0)return[];let n=[],r=S(o),i=e.map(s=>s.value),c=new Map;for(let s of a){let l=`${s.referencingTable}.${s.referencingColumn}`;c.has(l)||c.set(l,[]),c.get(l)?.push(s)}for(let[s,l]of c){let m=l[0];if(!m||!e.find(g=>g.columnName===m.referencedColumn))continue;let u=i.map(()=>"?").join(", "),[f]=await r.execute(`SELECT * FROM \`${m.referencingTable}\`
579
579
  WHERE \`${m.referencingColumn}\` IN (${u})
580
- LIMIT 100`,i);d.length>0&&n.push({tableName:m.referencingTable,columnName:m.referencingColumn,constraintName:m.constraintName,records:d})}return n}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(s=>s.value),i=r.map(()=>"?").join(", "),c=await a.getConnection();await c.beginTransaction();try{let[s]=await c.execute(`DELETE FROM \`${t}\` WHERE \`${n}\` IN (${i})`,r);return await c.commit(),{deletedCount:s.affectedRows,fkViolation:!1,relatedRecords:[]}}catch(s){if(await c.rollback(),s.errno===pc)return{deletedCount:0,fkViolation:!0,relatedRecords:await dc(t,e,o)};throw s instanceof Ce?s:new Ce(500,{message:`Failed to delete records from "${t}"`})}finally{c.release()}}async function Kn({tableName:t,primaryKeys:e,db:o}){let a=S(o),n=e[0]?.columnName;if(!n)throw new Ce(400,{message:"Primary key column name is required"});let r=e.map(c=>c.value),i=await a.getConnection();await i.beginTransaction();try{await i.execute("SET FOREIGN_KEY_CHECKS = 0");let c=await Dt(t,o),s=0,l=new Set,m=new Set,p=async(g,y,b,E)=>{let N=`${g}.${y}`;if(E.has(N))return;E.add(N);let A=await Dt(g,o);for(let H of A){let j=b.map(()=>"?").join(", "),[O]=await i.execute(`SELECT \`${H.referencedColumn}\` FROM \`${g}\`
581
- WHERE \`${y}\` IN (${j})`,b),D=O.map(F=>F[H.referencedColumn]);D.length>0&&await p(H.referencingTable,H.referencingColumn,D,E)}let q=b.map(()=>"?").join(", "),[k]=await i.execute(`DELETE FROM \`${g}\` WHERE \`${y}\` IN (${q})`,b);s+=k.affectedRows,l.add(g)};for(let g of c)l.has(g.referencingTable)||await p(g.referencingTable,g.referencingColumn,r,m);let u=r.map(()=>"?").join(", "),[d]=await i.execute(`DELETE FROM \`${t}\` WHERE \`${n}\` IN (${u})`,r);return await i.execute("SET FOREIGN_KEY_CHECKS = 1"),await i.commit(),{deletedCount:d.affectedRows+s}}catch(c){throw await i.execute("SET FOREIGN_KEY_CHECKS = 1").catch(()=>{}),await i.rollback(),c instanceof Ce?c:new Ce(500,{message:`Failed to force delete records from "${t}"`})}finally{i.release()}}var pc,Vn=f(()=>{"use strict";h();pc=1451});import{HTTPException as _t}from"hono/http-exception";async function gc(t,e){let o=S(e),[a]=await o.execute(`SELECT
580
+ LIMIT 100`,i);f.length>0&&n.push({tableName:m.referencingTable,columnName:m.referencingColumn,constraintName:m.constraintName,records:f})}return n}async function er({tableName:t,primaryKeys:e,db:o}){let a=S(o),n=e[0]?.columnName;if(!n)throw new Ce(400,{message:"Primary key column name is required"});let r=e.map(s=>s.value),i=r.map(()=>"?").join(", "),c=await a.getConnection();await c.beginTransaction();try{let[s]=await c.execute(`DELETE FROM \`${t}\` WHERE \`${n}\` IN (${i})`,r);return await c.commit(),{deletedCount:s.affectedRows,fkViolation:!1,relatedRecords:[]}}catch(s){if(await c.rollback(),s.errno===qc)return{deletedCount:0,fkViolation:!0,relatedRecords:await kc(t,e,o)};throw s instanceof Ce?s:new Ce(500,{message:`Failed to delete records from "${t}"`})}finally{c.release()}}async function tr({tableName:t,primaryKeys:e,db:o}){let a=S(o),n=e[0]?.columnName;if(!n)throw new Ce(400,{message:"Primary key column name is required"});let r=e.map(c=>c.value),i=await a.getConnection();await i.beginTransaction();try{await i.execute("SET FOREIGN_KEY_CHECKS = 0");let c=await Mt(t,o),s=0,l=new Set,m=new Set,p=async(g,y,b,h)=>{let R=`${g}.${y}`;if(h.has(R))return;h.add(R);let A=await Mt(g,o);for(let H of A){let K=b.map(()=>"?").join(", "),[O]=await i.execute(`SELECT \`${H.referencedColumn}\` FROM \`${g}\`
581
+ WHERE \`${y}\` IN (${K})`,b),_=O.map(F=>F[H.referencedColumn]);_.length>0&&await p(H.referencingTable,H.referencingColumn,_,h)}let q=b.map(()=>"?").join(", "),[k]=await i.execute(`DELETE FROM \`${g}\` WHERE \`${y}\` IN (${q})`,b);s+=k.affectedRows,l.add(g)};for(let g of c)l.has(g.referencingTable)||await p(g.referencingTable,g.referencingColumn,r,m);let u=r.map(()=>"?").join(", "),[f]=await i.execute(`DELETE FROM \`${t}\` WHERE \`${n}\` IN (${u})`,r);return await i.execute("SET FOREIGN_KEY_CHECKS = 1"),await i.commit(),{deletedCount:f.affectedRows+s}}catch(c){throw await i.execute("SET FOREIGN_KEY_CHECKS = 1").catch(()=>{}),await i.rollback(),c instanceof Ce?c:new Ce(500,{message:`Failed to force delete records from "${t}"`})}finally{i.release()}}var qc,or=d(()=>{"use strict";E();qc=1451});import{HTTPException as Lt}from"hono/http-exception";async function Bc(t,e){let o=S(e),[a]=await o.execute(`SELECT
582
582
  kcu.CONSTRAINT_NAME AS constraint_name,
583
583
  kcu.TABLE_NAME AS referencing_table,
584
584
  kcu.COLUMN_NAME AS referencing_column,
@@ -591,38 +591,38 @@ ${i.join(`,
591
591
  AND kcu.TABLE_NAME = tc.TABLE_NAME
592
592
  WHERE tc.CONSTRAINT_TYPE = 'FOREIGN KEY'
593
593
  AND kcu.TABLE_SCHEMA = DATABASE()
594
- 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 Qn(t,e){let o=await gc(t,e);if(o.length===0)return[];let a=[],n=S(e);for(let r of o){let[i]=await n.execute(`SELECT * FROM \`${r.referencingTable}\` LIMIT 100`);i.length>0&&a.push({tableName:r.referencingTable,columnName:r.referencingColumn,constraintName:r.constraintName,records:i})}return a}async function Tc(t,e){let o=S(e),[a]=await o.execute(`SELECT COUNT(*) as count FROM \`${t}\``);return Number(a[0]?.count??0)}async function Wn(t){let{tableName:e,db:o,cascade:a}=t,n=S(o),[r]=await n.execute(`SELECT COUNT(*) as cnt
594
+ 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 ar(t,e){let o=await Bc(t,e);if(o.length===0)return[];let a=[],n=S(e);for(let r of o){let[i]=await n.execute(`SELECT * FROM \`${r.referencingTable}\` LIMIT 100`);i.length>0&&a.push({tableName:r.referencingTable,columnName:r.referencingColumn,constraintName:r.constraintName,records:i})}return a}async function Hc(t,e){let o=S(e),[a]=await o.execute(`SELECT COUNT(*) as count FROM \`${t}\``);return Number(a[0]?.count??0)}async function nr(t){let{tableName:e,db:o,cascade:a}=t,n=S(o),[r]=await n.execute(`SELECT COUNT(*) as cnt
595
595
  FROM information_schema.TABLES
596
- 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 Tc(e,o);if(!a){let s=await Qn(e,o);if(s.length>0)return{deletedCount:0,fkViolation:!0,relatedRecords:s}}try{if(a){let s=await n.getConnection();try{await s.execute("SET FOREIGN_KEY_CHECKS = 0"),await s.execute(`DROP TABLE \`${e}\``),await s.execute("SET FOREIGN_KEY_CHECKS = 1")}finally{s.release()}}else await n.execute(`DROP TABLE \`${e}\``);return{deletedCount:c,fkViolation:!1,relatedRecords:[]}}catch(s){await n.execute("SET FOREIGN_KEY_CHECKS = 1").catch(()=>{});let l=s;if(l.errno===bc||l.errno===yc)return{deletedCount:0,fkViolation:!0,relatedRecords:await Qn(e,o)};throw s instanceof _t?s:new _t(500,{message:`Failed to delete table "${e}"`})}}var bc,yc,Yn=f(()=>{"use strict";h();bc=1217,yc=1451});import{HTTPException as hc}from"hono/http-exception";async function zn({tableName:t,db:e}){let o=S(e),[a]=await o.execute(`SELECT * FROM \`${t}\``);if(!a||a.length===0)throw new hc(404,{message:`Table "${t}" does not exist or has no data`});return{cols:Object.keys(a[0]),rows:a}}var Gn=f(()=>{"use strict";h()});import{HTTPException as Sc}from"hono/http-exception";var Jn,Xn=f(()=>{"use strict";h();Jn=async({query:t,db:e})=>{let o=S(e);if(!t||!t.trim())throw new Sc(400,{message:"Query is required"});let a=t.trim().replace(/;+$/,""),n=performance.now(),[r,i]=await o.execute(a),c=performance.now()-n;if(Array.isArray(r)){let l=r;return{columns:i?i.map(p=>p.name):Object.keys(l[0]??{}),rows:l,rowCount:l.length,duration:c,message:l.length===0?"OK":void 0}}let s=r;return{columns:[],rows:[],rowCount:s.affectedRows,duration:c,message:`OK \u2014 ${s.affectedRows} row(s) affected`}}});async function Zn(t){let e=S(t),o=`
596
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(r[0]?.cnt??0)>0))throw new Lt(404,{message:`Table "${e}" does not exist`});let c=await Hc(e,o);if(!a){let s=await ar(e,o);if(s.length>0)return{deletedCount:0,fkViolation:!0,relatedRecords:s}}try{if(a){let s=await n.getConnection();try{await s.execute("SET FOREIGN_KEY_CHECKS = 0"),await s.execute(`DROP TABLE \`${e}\``),await s.execute("SET FOREIGN_KEY_CHECKS = 1")}finally{s.release()}}else await n.execute(`DROP TABLE \`${e}\``);return{deletedCount:c,fkViolation:!1,relatedRecords:[]}}catch(s){await n.execute("SET FOREIGN_KEY_CHECKS = 1").catch(()=>{});let l=s;if(l.errno===Uc||l.errno===Fc)return{deletedCount:0,fkViolation:!0,relatedRecords:await ar(e,o)};throw s instanceof Lt?s:new Lt(500,{message:`Failed to delete table "${e}"`})}}var Uc,Fc,rr=d(()=>{"use strict";E();Uc=1217,Fc=1451});import{HTTPException as Kc}from"hono/http-exception";async function sr({tableName:t,db:e}){let o=S(e),[a]=await o.execute(`SELECT * FROM \`${t}\``);if(!a||a.length===0)throw new Kc(404,{message:`Table "${t}" does not exist or has no data`});return{cols:Object.keys(a[0]),rows:a}}var ir=d(()=>{"use strict";E()});import{HTTPException as Qc}from"hono/http-exception";var cr,lr=d(()=>{"use strict";E();cr=async({query:t,db:e})=>{let o=S(e);if(!t||!t.trim())throw new Qc(400,{message:"Query is required"});let a=t.trim().replace(/;+$/,""),n=performance.now(),[r,i]=await o.execute(a),c=performance.now()-n;if(Array.isArray(r)){let l=r;return{columns:i?i.map(p=>p.name):Object.keys(l[0]??{}),rows:l,rowCount:l.length,duration:c,message:l.length===0?"OK":void 0}}let s=r;return{columns:[],rows:[],rowCount:s.affectedRows,duration:c,message:`OK \u2014 ${s.affectedRows} row(s) affected`}}});async function mr(t){let e=S(t),o=`
597
597
  SELECT table_name as tableName
598
598
  FROM information_schema.tables
599
599
  WHERE table_schema = DATABASE()
600
600
  AND table_type = 'BASE TABLE'
601
601
  ORDER BY table_name
602
- `,[a]=await e.execute(o);return!a||a.length===0?[]:await Promise.all(a.map(async r=>{let[i]=await e.execute(`SELECT COUNT(*) as count FROM \`${r.tableName}\``),c=i[0];return{tableName:r.tableName,rowCount:c?.count??0}}))}var er=f(()=>{"use strict";h()});import{HTTPException as tr}from"hono/http-exception";async function or({tableName:t,db:e}){let o=S(e),[a]=await o.execute(`SELECT COUNT(*) as cnt
602
+ `,[a]=await e.execute(o);return!a||a.length===0?[]:await Promise.all(a.map(async r=>{let[i]=await e.execute(`SELECT COUNT(*) as count FROM \`${r.tableName}\``),c=i[0];return{tableName:r.tableName,rowCount:c?.count??0}}))}var ur=d(()=>{"use strict";E()});import{HTTPException as pr}from"hono/http-exception";async function dr({tableName:t,db:e}){let o=S(e),[a]=await o.execute(`SELECT COUNT(*) as cnt
603
603
  FROM information_schema.TABLES
604
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[t]);if(!(Number(a[0]?.cnt??0)>0))throw new tr(404,{message:`Table "${t}" does not exist`});let[r]=await o.execute(`SHOW CREATE TABLE \`${t}\``),i=r[0],c=i?.["Create Table"]??i?.create_table??"";if(!c)throw new tr(500,{message:`Failed to retrieve schema for table "${t}"`});return c}var ar=f(()=>{"use strict";h()});function nr(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 rr(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 sr(t,e,o){let{values:a,sortColumns:n}=t,r=[],i=[],l=o==="asc"===(e==="asc");if(n.length>0){let m=n.map(d=>`\`${d}\``).join(", "),p=n.map(()=>"?").join(", "),u=l?">":"<";r.push(`(${m}) ${u} (${p})`);for(let d of n)i.push(a[d])}return{clause:r.length>0?`(${r.join(" AND ")})`:"",values:i}}var ir=f(()=>{"use strict"});var Xe,wc,Dc,cr,lr=f(()=>{"use strict";h();ir();Xe=t=>Buffer.from(JSON.stringify(t)).toString("base64url"),wc=t=>{try{return JSON.parse(Buffer.from(t,"base64url").toString("utf-8"))}catch{return null}},Dc=async(t,e)=>{let[o]=await t.execute(`SELECT COLUMN_NAME as column_name
604
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[t]);if(!(Number(a[0]?.cnt??0)>0))throw new pr(404,{message:`Table "${t}" does not exist`});let[r]=await o.execute(`SHOW CREATE TABLE \`${t}\``),i=r[0],c=i?.["Create Table"]??i?.create_table??"";if(!c)throw new pr(500,{message:`Failed to retrieve schema for table "${t}"`});return c}var fr=d(()=>{"use strict";E()});function br(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 yr(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 gr(t,e,o){let{values:a,sortColumns:n}=t,r=[],i=[],l=o==="asc"===(e==="asc");if(n.length>0){let m=n.map(f=>`\`${f}\``).join(", "),p=n.map(()=>"?").join(", "),u=l?">":"<";r.push(`(${m}) ${u} (${p})`);for(let f of n)i.push(a[f])}return{clause:r.length>0?`(${r.join(" AND ")})`:"",values:i}}var Tr=d(()=>{"use strict"});var Ze,Gc,Jc,Er,hr=d(()=>{"use strict";E();Tr();Ze=t=>Buffer.from(JSON.stringify(t)).toString("base64url"),Gc=t=>{try{return JSON.parse(Buffer.from(t,"base64url").toString("utf-8"))}catch{return null}},Jc=async(t,e)=>{let[o]=await t.execute(`SELECT COLUMN_NAME as column_name
605
605
  FROM information_schema.COLUMNS
606
606
  WHERE TABLE_SCHEMA = DATABASE()
607
607
  AND TABLE_NAME = ?
608
608
  AND COLUMN_KEY = 'PRI'
609
- ORDER BY ORDINAL_POSITION`,[e]);return o.map(a=>a.column_name)},cr=async({tableName:t,cursor:e="",limit:o=50,direction:a="asc",sort:n=[],order:r="asc",filters:i=[],db:c})=>{let s=S(c),l=await Dc(s,t),m=[],p=r;Array.isArray(n)&&n.length>0?(m=n.map($=>$.columnName),p=n[0].direction):typeof n=="string"&&n&&(m=[n]);let u=[...m,...l.filter($=>!m.includes($))],{clause:d,values:g}=nr(i),y="",b=[];if(e){let $=wc(e);if($){let _=sr($,a,p);y=_.clause,b=_.values}}let E="";d&&y?E=`WHERE ${d.replace(/^WHERE\s+/i,"")} AND ${y}`:d?E=d:y&&(E=`WHERE ${y}`);let N=rr((Array.isArray(n),n),r),A=N;a==="desc"?N?A=N.replace(/\bASC\b/gi,"TEMP_DESC").replace(/\bDESC\b/gi,"ASC").replace(/TEMP_DESC/g,"DESC"):u.length>0&&(A=`ORDER BY ${u.map(_=>`\`${_}\` ${p==="asc"?"DESC":"ASC"}`).join(", ")}`):!N&&u.length>0&&(A=`ORDER BY ${u.map(_=>`\`${_}\` ${p.toUpperCase()}`).join(", ")}`);let[q]=await s.execute(`SELECT COUNT(*) as total FROM \`${t}\` ${d}`,g),k=Number(q[0]?.total??0),H=Math.floor(o)+1,[j]=await s.execute(`SELECT * FROM \`${t}\` ${E} ${A} LIMIT ${H}`,[...g,...b]),O=j,D=O.length>o;D&&(O=O.slice(0,o)),a==="desc"&&(O=O.reverse());let F=null,z=null;if(O.length>0&&u.length>0){let $=O[0],_=O[O.length-1],v=ue=>({values:Object.fromEntries(u.map(Oe=>[Oe,ue[Oe]])),sortColumns:u});a==="asc"?(D&&(F=Xe(v(_))),e&&(z=Xe(v($)))):(e&&(F=Xe(v(_))),D&&(z=Xe(v($))))}return{data:O,meta:{limit:o,total:k,hasNextPage:a==="asc"?D:!!e,hasPreviousPage:a==="asc"?!!e:D,nextCursor:F,prevCursor:z}}}});import{HTTPException as Ze}from"hono/http-exception";async function mr({params:t,db:e}){let{tableName:o,updates:a,primaryKey:n}=t,r=S(e),i=await ie({tableName:o,db:e}),c=new Set(i.filter(m=>m.dataTypeLabel==="boolean").map(m=>m.columnName)),s=new Map;for(let m of a){let p=m.rowData[n];if(p==null)throw new Ze(400,{message:`Primary key "${n}" not found in row data.`});s.has(p)||s.set(p,[]),s.get(p)?.push({columnName:m.columnName,value:m.value,rowData:m.rowData})}let l=await r.getConnection();await l.beginTransaction();try{let m=0;for(let[p,u]of s.entries()){let d=u.map(E=>`\`${E.columnName}\` = ?`),g=u.map(E=>E.value!==null&&typeof E.value=="object"?JSON.stringify(E.value):c.has(E.columnName)&&typeof E.value=="string"?E.value==="true"?1:0:E.value);g.push(p);let y=`
609
+ ORDER BY ORDINAL_POSITION`,[e]);return o.map(a=>a.column_name)},Er=async({tableName:t,cursor:e="",limit:o=50,direction:a="asc",sort:n=[],order:r="asc",filters:i=[],db:c})=>{let s=S(c),l=await Jc(s,t),m=[],p=r;Array.isArray(n)&&n.length>0?(m=n.map($=>$.columnName),p=n[0].direction):typeof n=="string"&&n&&(m=[n]);let u=[...m,...l.filter($=>!m.includes($))],{clause:f,values:g}=br(i),y="",b=[];if(e){let $=Gc(e);if($){let x=gr($,a,p);y=x.clause,b=x.values}}let h="";f&&y?h=`WHERE ${f.replace(/^WHERE\s+/i,"")} AND ${y}`:f?h=f:y&&(h=`WHERE ${y}`);let R=yr((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(x=>`\`${x}\` ${p==="asc"?"DESC":"ASC"}`).join(", ")}`):!R&&u.length>0&&(A=`ORDER BY ${u.map(x=>`\`${x}\` ${p.toUpperCase()}`).join(", ")}`);let[q]=await s.execute(`SELECT COUNT(*) as total FROM \`${t}\` ${f}`,g),k=Number(q[0]?.total??0),H=Math.floor(o)+1,[K]=await s.execute(`SELECT * FROM \`${t}\` ${h} ${A} LIMIT ${H}`,[...g,...b]),O=K,_=O.length>o;_&&(O=O.slice(0,o)),a==="desc"&&(O=O.reverse());let F=null,G=null;if(O.length>0&&u.length>0){let $=O[0],x=O[O.length-1],v=ue=>({values:Object.fromEntries(u.map(Le=>[Le,ue[Le]])),sortColumns:u});a==="asc"?(_&&(F=Ze(v(x))),e&&(G=Ze(v($)))):(e&&(F=Ze(v(x))),_&&(G=Ze(v($))))}return{data:O,meta:{limit:o,total:k,hasNextPage:a==="asc"?_:!!e,hasPreviousPage:a==="asc"?!!e:_,nextCursor:F,prevCursor:G}}}});import{HTTPException as et}from"hono/http-exception";async function Cr({params:t,db:e}){let{tableName:o,updates:a,primaryKey:n}=t,r=S(e),i=await le({tableName:o,db:e}),c=new Set(i.filter(m=>m.dataTypeLabel==="boolean").map(m=>m.columnName)),s=new Map;for(let m of a){let p=m.rowData[n];if(p==null)throw new et(400,{message:`Primary key "${n}" not found in row data.`});s.has(p)||s.set(p,[]),s.get(p)?.push({columnName:m.columnName,value:m.value,rowData:m.rowData})}let l=await r.getConnection();await l.beginTransaction();try{let m=0;for(let[p,u]of s.entries()){let f=u.map(h=>`\`${h.columnName}\` = ?`),g=u.map(h=>h.value!==null&&typeof h.value=="object"?JSON.stringify(h.value):c.has(h.columnName)&&typeof h.value=="string"?h.value==="true"?1:0:h.value);g.push(p);let y=`
610
610
  UPDATE \`${o}\`
611
- SET ${d.join(", ")}
611
+ SET ${f.join(", ")}
612
612
  WHERE \`${n}\` = ?
613
- `,[b]=await l.execute(y,g);if(b.affectedRows===0)throw new Ze(404,{message:`Record with ${n} = ${p} not found in table "${o}"`});m+=b.affectedRows}return await l.commit(),{updatedCount:m}}catch(m){throw await l.rollback(),m instanceof Ze?m:new Ze(500,{message:`Failed to update records in "${o}"`})}finally{l.release()}}var ur=f(()=>{"use strict";h();xe()});import{HTTPException as Mc}from"hono/http-exception";var pr,dr=f(()=>{"use strict";h();pr=async({query:t,db:e})=>{let o=C(e);if(!t||!t.trim())throw new Mc(400,{message:"Query is required"});let a=t.trim().replace(/;+$/,""),n=performance.now(),r=await o.query(a),i=performance.now()-n;return{columns:r.fields.map(s=>s.name),rows:r.rows,rowCount:r.rows.length,duration:i,message:r.rows.length===0?"OK":void 0}}});async function br(t){let e=C(t),o=`
613
+ `,[b]=await l.execute(y,g);if(b.affectedRows===0)throw new et(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 et?m:new et(500,{message:`Failed to update records in "${o}"`})}finally{l.release()}}var Sr=d(()=>{"use strict";E();_e()});import{HTTPException as el}from"hono/http-exception";var Rr,Nr=d(()=>{"use strict";E();Rr=async({query:t,db:e})=>{let o=C(e);if(!t||!t.trim())throw new el(400,{message:"Query is required"});let a=t.trim().replace(/;+$/,""),n=performance.now(),r=await o.query(a),i=performance.now()-n;return{columns:r.fields.map(s=>s.name),rows:r.rows,rowCount:r.rows.length,duration:i,message:r.rows.length===0?"OK":void 0}}});async function wr(t){let e=C(t),o=`
614
614
  SELECT table_schema as "schemaName", table_name as "tableName"
615
615
  FROM information_schema.tables
616
616
  WHERE table_type = 'BASE TABLE'
617
617
  AND table_schema NOT IN ('pg_catalog', 'information_schema')
618
618
  AND table_schema NOT LIKE 'pg_toast%'
619
619
  ORDER BY table_schema, table_name;
620
- `,{rows:a}=await e.query(o);return a[0]?await Promise.all(a.map(async r=>{let i=fr(r.schemaName),c=fr(r.tableName),s=`SELECT COUNT(*)::integer as count FROM "${i}"."${c}"`,{rows:l}=await e.query(s);return{schemaName:r.schemaName,tableName:r.tableName,rowCount:l[0]?.count??0}})):[]}var fr,yr=f(()=>{"use strict";h();fr=t=>t.replaceAll('"','""')});import{HTTPException as Pc}from"hono/http-exception";async function gr({tableName:t,db:e}){let o=C(e),a=`
620
+ `,{rows:a}=await e.query(o);return a[0]?await Promise.all(a.map(async r=>{let i=Ar(r.schemaName),c=Ar(r.tableName),s=`SELECT COUNT(*)::integer as count FROM "${i}"."${c}"`,{rows:l}=await e.query(s);return{schemaName:r.schemaName,tableName:r.tableName,rowCount:l[0]?.count??0}})):[]}var Ar,Dr=d(()=>{"use strict";E();Ar=t=>t.replaceAll('"','""')});import{HTTPException as al}from"hono/http-exception";async function _r({tableName:t,db:e}){let o=C(e),a=`
621
621
  SELECT EXISTS (
622
622
  SELECT 1 FROM information_schema.tables
623
623
  WHERE table_schema = 'public' AND table_name = $1
624
624
  ) as exists
625
- `,{rows:n}=await o.query(a,[t]);if(!n[0]?.exists)throw new Pc(404,{message:`Table "${t}" does not exist`});let r=`
625
+ `,{rows:n}=await o.query(a,[t]);if(!n[0]?.exists)throw new al(404,{message:`Table "${t}" does not exist`});let r=`
626
626
  SELECT
627
627
  column_name,
628
628
  data_type,
@@ -661,61 +661,61 @@ ${i.join(`,
661
661
  FROM information_schema.table_constraints
662
662
  WHERE table_schema = 'public' AND table_name = $1 AND constraint_type = 'PRIMARY KEY'
663
663
  )
664
- `,{rows:m}=await o.query(l,[t]),p=[];p.push(`create table public.${t} (`);let u=[];for(let b of i){let E=` ${b.column_name} ${Ic(b)}`;b.is_nullable==="NO"&&(E+=" not null"),b.column_default!==null&&(E+=` default ${b.column_default}`),u.push(E)}let d=new Map;for(let b of s){let E=d.get(b.constraint_name)||[];E.push(b),d.set(b.constraint_name,E)}let g=[];for(let[b,E]of d){let N=E[0],A=E.map(q=>q.column_name).join(", ");if(N.constraint_type==="PRIMARY KEY")g.push(` constraint ${b} primary key (${A})`);else if(N.constraint_type==="FOREIGN KEY"){let q=N.foreign_table_name,k=N.foreign_column_name;g.push(` constraint ${b} foreign key (${A}) references ${q} (${k})`)}else N.constraint_type==="UNIQUE"&&g.push(` constraint ${b} unique (${A})`)}let y=[...u,...g];p.push(y.join(`,
665
- `)),p.push(") tablespace pg_default;");for(let b of m)Array.from(d.values()).some(N=>N[0].constraint_type==="UNIQUE"&&N[0].constraint_name===b.indexname)||(p.push(""),p.push(`${b.indexdef};`));return p.join(`
666
- `)}function Ic(t){let{data_type:e,udt_name:o,character_maximum_length:a,numeric_precision:n,numeric_scale:r}=t;return e==="USER-DEFINED"?o:e==="ARRAY"?`${o.replace(/^_/,"")}[]`:(e==="character varying"||e==="varchar")&&a?`varchar(${a})`:e==="character"&&a?`char(${a})`:e==="numeric"&&n!==null?r!==null&&r>0?`numeric(${n}, ${r})`:`numeric(${n})`:e==="timestamp with time zone"?"timestamp with time zone":e==="timestamp without time zone"?"timestamp":{"character varying":"varchar",character:"char","double precision":"float8",integer:"integer",bigint:"bigint",smallint:"smallint",boolean:"boolean",text:"text",uuid:"uuid",json:"json",jsonb:"jsonb",date:"date",time:"time",bytea:"bytea"}[e]||e}var Tr=f(()=>{"use strict";h()});function Er(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 hr(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 Cr(t,e,o,a){let{values:n,sortColumns:r}=t,i=[],c=[],m=o==="asc"===(e==="asc");if(r.length>0){let p=r.map(g=>`"${g}"`).join(", "),u=r.map((g,y)=>`$${a+y}`).join(", "),d=m?">":"<";i.push(`(${p}) ${d} (${u})`);for(let g of r)c.push(n[g])}return{clause:i.length>0?`(${i.join(" AND ")})`:"",values:c}}var Sr=f(()=>{"use strict"});var et,qc,kc,Nr,Rr=f(()=>{"use strict";h();Sr();et=t=>Buffer.from(JSON.stringify(t)).toString("base64url"),qc=t=>{try{return JSON.parse(Buffer.from(t,"base64url").toString("utf-8"))}catch{return null}},kc=async(t,e)=>{let o=`"${e}"`;return(await t.query(`SELECT a.attname as column_name
664
+ `,{rows:m}=await o.query(l,[t]),p=[];p.push(`create table public.${t} (`);let u=[];for(let b of i){let h=` ${b.column_name} ${nl(b)}`;b.is_nullable==="NO"&&(h+=" not null"),b.column_default!==null&&(h+=` default ${b.column_default}`),u.push(h)}let f=new Map;for(let b of s){let h=f.get(b.constraint_name)||[];h.push(b),f.set(b.constraint_name,h)}let g=[];for(let[b,h]of f){let R=h[0],A=h.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(`,
665
+ `)),p.push(") tablespace pg_default;");for(let b of m)Array.from(f.values()).some(R=>R[0].constraint_type==="UNIQUE"&&R[0].constraint_name===b.indexname)||(p.push(""),p.push(`${b.indexdef};`));return p.join(`
666
+ `)}function nl(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 xr=d(()=>{"use strict";E()});function Mr(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 Lr(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 Or(t,e,o,a){let{values:n,sortColumns:r}=t,i=[],c=[],m=o==="asc"===(e==="asc");if(r.length>0){let p=r.map(g=>`"${g}"`).join(", "),u=r.map((g,y)=>`$${a+y}`).join(", "),f=m?">":"<";i.push(`(${p}) ${f} (${u})`);for(let g of r)c.push(n[g])}return{clause:i.length>0?`(${i.join(" AND ")})`:"",values:c}}var Pr=d(()=>{"use strict"});var tt,sl,il,Ir,$r=d(()=>{"use strict";E();Pr();tt=t=>Buffer.from(JSON.stringify(t)).toString("base64url"),sl=t=>{try{return JSON.parse(Buffer.from(t,"base64url").toString("utf-8"))}catch{return null}},il=async(t,e)=>{let o=`"${e}"`;return(await t.query(`SELECT a.attname as column_name
667
667
  FROM pg_index i
668
668
  JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
669
669
  WHERE i.indrelid = $1::regclass AND i.indisprimary
670
- ORDER BY array_position(i.indkey, a.attnum)`,[o])).rows.map(n=>n.column_name)},Nr=async({tableName:t,cursor:e="",limit:o=50,direction:a="asc",sort:n=[],order:r="asc",filters:i=[],db:c})=>{let s=C(c),l=await kc(s,t),m=[],p=r;Array.isArray(n)&&n.length>0?(m=n.map(_=>_.columnName),p=n[0].direction):typeof n=="string"&&n&&(m=[n]);let u=[...m,...l.filter(_=>!m.includes(_))];u.length===0&&u.push("ctid");let{clause:d,values:g}=Er(i),y="",b=[];if(e){let _=qc(e);if(_){let v=Cr(_,a,p,g.length+1);y=v.clause,b=v.values}}let E="";d&&y?E=`WHERE ${d.replace(/^WHERE\s+/i,"")} AND ${y}`:d?E=d:y&&(E=`WHERE ${y}`);let N=hr((Array.isArray(n),n),r),A=N;a==="desc"?N?A=N.replace(/\bASC\b/gi,"TEMP_DESC").replace(/\bDESC\b/gi,"ASC").replace(/TEMP_DESC/g,"DESC"):A=`ORDER BY ${u.map(v=>`"${v}" ${p==="asc"?"DESC":"ASC"}`).join(", ")}`:!N&&u.length>0&&(A=`ORDER BY ${u.map(v=>`"${v}" ${p.toUpperCase()}`).join(", ")}`);let q=await s.query(`SELECT COUNT(*) as total FROM "${t}" ${d}`,g),k=Number(q.rows[0].total),H=g.length+b.length+1,j=await s.query(`SELECT * FROM "${t}" ${E} ${A} LIMIT $${H}`,[...g,...b,o+1]),D=j.fields&&j.fields.length>0?j.rows.filter(_=>Object.keys(_).length>0):j.rows,F=D.length>o;F&&(D=D.slice(0,o)),a==="desc"&&(D=D.reverse());let z=null,$=null;if(D.length>0){let _=D[0],v=D[D.length-1],ue=Oe=>({values:Object.fromEntries(u.map(Ot=>[Ot,Oe[Ot]])),sortColumns:u});a==="asc"?(F&&(z=et(ue(v))),e&&($=et(ue(_)))):(e&&(z=et(ue(v))),F&&($=et(ue(_))))}return{data:D,meta:{limit:o,total:k,hasNextPage:a==="asc"?F:!!e,hasPreviousPage:a==="asc"?!!e:F,nextCursor:z,prevCursor:$}}}});import{HTTPException as tt}from"hono/http-exception";async function Ar({params:t,db:e}){let{tableName:o,updates:a,primaryKey:n}=t,r=C(e),i=new Map;for(let c of a){let s=c.rowData[n];if(s==null)throw new tt(400,{message:`Primary key "${n}" not found in row data. Please ensure the row has a "${n}" column.`});i.has(s)||i.set(s,[]),i.get(s)?.push({columnName:c.columnName,value:c.value,rowData:c.rowData})}await r.query("BEGIN");try{let c=0;for(let[s,l]of i.entries()){let m=l.map((g,y)=>`"${g.columnName}" = $${y+1}`),p=l.map(g=>g.value!==null&&typeof g.value=="object"?JSON.stringify(g.value):g.value);p.push(s);let u=`
670
+ ORDER BY array_position(i.indkey, a.attnum)`,[o])).rows.map(n=>n.column_name)},Ir=async({tableName:t,cursor:e="",limit:o=50,direction:a="asc",sort:n=[],order:r="asc",filters:i=[],db:c})=>{let s=C(c),l=await il(s,t),m=[],p=r;Array.isArray(n)&&n.length>0?(m=n.map(x=>x.columnName),p=n[0].direction):typeof n=="string"&&n&&(m=[n]);let u=[...m,...l.filter(x=>!m.includes(x))];u.length===0&&u.push("ctid");let{clause:f,values:g}=Mr(i),y="",b=[];if(e){let x=sl(e);if(x){let v=Or(x,a,p,g.length+1);y=v.clause,b=v.values}}let h="";f&&y?h=`WHERE ${f.replace(/^WHERE\s+/i,"")} AND ${y}`:f?h=f:y&&(h=`WHERE ${y}`);let R=Lr((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 s.query(`SELECT COUNT(*) as total FROM "${t}" ${f}`,g),k=Number(q.rows[0].total),H=g.length+b.length+1,K=await s.query(`SELECT * FROM "${t}" ${h} ${A} LIMIT $${H}`,[...g,...b,o+1]),_=K.fields&&K.fields.length>0?K.rows.filter(x=>Object.keys(x).length>0):K.rows,F=_.length>o;F&&(_=_.slice(0,o)),a==="desc"&&(_=_.reverse());let G=null,$=null;if(_.length>0){let x=_[0],v=_[_.length-1],ue=Le=>({values:Object.fromEntries(u.map($t=>[$t,Le[$t]])),sortColumns:u});a==="asc"?(F&&(G=tt(ue(v))),e&&($=tt(ue(x)))):(e&&(G=tt(ue(v))),F&&($=tt(ue(x))))}return{data:_,meta:{limit:o,total:k,hasNextPage:a==="asc"?F:!!e,hasPreviousPage:a==="asc"?!!e:F,nextCursor:G,prevCursor:$}}}});import{HTTPException as ot}from"hono/http-exception";async function qr({params:t,db:e}){let{tableName:o,updates:a,primaryKey:n}=t,r=C(e),i=new Map;for(let c of a){let s=c.rowData[n];if(s==null)throw new ot(400,{message:`Primary key "${n}" not found in row data. Please ensure the row has a "${n}" column.`});i.has(s)||i.set(s,[]),i.get(s)?.push({columnName:c.columnName,value:c.value,rowData:c.rowData})}await r.query("BEGIN");try{let c=0;for(let[s,l]of i.entries()){let m=l.map((g,y)=>`"${g.columnName}" = $${y+1}`),p=l.map(g=>g.value!==null&&typeof g.value=="object"?JSON.stringify(g.value):g.value);p.push(s);let u=`
671
671
  UPDATE "${o}"
672
672
  SET ${m.join(", ")}
673
673
  WHERE "${n}" = $${p.length}
674
674
  RETURNING *
675
- `,d=await r.query(u,p);if(d.rowCount===0)throw new tt(404,{message:`Record with ${n} = ${s} not found in table "${o}"`});c+=d.rowCount??0}return await r.query("COMMIT"),{updatedCount:c}}catch(c){throw await r.query("ROLLBACK"),c instanceof tt?c:new tt(500,{message:`Failed to update records in "${o}"`})}}var wr=f(()=>{"use strict";h()});function P(t){return t==="mongodb"?Dr.mongodb:Dr[t]}var Dr,Me=f(()=>{"use strict";ba();ga();Ea();Na();wa();xa();Oa();Ia();ka();Ba();ja();Wa();za();ye();Ja();Za();tn();rn();ln();pn();yn();Tn();hn();_e();Sn();An();Dn();xn();Ln();Pn();$n();Un();Hn();Vn();Yn();Gn();Xn();xe();er();ar();lr();ur();dr();gt();yr();Tr();Rr();wr();Dr={pg:{addRecord:fa,bulkInsertRecords:ya,createTable:Ta,getDatabasesList:ha,getCurrentDatabase:Ca,getDatabaseConnectionInfo:Sa,deleteColumn:Aa,deleteRecords:Da,forceDeleteRecords:_a,deleteTable:La,exportTableData:Pa,executeQuery:pr,getTableColumns:Qe,getTablesList:br,getTableSchema:gr,getTableData:Nr,updateRecords:Ar},mysql:{addRecord:Mn,bulkInsertRecords:On,createTable:In,getDatabasesList:qn,getCurrentDatabase:kn,getDatabaseConnectionInfo:vn,deleteColumn:Bn,deleteRecords:jn,forceDeleteRecords:Kn,deleteTable:Wn,exportTableData:zn,executeQuery:Jn,getTableColumns:ie,getTablesList:Zn,getTableSchema:or,getTableData:cr,updateRecords:mr},mongodb:{addRecord:({db:t,params:e})=>Ka({db:t,params:e}),bulkInsertRecords:qa,createTable:({db:t,tableData:e})=>ea({tableName:e?.tableName??"",tableData:e,db:t}),getDatabasesList:va,getCurrentDatabase:Ua,getDatabaseConnectionInfo:Fa,deleteColumn:({db:t,tableName:e,columnName:o})=>ta({tableName:e,columnName:o,db:t}),deleteRecords:St,forceDeleteRecords:Qa,deleteTable:async({db:t,tableName:e})=>{let{getMongoDb:o}=await Promise.resolve().then(()=>(h(),Wo));await(await o(t)).collection(e).drop()},exportTableData:({db:t,tableName:e})=>oa({tableName:e,db:t}),executeQuery:({query:t,db:e})=>Ha({query:t,db:e}),getTableColumns:Ke,getTablesList:({db:t})=>Xo(t),getTableSchema:Ya,getTableData:Zo,updateRecords:({db:t,params:e})=>Va({db:t,params:e})},mssql:{addRecord:Ga,bulkInsertRecords:Xa,createTable:en,getDatabasesList:on,getCurrentDatabase:an,getDatabaseConnectionInfo:nn,deleteColumn:cn,deleteRecords:mn,forceDeleteRecords:un,deleteTable:bn,exportTableData:gn,executeQuery:En,getTableColumns:se,getTablesList:Cn,getTableSchema:Rn,getTableData:wn,updateRecords:_n}}});import{Hono as Fc}from"hono";var _r,xr=f(()=>{"use strict";Me();h();_r=new Fc().basePath("/databases").get("/",async t=>{let e=le(),a=await P(e).getDatabasesList();return t.json({data:{databases:a,dbType:e}},200)}).get("/current",async t=>{let e=le(),a=await P(e).getCurrentDatabase();return t.json({data:{db:a.db,dbType:e}},200)}).get("/connection",async t=>{let e=le(),a=await P(e).getDatabaseConnectionInfo();return t.json({data:a},200)})});import{zValidator as Mr}from"@hono/zod-validator";import{Hono as Bc}from"hono";var Lr,Or=f(()=>{"use strict";Z();Me();Lr=new Bc().basePath("/query").post("/",Mr("query",w),Mr("json",Mo),async t=>{let{query:e}=t.req.valid("json"),{db:o}=t.req.valid("query"),a=t.get("dbType"),r=await P(a).executeQuery({query:e,db:o});return t.json({data:r},200)})});import{zValidator as ee}from"@hono/zod-validator";import{Hono as Hc}from"hono";var Pr,Ir=f(()=>{"use strict";Z();Me();Pr=new Hc().basePath("/records").post("/",ee("query",w),ee("json",oo),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,data:a}=t.req.valid("json"),n=t.get("dbType"),r=P(n),{insertedCount:i}=await r.addRecord({db:e,params:{tableName:o,data:a}});return t.json({data:`Record inserted into "${o}" with ${i} rows inserted`},200)}).patch("/",ee("query",w),ee("json",Bo),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,primaryKey:a,updates:n}=t.req.valid("json"),r=t.get("dbType"),i=P(r),{updatedCount:c}=await i.updateRecords({params:{tableName:o,primaryKey:a,updates:n},db:e});return t.json({data:`Updated ${c} records in "${o}"`},200)}).delete("/",ee("query",w),ee("json",mt),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,primaryKeys:a}=t.req.valid("json"),n=t.get("dbType"),r=P(n),{deletedCount:i,fkViolation:c,relatedRecords:s}=await r.deleteRecords({tableName:o,primaryKeys:a,db:e});return c?t.json({data:{deletedCount:0,fkViolation:!0,relatedRecords:s}},409):t.json({data:{deletedCount:i,fkViolation:!1,relatedRecords:[]}},200)}).delete("/force",ee("query",w),ee("json",mt),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,primaryKeys:a}=t.req.valid("json"),n=t.get("dbType"),i=await P(n).forceDeleteRecords({tableName:o,primaryKeys:a,db:e});return t.json({data:i},200)}).post("/bulk",ee("query",w),ee("json",io),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,records:a}=t.req.valid("json"),n=t.get("dbType"),i=await P(n).bulkInsertRecords({tableName:o,records:a,db:e});return t.json({data:i},200)})});import{HTTPException as $r}from"hono/http-exception";async function qr(t){let{tableName:e,columnName:o,columnType:a,defaultValue:n,isPrimaryKey:r,isNullable:i,isUnique:c,isIdentity:s,isArray:l,db:m}=t,p=C(m),u=`
675
+ `,f=await r.query(u,p);if(f.rowCount===0)throw new ot(404,{message:`Record with ${n} = ${s} not found in table "${o}"`});c+=f.rowCount??0}return await r.query("COMMIT"),{updatedCount:c}}catch(c){throw await r.query("ROLLBACK"),c instanceof ot?c:new ot(500,{message:`Failed to update records in "${o}"`})}}var kr=d(()=>{"use strict";E()});function P(t){return t==="mongodb"?vr.mongodb:vr[t]}var vr,xe=d(()=>{"use strict";la();ua();da();ga();ha();Ra();wa();_a();Ma();Pa();ka();Ua();Ba();ja();Qa();Ya();Ga();Et();Xa();en();an();sn();ln();un();dn();gn();hn();Rn();Dn();xn();Ln();De();Pn();qn();vn();Fn();Hn();Kn();Qn();Gn();Zn();or();rr();ir();lr();_e();ur();fr();hr();Sr();Nr();Ct();Dr();xr();$r();kr();vr={pg:{addRecord:ca,bulkInsertRecords:ma,createTable:pa,getDatabasesList:fa,getCurrentDatabase:ba,getDatabaseConnectionInfo:ya,deleteColumn:Ea,deleteRecords:Ca,forceDeleteRecords:Sa,deleteTable:Aa,exportTableData:Da,executeQuery:Rr,getTableColumns:je,getTablesList:wr,getTableSchema:_r,getTableData:Ir,updateRecords:qr},mysql:{addRecord:Bn,bulkInsertRecords:jn,createTable:Vn,getDatabasesList:Wn,getCurrentDatabase:Yn,getDatabaseConnectionInfo:zn,deleteColumn:Xn,deleteRecords:er,forceDeleteRecords:tr,deleteTable:nr,exportTableData:sr,executeQuery:cr,getTableColumns:le,getTablesList:mr,getTableSchema:dr,getTableData:Er,updateRecords:Cr},mongodb:{addRecord:xa,bulkInsertRecords:Oa,createTable:qa,getDatabasesList:Ve,getCurrentDatabase:Qe,getDatabaseConnectionInfo:We,deleteColumn:Fa,deleteRecords:At,forceDeleteRecords:Ha,deleteTable:Va,exportTableData:Wa,executeQuery:Ye,getTableColumns:Be,getTablesList:Ja,getTableSchema:Za,getTableData:on,updateRecords:rn},mssql:{addRecord:cn,bulkInsertRecords:mn,createTable:pn,getDatabasesList:fn,getCurrentDatabase:bn,getDatabaseConnectionInfo:yn,deleteColumn:En,deleteRecords:Cn,forceDeleteRecords:Sn,deleteTable:wn,exportTableData:_n,executeQuery:Mn,getTableColumns:ce,getTablesList:On,getTableSchema:$n,getTableData:kn,updateRecords:Un}}});import{Hono as ml}from"hono";var Ur,Fr=d(()=>{"use strict";xe();E();Ur=new ml().basePath("/databases").get("/",async t=>{let e=ye(),a=await P(e).getDatabasesList();return t.json({data:{databases:a,dbType:e}},200)}).get("/current",async t=>{let e=ye(),a=await P(e).getCurrentDatabase();return t.json({data:{db:a.db,dbType:e}},200)}).get("/connection",async t=>{let e=ye(),a=await P(e).getDatabaseConnectionInfo();return t.json({data:a},200)})});import{zValidator as Br}from"@hono/zod-validator";import{Hono as ul}from"hono";var Hr,jr=d(()=>{"use strict";ee();xe();Hr=new ul().basePath("/query").post("/",Br("query",w),Br("json",Oo),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 ae}from"@hono/zod-validator";import{Hono as pl}from"hono";var Kr,Vr=d(()=>{"use strict";ee();xe();Kr=new pl().basePath("/records").post("/",ae("query",w),ae("json",no),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,data:a}=t.req.valid("json"),n=t.get("dbType"),r=P(n),{insertedCount:i}=await r.addRecord({db:e,params:{tableName:o,data:a}});return t.json({data:`Record inserted into "${o}" with ${i} rows inserted`},200)}).patch("/",ae("query",w),ae("json",jo),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,primaryKey:a,updates:n}=t.req.valid("json"),r=t.get("dbType"),i=P(r),{updatedCount:c}=await i.updateRecords({params:{tableName:o,primaryKey:a,updates:n},db:e});return t.json({data:`Updated ${c} records in "${o}"`},200)}).delete("/",ae("query",w),ae("json",ut),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,primaryKeys:a}=t.req.valid("json"),n=t.get("dbType"),r=P(n),{deletedCount:i,fkViolation:c,relatedRecords:s}=await r.deleteRecords({tableName:o,primaryKeys:a,db:e});return c?t.json({data:{deletedCount:0,fkViolation:!0,relatedRecords:s}},409):t.json({data:{deletedCount:i,fkViolation:!1,relatedRecords:[]}},200)}).delete("/force",ae("query",w),ae("json",ut),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,primaryKeys:a}=t.req.valid("json"),n=t.get("dbType"),i=await P(n).forceDeleteRecords({tableName:o,primaryKeys:a,db:e});return t.json({data:i},200)}).post("/bulk",ae("query",w),ae("json",lo),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,records:a}=t.req.valid("json"),n=t.get("dbType"),i=await P(n).bulkInsertRecords({tableName:o,records:a,db:e});return t.json({data:i},200)})});import{HTTPException as Qr}from"hono/http-exception";async function Wr(t){let{tableName:e,columnName:o,columnType:a,defaultValue:n,isPrimaryKey:r,isNullable:i,isUnique:c,isIdentity:s,isArray:l,db:m}=t,p=C(m),u=`
676
676
  SELECT EXISTS (
677
677
  SELECT 1 FROM information_schema.tables
678
678
  WHERE table_name = $1 AND table_schema = 'public'
679
679
  ) as exists;
680
- `,{rows:d}=await p.query(u,[e]);if(!d[0]?.exists)throw new $r(404,{message:`Table "${e}" does not exist`});let g=`
680
+ `,{rows:f}=await p.query(u,[e]);if(!f[0]?.exists)throw new Qr(404,{message:`Table "${e}" does not exist`});let g=`
681
681
  SELECT EXISTS (
682
682
  SELECT 1 FROM information_schema.columns
683
683
  WHERE table_name = $1 AND column_name = $2 AND table_schema = 'public'
684
684
  ) as exists;
685
- `,{rows:y}=await p.query(g,[e,o]);if(y[0]?.exists)throw new $r(409,{message:`Column "${o}" already exists in table "${e}"`});let b=`"${o}" ${a}`;l&&(b+="[]"),r&&(b+=" PRIMARY KEY"),c&&!r&&(b+=" UNIQUE"),i||(b+=" NOT NULL"),s&&(b+=" GENERATED ALWAYS AS IDENTITY"),n?.trim()&&!s&&(b+=` DEFAULT ${n.trim()}`),await p.query(`ALTER TABLE "${e}" ADD COLUMN ${b}`)}var kr=f(()=>{"use strict";h()});import{HTTPException as vr}from"hono/http-exception";async function Ur(t){let{tableName:e,columnName:o,columnType:a,isNullable:n,defaultValue:r,db:i}=t,c=C(i),s=`
685
+ `,{rows:y}=await p.query(g,[e,o]);if(y[0]?.exists)throw new Qr(409,{message:`Column "${o}" already exists in table "${e}"`});let b=`"${o}" ${a}`;l&&(b+="[]"),r&&(b+=" PRIMARY KEY"),c&&!r&&(b+=" UNIQUE"),i||(b+=" NOT NULL"),s&&(b+=" GENERATED ALWAYS AS IDENTITY"),n?.trim()&&!s&&(b+=` DEFAULT ${n.trim()}`),await p.query(`ALTER TABLE "${e}" ADD COLUMN ${b}`)}var Yr=d(()=>{"use strict";E()});import{HTTPException as zr}from"hono/http-exception";async function Gr(t){let{tableName:e,columnName:o,columnType:a,isNullable:n,defaultValue:r,db:i}=t,c=C(i),s=`
686
686
  SELECT EXISTS (
687
687
  SELECT 1 FROM information_schema.tables
688
688
  WHERE table_name = $1 AND table_schema = 'public'
689
689
  ) as exists;
690
- `,{rows:l}=await c.query(s,[e]);if(!l[0]?.exists)throw new vr(404,{message:`Table "${e}" does not exist`});let m=`
690
+ `,{rows:l}=await c.query(s,[e]);if(!l[0]?.exists)throw new zr(404,{message:`Table "${e}" does not exist`});let m=`
691
691
  SELECT EXISTS (
692
692
  SELECT 1 FROM information_schema.columns
693
693
  WHERE table_name = $1 AND column_name = $2 AND table_schema = 'public'
694
694
  ) as exists;
695
- `,{rows:p}=await c.query(m,[e,o]);if(!p[0]?.exists)throw new vr(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 Fr=f(()=>{"use strict";h()});import{HTTPException as Br}from"hono/http-exception";async function Hr({tableName:t,columnName:e,columnType:o,defaultValue:a,isNullable:n,db:r}){let i=await M(r),c=await i.listCollections({name:t}).toArray();if(c.length===0)throw new Br(404,{message:`Collection "${t}" does not exist`});if(await i.collection(t).findOne({[e]:{$exists:!0}}))throw new Br(409,{message:`Field "${e}" already exists in collection "${t}"`});let l=jc(a,o);await i.collection(t).updateMany({},{$set:{[e]:l}});let p=c[0].options?.validator?.$jsonSchema??{},u={...p.properties??{},[e]:{bsonType:n?[o,"null"]:o}},d=[...p.required??[]];!n&&!d.includes(e)&&d.push(e),await i.command({collMod:t,validator:{$jsonSchema:{...p,bsonType:"object",properties:u,...d.length>0?{required:d}:{}}},validationAction:"warn"})}var jc,jr=f(()=>{"use strict";h();jc=(t,e)=>{if(t!=null&&t.trim()!=="")try{return JSON.parse(t)}catch{return t}switch(e){case"string":return"";case"int":case"long":case"double":case"decimal":return 0;case"bool":return!1;case"array":return[];case"object":return{};case"date":return new Date;default:return null}}});import{HTTPException as Se}from"hono/http-exception";async function Kr({tableName:t,columnName:e,newColumnName:o,db:a}){let n=await M(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 Vr({tableName:t,columnName:e,columnType:o,isNullable:a,db:n}){let r=await M(n),i=await r.listCollections({name:t}).toArray();if(i.length===0)throw new Se(404,{message:`Collection "${t}" does not exist`});if(e==="_id")throw new Se(400,{message:'Cannot alter the "_id" field'});let s=i[0].options?.validator?.$jsonSchema??{},l={...s.properties??{}},m=[...s.required??[]],p=a?[o,"null"]:o;l[e]={bsonType:p};let u=m.indexOf(e);!a&&u===-1?m.push(e):a&&u!==-1&&m.splice(u,1),await r.command({collMod:t,validator:{$jsonSchema:{...s,bsonType:"object",properties:l,...m.length>0?{required:m}:{}}},validationAction:"warn"})}var Qr=f(()=>{"use strict";h()});import{HTTPException as Wr}from"hono/http-exception";async function Yr(t){let{tableName:e,columnName:o,columnType:a,defaultValue:n,isPrimaryKey:r,isNullable:i,isUnique:c,isIdentity:s,isArray:l,db:m}=t,p=S(m),[u]=await p.execute(`SELECT COUNT(*) as cnt
695
+ `,{rows:p}=await c.query(m,[e,o]);if(!p[0]?.exists)throw new zr(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(f){throw await u.query("ROLLBACK"),f}finally{u.release()}}var Jr=d(()=>{"use strict";E()});import{HTTPException as Xr}from"hono/http-exception";async function Zr({tableName:t,columnName:e,columnType:o,defaultValue:a,isNullable:n,db:r}){let i=await D(r),c=await i.listCollections({name:t}).toArray();if(c.length===0)throw new Xr(404,{message:`Collection "${t}" does not exist`});if(await i.collection(t).findOne({[e]:{$exists:!0}}))throw new Xr(409,{message:`Field "${e}" already exists in collection "${t}"`});let l=dl(a,o);await i.collection(t).updateMany({},{$set:{[e]:l}});let p=c[0].options?.validator?.$jsonSchema??{},u={...p.properties??{},[e]:{bsonType:n?[o,"null"]:o}},f=[...p.required??[]];!n&&!f.includes(e)&&f.push(e),await i.command({collMod:t,validator:{$jsonSchema:{...p,bsonType:"object",properties:u,...f.length>0?{required:f}:{}}},validationAction:"warn"})}var dl,es=d(()=>{"use strict";E();dl=(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 ts({tableName:t,columnName:e,newColumnName:o,db:a}){let n=await D(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 os({tableName:t,columnName:e,columnType:o,isNullable:a,db:n}){let r=await D(n),i=await r.listCollections({name:t}).toArray();if(i.length===0)throw new Se(404,{message:`Collection "${t}" does not exist`});if(e==="_id")throw new Se(400,{message:'Cannot alter the "_id" field'});let s=i[0].options?.validator?.$jsonSchema??{},l={...s.properties??{}},m=[...s.required??[]],p=a?[o,"null"]:o;l[e]={bsonType:p};let u=m.indexOf(e);!a&&u===-1?m.push(e):a&&u!==-1&&m.splice(u,1),await r.command({collMod:t,validator:{$jsonSchema:{...s,bsonType:"object",properties:l,...m.length>0?{required:m}:{}}},validationAction:"warn"})}var as=d(()=>{"use strict";E()});import{HTTPException as ns}from"hono/http-exception";async function rs(t){let{tableName:e,columnName:o,columnType:a,defaultValue:n,isPrimaryKey:r,isNullable:i,isUnique:c,isIdentity:s,isArray:l,db:m}=t,p=S(m),[u]=await p.execute(`SELECT COUNT(*) as cnt
696
696
  FROM information_schema.TABLES
697
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(u[0]?.cnt??0)>0))throw new Wr(404,{message:`Table "${e}" does not exist`});let[g]=await p.execute(`SELECT COUNT(*) as cnt
697
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(u[0]?.cnt??0)>0))throw new ns(404,{message:`Table "${e}" does not exist`});let[g]=await p.execute(`SELECT COUNT(*) as cnt
698
698
  FROM information_schema.COLUMNS
699
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,o]);if(Number(g[0]?.cnt??0)>0)throw new Wr(409,{message:`Column "${o}" already exists in table "${e}"`});let b=he({columnName:o,columnType:a,defaultValue:n,isPrimaryKey:r,isNullable:i,isUnique:c,isIdentity:s,isArray:l},{includePrimaryKey:!0,includeUnique:!0});await p.execute(`ALTER TABLE \`${e}\` ADD COLUMN ${b}`)}var zr=f(()=>{"use strict";h();Je()});import{HTTPException as Gr}from"hono/http-exception";async function Jr(t){let{tableName:e,columnName:o,columnType:a,isNullable:n,defaultValue:r,db:i}=t,c=S(i),[s]=await c.execute(`SELECT COUNT(*) as cnt
699
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,o]);if(Number(g[0]?.cnt??0)>0)throw new ns(409,{message:`Column "${o}" already exists in table "${e}"`});let b=he({columnName:o,columnType:a,defaultValue:n,isPrimaryKey:r,isNullable:i,isUnique:c,isIdentity:s,isArray:l},{includePrimaryKey:!0,includeUnique:!0});await p.execute(`ALTER TABLE \`${e}\` ADD COLUMN ${b}`)}var ss=d(()=>{"use strict";E();Xe()});import{HTTPException as is}from"hono/http-exception";async function cs(t){let{tableName:e,columnName:o,columnType:a,isNullable:n,defaultValue:r,db:i}=t,c=S(i),[s]=await c.execute(`SELECT COUNT(*) as cnt
700
700
  FROM information_schema.TABLES
701
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(s[0]?.cnt??0)>0))throw new Gr(404,{message:`Table "${e}" does not exist`});let[m]=await c.execute(`SELECT EXTRA
701
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(s[0]?.cnt??0)>0))throw new is(404,{message:`Table "${e}" does not exist`});let[m]=await c.execute(`SELECT EXTRA
702
702
  FROM information_schema.COLUMNS
703
703
  WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?
704
- LIMIT 1`,[e,o]),p=m[0];if(!p)throw new Gr(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 Xr=f(()=>{"use strict";h();Je()});import{HTTPException as xt}from"hono/http-exception";async function Zr(t){let{tableName:e,columnName:o,newColumnName:a,db:n}=t,r=S(n),[i]=await r.execute(`SELECT COUNT(*) as cnt
704
+ LIMIT 1`,[e,o]),p=m[0];if(!p)throw new is(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 ls=d(()=>{"use strict";E();Xe()});import{HTTPException as Ot}from"hono/http-exception";async function ms(t){let{tableName:e,columnName:o,newColumnName:a,db:n}=t,r=S(n),[i]=await r.execute(`SELECT COUNT(*) as cnt
705
705
  FROM information_schema.TABLES
706
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(i[0]?.cnt??0)>0))throw new xt(404,{message:`Table "${e}" does not exist`});let[s]=await r.execute(`SELECT COUNT(*) as cnt
706
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?`,[e]);if(!(Number(i[0]?.cnt??0)>0))throw new Ot(404,{message:`Table "${e}" does not exist`});let[s]=await r.execute(`SELECT COUNT(*) as cnt
707
707
  FROM information_schema.COLUMNS
708
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,o]);if(!(Number(s[0]?.cnt??0)>0))throw new xt(404,{message:`Column "${o}" does not exist in table "${e}"`});let[m]=await r.execute(`SELECT COUNT(*) as cnt
708
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,o]);if(!(Number(s[0]?.cnt??0)>0))throw new Ot(404,{message:`Column "${o}" does not exist in table "${e}"`});let[m]=await r.execute(`SELECT COUNT(*) as cnt
709
709
  FROM information_schema.COLUMNS
710
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,a]);if(Number(m[0]?.cnt??0)>0)throw new xt(409,{message:`Column "${a}" already exists in table "${e}"`});await r.execute(`ALTER TABLE \`${e}\` RENAME COLUMN \`${o}\` TO \`${a}\``)}var es=f(()=>{"use strict";h()});import{HTTPException as Mt}from"hono/http-exception";async function ts(t){let{tableName:e,columnName:o,newColumnName:a,db:n}=t,r=C(n),i=`
710
+ WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ? AND COLUMN_NAME = ?`,[e,a]);if(Number(m[0]?.cnt??0)>0)throw new Ot(409,{message:`Column "${a}" already exists in table "${e}"`});await r.execute(`ALTER TABLE \`${e}\` RENAME COLUMN \`${o}\` TO \`${a}\``)}var us=d(()=>{"use strict";E()});import{HTTPException as Pt}from"hono/http-exception";async function ps(t){let{tableName:e,columnName:o,newColumnName:a,db:n}=t,r=C(n),i=`
711
711
  SELECT EXISTS (
712
712
  SELECT 1 FROM information_schema.tables
713
713
  WHERE table_name = $1 AND table_schema = 'public'
714
714
  ) as exists;
715
- `,{rows:c}=await r.query(i,[e]);if(!c[0]?.exists)throw new Mt(404,{message:`Table "${e}" does not exist`});let s=`
715
+ `,{rows:c}=await r.query(i,[e]);if(!c[0]?.exists)throw new Pt(404,{message:`Table "${e}" does not exist`});let s=`
716
716
  SELECT EXISTS (
717
717
  SELECT 1 FROM information_schema.columns
718
718
  WHERE table_name = $1 AND column_name = $2 AND table_schema = 'public'
719
719
  ) as exists;
720
- `,{rows:l}=await r.query(s,[e,o]);if(!l[0]?.exists)throw new Mt(404,{message:`Column "${o}" does not exist in table "${e}"`});let{rows:m}=await r.query(s,[e,a]);if(m[0]?.exists)throw new Mt(409,{message:`Column "${a}" already exists in table "${e}"`});await r.query(`ALTER TABLE "${e}" RENAME COLUMN "${o}" TO "${a}"`)}var os=f(()=>{"use strict";h()});import{utils as Le,write as Kc}from"xlsx";function as({cols:t,rows:e,format:o,tableName:a}){switch(o){case"json":{let n=JSON.stringify(e??[],null,2);return new Uint8Array(Buffer.from(n,"utf-8"))}case"csv":{let n=[t,...e?.map(c=>t?.map(s=>c[s]))??[]],r=Le.aoa_to_sheet(n),i=Le.sheet_to_csv(r);return new Uint8Array(Buffer.from(i,"utf-8"))}case"xlsx":{let n=[t,...e?.map(s=>t?.map(l=>s[l]))??[]],r=Le.aoa_to_sheet(n),i=Le.book_new();Le.book_append_sheet(i,r,a.slice(0,31));let c=Kc(i,{bookType:"xlsx",type:"buffer"});return new Uint8Array(c)}}}var ns=f(()=>{"use strict"});import{zValidator as L}from"@hono/zod-validator";import{Hono as Vc}from"hono";var rs,ss=f(()=>{"use strict";Z();kr();Fr();Me();jr();Qr();zr();Xr();es();os();ns();rs=new Vc().basePath("/tables").get("/",L("query",w),async t=>{let{db:e}=t.req.valid("query"),o=t.get("dbType"),n=await P(o).getTablesList(e);return t.json({data:n},200)}).post("/",L("query",w),L("json",Co),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",Do),L("param",te),async t=>{let{db:e,cascade:o}=t.req.valid("query"),{tableName:a}=t.req.valid("param"),n=t.get("dbType"),i=await P(n).deleteTable({tableName:a,db:e,cascade:o});return t.json({data:i},200)}).delete("/:tableName/columns/:columnName",L("query",no),L("param",K),async t=>{let{db:e,cascade:o}=t.req.valid("query"),{tableName:a,columnName:n}=t.req.valid("param"),r=t.get("dbType"),i=P(r),{deletedCount:c}=await i.deleteColumn({tableName:a,columnName:n,cascade:o,db:e});return t.json({data:`Column "${n}" deleted successfully from table "${a}" with ${c} rows deleted`},200)}).post("/:tableName/columns",L("query",w),L("param",te),L("json",J),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 Yr({tableName:o,db:e,...a}):n==="mongodb"?await Hr({tableName:o,db:e,...a}):await qr({tableName:o,db:e,...a}),t.json({data:`Column "${a.columnName}" added successfully to table "${o}"`},200)}).patch("/:tableName/columns/:columnName/rename",L("query",w),L("param",K),L("json",pt),async t=>{let{db:e}=t.req.valid("query"),{tableName:o,columnName:a}=t.req.valid("param"),n=t.req.valid("json"),r=t.get("dbType");return r==="mysql"?await Zr({tableName:o,columnName:a,db:e,...n}):r==="mongodb"?await Kr({tableName:o,columnName:a,db:e,...n}):await ts({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 Jr({tableName:o,columnName:a,db:e,...n}):r==="mongodb"?await Vr({tableName:o,columnName:a,db:e,...n}):await Ur({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",te),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",te),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",te),L("query",qo),async t=>{let{tableName:e}=t.req.valid("param"),{cursor:o,limit:a,direction:n,sort:r,order:i,filters:c,db:s}=t.req.valid("query"),l=t.get("dbType"),p=await P(l).getTableData({tableName:e,cursor:o,limit:a,direction:n,sort:r,order:i,filters:c,db:s});return t.json({data:p},200)}).get("/:tableName/export",L("param",te),L("query",Oo),async t=>{let{tableName:e}=t.req.valid("param"),{db:o,format:a}=t.req.valid("query"),n=t.get("dbType"),r=P(n),{cols:i,rows:c}=await r.exportTableData({tableName:e,db:o}),s=as({cols:i,rows:c,format:a,tableName:e}),l;switch(a){case"csv":l="text/csv";break;case"xlsx":l="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";break;case"json":l="application/json";break}return new Response(s,{headers:{"Content-Type":l??"","Content-Disposition":`attachment; filename="${e}_export.${a}"`}})})});var is={};Pt(is,{createServer:()=>Xc});import nt from"path";import{fileURLToPath as Qc}from"url";import{serveStatic as ot}from"@hono/node-server/serve-static";import{zValidator as Wc}from"@hono/zod-validator";import{Hono as Yc}from"hono";import{cors as zc}from"hono/cors";import{logger as Gc}from"hono/logger";import{prettyJSON as Jc}from"hono/pretty-json";var at,Xc,cs=f(()=>{"use strict";Z();Vo();da();xr();Or();Ir();ss();at=()=>{if(process.env.NODE_ENV==="development")return nt.resolve(process.cwd(),"../core/dist");let t=nt.dirname(Qc(import.meta.url));return nt.resolve(t,"./core-dist")},Xc=()=>({app:new Yc({strict:!1}).use("/*",zc()).use(Jc({space:2})).use(process.env.NODE_ENV==="development"?Gc():(e,o)=>o()).use("/favicon.ico",ot({path:nt.resolve(at(),"favicon.ico")})).use("*",async(e,o)=>{e.header("Access-Control-Allow-Origin","*"),e.header("Access-Control-Allow-Methods","GET, POST, PUT, DELETE, OPTIONS"),e.header("Access-Control-Allow-Headers","Content-Type"),await o()}).onError(jo).route("/",_r).route("/",pa).use("/assets/*",ot({root:at()})).use("/image.png",ot({root:at()})).use("/:dbType/*",Wc("param",eo,Ko)).use("/:dbType/*",async(e,o)=>{let a=e.req.param("dbType");e.set("dbType",a),await o()}).route("/:dbType",rs).route("/:dbType",Pr).route("/:dbType",Lr).use("/*",ot({root:at()}))})});Pe();import{intro as Zc,outro as el}from"@clack/prompts";import{serve as tl}from"@hono/node-server";import Lt from"picocolors";import{program as Ht}from"commander";var jt=()=>(Ht.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),Ht.opts());import{readFile as ms}from"fs/promises";import{resolve as us}from"path";import{cancel as Ie,isCancel as st,note as Kt,select as ps,spinner as ds,text as Vt}from"@clack/prompts";import{parse as fs}from"dotenv";import it from"picocolors";var Qt=async(t,e)=>{let o=e||"DATABASE_URL";if(t?.[o])return t[o];if(process.env[o])return process.env[o];let a=ds();a.start("Looking for database connection..."),t?Kt(it.red(`${o} not found in .env or process.env`)):Kt(it.red(`No .env file found and ${o} not set in process.env`));let n=await ps({message:`How do you want to provide ${o}?`,options:[{value:"manual",label:"Enter connection string manually"},{value:"other-env",label:"Use different .env file"},{value:"cancel",label:"Cancel / Exit"}],initialValue:"manual"});if((st(n)||n==="cancel")&&(Ie("No database connection provided. Exiting..."),process.exit(0)),n==="other-env"){a.start("Waiting for path...");let i=await Vt({message:"Enter path to .env file",placeholder:"~/projects/myapp/.env.local or ./special.env",validate(s){if(!s?.trim())return"Path is required"}});st(i)&&(Ie("Cancelled."),process.exit(0)),a.stop("Trying custom .env...");let c=us(i);try{let s=await ms(c,"utf-8"),l=fs(s);if(l[o])return l[o];throw new Error(`${o} still missing in custom file`)}catch(s){let l=s;Ie(`Cannot read or parse file: ${it.dim(l.message)}`),process.exit(1)}}a.stop("Manual input...");let r=await Vt({message:`Paste your ${o}`,placeholder:"postgresql://user:password@localhost:5432/mydb",validate(i){if(!i?.trim())return"Connection string is required!";try{new URL(i);return}catch{return"Must be a valid URL format"}}});return st(r)&&(Ie("Cancelled."),process.exit(0)),r.trim()};import{access as bs,readFile as ys}from"fs/promises";import{dirname as gs,resolve as ct}from"path";import{parse as Ts}from"dotenv";var Es=async t=>{let e=ct(t);for(;;){let o=ct(e,".env");try{return await bs(o),o}catch{}let a=gs(e);if(a===e)return null;e=a}},pe=async t=>{let e;if(t?e=ct(t):e=await Es(process.cwd()),!e)return null;try{let o=await ys(e,"utf-8");return Ts(o)}catch(o){if(o instanceof Error&&o.message.includes("ENOENT"))return null;throw o}};rt();import{intro as hs,outro as Cs}from"@clack/prompts";import Wt from"picocolors";var Yt=()=>{hs(Wt.inverse(" db-studio ")),Cs(Wt.green(`For more information, visit: ${Ft.SITE_DOCS_LINK}`))};Pe();import{intro as Ss,note as Ns,outro as zt}from"@clack/prompts";import $e from"picocolors";var Gt=async(t,e,o)=>{Ss($e.inverse(" db-studio "));let a=o||oe.VAR_NAME,n=null;if(e)n=e;else{let r=t?await pe(t):await pe();r?.[a]?n=r[a]:process.env[a]&&(n=process.env[a]??null)}n?zt($e.green(`\u2713 Database connection configured (using ${a})`)):(Ns($e.red(`\u2717 ${a} not found`),"Status"),zt($e.yellow("\u26A0 No database connection configured")))};import{intro as As,outro as ws}from"@clack/prompts";import Xt from"picocolors";var Jt={name:"db-studio",type:"module",version:"1.7.9",description:"Modern database client for PostgreSQL with spreadsheet-like grid, AI-powered SQL assistance, ER diagrams, fast data browsing and editing. CLI tool, upcoming desktop & web versions.",keywords:["database client","database gui","database browser","sql client","sql editor","query tool","table editor","data editor","postgres","postgresql","postgresql client","postgresql gui","pgadmin alternative","mysql","mysql client","ai sql","er diagram","database management","database studio"],author:"H\xFCsam \u{1F951} <devhsmq@gmail.com>",homepage:"https://dbstudio.sh",repository:{type:"git",url:"git+https://github.com/husamql3/db-studio.git"},bugs:{url:"https://github.com/husamql3/db-studio/issues"},license:"MIT",bin:{"db-studio":"./dist/index.js"},files:["dist"],scripts:{dev:"NODE_ENV=development tsx watch src/index.ts",build:"tsup --minify --sourcemap",prepack:"cd ../core && bun run build && cd ../server && bun run build",start:"node dist/index.js",check:"biome check --write --unsafe",test:"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage"},dependencies:{"@clack/prompts":"^1.0.1","@hono/node-server":"^1.19.7","@hono/zod-validator":"^0.7.6",commander:"^14.0.3",dotenv:"^17.3.1",hono:"^4.10.4",mongodb:"^7.1.1",mssql:"^12.2.0",mysql2:"^3.18.2",pg:"^8.13.1",picocolors:"^1.1.1",xlsx:"^0.18.5",zod:"^4.2.1"},devDependencies:{"@biomejs/biome":"^2.2.6","@types/node":"^25.6.0","@types/pg":"^8.16.0","@types/mssql":"^12.3.0","@vitest/coverage-v8":"^4.0.17",shared:"workspace:*",tsup:"^8.5.1",tsx:"^4.7.1",typescript:"^6.0.3",vitest:"^4.0.17"}};var Zt=()=>{As(Xt.inverse(" db-studio ")),ws(Xt.green(`\u{1F680} db-studio v${Jt.version}`))};var ol=async()=>{let{env:t,port:e,databaseUrl:o,varName:a,status:n,help:r,version:i}=jt();r&&(Yt(),process.exit(0)),i&&(Zt(),process.exit(0)),n&&(await Gt(t,o,a),process.exit(0)),Zc(Lt.inverse(" db-studio "));let c=e?parseInt(e,10):oe.PORT,s=a||oe.VAR_NAME,l=t?await pe(t):await pe(),m=o||await Qt(l,s);process.env.DATABASE_URL=m;let{createServer:p}=await Promise.resolve().then(()=>(cs(),is)),{app:u}=p();tl({fetch:u.fetch,port:c}),el(Lt.green(`Server running at ${Lt.cyan(`http://localhost:${c}`)}`))};ol().catch(t=>{process.exit(1)});export{ol as main};
720
+ `,{rows:l}=await r.query(s,[e,o]);if(!l[0]?.exists)throw new Pt(404,{message:`Column "${o}" does not exist in table "${e}"`});let{rows:m}=await r.query(s,[e,a]);if(m[0]?.exists)throw new Pt(409,{message:`Column "${a}" already exists in table "${e}"`});await r.query(`ALTER TABLE "${e}" RENAME COLUMN "${o}" TO "${a}"`)}var ds=d(()=>{"use strict";E()});import{utils as Me,write as fl}from"xlsx";function fs({cols:t,rows:e,format:o,tableName:a}){switch(o){case"json":{let n=JSON.stringify(e??[],null,2);return new Uint8Array(Buffer.from(n,"utf-8"))}case"csv":{let n=[t,...e?.map(c=>t?.map(s=>c[s]))??[]],r=Me.aoa_to_sheet(n),i=Me.sheet_to_csv(r);return new Uint8Array(Buffer.from(i,"utf-8"))}case"xlsx":{let n=[t,...e?.map(s=>t?.map(l=>s[l]))??[]],r=Me.aoa_to_sheet(n),i=Me.book_new();Me.book_append_sheet(i,r,a.slice(0,31));let c=fl(i,{bookType:"xlsx",type:"buffer"});return new Uint8Array(c)}}}var bs=d(()=>{"use strict"});import{zValidator as L}from"@hono/zod-validator";import{Hono as bl}from"hono";var ys,gs=d(()=>{"use strict";ee();Yr();Jr();xe();es();as();ss();ls();us();ds();bs();ys=new bl().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",Ro),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",xo),L("param",ne),async t=>{let{db:e,cascade:o}=t.req.valid("query"),{tableName:a}=t.req.valid("param"),n=t.get("dbType"),i=await P(n).deleteTable({tableName:a,db:e,cascade:o});return t.json({data:i},200)}).delete("/:tableName/columns/:columnName",L("query",so),L("param",V),async t=>{let{db:e,cascade:o}=t.req.valid("query"),{tableName:a,columnName:n}=t.req.valid("param"),r=t.get("dbType"),i=P(r),{deletedCount:c}=await i.deleteColumn({tableName:a,columnName:n,cascade:o,db:e});return t.json({data:`Column "${n}" deleted successfully from table "${a}" with ${c} rows deleted`},200)}).post("/:tableName/columns",L("query",w),L("param",ne),L("json",X),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 rs({tableName:o,db:e,...a}):n==="mongodb"?await Zr({tableName:o,db:e,...a}):await Wr({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",V),L("json",dt),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 ms({tableName:o,columnName:a,db:e,...n}):r==="mongodb"?await ts({tableName:o,columnName:a,db:e,...n}):await ps({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",V),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 cs({tableName:o,columnName:a,db:e,...n}):r==="mongodb"?await os({tableName:o,columnName:a,db:e,...n}):await Gr({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",ne),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",ne),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",ne),L("query",vo),async t=>{let{tableName:e}=t.req.valid("param"),{cursor:o,limit:a,direction:n,sort:r,order:i,filters:c,db:s}=t.req.valid("query"),l=t.get("dbType"),p=await P(l).getTableData({tableName:e,cursor:o,limit:a,direction:n,sort:r,order:i,filters:c,db:s});return t.json({data:p},200)}).get("/:tableName/export",L("param",ne),L("query",Io),async t=>{let{tableName:e}=t.req.valid("param"),{db:o,format:a}=t.req.valid("query"),n=t.get("dbType"),r=P(n),{cols:i,rows:c}=await r.exportTableData({tableName:e,db:o}),s=fs({cols:i,rows:c,format:a,tableName:e}),l;switch(a){case"csv":l="text/csv";break;case"xlsx":l="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";break;case"json":l="application/json";break}return new Response(s,{headers:{"Content-Type":l??"","Content-Disposition":`attachment; filename="${e}_export.${a}"`}})})});var Ts={};Cs(Ts,{createServer:()=>Sl});import rt from"path";import{fileURLToPath as yl}from"url";import{serveStatic as at}from"@hono/node-server/serve-static";import{zValidator as gl}from"@hono/zod-validator";import{Hono as Tl}from"hono";import{cors as El}from"hono/cors";import{logger as hl}from"hono/logger";import{prettyJSON as Cl}from"hono/pretty-json";var nt,Sl,Es=d(()=>{"use strict";ee();Wo();ia();Fr();jr();Vr();gs();nt=()=>{if(process.env.NODE_ENV==="development")return rt.resolve(process.cwd(),"../core/dist");let t=rt.dirname(yl(import.meta.url));return rt.resolve(t,"./core-dist")},Sl=()=>({app:new Tl({strict:!1}).use("/*",El()).use(Cl({space:2})).use(process.env.NODE_ENV==="development"?hl():(e,o)=>o()).use("/favicon.ico",at({path:rt.resolve(nt(),"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(Vo).route("/",Ur).route("/",sa).use("/assets/*",at({root:nt()})).use("/image.png",at({root:nt()})).use("/:dbType/*",gl("param",oo,Qo)).use("/:dbType/*",async(e,o)=>{let a=e.req.param("dbType");e.set("dbType",a),await o()}).route("/:dbType",ys).route("/:dbType",Kr).route("/:dbType",Hr).use("/*",at({root:nt()}))})});Oe();import{intro as Rl,outro as Nl}from"@clack/prompts";import{serve as Al}from"@hono/node-server";import It from"picocolors";import{program as Kt}from"commander";var Vt=()=>(Kt.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),Kt.opts());import{readFile as Ss}from"fs/promises";import{resolve as Rs}from"path";import{cancel as Pe,isCancel as it,note as Qt,select as Ns,spinner as As,text as Wt}from"@clack/prompts";import{parse as ws}from"dotenv";import ct from"picocolors";var Yt=async(t,e)=>{let o=e||"DATABASE_URL";if(t?.[o])return t[o];if(process.env[o])return process.env[o];let a=As();a.start("Looking for database connection..."),t?Qt(ct.red(`${o} not found in .env or process.env`)):Qt(ct.red(`No .env file found and ${o} not set in process.env`));let n=await Ns({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((it(n)||n==="cancel")&&(Pe("No database connection provided. Exiting..."),process.exit(0)),n==="other-env"){a.start("Waiting for path...");let i=await Wt({message:"Enter path to .env file",placeholder:"~/projects/myapp/.env.local or ./special.env",validate(s){if(!s?.trim())return"Path is required"}});it(i)&&(Pe("Cancelled."),process.exit(0)),a.stop("Trying custom .env...");let c=Rs(i);try{let s=await Ss(c,"utf-8"),l=ws(s);if(l[o])return l[o];throw new Error(`${o} still missing in custom file`)}catch(s){let l=s;Pe(`Cannot read or parse file: ${ct.dim(l.message)}`),process.exit(1)}}a.stop("Manual input...");let r=await Wt({message:`Paste your ${o}`,placeholder:"postgresql://user:password@localhost:5432/mydb",validate(i){if(!i?.trim())return"Connection string is required!";try{new URL(i);return}catch{return"Must be a valid URL format"}}});return it(r)&&(Pe("Cancelled."),process.exit(0)),r.trim()};import{access as Ds,readFile as _s}from"fs/promises";import{dirname as xs,resolve as lt}from"path";import{parse as Ms}from"dotenv";var Ls=async t=>{let e=lt(t);for(;;){let o=lt(e,".env");try{return await Ds(o),o}catch{}let a=xs(e);if(a===e)return null;e=a}},pe=async t=>{let e;if(t?e=lt(t):e=await Ls(process.cwd()),!e)return null;try{let o=await _s(e,"utf-8");return Ms(o)}catch(o){if(o instanceof Error&&o.message.includes("ENOENT"))return null;throw o}};st();import{intro as Os,outro as Ps}from"@clack/prompts";import zt from"picocolors";var Gt=()=>{Os(zt.inverse(" db-studio ")),Ps(zt.green(`For more information, visit: ${Ht.SITE_DOCS_LINK}`))};Oe();import{intro as Is,note as $s,outro as Jt}from"@clack/prompts";import Ie from"picocolors";var Xt=async(t,e,o)=>{Is(Ie.inverse(" db-studio "));let a=o||re.VAR_NAME,n=null;if(e)n=e;else{let r=t?await pe(t):await pe();r?.[a]?n=r[a]:process.env[a]&&(n=process.env[a]??null)}n?Jt(Ie.green(`\u2713 Database connection configured (using ${a})`)):($s(Ie.red(`\u2717 ${a} not found`),"Status"),Jt(Ie.yellow("\u26A0 No database connection configured")))};import{intro as ks,outro as vs}from"@clack/prompts";import eo from"picocolors";var Zt={name:"db-studio",type:"module",version:"1.7.10",description:"Modern database client for PostgreSQL with spreadsheet-like grid, AI-powered SQL assistance, ER diagrams, fast data browsing and editing. CLI tool, upcoming desktop & web versions.",keywords:["database client","database gui","database browser","sql client","sql editor","query tool","table editor","data editor","postgres","postgresql","postgresql client","postgresql gui","pgadmin alternative","mysql","mysql client","ai sql","er diagram","database management","database studio"],author:"H\xFCsam \u{1F951} <devhsmq@gmail.com>",homepage:"https://dbstudio.sh",repository:{type:"git",url:"git+https://github.com/husamql3/db-studio.git"},bugs:{url:"https://github.com/husamql3/db-studio/issues"},license:"MIT",bin:{"db-studio":"./dist/index.js"},files:["dist"],scripts:{dev:"NODE_ENV=development tsx watch src/index.ts",build:"tsup --minify --sourcemap",prepack:"cd ../core && bun run build && cd ../server && bun run build",start:"node dist/index.js",check:"biome check --write --unsafe",test:"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage"},dependencies:{"@clack/prompts":"^1.0.1","@hono/node-server":"^1.19.7","@hono/zod-validator":"^0.7.6",commander:"^14.0.3",dotenv:"^17.3.1",hono:"^4.10.4",mongodb:"^7.1.1",mssql:"^12.2.0",mysql2:"^3.18.2",pg:"^8.13.1",picocolors:"^1.1.1",xlsx:"^0.18.5",zod:"^4.2.1"},devDependencies:{"@biomejs/biome":"^2.2.6","@types/node":"^25.6.0","@types/pg":"^8.16.0","@types/mssql":"^12.3.0","@vitest/coverage-v8":"^4.0.17",shared:"workspace:*",tsup:"^8.5.1",tsx:"^4.7.1",typescript:"^6.0.3",vitest:"^4.0.17"}};var to=()=>{ks(eo.inverse(" db-studio ")),vs(eo.green(`\u{1F680} db-studio v${Zt.version}`))};var wl=async()=>{let{env:t,port:e,databaseUrl:o,varName:a,status:n,help:r,version:i}=Vt();r&&(Gt(),process.exit(0)),i&&(to(),process.exit(0)),n&&(await Xt(t,o,a),process.exit(0)),Rl(It.inverse(" db-studio "));let c=e?parseInt(e,10):re.PORT,s=a||re.VAR_NAME,l=t?await pe(t):await pe(),m=o||await Yt(l,s);process.env.DATABASE_URL=m;let{createServer:p}=await Promise.resolve().then(()=>(Es(),Ts)),{app:u}=p();Al({fetch:u.fetch,port:c}),Nl(It.green(`Server running at ${It.cyan(`http://localhost:${c}`)}`))};wl().catch(t=>{process.exit(1)});export{wl as main};
721
721
  //# sourceMappingURL=index.js.map