hysteria-orm 11.1.3 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cli.js +44 -122
- package/lib/cli.js.map +1 -1
- package/lib/index.cjs +24 -100
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +3492 -3311
- package/lib/index.d.ts +3492 -3311
- package/lib/index.js +24 -100
- package/lib/index.js.map +1 -1
- package/package.json +16 -9
package/lib/cli.js
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {Command}from'commander';import ne from'fs';import st from'path';import Cu from'fs/promises';import {format}from'sql-formatter';import {highlight}from'sql-highlight';import {createRequire}from'module';import {pathToFileURL}from'url';import xe,{randomUUID,privateDecrypt,publicEncrypt,randomBytes}from'crypto';import {PassThrough,Readable}from'stream';import {performance}from'perf_hooks';import {AsyncLocalStorage}from'async_hooks';import {execSync}from'child_process';import Ug from'readline';var oh=Object.defineProperty;var cu=i=>{throw TypeError(i)};var mu=(i,t,e,r)=>{for(var o=void 0,n=i.length-1,s;n>=0;n--)(s=i[n])&&(o=(s(t,e,o))||o);return o&&oh(t,e,o),o};var sh=(i,t,e)=>t.has(i)||cu("Cannot "+e);var pu=(i,t,e)=>t.has(i)?cu("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);var fu=(i,t,e)=>(sh(i,t,"access private method"),e);var S=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}},bt=class extends S{constructor(t){super("ValidationError","VALIDATION_ERROR"),this.errors=t;}};var re=class{constructor(t){this.options=t;}static async createDriver(t){throw new S("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};var L=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};var Tt=class Tt extends re{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new Tt(this.mongoClient);let e=await import('mongodb').catch(()=>{throw new L("mongodb")});if(this.mongoClient=e.default??e,!this.mongoClient)throw new L("mongodb");return new Tt(this.mongoClient)}};Tt.mongoClient=null;var Vt=Tt;var Nt=class Nt extends re{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new Nt(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new L("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new L("mssql");return new Nt(this.mssqlClient)}};Nt.mssqlClient=null;var Jt=Nt;var wt=class wt extends re{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new wt(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new L("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new L("mysql2");return new wt(this.mysqlClient)}};wt.mysqlClient=null;var Ht=wt;var St=class St extends re{constructor(e,r){super(r);this.type="oracledb";this.client=e;}static async createDriver(){if(this.oracledbClient)return new St(this.oracledbClient);let e=await import('oracledb').catch(()=>{throw new L("oracledb")});if(this.oracledbClient=e.default??e,!this.oracledbClient)throw new L("oracledb");return new St(this.oracledbClient)}};St.oracledbClient=null;var zt=St;var Ct=class Ct extends re{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new Ct(this.pgClient);let e=await import('pg').catch(()=>{throw new L("pg")});if("default"in e&&(e.default,this.pgClient=e.default??e),!this.pgClient)throw new L("pg");return new Ct(this.pgClient)}};Ct.pgClient=null;var Yt=Ct;var qt=class qt extends re{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new qt(this.sqlite3Client);let e=await import('sqlite3').catch(()=>{throw new L("sqlite3")});if(this.sqlite3Client=e.default??e,!this.sqlite3Client)throw new L("sqlite3");return new qt(this.sqlite3Client)}};qt.sqlite3Client=null;var Gt=qt;var fe=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await Ht.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await Yt.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await Gt.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await Vt.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await Jt.createDriver(),this.mssqlDriver;case "oracledb":return this.oracledbDriver=await zt.createDriver(),this.oracledbDriver;default:throw new S(`DriverFactory::getDriver Driver ${t} not supported`,"DRIVER_NOT_FOUND")}}static getExistingDriver(t){switch(t){case "mysql":case "mariadb":return this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver;case "sqlite":return this.sqliteDriver;case "mongo":return this.mongodbDriver;case "mssql":return this.mssqlDriver;case "oracledb":return this.oracledbDriver;default:return null}}};fe.mysqlDriver=null,fe.pgDriver=null,fe.sqliteDriver=null,fe.mssqlDriver=null,fe.oracledbDriver=null,fe.mongodbDriver=null;var P={DB_TYPE:process.env.DB_TYPE,DB_HOST:process.env.DB_HOST,DB_PORT:process.env.DB_PORT,DB_USER:process.env.DB_USER,DB_PASSWORD:process.env.DB_PASSWORD,DB_DATABASE:process.env.DB_DATABASE,DB_LOGS:process.env.DB_LOGS==="true",MIGRATION_PATH:process.env.MIGRATION_PATH||"database/migrations",REDIS_HOST:process.env.REDIS_HOST,REDIS_PORT:process.env.REDIS_PORT,REDIS_USERNAME:process.env.REDIS_USERNAME,REDIS_PASSWORD:process.env.REDIS_PASSWORD,REDIS_DATABASE:process.env.REDIS_DATABASE,MONGO_URL:process.env.MONGO_URL,MONGO_LOGS:process.env.MONGO_LOGS==="true",MSSQL_TRUST_SERVER_CERTIFICATE:process.env.MSSQL_TRUST_SERVER_CERTIFICATE==="true"||false},ih=()=>{if(!ne.existsSync(".env"))return P;try{ne.readFileSync(".env","utf8").split(`
|
|
3
|
-
`).forEach(e=>{let[r,o]=e.split("="),n=r.trim(),s=o.trim();switch(n){case "DB_TYPE":P.DB_TYPE||(P.DB_TYPE=s);break;case "DB_HOST":P.DB_HOST||(P.DB_HOST=s);break;case "DB_PORT":P.DB_PORT||(P.DB_PORT=s);break;case "DB_USER":P.DB_USER||(P.DB_USER=s);break;case "DB_PASSWORD":P.DB_PASSWORD||(P.DB_PASSWORD=s);break;case "DB_DATABASE":P.DB_DATABASE||(P.DB_DATABASE=s);break;case "MIGRATION_PATH":P.MIGRATION_PATH||(P.MIGRATION_PATH=s||"database/migrations");break;case "REDIS_HOST":P.REDIS_HOST||(P.REDIS_HOST=s);break;case "REDIS_PORT":P.REDIS_PORT||(P.REDIS_PORT=s);break;case "REDIS_USERNAME":P.REDIS_USERNAME||(P.REDIS_USERNAME=s);break;case "REDIS_PASSWORD":P.REDIS_PASSWORD||(P.REDIS_PASSWORD=s);break;case "REDIS_DATABASE":P.REDIS_DATABASE||(P.REDIS_DATABASE=s);break;case "MONGO_URL":P.MONGO_URL||(P.MONGO_URL=s);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":P.MSSQL_TRUST_SERVER_CERTIFICATE||(P.MSSQL_TRUST_SERVER_CERTIFICATE=s==="true");break}});}catch{}finally{return P}},E=ih();var ah=async i=>(await fe.getDriver(i)).client,Xe=async(i,t)=>{let e=await ah(i);switch(i){case "mariadb":case "mysql":let r=t;return e.createPool({host:r.host,port:r.port,user:r.username,password:r.password,database:r.database,...r?.driverOptions});case "postgres":case "cockroachdb":let s=t,a=e;return new a.Pool({host:s.host,port:s.port,user:s.username,password:s.password,database:s.database,...s?.driverOptions});case "sqlite":let u=e,d=t,c=d?.database;return new u.Database(c,d?.driverOptions?.mode??void 0,A=>{if(A)throw new S("SqliteDataSource::createSqlPool","CONNECTION_NOT_ESTABLISHED")});case "mssql":let p=e,f=t,{options:y,...T}=f.driverOptions??{},b=new p.ConnectionPool({server:f.host??"localhost",port:f.port,database:f.database,user:f.username,password:f.password,...T,options:{trustServerCertificate:E.MSSQL_TRUST_SERVER_CERTIFICATE??void 0,...y,abortTransactionOnError:false,enableImplicitTransactions:false}});return await b.connect(),b;case "oracledb":let C=e,R=t,_=`${R.host}/${R.database}`;return await C.createPool({user:R.username,password:R.password,connectString:_,...R.driverOptions});default:throw new S("SqlConnectionUtils::createSqlPool",`UNSUPPORTED_DATABASE_TYPE_${i}`)}};var _t=i=>{switch(i){case "mysql":return "mysql";case "mariadb":return "mariadb";case "postgres":case "cockroachdb":return "postgresql";case "sqlite":return "sqlite";case "mssql":return "transactsql";case "oracledb":return "plsql";default:return "sql"}},Xt=i=>{if(i==null)return "NULL";if(i instanceof Date)return `'${i.toISOString()}'`;let t=typeof i;return t==="boolean"?i?"TRUE":"FALSE":t==="number"&&Number.isFinite(i)||t==="bigint"?String(i):t==="string"?`'${i.replace(/'/g,"''")}'`:Array.isArray(i)||t==="object"&&Object.keys(i).length>0?`'${JSON.stringify(i).replace(/'/g,"''")}'`:String(i)},Ze=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,Xt(t[r]));for(let r=0;r<t.length;r++){let o=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(o,Xt(t[r]));}for(let r=0;r<t.length;r++){let o=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(o,Xt(t[r]));}for(let r=0;r<t.length;r++){let o=new RegExp(`:${r+1}(?!\\d)`,"g");e=e.replace(o,Xt(t[r]));}return e},et=(i,t)=>t?i==="mysql"||i==="mariadb"?t.code==="ER_NO_SUCH_TABLE"||t.errno===1146:i==="postgres"||i==="cockroachdb"?t.code==="42P01":i==="sqlite"?/no such table/i.test(String(t.message||"")):i==="mssql"?t.number===208:i==="oracledb"?t.errorNum===942:false:false,tt=(i,t)=>{let e=i.getDbType(),r;try{r=format(t,{...i.inputDetails.queryFormatOptions,language:_t(e)});}catch{try{r=format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var gu={info:0,warn:1,error:2};function er(i){return i?i===true?{level:"info",logQueries:true}:{level:i.level??"info",logQueries:i.logQueries??true,customLogger:i.customLogger}:null}function dh(i,t="info"){let e=er(i);if(!e)return false;let r=e.level??"info";return gu[t]>=gu[r]}function ch(i){let t=er(i);return t?t.logQueries??true:false}var $e={info:"32",warn:"33",error:"31",query:"35",dim:"2",cyan:"36"},mh=typeof process<"u"&&!!process.stdout?.isTTY&&!process.env.NO_COLOR,rt=(i,t)=>mh?`\x1B[${i}m${t}\x1B[0m`:t;function wu(){let i=new Date,t=r=>r.toString().padStart(2,"0"),e=i.getMilliseconds().toString().padStart(3,"0");return `${t(i.getHours())}:${t(i.getMinutes())}:${t(i.getSeconds())}.${e}`}function po(i,t){let e=rt($e.dim,`[${wu()}]`),r=rt($e[i],i.toUpperCase().padEnd(5));return `${e} ${r} ${t}`}var ph=60,fh=10,bu=400;function Zt(i,t=ph){return i.length<=t?i:`${i.slice(0,t)}\u2026`}function yh(i){if(i==null)return "null";if(typeof i=="string")return `'${Zt(i)}'`;if(typeof i=="number"||typeof i=="bigint")return String(i);if(typeof i=="boolean")return i?"true":"false";if(i instanceof Date)return `'${Zt(i.toISOString())}'`;if(typeof i=="object"){let t;try{t=JSON.stringify(i);}catch{t=String(i);}return `'${Zt(t)}'`}return Zt(String(i))}function hh(i){if(!i||i.length===0)return "[]";let t=i.slice(0,fh).map(yh),e=i.length-t.length;e>0&&t.push(`\u2026 (${e} more)`);let r=`[${t.join(", ")}]`;return r.length>bu&&(r=`${r.slice(0,bu)}\u2026`),r}var Tu=(i,t)=>{let e=" ".repeat(t);return i.split(`
|
|
2
|
+
import {PassThrough,Readable}from'stream';import {Command}from'commander';import oe,{promises}from'fs';import dt from'path';import Xl from'fs/promises';import {format}from'sql-formatter';import {highlight}from'sql-highlight';import {createRequire}from'module';import {pathToFileURL}from'url';import De,{privateDecrypt,publicEncrypt}from'crypto';import {AsyncLocalStorage}from'async_hooks';import {execSync}from'child_process';import Bh from'readline';var Kl=Object.defineProperty;var Ll=s=>{throw TypeError(s)};var Oe=(s,t)=>()=>(s&&(t=s(s=0)),t);var jl=(s,t)=>{for(var e in t)Kl(s,e,{get:t[e],enumerable:true});};var Wl=(s,t,e,r)=>{for(var n=void 0,o=s.length-1,i;o>=0;o--)(i=s[o])&&(n=(i(t,e,n))||n);return n&&Kl(t,e,n),n};var Vf=(s,t,e)=>t.has(s)||Ll("Cannot "+e);var Fl=(s,t,e)=>t.has(s)?Ll("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(s):t.set(s,e);var Ul=(s,t,e)=>(Vf(s,t,"access private method"),e);var L,se=Oe(()=>{L=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};});var df,fe,fh,cf,qt=Oe(()=>{se();df=[],fe=s=>{df.push(s);},fh=async(s,t,e,r)=>{if(!Array.isArray(t?.dialects))throw new Error(`driver must be a registered driver name or a DriverAdapterFactory with a "dialects" array (got ${typeof t}).`);if(!t.dialects.includes(s))throw new Error(`driver "${t.name}" does not support dialect "${s}" (declares: ${t.dialects.join(", ")}).`);return t.create({dialect:s,jsEnvironment:e,input:r})},cf=async(s,t,e,r)=>{if(e&&typeof e!="string")return fh(s,e,t,r);let n=df.filter(l=>l.dialects.includes(s)),o=(l,u)=>(l.environments??["node"]).includes(u),i=(l,u)=>(e?l.name===e:true)&&o(l,u),a=n.find(l=>i(l,t));if(a)return a.create({dialect:s,jsEnvironment:t,input:r});if(t==="bun"){let l=n.find(u=>i(u,"node"));if(l)return l.create({dialect:s,jsEnvironment:t,input:r})}throw new L(e??s)};});var Ct,wh,pf,Vt=Oe(()=>{Ct=async(s,t={},e)=>{let r=new PassThrough({objectMode:t.objectMode??true,highWaterMark:t.highWaterMark});try{for(let n of s)e.onData?await e.onData(r,n):r.write(n);r.end();}catch(n){r.destroy(n);}return r},wh=s=>{if(s.writableNeedDrain)return new Promise(t=>s.once("drain",()=>t()))},pf=async(s,t={},e)=>{let r=new PassThrough({objectMode:t.objectMode??true,highWaterMark:t.highWaterMark});try{for(let n of s)e.onData?await e.onData(r,n):r.write(n),await wh(r);r.end();}catch(n){r.destroy(n);}return r};});var Tn,ff=Oe(()=>{Vt();Tn=class{constructor(t,e,r){this.jsEnvironment="bun";this.dialect=t;let n={hostname:e.host,port:e.port,username:e.username,password:e.password,database:e.database,...e.driverOptions};(t==="mysql"||t==="mariadb")&&(n.adapter="mysql",n.allowPublicKeyRetrieval=true),this.sql=new r(n),this.pool=this.sql;}createPool(){}async closePool(){this.sql.close();}async reserveConnection(){return this.sql.reserve()}releaseConnection(t){t?.release();}async beginTransaction(t,e){(this.dialect==="mysql"||this.dialect==="mariadb")&&e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await e.rawQuery(this.dialect==="mysql"||this.dialect==="mariadb"?"START TRANSACTION":"BEGIN TRANSACTION"),(this.dialect==="postgres"||this.dialect==="cockroachdb")&&e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let o=await(r.connection??this.sql).unsafe(t,e);if(this.dialect==="mysql"||this.dialect==="mariadb"){let a=/^\s*(select|show|desc(ribe)?|explain)\b/i.test(t);if(Array.isArray(o)&&(a||o.length>0))return [o,void 0];let l=o;return [{affectedRows:Number(l.affectedRows),insertId:Number(l.lastInsertRowid)},void 0]}let i=o;return Array.isArray(o)&&!((i.command==="INSERT"||i.command==="UPDATE"||i.command==="DELETE")&&o.length===0)?{rows:o,rowCount:o.length}:{rows:[],rowCount:i.count??i.affectedRows??0}}extract(t,e){if(e==="raw")return t;if(this.dialect==="mysql"||this.dialect==="mariadb"){let n=t;return e==="affectedRows"?n[0]?.affectedRows??0:n[0]}let r=t;return e==="affectedRows"?r.rowCount:r.rows}async stream(t,e,r,n){let i=await(r.connection??this.sql).unsafe(t,e),a=Array.isArray(i)?i:[];return Ct(a,r,n)}};});var wn,yf=Oe(()=>{Vt();wn=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="bun";this.db=new r(String(e.database??":memory:"),e.driverOptions),this.pool=this.db;}createPool(){}async closePool(){this.db.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.db,o=r.sqlLiteOptions??{},i=o.mode||"fetch";return ["begin","begin transaction","commit","rollback"].includes(t.trim().toLowerCase())?n.query(t).run(...e).changes:i==="fetch"?n.query(t).all(...e):o?.typeofModel?i==="insertOne"||i==="insertMany"?n.query(`${t} returning *`).all(...e):n.query(t).run(...e).changes:n.query(t).run(...e).changes}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.db;return pf(o.query(t).iterate(...e),r,n)}};});var hf={};jl(hf,{registerBunDrivers:()=>Sh});var Sh,gf=Oe(()=>{qt();ff();yf();Sh=async()=>{let{SQL:s}=await import('bun'),{Database:t}=await import('bun:sqlite');fe({name:"bun-sql",dialects:["postgres","cockroachdb","mysql","mariadb"],environments:["bun"],create:async({dialect:e,input:r})=>new Tn(e,r,s)}),fe({name:"bun-sqlite",dialects:["sqlite"],environments:["bun"],create:async({dialect:e,input:r})=>new wn(e,r,t)});};});var Nh,Sn,xl,Ol=Oe(()=>{Vt();Nh=async s=>(await(await import('@sqlite.org/sqlite-wasm')).default(s)).oo1,Sn=class{constructor(t,e,r=Nh,n){this.dialect="sqlite";this.jsEnvironment="web";this.filename=String(e.database??":memory:"),this.loader=r,this.initConfig=n;}async createPool(){let t=await this.loader(this.initConfig),{filename:e}=this;this.db=e.startsWith(":memory:")||e===""?new t.DB(e):t.OpfsDb?new t.OpfsDb(e,"c"):new t.DB(e,"c"),this.pool=this.db;}async closePool(){this.db?.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.requireDb(),o=r.sqlLiteOptions??{},i=o.mode||"fetch",a=u=>(n.exec(u,{bind:e}),n.changes());return xl(t)?a(t):i==="fetch"?n.selectObjects(t,e):o?.typeofModel&&(i==="insertOne"||i==="insertMany")?n.selectObjects(`${t} returning *`,e):a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.requireDb();return Ct(o.selectObjects(t,e),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-wasm: pool not created, await createPool() before querying");return this.db}},xl=s=>["begin","begin transaction","commit","rollback"].includes(s.trim().toLowerCase());});var Al,Nn,bf=Oe(()=>{Vt();Ol();Al=s=>Array.isArray(s)?s:s?._array??[],Nn=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="react-native";this.filename=String(e.database??":memory:"),this.engine=r;}createPool(){this.db=this.engine.open({name:this.filename}),this.pool=this.db;}async closePool(){this.db?.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.requireDb(),o=r.sqlLiteOptions??{},i=o.mode||"fetch",a=async u=>(await n.execute(u,e)).rowsAffected??0;if(xl(t))return a(t);if(i==="fetch"){let u=await n.execute(t,e);return Al(u.rows)}if(!o?.typeofModel)return a(t);if(i==="insertOne"||i==="insertMany"){let u=await n.execute(`${t} returning *`,e);return Al(u.rows)}return a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let i=await(r.connection??this.requireDb()).execute(t,e);return Ct(Al(i.rows),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-rn: pool not created, await createPool() before querying");return this.db}};});var Dl={};jl(Dl,{registerReactNativeDrivers:()=>Ch,registerWebDrivers:()=>qh});var Tf,wf,qh,Sf,Ch,$l=Oe(()=>{qt();bf();Ol();Tf=false,qh=s=>{Tf||(Tf=true,wf=s,fe({name:"sqlite-wasm",dialects:["sqlite"],environments:["web"],create:({dialect:t,input:e})=>new Sn(t,e,void 0,wf)}));},Sf=false,Ch=async()=>{if(Sf)return;Sf=true;let s=await import('@op-engineering/op-sqlite');fe({name:"sqlite-rn",dialects:["sqlite"],environments:["react-native"],create:({dialect:t,input:e})=>new Nn(t,e,s)});};});var _t=s=>{switch(s){case "mysql":return "mysql";case "mariadb":return "mariadb";case "postgres":case "cockroachdb":return "postgresql";case "sqlite":return "sqlite";case "mssql":return "transactsql";default:return "sql"}},Dn=s=>{if(s==null)return "NULL";if(s instanceof Date)return `'${s.toISOString()}'`;let t=typeof s;return t==="boolean"?s?"TRUE":"FALSE":t==="number"&&Number.isFinite(s)||t==="bigint"?String(s):t==="string"?`'${s.replace(/'/g,"''")}'`:Array.isArray(s)||t==="object"&&Object.keys(s).length>0?`'${JSON.stringify(s).replace(/'/g,"''")}'`:String(s)},tt=(s,t)=>{let e=s;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,Dn(t[r]));for(let r=0;r<t.length;r++){let n=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(n,Dn(t[r]));}for(let r=0;r<t.length;r++){let n=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(n,Dn(t[r]));}return e},rt=(s,t)=>t?s==="mysql"||s==="mariadb"?t.code==="ER_NO_SUCH_TABLE"||t.errno===1146:s==="postgres"||s==="cockroachdb"?t.code==="42P01":s==="sqlite"?/no such table/i.test(String(t.message||"")):s==="mssql"?t.number===208:false:false,nt=(s,t)=>{let e=s.getDbType(),r;try{r=format(t,{...s.inputDetails.queryFormatOptions,language:_t(e)});}catch{try{r=format(t,{...s.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var Jl={info:0,warn:1,error:2};function rr(s){return s?s===true?{level:"info",logQueries:true}:{level:s.level??"info",logQueries:s.logQueries??true,customLogger:s.customLogger}:null}function zf(s,t="info"){let e=rr(s);if(!e)return false;let r=e.level??"info";return Jl[t]>=Jl[r]}function Gf(s){let t=rr(s);return t?t.logQueries??true:false}var Ie={info:"32",warn:"33",error:"31",query:"35",dim:"2",cyan:"36"},Yf=typeof process<"u"&&!!process.stdout?.isTTY&&!process.env.NO_COLOR,ot=(s,t)=>Yf?`\x1B[${s}m${t}\x1B[0m`:t;function Yl(){let s=new Date,t=r=>r.toString().padStart(2,"0"),e=s.getMilliseconds().toString().padStart(3,"0");return `${t(s.getHours())}:${t(s.getMinutes())}:${t(s.getSeconds())}.${e}`}function $n(s,t){let e=ot(Ie.dim,`[${Yl()}]`),r=ot(Ie[s],s.toUpperCase().padEnd(5));return `${e} ${r} ${t}`}var Zf=60,Xf=10,Hl=400;function tr(s,t=Zf){return s.length<=t?s:`${s.slice(0,t)}\u2026`}function ey(s){if(s==null)return "null";if(typeof s=="string")return `'${tr(s)}'`;if(typeof s=="number"||typeof s=="bigint")return String(s);if(typeof s=="boolean")return s?"true":"false";if(s instanceof Date)return `'${tr(s.toISOString())}'`;if(typeof s=="object"){let t;try{t=JSON.stringify(s);}catch{t=String(s);}return `'${tr(t)}'`}return tr(String(s))}function ty(s){if(!s||s.length===0)return "[]";let t=s.slice(0,Xf).map(ey),e=s.length-t.length;e>0&&t.push(`\u2026 (${e} more)`);let r=`[${t.join(", ")}]`;return r.length>Hl&&(r=`${r.slice(0,Hl)}\u2026`),r}var zl=(s,t)=>{let e=" ".repeat(t);return s.split(`
|
|
4
3
|
`).map(r=>`${e}${r}`).join(`
|
|
5
|
-
`)};function
|
|
6
|
-
`)}var
|
|
4
|
+
`)};function ry(s){let t=s<10?Ie.info:s<100?Ie.warn:Ie.error;return ot(t,`(${s}ms)`)}function ny(s,t,e){let r=ot(Ie.dim,`[${Yl()}]`),n=ot(Ie.query,"QUERY"),i=[e===void 0?`${r} ${n}`:`${r} ${n} ${ry(e)}`,zl(s,2)];return t&&t.length>0&&i.push(zl(`parameters: ${ot(Ie.cyan,ty(t))}`,4)),i.join(`
|
|
5
|
+
`)}var Gl={info(s){console.log($n("info",s));},error(s){console.error($n("error",s));},warn(s){console.warn($n("warn",s));}},st=class{static setCustomLogger(t){this.loggerInstance=t;}static info(t){this.loggerInstance.info(t);}static error(t){this.loggerInstance.error(t instanceof Error?String(t):t);}static warn(t){this.loggerInstance.warn(t);}static query(t){if(this.loggerInstance===Gl){console.log(t);return}this.loggerInstance.info(t);}};st.loggerInstance=Gl;function it(s,t,e,r,n,o){if(!Gf(t))return;let i=s;if(r||n)try{i=format(s,{...r,language:r?.language??(n?_t(n):void 0)});}catch{i=s;}let a=highlight(i,{colors:{keyword:"\x1B[34m",string:"\x1B[32m",number:"\x1B[33m",bracket:"\x1B[36m",clear:"\x1B[0m",comment:"\x1B[90m",function:"\x1B[35m",identifier:"\x1B[37m",special:"\x1B[31m"}});st.query(ny(a,e,o));}function Zl(s,t,e=false){zf(e,t)&&st.loggerInstance[t](s);}var g=st;var Pn=class{parseGetAllTables(t,e,r){switch(t){case "mysql":case "mariadb":return r[0].map(o=>o[`Tables_in_${e}`]);case "cockroachdb":case "postgres":return r.rows.map(o=>o.table_name);case "mssql":return r.recordset.map(o=>o.TABLE_NAME);default:throw new Error(`Unsupported database type: ${t}`)}}getAllTablesTemplate(t,e){switch(t){case "mysql":case "mariadb":return `SHOW TABLES FROM ${e};`;case "cockroachdb":case "postgres":return `SELECT table_name
|
|
7
6
|
FROM information_schema.tables
|
|
8
7
|
WHERE table_catalog = '${e}'
|
|
9
8
|
AND table_schema = 'public'
|
|
10
9
|
AND table_type = 'BASE TABLE';`;case "mssql":return `SELECT TABLE_NAME
|
|
11
10
|
FROM INFORMATION_SCHEMA.TABLES
|
|
12
11
|
WHERE TABLE_CATALOG = '${e}'
|
|
13
|
-
AND TABLE_TYPE = 'BASE TABLE';`;
|
|
14
|
-
`);
|
|
15
|
-
`)+";";default:throw new Error(`Unsupported database type: ${t}`)}}basicMigrationTemplate(t=false){return t?`import { Migration } from 'hysteria-orm';
|
|
12
|
+
AND TABLE_TYPE = 'BASE TABLE';`;default:throw new Error(`Unsupported database type: ${t}`)}}dropAllTablesTemplate(t,e){if(!e.length)return "SELECT 1;";switch(t){case "mysql":case "mariadb":case "cockroachdb":case "postgres":return `DROP TABLE IF EXISTS ${e.join(", ")} CASCADE;`;case "mssql":return e.map(r=>`DROP TABLE IF EXISTS [${r}];`).join(`
|
|
13
|
+
`);default:throw new Error(`Unsupported database type: ${t}`)}}basicMigrationTemplate(t=false){return t?`import { Migration } from 'hysteria-orm';
|
|
16
14
|
|
|
17
15
|
export default class extends Migration {
|
|
18
16
|
async up() {
|
|
@@ -113,26 +111,19 @@ CREATE TABLE [migrations] (
|
|
|
113
111
|
[name] NVARCHAR(255) NOT NULL,
|
|
114
112
|
[timestamp] DATETIME NOT NULL DEFAULT GETDATE(),
|
|
115
113
|
PRIMARY KEY ([id])
|
|
116
|
-
);`}
|
|
117
|
-
"id" NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
118
|
-
"name" VARCHAR2(255) NOT NULL,
|
|
119
|
-
"timestamp" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
|
|
120
|
-
)`}},ee=new fo;async function yo(i,t=true,e){let r=i.getDbType(),o=i.database;r||(g.error("DB_TYPE is not set could not drop all tables"),process.exit(1)),o||(g.error("DB_DATABASE is not set could not drop all tables"),process.exit(1)),g.info("Dropping all tables for database type: "+r);let n=null,s=e&&r==="postgres";try{if(r==="sqlite"){await i.disconnect(),await Cu.rm(o,{recursive:!0,force:!0}),g.info("Sqlite database dropped successfully"),await Cu.writeFile(o,""),g.info("Sqlite database recreated successfully");let c=i.getConnectionDetails();i.sqlPool=await Xe(i.getDbType(),c),g.info("All tables dropped successfully");return}let a=ee.getAllTablesTemplate(r,o),l=await i.rawQuery(a),u=ee.parseGetAllTables(r,o,l);if(!u.length){g.info("No tables to drop");return}let d=ee.dropAllTablesTemplate(r,u);if(s&&(n=await i.transaction(),i=n.sql),(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 0;"),r==="mssql"){let m=(await i.rawQuery(`
|
|
114
|
+
);`}},te=new Pn;async function vn(s,t=true,e){let r=s.getDbType(),n=s.database;r||(g.error("DB_TYPE is not set could not drop all tables"),process.exit(1)),n||(g.error("DB_DATABASE is not set could not drop all tables"),process.exit(1)),g.info("Dropping all tables for database type: "+r);let o=null,i=e&&r==="postgres";try{if(r==="sqlite"){await s.disconnect(),await Xl.rm(n,{recursive:!0,force:!0}),g.info("Sqlite database dropped successfully"),await Xl.writeFile(n,""),g.info("Sqlite database recreated successfully"),await s.connect(),g.info("All tables dropped successfully");return}let a=te.getAllTablesTemplate(r,n),l=await s.rawQuery(a),u=te.parseGetAllTables(r,n,l);if(!u.length){g.info("No tables to drop");return}let d=te.dropAllTablesTemplate(r,u);if(i&&(o=await s.transaction(),s=o.sql),(r==="mysql"||r==="mariadb")&&await s.rawQuery("SET FOREIGN_KEY_CHECKS = 0;"),r==="mssql"){let c=(await s.rawQuery(`
|
|
121
115
|
SELECT
|
|
122
116
|
OBJECT_NAME(parent_object_id) AS table_name,
|
|
123
117
|
name AS constraint_name
|
|
124
118
|
FROM sys.foreign_keys;
|
|
125
|
-
`)).recordset;for(let p of
|
|
126
|
-
SELECT constraint_name, table_name
|
|
127
|
-
FROM user_constraints
|
|
128
|
-
WHERE constraint_type = 'R'
|
|
129
|
-
`);for(let m of c.rows||[])await i.rawQuery(`ALTER TABLE "${m.TABLE_NAME}" DROP CONSTRAINT "${m.CONSTRAINT_NAME}"`);for(let m of u)await i.rawQuery(`DROP TABLE "${m}" CASCADE CONSTRAINTS PURGE`);}else await i.rawQuery(d);(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 1;"),s&&await n?.commit(),g.info("All tables dropped successfully");}catch(a){throw s&&await n?.rollback(),g.error(a),a}finally{t&&await i.disconnect();}}var Th=()=>{let i=E.MIGRATION_PATH,t=st.resolve(process.cwd(),i);return ne.existsSync(t)||ne.mkdirSync(t,{recursive:true}),t},_u=(i,t=false,e="basic",r="table")=>{let o=Th(),n=new Date().getTime(),s=t?`${n}_${i}.js`:`${n}_${i}.ts`,a=st.join(o,s),l;switch(e){case "alter":l=ee.alterMigrationTemplate(t,r);break;case "create":l=ee.createMigrationTemplate(t,r);break;default:l=ee.basicMigrationTemplate(t);break}ne.writeFileSync(a,l),g.info(`Migration created successfully at '${a}'.`),process.exit(0);};async function Sh(i){try{return import(pathToFileURL(i).href)}catch{let e=createRequire(import.meta.url)(i);return {default:e.default||e,...e}}}async function Ch(i){let{build:t}=await import('esbuild').catch(()=>{throw new Error("esbuild is required to import TypeScript files. Install it with: npm install esbuild -D")}),e=Math.random().toString(36).slice(2,8),r=i.replace(/\.ts$/,`.bundled_${e}.mjs`);try{return await t({entryPoints:[i],bundle:!0,platform:"node",format:"esm",sourcemap:"inline",outfile:r,packages:"external",logLevel:"silent"}),await import(pathToFileURL(r).href)}finally{await ne.promises.unlink(r).catch(()=>{});}}async function nt(i,t){let e=st.isAbsolute(i)?i:st.resolve(process.cwd(),i);return e.endsWith(".ts")?Ch(e):Sh(e)}var Rh=async(i,t)=>{if(i.endsWith(".ts"))return nt(i);try{return import(pathToFileURL(i).href)}catch{let o=createRequire(import.meta.url);try{let n=o(i);return {default:n.default||n,...n}}catch{throw new S(`MigrationUtils::importMigrationFile Failed to import migration file: ${i}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function rr(i,t){switch(i){case "mariadb":case "mysql":let e=t;return await e.query(ee.migrationTableTemplateMysql()),(await e.query(ee.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":let o=t;return await o.query(ee.migrationTableTemplatePg()),(await o.query(ee.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await xu(ee.migrationTableTemplateSQLite(),[],t),await xu(ee.selectAllFromMigrationsTemplate(),[],t)||[];case "mssql":let s=t;return await s.request().query(ee.migrationTableTemplateMssql()),(await s.request().query(ee.selectAllFromMigrationsTemplate())).recordset;case "oracledb":let u=await t.getConnection();try{try{await u.execute(ee.migrationTableTemplateOracle());}catch(c){if(c.errorNum!==955)throw c}return ((await u.execute('SELECT * FROM "migrations"')).rows||[]).map(c=>({id:c[0],name:c[1],timestamp:c[2]}))}finally{await u.close();}default:throw new S("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function or(i,t,e){let r=xh(t),o=[];for(let{name:n,fullPath:s}of r){let a=await Mh(s),l=new a(i||E.DB_TYPE);l.migrationName=n,o.push(l);}return o}async function Mh(i,t){let e=await Rh(i);if(!e.default)throw new S("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}function xh(i){let t=process.cwd(),e=i||E.MIGRATION_PATH||"database/migrations",r=/[*?{}\[\]]/.test(e);if(!r){let s=st.isAbsolute(e)?e:st.resolve(t,e);if(!ne.existsSync(s))return ne.mkdirSync(s,{recursive:true}),[]}let o=r?e:st.join(e,"**/*.{ts,js}"),n=st.isAbsolute(o)?o:st.resolve(t,o);try{return ne.globSync(n).filter(a=>ne.statSync(a).isFile()).sort().map(a=>({name:st.basename(a),fullPath:a}))}catch{return []}}async function xu(i,t,e){return new Promise((r,o)=>{e.all(i,t,(n,s)=>{n&&o(n),r(s);});})}async function Rt(i,t,e,r,o){let n=i.getDbType(),s=o&&n!=="mssql"&&n!=="oracledb",a=null;g.info("Running migrations for database type: "+n);try{let l=await rr(n,i.getPool()),d=(await or(n,e,r)).filter(m=>!l.map(p=>p.name).includes(m.migrationName));if(!d.length){g.info("No pending migrations.");return}if(t){let m=d.findIndex(y=>y.migrationName===t);if(m===-1){console.error(`Migration ${t} not found.`);return}let p=d.slice(0,m+1);s&&(a=await i.transaction(),i=a.sql),await new Ie(i).upMigrations(p),s&&await a?.commit(),g.info("Migrations ran successfully");return}let c=new Ie(i);s&&(a=await i.transaction(),i=a.sql),await c.upMigrations(d),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}g.info("Migrations ran successfully");}var nr={string:"string",varchar:"string",char:"string",text:"textarea",longtext:"textarea",mediumtext:"textarea",tinytext:"textarea",integer:"number",int:"number",smallint:"number",bigint:"number",tinyint:"number",mediumint:"number",float:"float",double:"float",decimal:"float",numeric:"float",real:"float",boolean:"boolean",bool:"boolean",date:"date",datetime:"datetime",timestamp:"datetime",time:"string",year:"number",json:"mixed",jsonb:"mixed",uuid:"string",ulid:"string",binary:"string",blob:"string",enum:"string"};var Ou=null;function We(i,t){return t.getModelManager(i)}function Au(i,t,e){if(!t||typeof t!="object")return;let r=t;if(!r.filters)return;let o=e.getColumns();for(let[n,s]of Object.entries(r.filters)){let a=s.value;if(a==null||a==="")continue;let l=o.find(c=>c.columnName===n||c.databaseName===n);if(!l)continue;let u=typeof l.type=="string"?l.type:"string",d=nr[u]||"string";if(d==="string"||d==="textarea"){i.whereLike(n,`%${a}%`);continue}if(d==="boolean"){i.where(n,a==="true"||a===true);continue}if(d==="date"||d==="datetime"){if(typeof a=="object"&&a!==null){let c=a;c.from&&i.where(n,">=",c.from),c.to&&i.where(n,"<=",c.to);continue}i.where(n,a);continue}i.where(n,a);}}function Mt(i,t){let e={},r=t.getColumns();for(let o of r){let n=i[o.columnName];e[o.columnName]=n;}return e}async function Ah(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(n){super(n),this._model=n,this._db=Ou;}static isAdapterFor(n){if(typeof n!="function")return false;let s=n;return s.prototype!==void 0&&typeof s.table=="string"&&typeof s.getColumns=="function"}databaseName(){return this._db.database||"hysteria"}databaseType(){return this._db.getDbType()}id(){return this._model.table}properties(){return this._model.getColumns().map(s=>{let a=typeof s.type=="string"?s.type:"string",l=nr[a]||"string";return new r({path:s.columnName,type:l,isId:s.isPrimary,isSortable:true})})}property(n){let a=this._model.getColumns().find(d=>d.columnName===n||d.databaseName===n);if(!a)return null;let l=typeof a.type=="string"?a.type:"string",u=nr[l]||"string";return new r({path:a.columnName,type:u,isId:a.isPrimary,isSortable:true})}async count(n){let a=We(this._model,this._db).query();return Au(a,n,this._model),a.getCount()}async find(n,s={}){let l=We(this._model,this._db).query();return Au(l,n,this._model),s.limit&&l.limit(s.limit),s.offset&&l.offset(s.offset),s.sort?.sortBy&&l.orderBy(s.sort.sortBy,s.sort.direction||"asc"),(await l.many()).map(d=>new e(Mt(d,this._model),this))}async findOne(n){if(!this._model.primaryKey)return null;let l=await We(this._model,this._db).findOneByPrimaryKey(n);return l?new e(Mt(l,this._model),this):null}async findMany(n){let s=this._model.primaryKey;return s?(await We(this._model,this._db).query().whereIn(s,n).many()).map(u=>new e(Mt(u,this._model),this)):[]}async create(n){let a=await We(this._model,this._db).insert(n,{returning:["*"]});return Mt(a,this._model)}async update(n,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=We(this._model,this._db);if(!await l.findOneByPrimaryKey(n))throw new Error("Record not found");let d=await l.updateRecord(n,s,{returning:["*"]});return Mt(d,this._model)}async delete(n){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=We(this._model,this._db);await a.findOneByPrimaryKey(n)&&await a.deleteRecord(n);}}}async function Oh(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function Dh(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),t=await Ah(),e=await Oh();i.default.registerAdapter({Database:e,Resource:t});}async function go(i,t){Ou=i;let e=await import('adminjs').catch(()=>{throw new L("adminjs")});await Dh();let r=t.resources||Object.values(i.models);if(!r.length)throw new Error("No models provided for AdminJS. Please provide models in the resources option or register them in SqlDataSource.");let o=r.map(a=>{let l=t.resourceOptions?.[a.table]||{};return {resource:a,options:l}}),n={rootPath:t.rootPath||"/admin",resources:o};if(t.branding&&(n.branding=t.branding),t.locale?.language&&(n.locale=t.locale),t.assets&&(n.assets=t.assets),t.settings&&(n.settings=t.settings),t.pages){let a={};for(let[l,u]of Object.entries(t.pages))u.component&&(a[l]=u);Object.keys(a).length>0&&(n.pages=a);}return {admin:new e.default(n)}}async function Du(i,t){let{admin:e}=await go(i,t),r;try{r=await import('@adminjs/express');}catch{throw new L("@adminjs/express")}let o=r.buildRouter(e);return {admin:e,router:o}}var it=new Map,Ee=new Map,sr=class{async get(t){return it.get(t)}async set(t,e,r){let o=Ee.get(t);if(o&&(clearTimeout(o),Ee.delete(t)),it.set(t,e),r){let n=setTimeout(()=>{it.delete(t),Ee.delete(t);},r);Ee.set(t,n);}}async invalidate(t){let e=Ee.get(t);e&&(clearTimeout(e),Ee.delete(t)),it.delete(t);}async invalidateAll(t){let e=it.keys();for(let r of e)if(r.startsWith(t)){let o=Ee.get(r);o&&(clearTimeout(o),Ee.delete(r)),it.delete(r);}}};var xt=class{constructor(t){switch(this.type=t?.type||E.DB_TYPE,this.type){case "mongo":this.handleMongoSource(t);break;case "cockroachdb":this.handleCockroachdbSource(t);break;case "postgres":this.handlePostgresSource(t);break;case "mariadb":case "mysql":this.handleMysqlSource(t);break;case "sqlite":this.handleSqliteSource(t);break;case "mssql":this.handleMssqlSource(t);break;case "oracledb":this.handleOracleDBSource(t);break;default:throw new S(`Invalid database type: ${this.type}, please provide a valid database type in your input or in the .env file with the key DB_TYPE
|
|
130
|
-
Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}let e=er(this.logs);e?.customLogger&&g.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||E.DB_DATABASE||":memory:",this.logs=t?.logs||E.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||E.MONGO_URL,this.logs=t?.logs||E.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=1433);}handleOracleDBSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=1521);}};var $h=i=>{let{required:t,...e}=i.openApi||{},r={...e,type:i.openApi?.type||"string",description:i.openApi?.description??`Property: ${i.columnName}`};return i.openApi?.type?{...r,type:i.openApi.type}:Array.isArray(i.type)?{...r,type:"string",enum:i.type}:i.type==="date"||i.type==="datetime"||i.type==="timestamp"||i.type==="time"?{...r,type:"string",format:"date-time"}:i.type==="boolean"?{...r,type:"boolean"}:i.type==="integer"||i.type==="tinyint"||i.type==="smallint"||i.type==="mediumint"||i.type==="increment"?{...r,type:"integer",format:"int32"}:i.type==="biginteger"||i.type==="bigIncrement"?{...r,type:"integer",format:"int64"}:i.type==="float"||i.type==="real"?{...r,type:"number",format:"float"}:i.type==="double"?{...r,type:"number",format:"double"}:i.type==="decimal"||i.type==="numeric"?{...r,type:"number"}:i.type==="json"||i.type==="jsonb"?{...r,type:"object"}:i.type==="uuid"?{...r,type:"string",format:"uuid"}:i.type==="ulid"?{...r,type:"string",format:"ulid"}:i.type==="string"||i.type==="char"||i.type==="varchar"||i.type==="text"||i.type==="longtext"||i.type==="mediumtext"||i.type==="tinytext"?{...r,type:"string"}:i.type==="blob"||i.type==="binary"||i.type==="varbinary"||i.type==="tinyblob"||i.type==="mediumblob"||i.type==="longblob"?{...r,type:"string",format:"binary"}:i.type==="year"?{...r,type:"integer",format:"int32"}:r},Ih=i=>i.openApi?.required??false,Eh=i=>{let t=i.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=$h(r));return e},Ph=i=>{let t=i.getColumns(),e=[];for(let r of t)Ih(r)&&e.push(r.columnName);return e||[]},vh=i=>{let t=Eh(i),e=Ph(i);return {type:"object",properties:t,required:e.length?e:[]}};var $u=i=>i.map(t=>({...vh(t),modelName:t.table,$id:t.table}));var bo=(i,t)=>{let e=xe.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var To=class{toSql(t){let e=t,r=new N(this.model,"mssql"),{sql:o}=r.parse([e.column]),n=e.inlineConstraints;if(n&&n.length){let s=[];for(let a of n){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(o+=` ${s.join(" ")}`);}return {sql:`add ${o}`,bindings:[]}}},Iu=new To;var No=class{toSql(t){let e=t,r=new N(this.model,"mssql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},Eu=new No;var wo=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`[${o}]`).join(", ")})`,bindings:[]}}},Pu=new wo;var So=class{toSql(t){let e=t,r=new N(this.model,"mssql"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" "),a="";e.options.nullable!==void 0&&(a=e.options.nullable?" null":" not null");let l=`alter column [${e.column}] ${s}${a}`;if(e.options.dropDefault&&(l=`drop constraint DF_${e.column}, ${l}`),e.options.default!==void 0&&!e.options.dropDefault){let u=e.options.default;u===null?u="null":typeof u=="string"&&(u==="NULL"?u="null":u==="TRUE"||u==="FALSE"?u=u==="TRUE"?"1":"0":u=`'${u}'`),l+=`, add constraint DF_${e.column} default ${u} for [${e.column}]`;}return e.options.unique!==void 0&&e.options.unique&&(l+=`, add constraint UQ_${e.column} unique ([${e.column}])`),{sql:l,bindings:[]}}},vu=new So;var w=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var at=class extends w{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};function ir(i){return typeof i!="string"||!i?i:i.replace(/([a-z])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}function ar(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function Co(i){if(typeof i!="string"||!i)return i;let t=ar(i);return t.charAt(0).toUpperCase()+t.slice(1)}function z(i,t){return t==="preserve"?i:t==="snake"?ir(i):t==="camel"?ar(i):t==="pascal"?Co(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}var Bh=i=>{if(i==null||typeof i!="object"||i instanceof Date)return false;if(Array.isArray(i))return true;let t=Object.getPrototypeOf(i);return t===Object.prototype||t===null},h=class{constructor(t){this.model=t;this.modelColumnsMap=typeof t.getColumnsByName=="function"?t.getColumnsByName():new Map;let e=[],r=[];for(let o of this.modelColumnsMap.values())(o.prepare||o.autoUpdate)&&e.push(o),o.autoUpdate&&r.push(o);this.autoInsertColumns=e,this.autoUpdateColumns=r;}formatStringColumn(t,e){if(e==="*")return "*";let r=this.resolveComputedExpression(e);if(r!==void 0)return `(${r})`;if(e.includes(".")){let[s,a]=e.split(".");if(a==="*")switch(t){case "mysql":case "mariadb":return `\`${s}\`.*`;case "postgres":case "cockroachdb":case "sqlite":case "oracledb":return `"${s}".*`;case "mssql":return `[${s}].*`;default:throw new Error(`Unsupported database type: ${t}`)}let l=this.modelColumnsMap.get(a)?.databaseName??z(a,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${s}\`.\`${l}\``;case "postgres":case "cockroachdb":case "sqlite":case "oracledb":return `"${s}"."${l}"`;case "mssql":return `[${s}].[${l}]`;default:throw new Error(`Unsupported database type: ${t}`)}}let n=this.modelColumnsMap.get(e)?.databaseName??z(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${n}\``;case "postgres":case "cockroachdb":case "sqlite":case "oracledb":return `"${n}"`;case "mssql":return `[${n}]`;default:throw new Error(`Unsupported database type: ${t}`)}}resolveComputedExpression(t){let e=t.includes(".")?t.split(".").pop():t;return this.modelColumnsMap.get(e)?.expression}isComputedColumn(t){return !!this.modelColumnsMap.get(t)?.expression}filterComputedColumns(t){return this.modelColumnsMap.size===0?t:t.filter(e=>!this.isComputedColumn(e))}stripComputedFromData(t){if(this.modelColumnsMap.size===0)return t;let e={};for(let r of Object.keys(t))this.isComputedColumn(r)||(e[r]=t[r]);return e}formatStringColumnBare(t,e){let r=e.includes(".")?e.split(".")[1]:e;return this.formatStringColumn(t,r)}formatStringTable(t,e){e=e.replace(/\s+/g," ").trim();let r="";switch(e.toLowerCase().includes(" as ")&&([e,r]=e.split(" as ")),t){case "mysql":case "mariadb":return `\`${e}\`${r?` as \`${r}\``:""}`;case "postgres":case "cockroachdb":case "sqlite":case "oracledb":return `"${e}"${r?` as "${r}"`:""}`;case "mssql":return `[${e}]${r?` as [${r}]`:""}`;default:return `${e}${r?` as ${r}`:""}`}}async prepareColumns(t,e,r="insert"){if(!t.length)return {columns:t,values:e};let o=[],n=[];for(let d=0;d<t.length;d++){let c=t[d],m=e[d];c!=="*"&&(o.push(c),n.push(m));}let s=new Set(o),a=null;for(let d=0;d<o.length;d++){let c=o[d],m=n[d],p=this.modelColumnsMap.get(c);if(p?.expression){o.splice(d,1),n.splice(d,1),d--;continue}if(p){if(p.prepare){let f=r==="insert"?p.prepare(m):p.prepare(m)??m;f!==null&&typeof f?.then=="function"?(a||(a=[]),a.push({index:d,promise:f})):n[d]=f;}}else Bh(m)&&(n[d]=JSON.stringify(m));}if(a){let d=await Promise.all(a.map(c=>c.promise));for(let c=0;c<a.length;c++)n[a[c].index]=d[c];}let l=this.model.primaryKey,u=r==="insert"?this.autoInsertColumns:this.autoUpdateColumns;for(let d of u){let c=d.columnName;if(d.expression||s.has(c)||r==="insert"&&c===l&&!d.prepare)continue;o.push(c);let m=d.prepare?await d.prepare(void 0):void 0;n.push(m??void 0);}return {columns:o,values:n}}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new N(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}};var qo=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};if(e.children.length===1&&e.children[0]instanceof at){let d=e.children[0];return {sql:`EXEC sp_rename '${e.table}', '${d.newName}'`,bindings:[]}}let n=new N(this.model,"mssql"),s=[],a=[];for(let d of e.children){let{sql:c,bindings:m}=n.parse([d]);s.push(c.trim()),a.push(...m);}let l=s.join(", ");return {sql:`${o} ${l}`,bindings:a}}},ku=new qo;var _o=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},Bu=new _o;var Ro=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},Qu=new Ro;var Mo=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},Ku=new Mo;var xo=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] null`,bindings:[]}}},Lu=new xo;var Ao=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},Wu=new Ao;var Oo=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},ju=new Oo;var Do=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},Fu=new Do;var $=class extends w{constructor(e){super("raw",true);this.canKeywordBeSeenMultipleTimes=true;this.chainsWith=" ";this.currParamIndex=0;this.isRawValue=true;this.folder="raw";this.file="raw";this.rawValue=e;}};var $o=class{toSql(t){let e=t,r;return e.defaultValue instanceof $?r=e.defaultValue.rawValue:e.defaultValue==="NULL"||e.defaultValue===null?r="null":e.defaultValue==="TRUE"?r="1":e.defaultValue==="FALSE"?r="0":typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="1"&&e.defaultValue!=="0"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`add constraint DF_${e.column} default ${r} for [${e.column}]`,bindings:[]}}},Uu=new $o;var Io=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] not null`,bindings:[]}}},Vu=new Io;var Eo=class{toSql(t){return {sql:"",bindings:[]}}},Ju=new Eo;function Po(i){return i.replace(/^[`"]|[`"]$/g,"")}function vo(i,t,e){if(!i.includes(".")){let n=Po(i);return `${t}.${n}`}let[r,o]=i.split(".");return r=Po(r),o=Po(o),r!==e?i:o==="*"?`${t}.*`:`${t}.${o}`}function q(i){return typeof i=="function"?i():i}var j=(i,t=new WeakMap)=>{if(i===null||typeof i!="object")return i;if(t.has(i))return t.get(i);if(Array.isArray(i)){let r=[];t.set(i,r);for(let o=0;o<i.length;o++)r[o]=j(i[o],t);return r}let e=Object.create(Object.getPrototypeOf(i)||{});t.set(i,e);for(let r of Object.getOwnPropertyNames(i)){let o=i[r];if(typeof o=="function"){e[r]=o;continue}e[r]=j(o,t);}return e};var ko=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new h(this.model).formatStringColumn("mssql",q(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let a=e.length??1;return {sql:`${o} char(${a})`,bindings:[]}}if(n==="varchar"){let a=e.length??255;return {sql:`${o} varchar(${a})`,bindings:[]}}if(n==="text"||n==="longtext"||n==="mediumtext"||n==="tinytext")return {sql:`${o} varchar(max)`,bindings:[]};if(n==="uuid")return {sql:`${o} uniqueidentifier`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar(26)`,bindings:[]};if(n==="bigint")return e.autoIncrement?{sql:`${o} bigint identity(1,1)`,bindings:[]}:{sql:`${o} bigint`,bindings:[]};if(n==="tinyint")return {sql:`${o} tinyint`,bindings:[]};if(n==="smallint")return {sql:`${o} smallint`,bindings:[]};if(n==="mediumint")return {sql:`${o} int`,bindings:[]};if(n==="float"||n==="real")return {sql:`${o} real`,bindings:[]};if(n==="double")return {sql:`${o} float`,bindings:[]};if(n==="decimal"||n==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${o} decimal(${a}, ${l})`,bindings:[]}}if(n==="date")return {sql:`${o} date`,bindings:[]};if(n==="year")return {sql:`${o} smallint`,bindings:[]};if(n==="time"){let a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} time${a}`,bindings:[]}}if(n==="datetime"||n==="timestamp"){let a=typeof e.precision=="number"?`(${e.precision})`:"",l=`${o} datetime2${a}`;return e.autoCreate&&(l+=" default current_timestamp"),{sql:l,bindings:[]}}if(n==="boolean"||n==="bool")return {sql:`${o} bit`,bindings:[]};if(n==="bytea"||n==="binary"||n==="varbinary"||n==="blob"||n==="longblob"||n==="mediumblob"||n==="tinyblob")return {sql:`${o} varbinary(max)`,bindings:[]};if(n==="json"||n==="jsonb")return {sql:`${o} nvarchar(max)`,bindings:[]};if(n==="enum"){if(e.enumValues&&e.enumValues.length>0){let a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${o} varchar(255) check (${o} in (${a}))`,bindings:[]}}return {sql:`${o} varchar(255)`,bindings:[]}}if(n==="integer"||n==="int")return e.autoIncrement?{sql:`${o} int identity(1,1)`,bindings:[]}:{sql:`${o} int`,bindings:[]};if(n==="geometry")return {sql:`${o} geometry`,bindings:[]};if(n==="point")return {sql:`${o} geometry`,bindings:[]};if(n==="linestring")return {sql:`${o} geometry`,bindings:[]};if(n==="polygon")return {sql:`${o} geometry`,bindings:[]};if(n==="multipoint")return {sql:`${o} geometry`,bindings:[]};let s=e.length?`(${e.length})`:"";return {sql:`${o} ${n}${s}`,bindings:[]}}},Hu=new ko;var Bo=class{toSql(t){return {sql:"",bindings:[]}}},zu=new Bo;var Qo=class{toSql(t){let e=t,r=new h(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let o=e.constraintName?`constraint [${e.constraintName}] `:"",n=(e.columns??[]).map(s=>r.formatStringColumn("mssql",q(s))).join(", ");return {sql:`${o}primary key (${n})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let o=e.columns??[],n=e.constraintName?`constraint [${e.constraintName}] `:"",s=o.map(a=>r.formatStringColumn("mssql",q(a))).join(", ");return e.constraintName?{sql:`${n}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let o=e.defaultValue;return o instanceof $?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"?{sql:"default 1",bindings:[]}:o==="FALSE"?{sql:"default 0",bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let o=e.columns.map(u=>r.formatStringColumn("mssql",q(u))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("mssql",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("mssql",q(u))).join(", "),l=`${e.constraintName?`constraint [${e.constraintName}] `:""}foreign key (${o}) references ${n}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint [${e.constraintName}] `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Yu=new Qo;var Ko=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new N(this.model,"mssql"),s=[],a=[];for(let f of e.children){let{sql:y,bindings:T}=n.parse([f]);if(f.folder==="constraint"){let b=s.pop()??"",C=y;if(/not null/i.test(C)||/null/i.test(C)||/default/i.test(C)){let R=`${b} ${C}`.trim();R=R.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(R),a.push(...T);continue}s.push(b),s.push(C),a.push(...T);continue}s.push(y),a.push(...T);}for(let f of e.namedConstraints){let{sql:y,bindings:T}=n.parse([f]);s.push(y),a.push(...T);}let l=s.join(", "),u=[];e.dataCompression&&u.push(`DATA_COMPRESSION = ${e.dataCompression}`);let d=e.onFilegroup?` ON [${e.onFilegroup}]`:"",c=e.textImageOn?` TEXTIMAGE_ON [${e.textImageOn}]`:"",m=u.length>0?` WITH (${u.join(", ")})`:"";return {sql:`${o} (${l})${m}${d}${c}`,bindings:a}}},Gu=new Ko;var Lo=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode.table=="string")return {sql:e.fromNode.table,bindings:[]};let r=new h(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode);if(e.returning&&e.returning.length){let s=e.returning.map(a=>`deleted.${r.formatStringColumn("mssql",a)}`).join(", ");n+=` output ${s}`;}return {sql:n,bindings:[]}}},Xu=new Lo;var Wo=class{toSql(t){return {sql:"",bindings:[]}}},Zu=new Wo;var jo=class{toSql(t){return g.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},ed=new jo;var Fo=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},td=new Fo;var Uo=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},rd=new Uo;var Vo=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new h(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mssql",e.table)} as [${e.alias}]`,bindings:[]}:{sql:a.formatStringTable("mssql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new N(this.model,"mssql").parse(r),s=e.alias&&e.alias.length?` as [${e.alias}]`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},od=new Vo;var Jo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new h(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},nd=new Jo;var Ho=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,o="",n=[];if(!(e.value instanceof w)&&!Array.isArray(e.value)&&(o=`${new h(this.model).formatStringColumn("mssql",e.column)} ${e.operator} @${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`@${r+l}`).join(", ");o=`${new h(this.model).formatStringColumn("mssql",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},sd=new Ho;var zo=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("mssql",e.table),n=e.columns.map(a=>`[${a}]`).join(", ");return {sql:`${e.unique?"unique ":""}[${e.indexName}] on ${o} (${n})`,bindings:[]}}},id=new zo;var Yo=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},ad=new Yo;var Go=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new h(this.model),o=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n).filter(m=>n[m]!==void 0);if(!s.length)return {sql:o,bindings:[]};let a=s.map(m=>r.formatStringColumn("mssql",m)).join(", "),l=[],u=[],d=e.currParamIndex;for(let m of e.records){let p=s.map(y=>m[y]),f=[];for(let y of p)y instanceof $?f.push(y.rawValue):(l.push(y),f.push(`@${d++}`));u.push(`(${f.join(", ")})`);}let c=`${o} (${a}) values ${u.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(p=>`inserted.${r.formatStringColumn("mssql",p)}`).join(", ");c=c.replace(") values",`) output ${m} values`);}else {let m=this.getOutputColumns(s,r);c=c.replace(") values",`) output ${m} values`);}return {sql:c,bindings:l}}getOutputColumns(t,e){let r=[...t],o=this.model.primaryKey;return o&&!t.includes(o)&&r.push(o),r.map(n=>`inserted.${e.formatStringColumn("mssql",n)}`).join(", ")}},ld=new Go;var Xo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("mssql",o),a=r.formatStringColumn("mssql",n),u=`${r.formatStringTable("mssql",e.table)} on ${s} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new N(this.model,"mssql");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let f=p.sql.replace(/^where\s+/i,"");u+=` and ${f}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},ud=new Xo;var Zo=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},dd=new Zo;var en=class{toSql(t){return {sql:"",bindings:[]}}},cd=new en;var tn=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},md=new tn;var rn=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:(g.warn("MSSQL does not support ON CONFLICT or ON DUPLICATE KEY. Use MERGE statement for upsert operations. This clause will be ignored. Consider using raw queries for MSSQL upserts."),{sql:"",bindings:[]})}},pd=new rn;var on=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new h(this.model).formatStringColumn("mssql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},fd=new on;var nn=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},yd=new nn;var sn=class{toSql(t){return {sql:`SELECT
|
|
119
|
+
`)).recordset;for(let p of c)await s.rawQuery(`ALTER TABLE [${p.table_name}] DROP CONSTRAINT [${p.constraint_name}];`);}await s.rawQuery(d),(r==="mysql"||r==="mariadb")&&await s.rawQuery("SET FOREIGN_KEY_CHECKS = 1;"),i&&await o?.commit(),g.info("All tables dropped successfully");}catch(a){throw i&&await o?.rollback(),g.error(a),a}finally{t&&await s.disconnect();}}function nr(s){if(s&&s!=="auto")return s;if(typeof process<"u"&&process.versions?.bun)return "bun";if(globalThis.navigator?.product==="ReactNative"||"HermesInternal"in globalThis)return "react-native";let e=typeof globalThis.self<"u";return typeof window<"u"||typeof document<"u"||e?"web":"node"}var oy=s=>{s[6]=s[6]&15|64,s[8]=s[8]&63|128;let t=ke(s);return [t.slice(0,8),t.slice(8,12),t.slice(12,16),t.slice(16,20),t.slice(20)].join("-")},eu=s=>{let t=globalThis.crypto;if(!t||typeof t.getRandomValues!="function")throw new at("crypto.getRandomValues \u2014 browsers require a secure context (HTTPS); React Native requires react-native-get-random-values or expo-crypto");return t.getRandomValues(s)},In=class{unsupported(t){throw new at(`fs.${t}`)}exists(){return this.unsupported("exists")}readFileSync(){return this.unsupported("readFileSync")}readFile(){return this.unsupported("readFile")}readdir(){return this.unsupported("readdir")}mkdir(){return this.unsupported("mkdir")}writeFile(){return this.unsupported("writeFile")}rm(){return this.unsupported("rm")}},En=class{join(...t){return t.filter(Boolean).join("/").replace(/\/+/g,"/")}dirname(t){let e=t.lastIndexOf("/");return e<=0?".":t.slice(0,e)}basename(t,e){let r=t.slice(t.lastIndexOf("/")+1);return e&&r.endsWith(e)?r.slice(0,-e.length):r}resolve(...t){let e=t.filter(Boolean).join("/").replace(/\/+/g,"/");return e.startsWith("/")?e:`/${e}`}},Ee=class{constructor(){this.name="web";this.crypto={randomUUID:()=>{let t=globalThis.crypto;return typeof t?.randomUUID=="function"?t.randomUUID():oy(eu(new Uint8Array(16)))},randomBytes:t=>eu(new Uint8Array(t))};this.timing={now:()=>globalThis.performance.now()};this.fs=new In;this.path=new En;}readEnv(t){}};var lt=class extends Ee{constructor(){super(...arguments);this.name="node";this.fs={exists:e=>oe.existsSync(e),readFileSync:e=>oe.existsSync(e)?new Uint8Array(oe.readFileSync(e)):null,readFile:async e=>promises.readFile(e,"utf8"),readdir:e=>promises.readdir(e),mkdir:async(e,r)=>{await promises.mkdir(e,{recursive:r?.recursive});},writeFile:async(e,r)=>{await promises.writeFile(e,r);},rm:async(e,r)=>{await promises.rm(e,{recursive:r?.recursive,force:r?.force});}};this.path=dt;}readEnv(e){return typeof process>"u"?void 0:process.env[e]}};var Bn=()=>import('bun'),or=class extends lt{constructor(){super();this.name="bun";let e=this.fs;this.fs={...e,readFile:async r=>(await Bn()).file(r).text(),readdir:async r=>{let n=await Bn(),o=[];for await(let i of new n.Glob("*").scan({cwd:r}))o.push(i);return o},writeFile:async(r,n)=>{await(await Bn()).write(r,n);}};}};var sr=class extends Ee{constructor(){super(...arguments);this.name="react-native";}};var at=class extends Error{constructor(t){super(`Platform does not support: ${t}`),this.name="PlatformUnsupportedError";}},ke=s=>{let t="";for(let e of s)t+=e.toString(16).padStart(2,"0");return t},tu=new Map,iy=s=>{switch(s){case "bun":return new or;case "node":return new lt;case "react-native":return new sr;default:return new Ee}};function re(s){let t=nr(s),e=tu.get(t);return e||(e=iy(t),tu.set(t,e)),e}var X=re(),P={DB_TYPE:X.readEnv("DB_TYPE"),DB_HOST:X.readEnv("DB_HOST"),DB_PORT:X.readEnv("DB_PORT"),DB_USER:X.readEnv("DB_USER"),DB_PASSWORD:X.readEnv("DB_PASSWORD"),DB_DATABASE:X.readEnv("DB_DATABASE"),DB_LOGS:X.readEnv("DB_LOGS")==="true",MIGRATION_PATH:X.readEnv("MIGRATION_PATH")||"database/migrations",REDIS_HOST:X.readEnv("REDIS_HOST"),REDIS_PORT:X.readEnv("REDIS_PORT"),REDIS_USERNAME:X.readEnv("REDIS_USERNAME"),REDIS_PASSWORD:X.readEnv("REDIS_PASSWORD"),REDIS_DATABASE:X.readEnv("REDIS_DATABASE"),MONGO_URL:X.readEnv("MONGO_URL"),MONGO_LOGS:X.readEnv("MONGO_LOGS")==="true",MSSQL_TRUST_SERVER_CERTIFICATE:X.readEnv("MSSQL_TRUST_SERVER_CERTIFICATE")==="true"||false},ay=()=>{try{if(!X.fs.exists(".env"))return P;let s=X.fs.readFileSync(".env");if(!s)return P;new TextDecoder().decode(s).split(`
|
|
120
|
+
`).forEach(r=>{let[n,o]=r.split("="),i=n.trim(),a=o.trim();switch(i){case "DB_TYPE":P.DB_TYPE||(P.DB_TYPE=a);break;case "DB_HOST":P.DB_HOST||(P.DB_HOST=a);break;case "DB_PORT":P.DB_PORT||(P.DB_PORT=a);break;case "DB_USER":P.DB_USER||(P.DB_USER=a);break;case "DB_PASSWORD":P.DB_PASSWORD||(P.DB_PASSWORD=a);break;case "DB_DATABASE":P.DB_DATABASE||(P.DB_DATABASE=a);break;case "MIGRATION_PATH":P.MIGRATION_PATH||(P.MIGRATION_PATH=a||"database/migrations");break;case "REDIS_HOST":P.REDIS_HOST||(P.REDIS_HOST=a);break;case "REDIS_PORT":P.REDIS_PORT||(P.REDIS_PORT=a);break;case "REDIS_USERNAME":P.REDIS_USERNAME||(P.REDIS_USERNAME=a);break;case "REDIS_PASSWORD":P.REDIS_PASSWORD||(P.REDIS_PASSWORD=a);break;case "REDIS_DATABASE":P.REDIS_DATABASE||(P.REDIS_DATABASE=a);break;case "MONGO_URL":P.MONGO_URL||(P.MONGO_URL=a);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":P.MSSQL_TRUST_SERVER_CERTIFICATE||(P.MSSQL_TRUST_SERVER_CERTIFICATE=a==="true");break}});}catch{}finally{return P}},v=ay();var ly=()=>{let s=v.MIGRATION_PATH,t=dt.resolve(process.cwd(),s);return oe.existsSync(t)||oe.mkdirSync(t,{recursive:true}),t},nu=(s,t=false,e="basic",r="table")=>{let n=ly(),o=new Date().getTime(),i=t?`${o}_${s}.js`:`${o}_${s}.ts`,a=dt.join(n,i),l;switch(e){case "alter":l=te.alterMigrationTemplate(t,r);break;case "create":l=te.createMigrationTemplate(t,r);break;default:l=te.basicMigrationTemplate(t);break}oe.writeFileSync(a,l),g.info(`Migration created successfully at '${a}'.`),process.exit(0);};var q=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}},Ot=class extends q{constructor(t){super("ValidationError","VALIDATION_ERROR"),this.errors=t;}};async function cy(s){try{return import(pathToFileURL(s).href)}catch{let e=createRequire(import.meta.url)(s);return {default:e.default||e,...e}}}async function my(s){let{build:t}=await import('esbuild').catch(()=>{throw new Error("esbuild is required to import TypeScript files. Install it with: npm install esbuild -D")}),e=Math.random().toString(36).slice(2,8),r=s.replace(/\.ts$/,`.bundled_${e}.mjs`);try{return await t({entryPoints:[s],bundle:!0,platform:"node",format:"esm",sourcemap:"inline",outfile:r,packages:"external",logLevel:"silent"}),await import(pathToFileURL(r).href)}finally{await oe.promises.unlink(r).catch(()=>{});}}async function ut(s,t){let e=dt.isAbsolute(s)?s:dt.resolve(process.cwd(),s);return e.endsWith(".ts")?my(e):cy(e)}var yy=async(s,t)=>{if(s.endsWith(".ts"))return ut(s);try{return import(pathToFileURL(s).href)}catch{let n=createRequire(import.meta.url);try{let o=n(s);return {default:o.default||o,...o}}catch{throw new q(`MigrationUtils::importMigrationFile Failed to import migration file: ${s}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function ar(s,t){switch(s){case "mariadb":case "mysql":return await t.rawQuery(te.migrationTableTemplateMysql()),(await t.rawQuery(te.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":return await t.rawQuery(te.migrationTableTemplatePg()),(await t.rawQuery(te.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await t.rawQuery(te.migrationTableTemplateSQLite()),await t.rawQuery(te.selectAllFromMigrationsTemplate());case "mssql":return await t.rawQuery(te.migrationTableTemplateMssql()),(await t.rawQuery(te.selectAllFromMigrationsTemplate())).recordset;default:throw new q("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function lr(s,t,e){let r=gy(t),n=[];for(let{name:o,fullPath:i}of r){let a=await hy(i),l=new a(s||v.DB_TYPE);l.migrationName=o,n.push(l);}return n}async function hy(s,t){let e=await yy(s);if(!e.default)throw new q("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}function gy(s){let t=process.cwd(),e=s||v.MIGRATION_PATH||"database/migrations",r=/[*?{}\[\]]/.test(e);if(!r){let i=dt.isAbsolute(e)?e:dt.resolve(t,e);if(!oe.existsSync(i))return oe.mkdirSync(i,{recursive:true}),[]}let n=r?e:dt.join(e,"**/*.{ts,js}"),o=dt.isAbsolute(n)?n:dt.resolve(t,n);try{return oe.globSync(o).filter(a=>oe.statSync(a).isFile()).sort().map(a=>({name:dt.basename(a),fullPath:a}))}catch{return []}}async function At(s,t,e,r,n){let o=s.getDbType(),i=n&&o!=="mssql",a=null;g.info("Running migrations for database type: "+o);try{let l=await ar(o,s),d=(await lr(o,e,r)).filter(c=>!l.map(p=>p.name).includes(c.migrationName));if(!d.length){g.info("No pending migrations.");return}if(t){let c=d.findIndex(f=>f.migrationName===t);if(c===-1){console.error(`Migration ${t} not found.`);return}let p=d.slice(0,c+1);i&&(a=await s.transaction(),s=a.sql),await new Be(s).upMigrations(p),i&&await a?.commit(),g.info("Migrations ran successfully");return}i&&(a=await s.transaction(),s=a.sql),await new Be(s).upMigrations(d),i&&await a?.commit();}catch(l){throw i&&await a?.rollback(),l}g.info("Migrations ran successfully");}se();var ur={string:"string",varchar:"string",char:"string",text:"textarea",longtext:"textarea",mediumtext:"textarea",tinytext:"textarea",integer:"number",int:"number",smallint:"number",bigint:"number",tinyint:"number",mediumint:"number",float:"float",double:"float",decimal:"float",numeric:"float",real:"float",boolean:"boolean",bool:"boolean",date:"date",datetime:"datetime",timestamp:"datetime",time:"string",year:"number",json:"mixed",jsonb:"mixed",uuid:"string",ulid:"string",binary:"string",blob:"string",enum:"string"};var au=null;function Je(s,t){return t.getModelManager(s)}function iu(s,t,e){if(!t||typeof t!="object")return;let r=t;if(!r.filters)return;let n=e.getColumns();for(let[o,i]of Object.entries(r.filters)){let a=i.value;if(a==null||a==="")continue;let l=n.find(m=>m.columnName===o||m.databaseName===o);if(!l)continue;let u=typeof l.type=="string"?l.type:"string",d=ur[u]||"string";if(d==="string"||d==="textarea"){s.whereLike(o,`%${a}%`);continue}if(d==="boolean"){s.where(o,a==="true"||a===true);continue}if(d==="date"||d==="datetime"){if(typeof a=="object"&&a!==null){let m=a;m.from&&s.where(o,">=",m.from),m.to&&s.where(o,"<=",m.to);continue}s.where(o,a);continue}s.where(o,a);}}function Dt(s,t){let e={},r=t.getColumns();for(let n of r){let o=s[n.columnName];e[n.columnName]=o;}return e}async function by(){let s=await import('adminjs').catch(()=>{throw new L("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=s;return class extends t{constructor(o){super(o),this._model=o,this._db=au;}static isAdapterFor(o){if(typeof o!="function")return false;let i=o;return i.prototype!==void 0&&typeof i.table=="string"&&typeof i.getColumns=="function"}databaseName(){return this._db.database||"hysteria"}databaseType(){return this._db.getDbType()}id(){return this._model.table}properties(){return this._model.getColumns().map(i=>{let a=typeof i.type=="string"?i.type:"string",l=ur[a]||"string";return new r({path:i.columnName,type:l,isId:i.isPrimary,isSortable:true})})}property(o){let a=this._model.getColumns().find(d=>d.columnName===o||d.databaseName===o);if(!a)return null;let l=typeof a.type=="string"?a.type:"string",u=ur[l]||"string";return new r({path:a.columnName,type:u,isId:a.isPrimary,isSortable:true})}async count(o){let a=Je(this._model,this._db).query();return iu(a,o,this._model),a.getCount()}async find(o,i={}){let l=Je(this._model,this._db).query();return iu(l,o,this._model),i.limit&&l.limit(i.limit),i.offset&&l.offset(i.offset),i.sort?.sortBy&&l.orderBy(i.sort.sortBy,i.sort.direction||"asc"),(await l.many()).map(d=>new e(Dt(d,this._model),this))}async findOne(o){if(!this._model.primaryKey)return null;let l=await Je(this._model,this._db).findOneByPrimaryKey(o);return l?new e(Dt(l,this._model),this):null}async findMany(o){let i=this._model.primaryKey;return i?(await Je(this._model,this._db).query().whereIn(i,o).many()).map(u=>new e(Dt(u,this._model),this)):[]}async create(o){let a=await Je(this._model,this._db).insert(o,{returning:["*"]});return Dt(a,this._model)}async update(o,i){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=Je(this._model,this._db);if(!await l.findOneByPrimaryKey(o))throw new Error("Record not found");let d=await l.updateRecord(o,i,{returning:["*"]});return Dt(d,this._model)}async delete(o){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=Je(this._model,this._db);await a.findOneByPrimaryKey(o)&&await a.deleteRecord(o);}}}async function Ty(){let s=await import('adminjs').catch(()=>{throw new L("adminjs")}),{BaseDatabase:t}=s;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function wy(){let s=await import('adminjs').catch(()=>{throw new L("adminjs")}),t=await by(),e=await Ty();s.default.registerAdapter({Database:e,Resource:t});}async function Kn(s,t){au=s;let e=await import('adminjs').catch(()=>{throw new L("adminjs")});await wy();let r=t.resources||Object.values(s.models);if(!r.length)throw new Error("No models provided for AdminJS. Please provide models in the resources option or register them in SqlDataSource.");let n=r.map(a=>{let l=t.resourceOptions?.[a.table]||{};return {resource:a,options:l}}),o={rootPath:t.rootPath||"/admin",resources:n};if(t.branding&&(o.branding=t.branding),t.locale?.language&&(o.locale=t.locale),t.assets&&(o.assets=t.assets),t.settings&&(o.settings=t.settings),t.pages){let a={};for(let[l,u]of Object.entries(t.pages))u.component&&(a[l]=u);Object.keys(a).length>0&&(o.pages=a);}return {admin:new e.default(o)}}async function lu(s,t){let{admin:e}=await Kn(s,t),r;try{r=await import('@adminjs/express');}catch{throw new L("@adminjs/express")}let n=r.buildRouter(e);return {admin:e,router:n}}var ct=new Map,Qe=new Map,dr=class{async get(t){return ct.get(t)}async set(t,e,r){let n=Qe.get(t);if(n&&(clearTimeout(n),Qe.delete(t)),ct.set(t,e),r){let o=setTimeout(()=>{ct.delete(t),Qe.delete(t);},r);Qe.set(t,o);}}async invalidate(t){let e=Qe.get(t);e&&(clearTimeout(e),Qe.delete(t)),ct.delete(t);}async invalidateAll(t){let e=ct.keys();for(let r of e)if(r.startsWith(t)){let n=Qe.get(r);n&&(clearTimeout(n),Qe.delete(r)),ct.delete(r);}}};var $t=class{constructor(t){switch(this.type=t?.type||v.DB_TYPE,this.type){case "mongo":this.handleMongoSource(t);break;case "cockroachdb":this.handleCockroachdbSource(t);break;case "postgres":this.handlePostgresSource(t);break;case "mariadb":case "mysql":this.handleMysqlSource(t);break;case "sqlite":this.handleSqliteSource(t);break;case "mssql":this.handleMssqlSource(t);break;default:throw new q(`Invalid database type: ${this.type}, please provide a valid database type in your input or in the .env file with the key DB_TYPE
|
|
121
|
+
Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}let e=rr(this.logs);e?.customLogger&&g.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||v.DB_HOST,this.port=+t?.port||+v.DB_PORT,this.username=t?.username||v.DB_USER,this.password=t?.password||v.DB_PASSWORD,this.database=t?.database||v.DB_DATABASE,this.logs=t?.logs||v.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||v.DB_HOST,this.port=+t?.port||+v.DB_PORT,this.username=t?.username||v.DB_USER,this.password=t?.password||v.DB_PASSWORD,this.database=t?.database||v.DB_DATABASE,this.logs=t?.logs||v.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||v.DB_HOST,this.port=+t?.port||+v.DB_PORT,this.username=t?.username||v.DB_USER,this.password=t?.password||v.DB_PASSWORD,this.database=t?.database||v.DB_DATABASE,this.logs=t?.logs||v.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||v.DB_DATABASE||":memory:",this.logs=t?.logs||v.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||v.MONGO_URL,this.logs=t?.logs||v.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||v.DB_HOST,this.port=+t?.port||+v.DB_PORT,this.username=t?.username||v.DB_USER,this.password=t?.password||v.DB_PASSWORD,this.database=t?.database||v.DB_DATABASE,this.logs=t?.logs||v.DB_LOGS||false,this.port||(this.port=1433);}};var Sy=s=>{let{required:t,...e}=s.openApi||{},r={...e,type:s.openApi?.type||"string",description:s.openApi?.description??`Property: ${s.columnName}`};return s.openApi?.type?{...r,type:s.openApi.type}:Array.isArray(s.type)?{...r,type:"string",enum:s.type}:s.type==="date"||s.type==="datetime"||s.type==="timestamp"||s.type==="time"?{...r,type:"string",format:"date-time"}:s.type==="boolean"?{...r,type:"boolean"}:s.type==="integer"||s.type==="tinyint"||s.type==="smallint"||s.type==="mediumint"||s.type==="increment"?{...r,type:"integer",format:"int32"}:s.type==="biginteger"||s.type==="bigIncrement"?{...r,type:"integer",format:"int64"}:s.type==="float"||s.type==="real"?{...r,type:"number",format:"float"}:s.type==="double"?{...r,type:"number",format:"double"}:s.type==="decimal"||s.type==="numeric"?{...r,type:"number"}:s.type==="json"||s.type==="jsonb"?{...r,type:"object"}:s.type==="uuid"?{...r,type:"string",format:"uuid"}:s.type==="ulid"?{...r,type:"string",format:"ulid"}:s.type==="string"||s.type==="char"||s.type==="varchar"||s.type==="text"||s.type==="longtext"||s.type==="mediumtext"||s.type==="tinytext"?{...r,type:"string"}:s.type==="blob"||s.type==="binary"||s.type==="varbinary"||s.type==="tinyblob"||s.type==="mediumblob"||s.type==="longblob"?{...r,type:"string",format:"binary"}:s.type==="year"?{...r,type:"integer",format:"int32"}:r},Ny=s=>s.openApi?.required??false,qy=s=>{let t=s.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=Sy(r));return e},Cy=s=>{let t=s.getColumns(),e=[];for(let r of t)Ny(r)&&e.push(r.columnName);return e||[]},Ry=s=>{let t=qy(s),e=Cy(s);return {type:"object",properties:t,required:e.length?e:[]}};var uu=s=>s.map(t=>({...Ry(t),modelName:t.table,$id:t.table}));var Ln=(s,t)=>{let e=De.createHash("sha256"),r=s;return e.update(r),e.digest("hex")};var jn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length){let i=[];for(let a of o){let{sql:l}=r.parse([a]);i.push(l);}i.length&&(n+=` ${i.join(" ")}`);}return {sql:`add ${n}`,bindings:[]}}},du=new jn;var Wn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},cu=new Wn;var Fn=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`[${n}]`).join(", ")})`,bindings:[]}}},mu=new Fn;var Un=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),i=o.join(" ");e.newType.dataType==="uuid"&&(i=i.replace(/\s+default\s+.+$/i,"").trim());let a="";e.options.nullable!==void 0&&(a=e.options.nullable?" null":" not null");let l=`alter column [${e.column}] ${i}${a}`;if(e.options.dropDefault&&(l=`drop constraint DF_${e.column}, ${l}`),e.options.default!==void 0&&!e.options.dropDefault){let u=e.options.default;u===null?u="null":typeof u=="string"&&(u==="NULL"?u="null":u==="TRUE"||u==="FALSE"?u=u==="TRUE"?"1":"0":u=`'${u}'`),l+=`, add constraint DF_${e.column} default ${u} for [${e.column}]`;}return e.options.unique!==void 0&&e.options.unique&&(l+=`, add constraint UQ_${e.column} unique ([${e.column}])`),{sql:l,bindings:[]}}},pu=new Un;var S=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var mt=class extends S{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};function cr(s){return typeof s!="string"||!s?s:s.replace(/([a-z])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}function mr(s){return typeof s!="string"||!s?s:s.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function Vn(s){if(typeof s!="string"||!s)return s;let t=mr(s);return t.charAt(0).toUpperCase()+t.slice(1)}function H(s,t){return t==="preserve"?s:t==="snake"?cr(s):t==="camel"?mr(s):t==="pascal"?Vn(s):t instanceof RegExp?s.replace(t,e=>e[1].toUpperCase()):t(s)}var _y=s=>{if(s==null||typeof s!="object"||s instanceof Date)return false;if(Array.isArray(s))return true;let t=Object.getPrototypeOf(s);return t===Object.prototype||t===null},y=class{constructor(t){this.model=t;this.modelColumnsMap=typeof t.getColumnsByName=="function"?t.getColumnsByName():new Map;let e=[];for(let r of this.modelColumnsMap.values())r.expression||(r.type==="ulid"||r.autoCreate==="js")&&e.push(r);this.jsInsertColumns=e;}formatStringColumn(t,e){if(e==="*")return "*";let r=this.resolveComputedExpression(e);if(r!==void 0)return `(${r})`;if(e.includes(".")){let[i,a]=e.split(".");if(a==="*")switch(t){case "mysql":case "mariadb":return `\`${i}\`.*`;case "postgres":case "cockroachdb":case "sqlite":return `"${i}".*`;case "mssql":return `[${i}].*`;default:throw new Error(`Unsupported database type: ${t}`)}let l=this.modelColumnsMap.get(a)?.databaseName??H(a,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${i}\`.\`${l}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${i}"."${l}"`;case "mssql":return `[${i}].[${l}]`;default:throw new Error(`Unsupported database type: ${t}`)}}let o=this.modelColumnsMap.get(e)?.databaseName??H(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${o}"`;case "mssql":return `[${o}]`;default:throw new Error(`Unsupported database type: ${t}`)}}resolveComputedExpression(t){let e=t.includes(".")?t.split(".").pop():t;return this.modelColumnsMap.get(e)?.expression}isComputedColumn(t){return !!this.modelColumnsMap.get(t)?.expression}filterComputedColumns(t){return this.modelColumnsMap.size===0?t:t.filter(e=>!this.isComputedColumn(e))}stripComputedFromData(t){if(this.modelColumnsMap.size===0)return t;let e={};for(let r of Object.keys(t))this.isComputedColumn(r)||(e[r]=t[r]);return e}formatStringColumnBare(t,e){let r=e.includes(".")?e.split(".")[1]:e;return this.formatStringColumn(t,r)}dialectEmitsReturning(t){switch(t){case "postgres":case "cockroachdb":case "sqlite":case "mssql":return true;default:return false}}shouldFetchNatively(t,e){if(!this.dialectEmitsReturning(t)||t==="mssql")return false;if(t==="sqlite"&&e==="update"){for(let r of this.modelColumnsMap.values())if(r.autoUpdate)return false}return true}hasComputedColumn(t){return t.some(e=>this.isComputedColumn(e))}resolveColumnAlias(t,e){let r=this.modelColumnsMap.get(e);if(!r||r.columnName===r.databaseName)return "";switch(t){case "mssql":return ` as [${r.columnName}]`;case "mysql":case "mariadb":return ` as \`${r.columnName}\``;case "postgres":case "cockroachdb":case "sqlite":return ` as "${r.columnName}"`;default:return ""}}formatStringTable(t,e){e=e.replace(/\s+/g," ").trim();let r="";switch(e.toLowerCase().includes(" as ")&&([e,r]=e.split(" as ")),t){case "mysql":case "mariadb":return `\`${e}\`${r?` as \`${r}\``:""}`;case "postgres":case "cockroachdb":case "sqlite":return `"${e}"${r?` as "${r}"`:""}`;case "mssql":return `[${e}]${r?` as [${r}]`:""}`;default:return `${e}${r?` as ${r}`:""}`}}prepareColumns(t,e,r="insert",n="postgres"){if(!t.length)return {columns:t,values:e};let o=[],i=[];for(let l=0;l<t.length;l++){let u=t[l],d=e[l];u!=="*"&&(o.push(u),i.push(d));}let a=n==="mysql"||n==="mariadb";for(let l=0;l<o.length;l++){let u=o[l],d=i[l],m=this.modelColumnsMap.get(u);if(m?.expression){o.splice(l,1),i.splice(l,1),l--;continue}if(!m){_y(d)&&(i[l]=JSON.stringify(d));continue}if(d==null&&(m.autoCreate===true||m.type==="uuid"&&n!=="mysql"&&n!=="mariadb")){o.splice(l,1),i.splice(l,1),l--;continue}if(m.prepare){let c=r==="insert"?m.prepare(d):m.prepare(d)??d;if(c!==null&&typeof c?.then=="function")throw new Error(`hysteria-orm: prepare on column "${u}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);i[l]=c;}}if(r==="insert"){let l=new Set(t);for(let u of this.jsInsertColumns)l.has(u.columnName)||this.generateJsInsertColumn(u,o,i);if(a){let u=this.model.primaryKey;if(u){let d=this.modelColumnsMap.get(u);d&&d.type==="uuid"&&d.isPrimary&&!l.has(u)&&this.generateJsInsertColumn(d,o,i);}}}return {columns:o,values:i}}generateJsInsertColumn(t,e,r){let n=t.prepare?.(void 0);if(n!==null&&typeof n?.then=="function")throw new Error(`hysteria-orm: prepare on column "${t.columnName}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);e.push(t.columnName),r.push(n??void 0);}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new b(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}};var Jn=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};if(e.children.length===1&&e.children[0]instanceof mt){let d=e.children[0];return {sql:`EXEC sp_rename '${e.table}', '${d.newName}'`,bindings:[]}}let o=new b(this.model,"mssql"),i=[],a=[];for(let d of e.children){let{sql:m,bindings:c}=o.parse([d]);i.push(m.trim()),a.push(...c);}let l=i.join(", ");return {sql:`${n} ${l}`,bindings:a}}},fu=new Jn;var Hn=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},yu=new Hn;var zn=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},hu=new zn;var Gn=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},gu=new Gn;var Yn=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] null`,bindings:[]}}},bu=new Yn;var Zn=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},Tu=new Zn;var Xn=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},wu=new Xn;var eo=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},Su=new eo;var A=class extends S{constructor(e){super("raw",true);this.canKeywordBeSeenMultipleTimes=true;this.chainsWith=" ";this.currParamIndex=0;this.isRawValue=true;this.folder="raw";this.file="raw";this.rawValue=e;}};var k=class extends S{constructor(e,r=[]){super("sqlfunc");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="sqlfunc";this.file="sqlfunc";this.fn=e,this.args=r;}};var to=class{toSql(t){let e=t,r;return e.defaultValue instanceof A?r=e.defaultValue.rawValue:e.defaultValue instanceof k?r=new b(this.model,"mssql").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"||e.defaultValue===null?r="null":e.defaultValue==="TRUE"?r="1":e.defaultValue==="FALSE"?r="0":typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="1"&&e.defaultValue!=="0"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`add constraint DF_${e.column} default ${r} for [${e.column}]`,bindings:[]}}},Nu=new to;var ro=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] not null`,bindings:[]}}},qu=new ro;var no=class{toSql(t){return {sql:"",bindings:[]}}},Cu=new no;function oo(s){return s.replace(/^[`"]|[`"]$/g,"")}function so(s,t,e){if(!s.includes(".")){let o=oo(s);return `${t}.${o}`}let[r,n]=s.split(".");return r=oo(r),n=oo(n),r!==e?s:n==="*"?`${t}.*`:`${t}.${n}`}function C(s){return typeof s=="function"?s():s}var j=(s,t=new WeakMap)=>{if(s===null||typeof s!="object")return s;if(t.has(s))return t.get(s);if(Array.isArray(s)){let r=[];t.set(s,r);for(let n=0;n<s.length;n++)r[n]=j(s[n],t);return r}let e=Object.create(Object.getPrototypeOf(s)||{});t.set(s,e);for(let r of Object.getOwnPropertyNames(s)){let n=s[r];if(typeof n=="function"){e[r]=n;continue}e[r]=j(n,t);}return e};var io=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new y(this.model).formatStringColumn("mssql",C(e.column)),o=e.dataType.toLowerCase();if(o==="char"){let a=e.length??1;return {sql:`${n} char(${a})`,bindings:[]}}if(o==="varchar"){let a=e.length??255;return {sql:`${n} varchar(${a})`,bindings:[]}}if(o==="text"||o==="longtext"||o==="mediumtext"||o==="tinytext")return {sql:`${n} varchar(max)`,bindings:[]};if(o==="uuid"){let a=e.isForeignKey?"":" default NEWID()";return {sql:`${n} uniqueidentifier${a}`,bindings:[]}}if(o==="ulid")return {sql:`${n} varchar(26)`,bindings:[]};if(o==="bigint")return e.autoIncrement?{sql:`${n} bigint identity(1,1)`,bindings:[]}:{sql:`${n} bigint`,bindings:[]};if(o==="tinyint")return {sql:`${n} tinyint`,bindings:[]};if(o==="smallint")return {sql:`${n} smallint`,bindings:[]};if(o==="mediumint")return {sql:`${n} int`,bindings:[]};if(o==="float"||o==="real")return {sql:`${n} real`,bindings:[]};if(o==="double")return {sql:`${n} float`,bindings:[]};if(o==="decimal"||o==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${n} decimal(${a}, ${l})`,bindings:[]}}if(o==="date")return {sql:`${n} date`,bindings:[]};if(o==="year")return {sql:`${n} smallint`,bindings:[]};if(o==="time"){let a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${n} time${a}`,bindings:[]}}if(o==="datetime"||o==="timestamp"){let a=typeof e.precision=="number"?`(${e.precision})`:"",l=`${n} datetime2${a}`;return e.autoCreate&&(l+=" default current_timestamp"),{sql:l,bindings:[]}}if(o==="boolean"||o==="bool")return {sql:`${n} bit`,bindings:[]};if(o==="bytea"||o==="binary"||o==="varbinary"||o==="blob"||o==="longblob"||o==="mediumblob"||o==="tinyblob")return {sql:`${n} varbinary(max)`,bindings:[]};if(o==="json"||o==="jsonb")return {sql:`${n} nvarchar(max)`,bindings:[]};if(o==="enum"){if(e.enumValues&&e.enumValues.length>0){let a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${n} varchar(255) check (${n} in (${a}))`,bindings:[]}}return {sql:`${n} varchar(255)`,bindings:[]}}if(o==="integer"||o==="int")return e.autoIncrement?{sql:`${n} int identity(1,1)`,bindings:[]}:{sql:`${n} int`,bindings:[]};if(o==="geometry")return {sql:`${n} geometry`,bindings:[]};if(o==="point")return {sql:`${n} geometry`,bindings:[]};if(o==="linestring")return {sql:`${n} geometry`,bindings:[]};if(o==="polygon")return {sql:`${n} geometry`,bindings:[]};if(o==="multipoint")return {sql:`${n} geometry`,bindings:[]};let i=e.length?`(${e.length})`:"";return {sql:`${n} ${o}${i}`,bindings:[]}}},Ru=new io;var ao=class{toSql(t){return {sql:"",bindings:[]}}},Mu=new ao;var lo=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let n=e.constraintName?`constraint [${e.constraintName}] `:"",o=(e.columns??[]).map(i=>r.formatStringColumn("mssql",C(i))).join(", ");return {sql:`${n}primary key (${o})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns??[],o=e.constraintName?`constraint [${e.constraintName}] `:"",i=n.map(a=>r.formatStringColumn("mssql",C(a))).join(", ");return e.constraintName?{sql:`${o}unique (${i})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let n=e.defaultValue;return n instanceof A?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof k?{sql:`default ${new b(this.model,"mssql").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"?{sql:"default 1",bindings:[]}:n==="FALSE"?{sql:"default 0",bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let n=e.columns.map(u=>r.formatStringColumn("mssql",C(u))).join(", ");if(!e.references)return {sql:"",bindings:[]};let o=r.formatStringTable("mssql",e.references.table),i=e.references.columns.map(u=>r.formatStringColumn("mssql",C(u))).join(", "),l=`${e.constraintName?`constraint [${e.constraintName}] `:""}foreign key (${n}) references ${o}(${i})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint [${e.constraintName}] `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},_u=new lo;var uo=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mssql"),i=[],a=[];for(let h of e.children){let{sql:f,bindings:T}=o.parse([h]);if(h.folder==="constraint"){let N=i.pop()??"",w=f;if(/not null/i.test(w)||/null/i.test(w)||/default/i.test(w)){let R=`${N} ${w}`.trim();R=R.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),i.push(R),a.push(...T);continue}i.push(N),i.push(w),a.push(...T);continue}i.push(f),a.push(...T);}for(let h of e.namedConstraints){let{sql:f,bindings:T}=o.parse([h]);i.push(f),a.push(...T);}let l=i.join(", "),u=[];e.dataCompression&&u.push(`DATA_COMPRESSION = ${e.dataCompression}`);let d=e.onFilegroup?` ON [${e.onFilegroup}]`:"",m=e.textImageOn?` TEXTIMAGE_ON [${e.textImageOn}]`:"",c=u.length>0?` WITH (${u.join(", ")})`:"";return {sql:`${n} (${l})${c}${d}${m}`,bindings:a}}},xu=new uo;var co=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("mssql",e.fromNode),bindings:[]}}},Ou=new co;var mo=class{toSql(t){return {sql:"",bindings:[]}}},Au=new mo;var po=class{toSql(t){return g.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},Du=new po;var fo=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},$u=new fo;var yo=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Pu=new yo;var ho=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mssql",e.table)} as [${e.alias}]`,bindings:[]}:{sql:a.formatStringTable("mssql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"mssql").parse(r),i=e.alias&&e.alias.length?` as [${e.alias}]`:"";return {sql:`(${o.sql})${i}`,bindings:o.bindings}}},vu=new ho;var go=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},Iu=new go;var bo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(!(e.value instanceof S)&&!Array.isArray(e.value)&&(n=`${new y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} @${r}`,o=[e.value]),Array.isArray(e.value)){let i=e.value.map((a,l)=>`@${r+l}`).join(", ");n=`${new y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} (${i})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},Eu=new bo;var To=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table),o=e.columns.map(a=>`[${a}]`).join(", ");return {sql:`${e.unique?"unique ":""}[${e.indexName}] on ${n} (${o})`,bindings:[]}}},ku=new To;var wo=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},Bu=new wo;var So=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],i=Object.keys(o).filter(c=>o[c]!==void 0);if(!i.length)return {sql:n,bindings:[]};let a=i.map(c=>r.formatStringColumn("mssql",c)).join(", "),l=[],u=[],d=e.currParamIndex;for(let c of e.records){let p=i.map(f=>c[f]),h=[];for(let f of p)f instanceof A?h.push(f.rawValue):(l.push(f),h.push(`@${d++}`));u.push(`(${h.join(", ")})`);}let m=`${n} (${a}) values ${u.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let c=e.returning.map(p=>`inserted.${r.formatStringColumn("mssql",p)}${r.resolveColumnAlias("mssql",p)}`).join(", ");m=m.replace(") values",`) output ${c} values`);}else {let c=this.getOutputColumns(i,r);m=m.replace(") values",`) output ${c} values`);}return {sql:m,bindings:l}}getOutputColumns(t,e){let r=[...t],n=this.model.primaryKey;return n&&!t.includes(n)&&r.push(n),r.map(o=>`inserted.${e.formatStringColumn("mssql",o)}${e.resolveColumnAlias("mssql",o)}`).join(", ")}},Qu=new So;var No=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let i=r.formatStringColumn("mssql",n),a=r.formatStringColumn("mssql",o),u=`${r.formatStringTable("mssql",e.table)} on ${i} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let m=new b(this.model,"mssql");for(let c of e.additionalConditions){let p=m.parse([c]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},Ku=new No;var qo=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},Lu=new qo;var Co=class{toSql(t){return {sql:"",bindings:[]}}},ju=new Co;var Ro=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},Wu=new Ro;var Mo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:(g.warn("MSSQL does not support ON CONFLICT or ON DUPLICATE KEY. Use MERGE statement for upsert operations. This clause will be ignored. Consider using raw queries for MSSQL upserts."),{sql:"",bindings:[]})}},Fu=new Mo;var _o=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("mssql",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},Uu=new _o;var xo=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Vu=new xo;var Oo=class{toSql(t){let e=t,r=new y(this.model);return {sql:`output ${!e.columns.length||e.columns.includes("*")?`${e.prefix}.*`:e.columns.map(o=>`${e.prefix}.${r.formatStringColumn("mssql",o)}${r.resolveColumnAlias("mssql",o)}`).join(", ")}`,bindings:[]}}},Ju=new Oo;var Ao=class{toSql(t){return {sql:`SELECT
|
|
131
122
|
cc.name AS name,
|
|
132
123
|
cc.definition AS expression
|
|
133
124
|
FROM sys.check_constraints cc
|
|
134
125
|
JOIN sys.tables t ON cc.parent_object_id = t.object_id
|
|
135
|
-
WHERE t.name = '${t.table}'`,bindings:[]}}},
|
|
126
|
+
WHERE t.name = '${t.table}'`,bindings:[]}}},Hu=new Ao;var Do=class{toSql(t){return {sql:`SELECT
|
|
136
127
|
fk.name as name,
|
|
137
128
|
c.name as column_name,
|
|
138
129
|
rt.name as referenced_table,
|
|
@@ -144,7 +135,7 @@ INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_i
|
|
|
144
135
|
INNER JOIN sys.columns c ON fkc.parent_object_id = c.object_id AND fkc.parent_column_id = c.column_id
|
|
145
136
|
INNER JOIN sys.tables rt ON fkc.referenced_object_id = rt.object_id
|
|
146
137
|
INNER JOIN sys.columns rc ON fkc.referenced_object_id = rc.object_id AND fkc.referenced_column_id = rc.column_id
|
|
147
|
-
WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},
|
|
138
|
+
WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},zu=new Do;var $o=class{toSql(t){return {sql:`SELECT COLUMN_NAME as column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '${t.table}' ORDER BY ORDINAL_POSITION`,bindings:[]}}},Gu=new $o;var Po=class{toSql(t){return {sql:"SELECT TABLE_NAME as table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_NAME",bindings:[]}}},Yu=new Po;var vo=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS cc INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc ON cc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME WHERE tc.TABLE_NAME = '${e.table}' AND cc.CONSTRAINT_NAME = '${e.constraint}'`,bindings:[]}}},Zu=new vo;var Io=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '${e.table}' AND COLUMN_NAME = '${e.column}'`,bindings:[]}}},Xu=new Io;var Eo=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM sys.indexes i INNER JOIN sys.tables t ON i.object_id = t.object_id WHERE t.name = '${e.table}' AND i.name = '${e.index}'`,bindings:[]}}},ed=new Eo;var ko=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = '${t.table}' AND CONSTRAINT_TYPE = 'PRIMARY KEY'`,bindings:[]}}},td=new ko;var Bo=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = '${t.table}'`,bindings:[]}}},rd=new Bo;var Qo=class{toSql(t){return {sql:`SELECT
|
|
148
139
|
i.name as index_name,
|
|
149
140
|
c.name as column_name,
|
|
150
141
|
i.is_unique as is_unique
|
|
@@ -153,7 +144,7 @@ INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = i
|
|
|
153
144
|
INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
|
|
154
145
|
WHERE i.object_id = OBJECT_ID('${t.table}')
|
|
155
146
|
AND i.is_primary_key = 0
|
|
156
|
-
AND i.type > 0`,bindings:[]}}},
|
|
147
|
+
AND i.type > 0`,bindings:[]}}},nd=new Qo;var Ko=class{toSql(t){return {sql:`SELECT
|
|
157
148
|
tc.CONSTRAINT_NAME as name,
|
|
158
149
|
kcu.COLUMN_NAME as column_name
|
|
159
150
|
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
|
|
@@ -161,7 +152,7 @@ JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
|
|
|
161
152
|
ON tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
|
|
162
153
|
WHERE tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
|
|
163
154
|
AND tc.TABLE_NAME = '${t.table}'
|
|
164
|
-
ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},
|
|
155
|
+
ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},od=new Ko;var Lo=class{toSql(t){return {sql:`SELECT
|
|
165
156
|
c.COLUMN_NAME as column_name,
|
|
166
157
|
c.DATA_TYPE as data_type,
|
|
167
158
|
c.IS_NULLABLE as is_nullable,
|
|
@@ -171,7 +162,7 @@ ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},Rd=new hn;var gn=class{toSql(t){re
|
|
|
171
162
|
c.NUMERIC_SCALE as numeric_scale
|
|
172
163
|
FROM INFORMATION_SCHEMA.COLUMNS c
|
|
173
164
|
WHERE c.TABLE_NAME = '${t.table}'
|
|
174
|
-
ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Md=new gn;var bn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new h(this.model).formatStringColumn("mssql",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new N(this.model,"mssql").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new N(this.model,"mssql").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new h(this.model).formatStringColumn("mssql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new N(this.model,"mssql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},xd=new bn;var de=class i{constructor(t){this.segments=this.normalize(t);}normalize(t){if(Array.isArray(t))return t;if(typeof t=="string"){if(!t||t==="$")return [];let e=t.trim();return e=e.startsWith("$.")?e.slice(2):e,e=e.startsWith("$")?e.slice(1):e,e=e.startsWith(".")?e.slice(1):e,e?e.split(".").map(r=>{let o=Number(r);return isNaN(o)?r:o}):[]}return []}getSegments(){return [...this.segments]}isEmpty(){return this.segments.length===0}toPostgres(t=false){if(this.isEmpty())return "";let e=[];for(let r=0;r<this.segments.length;r++){let o=this.segments[r],n=r===this.segments.length-1,s=typeof o=="number";n&&t?e.push(s?`->>${o}`:`->>'${o}'`):e.push(s?`->${o}`:`->'${o}'`);}return e.join("")}toStandardJsonPath(){return this.isEmpty()?"$":`$.${this.segments.join(".")}`}toMysql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments){if(typeof e=="number"){t.push(`[${e}]`);continue}t.push(`.${e}`);}return t.join("")}toSqlite(){return this.toStandardJsonPath()}toMssql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments)typeof e=="number"?t.push(`[${e}]`):t.push(`.${e}`);return t.join("")}toOracle(){return this.toStandardJsonPath()}toDbSyntax(t,e=false){switch(t){case "postgres":case "cockroachdb":return this.toPostgres(e);case "mysql":case "mariadb":return this.toMysql();case "sqlite":return this.toSqlite();case "mssql":return this.toMssql();case "oracledb":return this.toOracle();default:return this.toStandardJsonPath()}}static from(t){return new i(t)}static root(){return new i("")}};var Tn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new h(this.model).formatStringColumn("mssql",e.column),o=de.from(e.jsonPath),n="";switch(e.jsonOperator){case "extract":n=this.buildExtractSql(r,o);break;case "extract_text":n=this.buildExtractTextSql(r,o);break;case "array_length":n=this.buildArrayLengthSql(r,o);break;case "object_keys":n=this.buildObjectKeysSql(r,o);break;case "raw":n=e.column;break}return {sql:this.formatWithAlias(n,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMssql();return r==="$"?t:`JSON_VALUE(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toMssql();return `(SELECT COUNT(*) FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}buildObjectKeysSql(t,e){let r=e.toMssql();return `(SELECT [key] FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}formatWithAlias(t,e){return e&&e.length>0?`${t} as [${e}]`:t}},Ad=new Tn;var Nn=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:`table ${new h(this.model).getFromForWriteOperations("mssql",e.fromNode)}`,bindings:[]}}},Od=new Nn;var wn=class{toSql(t){let e=t,r=new N(this.model,"mssql"),o=Array.isArray(e.query)?e.query:[e.query],n=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(o.filter(Boolean),e.currParamIndex);return {sql:n.sql,bindings:n.bindings}}},Dd=new wn;var Sn=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new h(this.model),o=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=0,s=[],a=e.columns.map((u,d)=>{let c=e.currParamIndex+d-n,m=e.values[d];return m instanceof $?(n++,`${r.formatStringColumn("mssql",u)} = ${m.rawValue}`):(s.push(m),`${r.formatStringColumn("mssql",u)} = @${c}`)}).join(", "),l=`${o} set ${a}`;if(e.returning&&e.returning.length){let u=e.returning.map(d=>`inserted.${r.formatStringColumn("mssql",d)}`).join(", ");l+=` output ${u}`;}return {sql:l,bindings:s}}},$d=new Sn;var Cn=class{toSql(t){let e=t;if(e.isRawValue){let a=e.value??[];if(a.length===0)return {sql:e.column,bindings:[]};let l=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`@${l++}`),bindings:a}}let r=e.value,o=e.currParamIndex;if(this.isRawNode(r)){let a=this.formatRawIdentifierIfPossible(r.rawValue);return {sql:`${new h(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`.trim(),bindings:[]}}if(Array.isArray(r)){let a=new h(this.model).formatStringColumn("mssql",e.column);if(e.operator.toLowerCase()==="between"){let d=`@${o} AND @${o+1}`,c=`${a} between ${d}`;return e.isNegated&&(c=`not (${c})`),{sql:c.trim(),bindings:r}}let l=r.map((d,c)=>`@${o+c}`).join(", "),u=`${a} ${e.operator} (${l})`;return e.isNegated&&(u=`not (${u})`),{sql:u.trim(),bindings:r}}let n=new h(this.model).formatStringColumn("mssql",e.column);if(e.operator.includes("null")){let a=`${n} ${e.operator}`;return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:[]}}if(r===void 0)return {sql:"",bindings:[]};let s=`${n} ${e.operator} @${o}`;return e.isNegated&&(s=`not (${s})`),{sql:s.trim(),bindings:[r]}}isRawNode(t){if(!t||!(typeof t=="object"))return false;let r="rawValue"in t,o=t.isRawValue===true;return r&&o}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new h(this.model).formatStringColumn("mssql",t):t}},Id=new Cn;var qn=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new N(this.model,"mssql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},Ed=new qn;var _n=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new h(this.model).formatStringColumn("mssql",e.column);switch(e.jsonOperator){case "=":o=`${s} = @${r}`,n=[JSON.stringify(e.value)];break;case "contains":case "not contains":o=`CHARINDEX(@${r}, ${s}) > 0`,n=[JSON.stringify(e.value)];break;case "raw":o=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(o=`NOT (${o})`),{sql:o.trim(),bindings:n}}},Pd=new _n;var Rn=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new N(this.model,"mssql"),{sql:r,bindings:o}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}handleObjectSubquery(t){let e=new N(this.model,"mssql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},vd=new Rn;var Mn=class{toSql(t){let e=t,r=new N(this.model,"mssql"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex);return e.clause==="materialized"&&g.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored."),{sql:`[${e.alias}] as (${n.sql})`,bindings:n.bindings}}},kd=new Mn;var xn=class{toSql(t){let e=t,r=new N(this.model,"mysql"),{sql:o}=r.parse([e.column]),n=e.inlineConstraints;if(n&&n.length>0){let s=[];for(let a of n){let{sql:l}=r.parse([a]);s.push(l);}s.length>0&&(o+=` ${s.join(" ")}`);}return {sql:`add column ${o}`,bindings:[]}}},Bd=new xn;var An=class{toSql(t){let e=t,r=new N(this.model,"mysql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},Qd=new An;var On=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`\`${o}\``).join(", ")})`,bindings:[]}}},Kd=new On;var Dn=class{toSql(t){let e=t,r=new N(this.model,"mysql"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" "),a=`modify column \`${e.column}\` ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?" null":" not null";a+=l;}if(!e.options.dropDefault){if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=` default ${l}`;}}return e.options.collate&&(a+=` COLLATE ${e.options.collate}`),e.options.unique!==void 0&&e.options.unique&&(a+=" unique"),{sql:a,bindings:[]}}},Ld=new Dn;var $n=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new N(this.model,"mysql"),s=[],a=[];for(let m of e.children){let{sql:p,bindings:f}=n.parse([m]);if(m.file==="add_column")s.push(p);else if(m.file==="add_constraint"||m.folder==="constraint"){let y=s[s.length-1]??"",T=/^\s*add\s+column\b/i.test(y),b=/^\s*add\s+constraint\b/i.test(p);if(T&&!b){let C=p.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${y} ${C}`;}else {let C=/^\s*add\b/i.test(p)?p:`add ${p}`;s.push(C);}}else m.file==="set_default"||m.file==="drop_default"||m.file==="set_not_null"||m.file,s.push(p);a.push(...f);}let l=s.join(", "),u=e.ifExists?"if exists ":"";return {sql:/^\s*drop\s+index\b/i.test(l)?l:`${u}${o} ${l}`,bindings:a}}},Wd=new $n;var In=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},jd=new In;var En=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},Fd=new En;var Pn=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},Ud=new Pn;var vn=class{toSql(t){return {sql:"",bindings:[]}}},Vd=new vn;var kn=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Jd=new kn;var Bn=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},Hd=new Bn;var Qn=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},zd=new Qn;var Kn=class{toSql(t){let e=t,r;return e.defaultValue instanceof $?r=e.defaultValue.rawValue:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column \`${e.column}\` set default ${r}`,bindings:[]}}},Yd=new Kn;var Ln=class{toSql(t){return {sql:"",bindings:[]}}},Gd=new Ln;var Wn=class{toSql(t){let e=t,r=[];return e.engine&&r.push(`ENGINE=${e.engine}`),e.charset&&r.push(`CHARSET=${e.charset}`),e.collate&&r.push(`COLLATE=${e.collate}`),{sql:r.join(" "),bindings:[]}}},Xd=new Wn;var jn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new h(this.model).formatStringColumn("mysql",q(e.column)),n=e.dataType.toLowerCase(),s,a=false,l=false;if(n==="char"){let u=e.length??1;s=`${o} char(${u})`;}else if(n==="varchar"){let u=e.length??255;s=`${o} varchar(${u})`;}else if(n==="uuid")s=`${o} varchar(36)`;else if(n==="ulid")s=`${o} varchar(26)`;else if(n==="longtext"||n==="mediumtext"||n==="tinytext"||n==="text")s=`${o} ${n}`;else if(n==="integer"||n==="int")a=true,l=!!e.autoIncrement,s=`${o} int`;else if(n==="tinyint")a=true,s=`${o} tinyint`;else if(n==="smallint")a=true,s=`${o} smallint`;else if(n==="mediumint")a=true,s=`${o} mediumint`;else if(n==="bigint")a=true,l=!!e.autoIncrement,s=`${o} bigint`;else if(n==="float")a=true,s=`${o} float`;else if(n==="double")a=true,s=`${o} double`;else if(n==="real")a=true,s=`${o} double`;else if(n==="decimal"){a=true;let u=e.precision??10,d=e.scale??0;s=`${o} decimal(${u}, ${d})`;}else if(n==="numeric"){a=true;let u=e.precision??10,d=e.scale??0;s=`${o} numeric(${u}, ${d})`;}else if(n==="date")s=`${o} date`;else if(n==="time"){let u=typeof e.precision=="number"?`(${e.precision})`:"";s=`${o} time${u}`.trimEnd();}else if(n==="datetime"){let u=typeof e.precision=="number"?`(${e.precision})`:"";s=`${o} datetime${u}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${u}`),e.autoUpdate&&(s+=` on update current_timestamp${u}`);}else if(n==="timestamp"){let u=typeof e.precision=="number"?`(${e.precision})`:"";s=`${o} timestamp${u}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${u}`),e.autoUpdate&&(s+=` on update current_timestamp${u}`);}else if(n==="year")s=`${o} year`;else if(n==="boolean")s=`${o} boolean`;else if(n==="varbinary"){let u=e.length??255;s=`${o} varbinary(${u})`;}else if(n==="binary"){let u=e.length??255;s=`${o} binary(${u})`;}else if(n==="bytea"||n==="blob")s=`${o} blob`;else if(n==="json"||n==="jsonb")s=`${o} json`;else if(n==="enum")if(e.enumValues&&e.enumValues.length>0){let u=e.enumValues.map(d=>`'${d}'`).join(", ");s=`${o} enum(${u})`;}else s=`${o} text`;else if(n==="geometry")s=`${o} geometry`;else if(n==="point")s=`${o} point`;else if(n==="linestring")s=`${o} linestring`;else if(n==="polygon")s=`${o} polygon`;else if(n==="multipoint")s=`${o} multipoint`;else {let u=e.length?`(${e.length})`:"";s=`${o} ${n}${u}`;}return a&&(e.zerofill?s+=" ZEROFILL":e.unsigned&&(s+=" UNSIGNED"),l&&(s+=" AUTO_INCREMENT")),e.collate&&(s+=` COLLATE ${e.collate}`),{sql:s,bindings:[]}}},Zd=new jn;var Fn=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},ec=new Fn;var Un=class{toSql(t){let e=t,r=new h(this.model);if(e.constraintType==="primary_key"){let o=(e.columns??[]).map(s=>r.formatStringColumn("mysql",q(s))).join(", ");return {sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}primary key (${o})`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let o=e.columns.map(s=>r.formatStringColumn("mysql",q(s))).join(", "),n=e.constraintName?`constraint \`${e.constraintName}\` `:"";return e.constraintName?{sql:`${n}unique (${o})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let o=e.defaultValue;return o instanceof $?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let o=(e.columns??[]).map(u=>r.formatStringColumn("mysql",q(u))).join(", "),n=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("mysql",q(u))).join(", "),l=`${e.constraintName?`constraint \`${e.constraintName}\` `:""}foreign key (${o}) references ${n}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},tc=new Un;var Vn=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new N(this.model,"mysql"),s=[],a=[];for(let p of e.children){let{sql:f,bindings:y}=n.parse([p]);if(p.folder==="constraint"){let T=s.pop()??"",b=f;if(/not null/i.test(b)||/null/i.test(b)||/default/i.test(b)){let C=`${T} ${b}`.trim();C=C.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(C),a.push(...y);continue}s.push(T),s.push(b),a.push(...y);continue}s.push(f),a.push(...y);}for(let p of e.namedConstraints){let{sql:f,bindings:y}=n.parse([p]);s.push(f),a.push(...y);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.engine&&d.push(`ENGINE=${e.engine}`),e.charset&&d.push(`CHARSET=${e.charset}`),e.collate&&d.push(`COLLATE=${e.collate}`);let c=d.length>0?` ${d.join(" ")}`:"";return {sql:`${u}${o} (${l})${c}`,bindings:a}}},rc=new Vn;var Jn=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new h(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},oc=new Jn;var Hn=class{toSql(t){return {sql:"distinct",bindings:[]}}},nc=new Hn;var zn=class{toSql(t){return g.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},sc=new zn;var Yn=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},ic=new Yn;var Gn=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},ac=new Gn;var Xn=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new h(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mysql",e.table)} as \`${e.alias}\``,bindings:[]}:{sql:a.formatStringTable("mysql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new N(this.model,"mysql").parse(r),s=e.alias&&e.alias.length?` as \`${e.alias}\``:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},lc=new Xn;var Zn=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new h(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},uc=new Zn;var es=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,o="",n=[];if(!(e.value instanceof w)&&!Array.isArray(e.value)&&(o=`${new h(this.model).formatStringColumn("mysql",e.column)} ${e.operator} $${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new h(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},dc=new es;var ts=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("mysql",e.table),n=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${o} (${n})`,bindings:[]}}},cc=new ts;var rs=class{toSql(t){let e=t;if(!e.table)throw new Error("MySQL DROP INDEX requires table name");return {sql:`\`${e.indexName}\` on \`${e.table}\``,bindings:[]}}},mc=new rs;var os=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new h(this.model),o=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n);if(!s.length)return {sql:o,bindings:[]};let a=s.map(c=>r.formatStringColumn("mysql",c)).join(", "),l=[],u=[];for(let c of e.records){let m=s.map(f=>c[f]),p=[];for(let f of m)f instanceof $?p.push(f.rawValue):(l.push(f),p.push("?"));u.push(`(${p.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${u.join(", ")}`,bindings:l}}},pc=new os;var ns=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("mysql",o),a=r.formatStringColumn("mysql",n),u=`${r.formatStringTable("mysql",e.table)} on ${s} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new N(this.model,"mysql");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let f=p.sql.replace(/^where\s+/i,"");u+=` and ${f}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},fc=new ns;var ss=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},yc=new ss;var Qh={for_update:"for update",for_share:"lock in share mode"},is=class{toSql(t){let e=t,r=Qh[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},hc=new is;var as=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},gc=new as;var ls=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(this.model);if(e.mode==="ignore"){let n=e.conflictColumns?.[0]||"id",s=r.formatStringColumn("mysql",`${e.table}.${n}`);return {sql:`ON DUPLICATE KEY UPDATE ${s} = ${s}`,bindings:[]}}return {sql:`ON DUPLICATE KEY UPDATE ${e.columnsToUpdate.map(n=>`${r.formatStringColumn("mysql",n)} = VALUES(${r.formatStringColumn("mysql",n)})`).join(", ")}`,bindings:[]}}},bc=new ls;var us=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new h(this.model).formatStringColumn("mysql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Tc=new us;var ds=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Nc=new ds;var cs=class{toSql(t){return {sql:`SELECT
|
|
165
|
+
ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},sd=new Lo;var jo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new y(this.model).formatStringColumn("mssql",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"mssql").parse(t),i=`(${o.sql})`;return e&&(i=`${e.toLowerCase()}${i}`),{sql:i,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"mssql").parse([t]),i=`(${o.sql})`;return e&&(i=`${e.toLowerCase()}${i}`),{sql:i,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new y(this.model).formatStringColumn("mssql",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"mssql").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},id=new jo;var qe=class s{constructor(t){this.segments=this.normalize(t);}normalize(t){if(Array.isArray(t))return t;if(typeof t=="string"){if(!t||t==="$")return [];let e=t.trim();return e=e.startsWith("$.")?e.slice(2):e,e=e.startsWith("$")?e.slice(1):e,e=e.startsWith(".")?e.slice(1):e,e?e.split(".").map(r=>{let n=Number(r);return isNaN(n)?r:n}):[]}return []}getSegments(){return [...this.segments]}isEmpty(){return this.segments.length===0}toPostgres(t=false){if(this.isEmpty())return "";let e=[];for(let r=0;r<this.segments.length;r++){let n=this.segments[r],o=r===this.segments.length-1,i=typeof n=="number";o&&t?e.push(i?`->>${n}`:`->>'${n}'`):e.push(i?`->${n}`:`->'${n}'`);}return e.join("")}toStandardJsonPath(){return this.isEmpty()?"$":`$.${this.segments.join(".")}`}toMysql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments){if(typeof e=="number"){t.push(`[${e}]`);continue}t.push(`.${e}`);}return t.join("")}toSqlite(){return this.toStandardJsonPath()}toMssql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments)typeof e=="number"?t.push(`[${e}]`):t.push(`.${e}`);return t.join("")}toDbSyntax(t,e=false){switch(t){case "postgres":case "cockroachdb":return this.toPostgres(e);case "mysql":case "mariadb":return this.toMysql();case "sqlite":return this.toSqlite();case "mssql":return this.toMssql();default:return this.toStandardJsonPath()}}static from(t){return new s(t)}static root(){return new s("")}};var Wo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("mssql",e.column),n=qe.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMssql();return r==="$"?t:`JSON_VALUE(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toMssql();return `(SELECT COUNT(*) FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}buildObjectKeysSql(t,e){let r=e.toMssql();return `(SELECT [key] FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}formatWithAlias(t,e){return e&&e.length>0?`${t} as [${e}]`:t}},ad=new Wo;var Fo=class{toSql(t){let e=t,r=this.renderToken(e.fn);if(r!==void 0)return {sql:r,bindings:[]};let n=e.args.map(o=>o instanceof A?o.rawValue:o instanceof k?this.toSql(o).sql:typeof o=="number"?String(o):`'${o}'`).join(", ");return {sql:`${e.fn}(${n})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "NEWID()";case "$now":case "$currentTimestamp":return "current_timestamp";default:return}}},ld=new Fo;var Uo=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:`table ${new y(this.model).getFromForWriteOperations("mssql",e.fromNode)}`,bindings:[]}}},ud=new Uo;var Vo=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},dd=new Vo;var Jo=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=0,i=[],a=e.columns.map((u,d)=>{let m=e.currParamIndex+d-o,c=e.values[d];if(c instanceof A)return o++,`${r.formatStringColumn("mssql",u)} = ${c.rawValue}`;if(c instanceof k){o++;let p=new b(this.model,"mssql").parse([c],1,true).sql;return `${r.formatStringColumn("mssql",u)} = ${p}`}return i.push(c),`${r.formatStringColumn("mssql",u)} = @${m}`}).join(", ");return {sql:`${n} set ${a}`,bindings:i}}},cd=new Jo;var Ho=class{toSql(t){let e=t;if(e.isRawValue){let a=e.value??[];if(a.length===0)return {sql:e.column,bindings:[]};let l=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`@${l++}`),bindings:a}}let r=e.value,n=e.currParamIndex;if(this.isRawNode(r)){let a=this.formatRawIdentifierIfPossible(r.rawValue);return {sql:`${new y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`.trim(),bindings:[]}}if(Array.isArray(r)){let a=new y(this.model).formatStringColumn("mssql",e.column);if(e.operator.toLowerCase()==="between"){let d=`@${n} AND @${n+1}`,m=`${a} between ${d}`;return e.isNegated&&(m=`not (${m})`),{sql:m.trim(),bindings:r}}let l=r.map((d,m)=>`@${n+m}`).join(", "),u=`${a} ${e.operator} (${l})`;return e.isNegated&&(u=`not (${u})`),{sql:u.trim(),bindings:r}}let o=new y(this.model).formatStringColumn("mssql",e.column);if(e.operator.includes("null")){let a=`${o} ${e.operator}`;return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:[]}}if(r===void 0)return {sql:"",bindings:[]};let i=`${o} ${e.operator} @${n}`;return e.isNegated&&(i=`not (${i})`),{sql:i.trim(),bindings:[r]}}isRawNode(t){if(!t||!(typeof t=="object"))return false;let r="rawValue"in t,n=t.isRawValue===true;return r&&n}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("mssql",t):t}},md=new Ho;var zo=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"mssql"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},pd=new zo;var Go=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],i=new y(this.model).formatStringColumn("mssql",e.column);switch(e.jsonOperator){case "=":n=`${i} = @${r}`,o=[JSON.stringify(e.value)];break;case "contains":case "not contains":n=`CHARINDEX(@${r}, ${i}) > 0`,o=[JSON.stringify(e.value)];break;case "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`NOT (${n})`),{sql:n.trim(),bindings:o}}},fd=new Go;var Yo=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"mssql"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"mssql"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},yd=new Yo;var Zo=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex);return e.clause==="materialized"&&g.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored."),{sql:`[${e.alias}] as (${o.sql})`,bindings:o.bindings}}},hd=new Zo;var Xo=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length>0){let i=[];for(let a of o){let{sql:l}=r.parse([a]);i.push(l);}i.length>0&&(n+=` ${i.join(" ")}`);}return {sql:`add column ${n}`,bindings:[]}}},gd=new Xo;var es=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},bd=new es;var ts=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`\`${n}\``).join(", ")})`,bindings:[]}}},Td=new ts;var rs=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),i=o.join(" ");e.newType.dataType==="uuid"&&(i=i.replace(/\s+default\s+.+$/i,"").trim());let a=`modify column \`${e.column}\` ${i}`;if(e.options.nullable!==void 0){let l=e.options.nullable?" null":" not null";a+=l;}if(!e.options.dropDefault){if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=` default ${l}`;}}return e.options.collate&&(a+=` COLLATE ${e.options.collate}`),e.options.unique!==void 0&&e.options.unique&&(a+=" unique"),{sql:a,bindings:[]}}},wd=new rs;var ns=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"mysql"),i=[],a=[];for(let c of e.children){let{sql:p,bindings:h}=o.parse([c]);if(c.file==="add_column")i.push(p);else if(c.file==="add_constraint"||c.folder==="constraint"){let f=i[i.length-1]??"",T=/^\s*add\s+column\b/i.test(f),N=/^\s*add\s+constraint\b/i.test(p);if(T&&!N){let w=p.replace(/^\s*add\s+/i,"").trimStart();i[i.length-1]=`${f} ${w}`;}else {let w=/^\s*add\b/i.test(p)?p:`add ${p}`;i.push(w);}}else c.file==="set_default"||c.file==="drop_default"||c.file==="set_not_null"||c.file,i.push(p);a.push(...h);}let l=i.join(", "),u=e.ifExists?"if exists ":"";return {sql:/^\s*drop\s+index\b/i.test(l)?l:`${u}${n} ${l}`,bindings:a}}},Sd=new ns;var os=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},Nd=new os;var ss=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},qd=new ss;var is=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},Cd=new is;var as=class{toSql(t){return {sql:"",bindings:[]}}},Rd=new as;var ls=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Md=new ls;var us=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},_d=new us;var ds=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},xd=new ds;var cs=class{toSql(t){let e=t,r;return e.defaultValue instanceof A?r=e.defaultValue.rawValue:e.defaultValue instanceof k?r=new b(this.model,"mysql").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column \`${e.column}\` set default ${r}`,bindings:[]}}},Od=new cs;var ms=class{toSql(t){return {sql:"",bindings:[]}}},Ad=new ms;var ps=class{toSql(t){let e=t,r=[];return e.engine&&r.push(`ENGINE=${e.engine}`),e.charset&&r.push(`CHARSET=${e.charset}`),e.collate&&r.push(`COLLATE=${e.collate}`),{sql:r.join(" "),bindings:[]}}},Dd=new ps;var fs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new y(this.model).formatStringColumn("mysql",C(e.column)),o=e.dataType.toLowerCase(),i,a=false,l=false;if(o==="char"){let u=e.length??1;i=`${n} char(${u})`;}else if(o==="varchar"){let u=e.length??255;i=`${n} varchar(${u})`;}else if(o==="uuid")i=`${n} varchar(36)`;else if(o==="ulid")i=`${n} varchar(26)`;else if(o==="longtext"||o==="mediumtext"||o==="tinytext"||o==="text")i=`${n} ${o}`;else if(o==="integer"||o==="int")a=true,l=!!e.autoIncrement,i=`${n} int`;else if(o==="tinyint")a=true,i=`${n} tinyint`;else if(o==="smallint")a=true,i=`${n} smallint`;else if(o==="mediumint")a=true,i=`${n} mediumint`;else if(o==="bigint")a=true,l=!!e.autoIncrement,i=`${n} bigint`;else if(o==="float")a=true,i=`${n} float`;else if(o==="double")a=true,i=`${n} double`;else if(o==="real")a=true,i=`${n} double`;else if(o==="decimal"){a=true;let u=e.precision??10,d=e.scale??0;i=`${n} decimal(${u}, ${d})`;}else if(o==="numeric"){a=true;let u=e.precision??10,d=e.scale??0;i=`${n} numeric(${u}, ${d})`;}else if(o==="date")i=`${n} date`;else if(o==="time"){let u=typeof e.precision=="number"?`(${e.precision})`:"";i=`${n} time${u}`.trimEnd();}else if(o==="datetime"){let u=typeof e.precision=="number"?`(${e.precision})`:"";i=`${n} datetime${u}`.trimEnd(),e.autoCreate&&(i+=` default current_timestamp${u}`),e.autoUpdate&&(i+=` on update current_timestamp${u}`);}else if(o==="timestamp"){let u=typeof e.precision=="number"?`(${e.precision})`:"";i=`${n} timestamp${u}`.trimEnd(),e.autoCreate&&(i+=` default current_timestamp${u}`),e.autoUpdate&&(i+=` on update current_timestamp${u}`);}else if(o==="year")i=`${n} year`;else if(o==="boolean")i=`${n} boolean`;else if(o==="varbinary"){let u=e.length??255;i=`${n} varbinary(${u})`;}else if(o==="binary"){let u=e.length??255;i=`${n} binary(${u})`;}else if(o==="bytea"||o==="blob")i=`${n} blob`;else if(o==="json"||o==="jsonb")i=`${n} json`;else if(o==="enum")if(e.enumValues&&e.enumValues.length>0){let u=e.enumValues.map(d=>`'${d}'`).join(", ");i=`${n} enum(${u})`;}else i=`${n} text`;else if(o==="geometry")i=`${n} geometry`;else if(o==="point")i=`${n} point`;else if(o==="linestring")i=`${n} linestring`;else if(o==="polygon")i=`${n} polygon`;else if(o==="multipoint")i=`${n} multipoint`;else {let u=e.length?`(${e.length})`:"";i=`${n} ${o}${u}`;}return a&&(e.zerofill?i+=" ZEROFILL":e.unsigned&&(i+=" UNSIGNED"),l&&(i+=" AUTO_INCREMENT")),e.collate&&(i+=` COLLATE ${e.collate}`),{sql:i,bindings:[]}}},$d=new fs;var ys=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Pd=new ys;var hs=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){let n=(e.columns??[]).map(i=>r.formatStringColumn("mysql",C(i))).join(", ");return {sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}primary key (${n})`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns.map(i=>r.formatStringColumn("mysql",C(i))).join(", "),o=e.constraintName?`constraint \`${e.constraintName}\` `:"";return e.constraintName?{sql:`${o}unique (${n})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let n=e.defaultValue;return n instanceof A?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof k?{sql:`default ${new b(this.model,"mysql").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let n=(e.columns??[]).map(u=>r.formatStringColumn("mysql",C(u))).join(", "),o=r.formatStringTable("mysql",e.references.table),i=e.references.columns.map(u=>r.formatStringColumn("mysql",C(u))).join(", "),l=`${e.constraintName?`constraint \`${e.constraintName}\` `:""}foreign key (${n}) references ${o}(${i})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},vd=new hs;var gs=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mysql"),i=[],a=[];for(let p of e.children){let{sql:h,bindings:f}=o.parse([p]);if(p.folder==="constraint"){let T=i.pop()??"",N=h;if(/not null/i.test(N)||/null/i.test(N)||/default/i.test(N)){let w=`${T} ${N}`.trim();w=w.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),i.push(w),a.push(...f);continue}i.push(T),i.push(N),a.push(...f);continue}i.push(h),a.push(...f);}for(let p of e.namedConstraints){let{sql:h,bindings:f}=o.parse([p]);i.push(h),a.push(...f);}let l=i.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.engine&&d.push(`ENGINE=${e.engine}`),e.charset&&d.push(`CHARSET=${e.charset}`),e.collate&&d.push(`COLLATE=${e.collate}`);let m=d.length>0?` ${d.join(" ")}`:"";return {sql:`${u}${n} (${l})${m}`,bindings:a}}},Id=new gs;var bs=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},Ed=new bs;var Ts=class{toSql(t){return {sql:"distinct",bindings:[]}}},kd=new Ts;var ws=class{toSql(t){return g.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},Bd=new ws;var Ss=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Qd=new Ss;var Ns=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Kd=new Ns;var qs=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mysql",e.table)} as \`${e.alias}\``,bindings:[]}:{sql:a.formatStringTable("mysql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"mysql").parse(r),i=e.alias&&e.alias.length?` as \`${e.alias}\``:"";return {sql:`(${o.sql})${i}`,bindings:o.bindings}}},Ld=new qs;var Cs=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},jd=new Cs;var Rs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(!(e.value instanceof S)&&!Array.isArray(e.value)&&(n=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} $${r}`,o=[e.value]),Array.isArray(e.value)){let i=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${i})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},Wd=new Rs;var Ms=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table),o=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${n} (${o})`,bindings:[]}}},Fd=new Ms;var _s=class{toSql(t){let e=t;if(!e.table)throw new Error("MySQL DROP INDEX requires table name");return {sql:`\`${e.indexName}\` on \`${e.table}\``,bindings:[]}}},Ud=new _s;var xs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],i=Object.keys(o);if(!i.length)return {sql:n,bindings:[]};let a=i.map(m=>r.formatStringColumn("mysql",m)).join(", "),l=[],u=[];for(let m of e.records){let c=i.map(h=>m[h]),p=[];for(let h of c)h instanceof A?p.push(h.rawValue):(l.push(h),p.push("?"));u.push(`(${p.join(", ")})`);}let d=`${n} (${a}) VALUES ${u.join(", ")}`;if(this.dbType==="mariadb"&&!e.disableReturning){if(e.returning&&e.returning.length){let m=e.returning.map(c=>r.formatStringColumn("mariadb",c)).join(", ");return {sql:`${d} returning ${m}`,bindings:l}}return {sql:`${d} returning *`,bindings:l}}return {sql:d,bindings:l}}},Vd=new xs;var Os=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let i=r.formatStringColumn("mysql",n),a=r.formatStringColumn("mysql",o),u=`${r.formatStringTable("mysql",e.table)} on ${i} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let m=new b(this.model,"mysql");for(let c of e.additionalConditions){let p=m.parse([c]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},Jd=new Os;var As=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Hd=new As;var xy={for_update:"for update",for_share:"lock in share mode"},Ds=class{toSql(t){let e=t,r=xy[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},zd=new Ds;var $s=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Gd=new $s;var Ps=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model);if(e.mode==="ignore"){let o=e.conflictColumns?.[0]||"id",i=r.formatStringColumn("mysql",`${e.table}.${o}`);return {sql:`ON DUPLICATE KEY UPDATE ${i} = ${i}`,bindings:[]}}return {sql:`ON DUPLICATE KEY UPDATE ${e.columnsToUpdate.map(o=>`${r.formatStringColumn("mysql",o)} = VALUES(${r.formatStringColumn("mysql",o)})`).join(", ")}`,bindings:[]}}},Yd=new Ps;var vs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("mysql",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},Zd=new vs;var Is=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Xd=new Is;var Es=class{toSql(t){return {sql:"",bindings:[]}}},ec=new Es;var ks=class{toSql(t){return {sql:`SELECT
|
|
175
166
|
cc.CONSTRAINT_NAME AS name,
|
|
176
167
|
cc.CHECK_CLAUSE AS expression
|
|
177
168
|
FROM information_schema.CHECK_CONSTRAINTS cc
|
|
@@ -180,7 +171,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Md=new gn;var bn=class{toSql(t){let
|
|
|
180
171
|
AND cc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
|
|
181
172
|
WHERE tc.TABLE_SCHEMA = DATABASE()
|
|
182
173
|
AND tc.TABLE_NAME = '${t.table}'
|
|
183
|
-
AND tc.CONSTRAINT_TYPE = 'CHECK'`,bindings:[]}}},
|
|
174
|
+
AND tc.CONSTRAINT_TYPE = 'CHECK'`,bindings:[]}}},tc=new ks;var Bs=class{toSql(t){return {sql:`SELECT
|
|
184
175
|
k.CONSTRAINT_NAME AS name,
|
|
185
176
|
k.COLUMN_NAME AS column_name,
|
|
186
177
|
k.REFERENCED_TABLE_NAME AS referenced_table,
|
|
@@ -191,60 +182,12 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Md=new gn;var bn=class{toSql(t){let
|
|
|
191
182
|
JOIN information_schema.REFERENTIAL_CONSTRAINTS r
|
|
192
183
|
ON k.CONSTRAINT_NAME = r.CONSTRAINT_NAME AND k.CONSTRAINT_SCHEMA = r.CONSTRAINT_SCHEMA
|
|
193
184
|
WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.REFERENCED_TABLE_NAME IS NOT NULL
|
|
194
|
-
ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},
|
|
185
|
+
ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},rc=new Bs;var Qs=class{toSql(t){return {sql:`SELECT column_name as name FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${t.table}' ORDER BY ordinal_position`,bindings:[]}}},nc=new Qs;var Ks=class{toSql(t){return {sql:"SELECT table_name as name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE' ORDER BY table_name",bindings:[]}}},oc=new Ks;var Ls=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.check_constraints WHERE constraint_schema = DATABASE() AND constraint_name = '${t.constraint}'`,bindings:[]}}},sc=new Ls;var js=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${e.table}' AND column_name = '${e.column}'`,bindings:[]}}},ic=new js;var Ws=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM information_schema.statistics WHERE table_schema = DATABASE() AND table_name = '${e.table}' AND index_name = '${e.index}'`,bindings:[]}}},ac=new Ws;var Fs=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.table_constraints WHERE table_schema = DATABASE() AND table_name = '${t.table}' AND constraint_type = 'PRIMARY KEY'`,bindings:[]}}},lc=new Fs;var Us=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = '${t.table}'`,bindings:[]}}},uc=new Us;var Vs=class{toSql(t){return {sql:`SHOW INDEX FROM \`${t.table}\``,bindings:[]}}},dc=new Vs;var Js=class{toSql(t){return {sql:`SELECT
|
|
195
186
|
CONSTRAINT_NAME AS name,
|
|
196
187
|
COLUMN_NAME AS column_name
|
|
197
188
|
FROM information_schema.KEY_COLUMN_USAGE k
|
|
198
189
|
WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.CONSTRAINT_NAME = 'PRIMARY'
|
|
199
|
-
ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},Dc=new ws;var Ss=class{toSql(t){return {sql:`SELECT COLUMN_NAME AS column_name, DATA_TYPE AS data_type, COLUMN_TYPE AS column_type, IS_NULLABLE AS is_nullable, COLUMN_DEFAULT AS column_default, CHARACTER_MAXIMUM_LENGTH AS char_length, NUMERIC_PRECISION AS numeric_precision, NUMERIC_SCALE AS numeric_scale FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${t.table}' ORDER BY ORDINAL_POSITION`,bindings:[]}}},$c=new Ss;var Cs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new h(this.model).formatStringColumn("mysql",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new N(this.model,"mysql").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new N(this.model,"mysql").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new h(this.model).formatStringColumn("mysql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new N(this.model,"mysql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},Ic=new Cs;var qs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new h(this.model).formatStringColumn("mysql",e.column),o=de.from(e.jsonPath),n="";switch(e.jsonOperator){case "extract":n=this.buildExtractSql(r,o);break;case "extract_text":n=this.buildExtractTextSql(r,o);break;case "array_length":n=this.buildArrayLengthSql(r,o);break;case "object_keys":n=this.buildObjectKeysSql(r,o);break;case "raw":n=e.column;break}return {sql:this.formatWithAlias(n,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMysql();return r==="$"?t:`JSON_EXTRACT(${t}, '${r}')`}buildExtractTextSql(t,e){let r=e.toMysql();return r==="$"?`JSON_UNQUOTE(${t})`:`JSON_UNQUOTE(JSON_EXTRACT(${t}, '${r}'))`}buildArrayLengthSql(t,e){let r=e.toMysql();return r==="$"?`JSON_LENGTH(${t})`:`JSON_LENGTH(${t}, '${r}')`}buildObjectKeysSql(t,e){let r=e.toMysql();return r==="$"?`JSON_KEYS(${t})`:`JSON_KEYS(${t}, '${r}')`}formatWithAlias(t,e){return e&&e.length>0?`${t} as \`${e}\``:t}},Ec=new qs;var _s=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new h(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},Pc=new _s;var Rs=class{toSql(t){let e=t,r=new N(this.model,"mysql"),o=Array.isArray(e.query)?e.query:[e.query],n=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(o.filter(Boolean),e.currParamIndex);return {sql:n.sql,bindings:n.bindings}}},vc=new Rs;var Ms=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new h(this.model),o=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=[],s=e.columns.map((a,l)=>{let u=e.values[l];return u instanceof $?`${r.formatStringColumn("mysql",a)} = ${u.rawValue}`:(n.push(u),`${r.formatStringColumn("mysql",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},kc=new Ms;var xs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",o=[];if(this.isRawNode(e.value)){let n=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new h(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new h(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new h(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new h(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new h(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ?`,o=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new h(this.model).formatStringColumn("mysql",t):t}},Bc=new xs;var As=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new N(this.model,"mysql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},Qc=new As;var Os=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new h(this.model).formatStringColumn("mysql",e.column);switch(e.jsonOperator){case "=":r=`${n} = CAST(? AS JSON)`,o=[JSON.stringify(e.value)];break;case "contains":r=`JSON_CONTAINS(${n}, ?)`,o=[JSON.stringify(e.value)];break;case "not contains":r=`JSON_CONTAINS(${n}, ?)`,o=[JSON.stringify(e.value)];break;case "raw":r=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:o}}},Kc=new Os;var Ds=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new N(this.model,"mysql"),{sql:r,bindings:o}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}handleObjectSubquery(t){let e=new N(this.model,"mysql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},Lc=new Ds;var $s=class{toSql(t){let e=t,r=new N(this.model,"mysql"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex);return {sql:`${e.alias} as (${n.sql})`,bindings:n.bindings}}},Wc=new $s;var Is=class{toSql(t){let e=t,r=new N(this.model,"oracledb"),{sql:o}=r.parse([e.column]),n=e.inlineConstraints;if(n&&n.length){let s=[];for(let a of n){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(o+=` ${s.join(" ")}`);}return {sql:`add ${o}`,bindings:[]}}},jc=new Is;var Es=class{toSql(t){let e=t,r=new N(this.model,"oracledb"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},Fc=new Es;var Ps=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},Uc=new Ps;var vs=class{toSql(t){let e=t,r=new N(this.model,"oracledb"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" "),a=`modify "${e.column}" ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?`modify "${e.column}" null`:`modify "${e.column}" not null`;a+=`, ${l}`;}if(e.options.dropDefault)a+=`, modify "${e.column}" default null`;else if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"?l="1":l==="FALSE"?l="0":l=`'${l}'`),a+=`, modify "${e.column}" default ${l}`;}return e.options.unique!==void 0&&(e.options.unique?a+=`, add constraint "unique_${e.column}" unique ("${e.column}")`:a+=`, drop constraint "unique_${e.column}"`),{sql:a,bindings:[]}}},Vc=new vs;var ks=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("oracledb",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new N(this.model,"oracledb"),s=[],a=[];for(let d of e.children){let{sql:c,bindings:m}=n.parse([d]);s.push(c.trim()),a.push(...m);}let l=s.join(", ");return {sql:`${o} ${l}`,bindings:a}}},Jc=new ks;var Bs=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Hc=new Bs;var Qs=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},zc=new Qs;var Ks=class{toSql(t){return {sql:`modify "${t.column}" default null`,bindings:[]}}},Yc=new Ks;var Ls=class{toSql(t){return {sql:`modify "${t.column}" null`,bindings:[]}}},Gc=new Ls;var Ws=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Xc=new Ws;var js=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Zc=new js;var Fs=class{toSql(t){return {sql:`rename to "${t.newName}"`,bindings:[]}}},em=new Fs;var Us=class{toSql(t){let e=t,r;return e.defaultValue instanceof $?r=e.defaultValue.rawValue:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"?r="1":e.defaultValue==="FALSE"?r="0":typeof e.defaultValue=="string"&&e.defaultValue!=="null"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`modify "${e.column}" default ${r}`,bindings:[]}}},tm=new Us;var Vs=class{toSql(t){return {sql:`modify "${t.column}" not null`,bindings:[]}}},rm=new Vs;var Js=class{toSql(t){return {sql:"",bindings:[]}}},om=new Js;var Hs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new h(this.model).formatStringColumn("oracledb",q(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let a=e.length??1;return {sql:`${o} char(${a})`,bindings:[]}}else if(n==="varchar"){let a=e.length??255;return {sql:`${o} varchar2(${a})`,bindings:[]}}else {if(n==="text"||n==="longtext"||n==="mediumtext"||n==="tinytext")return {sql:`${o} clob`,bindings:[]};if(n==="uuid")return {sql:`${o} varchar2(36)`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar2(26)`,bindings:[]};if(n==="bigint")return e.autoIncrement?{sql:`${o} number(19) generated by default as identity`,bindings:[]}:{sql:`${o} number(19)`,bindings:[]};if(n==="tinyint")return {sql:`${o} number(3)`,bindings:[]};if(n==="smallint")return {sql:`${o} number(5)`,bindings:[]};if(n==="mediumint")return {sql:`${o} number(7)`,bindings:[]};if(n==="float"||n==="real")return {sql:`${o} binary_float`,bindings:[]};if(n==="double")return {sql:`${o} binary_double`,bindings:[]};if(n==="decimal"||n==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${o} number(${a}, ${l})`,bindings:[]}}else {if(n==="date")return {sql:`${o} date`,bindings:[]};if(n==="year")return {sql:`${o} number(4)`,bindings:[]};if(n==="time")return {sql:`${o} varchar2(8)`,bindings:[]};if(n==="datetime"||n==="timestamp"){let a=e.withTimezone?" with time zone":"",l=typeof e.precision=="number"?`(${e.precision})`:"",u=`${o} timestamp${l}${a}`.trimEnd();return e.autoCreate&&(u+=" default current_timestamp"),{sql:u,bindings:[]}}else {if(n==="boolean"||n==="bool")return {sql:`${o} number(1)`,bindings:[]};if(n==="bytea"||n==="binary"||n==="varbinary"||n==="blob"||n==="longblob"||n==="mediumblob"||n==="tinyblob")return {sql:`${o} blob`,bindings:[]};if(n==="json"||n==="jsonb")return {sql:`${o} clob`,bindings:[]};if(n==="enum"){if(e.enumValues&&e.enumValues.length>0){let a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${o} varchar2(255) check (${o} in (${a}))`,bindings:[]}}return {sql:`${o} varchar2(255)`,bindings:[]}}else {if(n==="integer"||n==="int")return e.autoIncrement?{sql:`${o} number(10) generated by default as identity`,bindings:[]}:{sql:`${o} number(10)`,bindings:[]};if(n==="geometry"||n==="point"||n==="linestring"||n==="polygon"||n==="multipoint")return {sql:`${o} sdo_geometry`,bindings:[]}}}}}let s=e.length?`(${e.length})`:"";return {sql:`${o} ${n}${s}`,bindings:[]}}},nm=new Hs;var zs=class{toSql(t){return {sql:"",bindings:[]}}},sm=new zs;var Ys=class{toSql(t){let e=t,r=new h(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let o=e.constraintName?`constraint "${e.constraintName}" `:"",n=(e.columns??[]).map(s=>r.formatStringColumn("oracledb",q(s))).join(", ");return {sql:`${o}primary key (${n})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let o=e.columns??[],n=e.constraintName?`constraint "${e.constraintName}" `:"",s=o.map(a=>r.formatStringColumn("oracledb",q(a))).join(", ");return e.constraintName?{sql:`${n}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let o=e.defaultValue;return o instanceof $?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"?{sql:"default 1",bindings:[]}:o==="FALSE"?{sql:"default 0",bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let o=e.columns.map(u=>r.formatStringColumn("oracledb",q(u))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("oracledb",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("oracledb",q(u))).join(", "),l=`${e.constraintName?`constraint "${e.constraintName}" `:""}foreign key (${o}) references ${n}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint "${e.constraintName}" `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},im=new Ys;var Gs=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("oracledb",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new N(this.model,"oracledb"),s=[],a=[];for(let m of e.children){let{sql:p,bindings:f}=n.parse([m]);if(m.folder==="constraint"){let y=s.pop()??"",T=p;if(/not null/i.test(T)||/null/i.test(T)||/default/i.test(T)){let b=`${y} ${T}`.trim();b=b.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(b),a.push(...f);continue}s.push(y),s.push(T),a.push(...f);continue}s.push(p),a.push(...f);}for(let m of e.namedConstraints){let{sql:p,bindings:f}=n.parse([m]);s.push(p),a.push(...f);}let l=s.join(", "),u=[];if(e.oracleTablespace&&u.push(`TABLESPACE ${e.oracleTablespace}`),e.oracleCompress?u.push("COMPRESS"):e.oracleCompressFor&&u.push(`COMPRESS FOR ${e.oracleCompressFor}`),e.oracleStorage){let m=Object.entries(e.oracleStorage).map(([p,f])=>`${p.toUpperCase()} ${f}`).join(" ");m&&u.push(`STORAGE (${m})`);}e.oracleLogging===false?u.push("NOLOGGING"):e.oracleLogging===true&&u.push("LOGGING"),e.oracleCache===false?u.push("NOCACHE"):e.oracleCache===true&&u.push("CACHE"),e.oracleInMemory&&u.push("INMEMORY");let d=u.length>0?` ${u.join(" ")}`:"";return {sql:`${o} (${l})${d}`,bindings:a}}},am=new Gs;var Xs=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new h(this.model).getFromForWriteOperations("oracledb",e.fromNode),bindings:[]}}},lm=new Xs;var Zs=class{toSql(t){return {sql:"",bindings:[]}}},um=new Zs;var ei=class{toSql(t){return {sql:`(${t.columns.map(o=>new h(this.model).formatStringColumn("oracledb",o)).join(", ")})`,bindings:[]}}},dm=new ei;var ti=class{toSql(t){let e=t;return {sql:`${new h(this.model).formatStringTable("oracledb",e.table)} cascade constraints`,bindings:[]}}},cm=new ti;var ri=class{toSql(t){return {sql:`-- Oracle does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},mm=new ri;var oi=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new h(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("oracledb",e.table)} "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("oracledb",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new N(this.model,"oracledb").parse(r),s=e.alias&&e.alias.length?` "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},pm=new oi;var ni=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new h(this.model).formatStringColumn("oracledb",e.column),bindings:[]}}},fm=new ni;var si=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,o="",n=[];if(!(e.value instanceof w)&&!Array.isArray(e.value)&&(o=`${new h(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} :${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`:${r+l}`).join(", ");o=`${new h(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},ym=new si;var ii=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("oracledb",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},hm=new ii;var ai=class{toSql(t){return {sql:`"${t.indexName}"`,bindings:[]}}},gm=new ai;var li=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new h(this.model),o=r.getFromForWriteOperations("oracledb",e.fromNode);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n);if(!s.length)return {sql:o,bindings:[]};let a=s.map(m=>r.formatStringColumn("oracledb",m)).join(", "),l=[],u=[],d=e.currParamIndex;for(let m of e.records){let p=s.map(y=>m[y]),f=[];for(let y of p)y instanceof $?f.push(y.rawValue):(l.push(y),f.push(`:${d++}`));u.push(`(${f.join(", ")})`);}let c;if(e.records.length===1)c=`${o} (${a}) values ${u[0]}`;else {e.keyword="insert",d=e.currParamIndex;let m=[];for(let p of e.records){let f=s.map(T=>p[T]),y=[];for(let T of f)T instanceof $?y.push(T.rawValue):y.push(`:${d++}`);m.push(`into ${o} (${a}) values (${y.join(", ")})`);}c=`all ${m.join(" ")} select * from dual`;}return {sql:c,bindings:l}}},bm=new li;var ui=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("oracledb",o),a=r.formatStringColumn("oracledb",n),u=`${r.formatStringTable("oracledb",e.table)} on ${s} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new N(this.model,"oracledb");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let f=p.sql.replace(/^where\s+/i,"");u+=` and ${f}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},Tm=new ui;var di=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.limit]}}},Nm=new di;var Kh={for_update:"for update",for_share:"for update",for_no_key_update:"for update",for_key_share:"for update"},ci=class{toSql(t){let e=t,r=Kh[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},wm=new ci;var mi=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.offset]}}},Sm=new mi;var pi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(this.model),o=e.conflictColumns.map(a=>r.formatStringColumn("oracledb",a)).join(" AND ");if(e.mode==="ignore")return {sql:`on (${o})`,bindings:[]};let n=e.columnsToUpdate.map(a=>`target.${r.formatStringColumn("oracledb",a)} = source.${r.formatStringColumn("oracledb",a)}`).join(", ");return {sql:`on (${o}) when matched then update set ${n}`,bindings:[]}}},Cm=new pi;var fi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new h(this.model).formatStringColumn("oracledb",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},qm=new fi;var yi=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},_m=new yi;var hi=class{toSql(t){return {sql:`SELECT
|
|
200
|
-
constraint_name AS name,
|
|
201
|
-
search_condition AS expression
|
|
202
|
-
FROM user_constraints
|
|
203
|
-
WHERE table_name = '${t.table.toUpperCase()}'
|
|
204
|
-
AND constraint_type = 'C'
|
|
205
|
-
AND constraint_name NOT LIKE 'SYS_%'`,bindings:[]}}},Rm=new hi;var gi=class{toSql(t){return {sql:`SELECT
|
|
206
|
-
c.constraint_name as name,
|
|
207
|
-
cc.column_name as column_name,
|
|
208
|
-
rc.table_name as referenced_table,
|
|
209
|
-
rcc.column_name as referenced_column,
|
|
210
|
-
c.delete_rule as on_delete
|
|
211
|
-
FROM user_constraints c
|
|
212
|
-
JOIN user_cons_columns cc ON c.constraint_name = cc.constraint_name
|
|
213
|
-
JOIN user_constraints rc ON c.r_constraint_name = rc.constraint_name
|
|
214
|
-
JOIN user_cons_columns rcc ON rc.constraint_name = rcc.constraint_name AND cc.position = rcc.position
|
|
215
|
-
WHERE c.constraint_type = 'R'
|
|
216
|
-
AND c.table_name = '${t.table.toUpperCase()}'
|
|
217
|
-
ORDER BY cc.position`,bindings:[]}}},Mm=new gi;var bi=class{toSql(t){return {sql:`SELECT COLUMN_NAME as column_name FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = UPPER('${t.table}') AND OWNER = SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') ORDER BY COLUMN_ID`,bindings:[]}}},xm=new bi;var Ti=class{toSql(t){return {sql:"SELECT TABLE_NAME as table_name FROM ALL_TABLES WHERE OWNER = SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') ORDER BY TABLE_NAME",bindings:[]}}},Am=new Ti;var Ni=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM ALL_CONSTRAINTS WHERE TABLE_NAME = UPPER('${e.table}') AND CONSTRAINT_NAME = UPPER('${e.constraint}') AND CONSTRAINT_TYPE = 'C'`,bindings:[]}}},Om=new Ni;var wi=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = UPPER('${e.table}') AND COLUMN_NAME = UPPER('${e.column}')`,bindings:[]}}},Dm=new wi;var Si=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM ALL_INDEXES WHERE TABLE_NAME = UPPER('${e.table}') AND INDEX_NAME = UPPER('${e.index}')`,bindings:[]}}},$m=new Si;var Ci=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM ALL_CONSTRAINTS WHERE TABLE_NAME = UPPER('${t.table}') AND CONSTRAINT_TYPE = 'P'`,bindings:[]}}},Im=new Ci;var qi=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM ALL_TABLES WHERE TABLE_NAME = UPPER('${t.table}')`,bindings:[]}}},Em=new qi;var _i=class{toSql(t){return {sql:`SELECT
|
|
218
|
-
i.index_name as index_name,
|
|
219
|
-
ic.column_name as column_name,
|
|
220
|
-
CASE WHEN i.uniqueness = 'UNIQUE' THEN 1 ELSE 0 END as is_unique
|
|
221
|
-
FROM user_indexes i
|
|
222
|
-
JOIN user_ind_columns ic ON i.index_name = ic.index_name
|
|
223
|
-
WHERE i.table_name = '${t.table.toUpperCase()}'
|
|
224
|
-
AND i.index_name NOT LIKE 'SYS_%'
|
|
225
|
-
AND NOT EXISTS (
|
|
226
|
-
SELECT 1 FROM user_constraints c
|
|
227
|
-
WHERE c.constraint_type = 'P'
|
|
228
|
-
AND c.index_name = i.index_name
|
|
229
|
-
)
|
|
230
|
-
ORDER BY i.index_name, ic.column_position`,bindings:[]}}},Pm=new _i;var Ri=class{toSql(t){return {sql:`SELECT
|
|
231
|
-
c.constraint_name as name,
|
|
232
|
-
cc.column_name as column_name
|
|
233
|
-
FROM user_constraints c
|
|
234
|
-
JOIN user_cons_columns cc ON c.constraint_name = cc.constraint_name
|
|
235
|
-
WHERE c.constraint_type = 'P'
|
|
236
|
-
AND c.table_name = '${t.table.toUpperCase()}'
|
|
237
|
-
ORDER BY cc.position`,bindings:[]}}},vm=new Ri;var Mi=class{toSql(t){return {sql:`SELECT
|
|
238
|
-
column_name,
|
|
239
|
-
data_type,
|
|
240
|
-
CASE WHEN nullable = 'Y' THEN 'YES' ELSE 'NO' END as is_nullable,
|
|
241
|
-
data_default as column_default,
|
|
242
|
-
char_length as char_length,
|
|
243
|
-
data_precision as numeric_precision,
|
|
244
|
-
data_scale as numeric_scale
|
|
245
|
-
FROM user_tab_columns
|
|
246
|
-
WHERE table_name = '${t.table.toUpperCase()}'
|
|
247
|
-
ORDER BY column_id`,bindings:[]}}},km=new Mi;var xi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new h(this.model).formatStringColumn("oracledb",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new N(this.model,"oracledb").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new N(this.model,"oracledb").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new h(this.model).formatStringColumn("oracledb",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new N(this.model,"oracledb").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},Bm=new xi;var Ai=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new h(this.model).formatStringColumn("oracledb",e.column),o=de.from(e.jsonPath),n="";switch(e.jsonOperator){case "extract":n=this.buildExtractSql(r,o);break;case "extract_text":n=this.buildExtractTextSql(r,o);break;case "array_length":n=this.buildArrayLengthSql(r,o);break;case "object_keys":n=this.buildObjectKeysSql(r,o);break;case "raw":n=e.column;break}return {sql:this.formatWithAlias(n,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toOracle();return r==="$"?t:`JSON_VALUE(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toOracle();return r==="$"?`JSON_QUERY(${t}, '$.size()')`:`JSON_QUERY(${t}, '${r}.size()')`}buildObjectKeysSql(t,e){let r=e.toOracle();return r==="$"?`JSON_QUERY(${t}, '$.keyNames()')`:`JSON_QUERY(${t}, '${r}.keyNames()')`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},Qm=new Ai;var Oi=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new h(this.model).getFromForWriteOperations("oracledb",e.fromNode),bindings:[]}}},Km=new Oi;var Di=class{toSql(t){let e=t,r=new N(this.model,"oracledb"),o=Array.isArray(e.query)?e.query:[e.query],n=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(o.filter(Boolean),e.currParamIndex);return {sql:n.sql,bindings:n.bindings}}},Lm=new Di;var $i=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new h(this.model),o=r.getFromForWriteOperations("oracledb",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=e.currParamIndex,s=[],a=e.columns.map((l,u)=>{let d=e.values[u];return d instanceof $?`${r.formatStringColumn("oracledb",l)} = ${d.rawValue}`:(s.push(d),`${r.formatStringColumn("oracledb",l)} = :${n++}`)}).join(", ");return {sql:`${o} set ${a}`,bindings:s}}},Wm=new $i;var Ii=class{toSql(t){let e=t;if(e.isRawValue){let s=e.value??[];if(s.length===0)return {sql:e.column,bindings:[]};let a=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`:${a++}`),bindings:s}}let r=e.currParamIndex,o="",n=[];if(this.isRawNode(e.value)){let s=this.formatRawIdentifierIfPossible(e.value.rawValue);o=`${new h(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} ${s}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between"){let s=`:${r} AND :${r+1}`;o=`${new h(this.model).formatStringColumn("oracledb",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`:${r+l}`).join(", ");o=`${new h(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new h(this.model).formatStringColumn("oracledb",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new h(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} :${r}`,n=[e.value];}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new h(this.model).formatStringColumn("oracledb",t):t}},jm=new Ii;var Ei=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new N(this.model,"oracledb"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},Fm=new Ei;var Pi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new h(this.model).formatStringColumn("oracledb",e.column);switch(e.jsonOperator){case "=":r=`JSON_EQUAL(${n}, ?)`,o=[JSON.stringify(e.value)];break;case "contains":r=`JSON_EXISTS(${n}, '$?(@ == $val)' PASSING ? AS "val")`,o=[JSON.stringify(e.value)];break;case "not contains":r=`NOT JSON_EXISTS(${n}, '$?(@ == $val)' PASSING ? AS "val")`,o=[JSON.stringify(e.value)];break;case "raw":r=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:o}}},Um=new Pi;var vi=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new N(this.model,"oracledb"),{sql:r,bindings:o}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}handleObjectSubquery(t){let e=new N(this.model,"oracledb"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},Vm=new vi;var ki=class{toSql(t){let e=t,r=new N(this.model,"oracledb"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" /*+ MATERIALIZE */":"";return {sql:`${e.alias} as (${s}${n.sql})`,bindings:n.bindings}}},Jm=new ki;var Bi=class{toSql(t){let e=t,r=new N(this.model,"postgres"),{sql:o}=r.parse([e.column]),n=e.inlineConstraints;if(n&&n.length){let s=[];for(let a of n){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(o+=` ${s.join(" ")}`);}return {sql:`add column ${o}`,bindings:[]}}},Hm=new Bi;var Qi=class{toSql(t){let e=t,r=new N(this.model,"postgres"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},zm=new Qi;var Ki=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},Ym=new Ki;var Li=class{toSql(t){let e=t,r=new N(this.model,"postgres"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" ");s=s.replace(/\s*check\s*\(.*\)\s*$/i,"").trim();let a=`alter column "${e.column}" type ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?`alter column "${e.column}" drop not null`:`alter column "${e.column}" set not null`;a+=`, ${l}`;}if(e.options.dropDefault)a+=`, alter column "${e.column}" drop default`;else if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=`, alter column "${e.column}" set default ${l}`;}return e.options.unique!==void 0&&(e.options.unique?a+=`, add constraint "unique_${e.column}" unique ("${e.column}")`:a+=`, drop constraint "unique_${e.column}"`),{sql:a,bindings:[]}}},Gm=new Li;var Wi=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new N(this.model,"postgres"),s=[],a=[];for(let c of e.children){let{sql:m,bindings:p}=n.parse([c]);s.push(m.trim()),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifExists?"if exists ":""}${o} ${l}`,bindings:a}}},Xm=new Wi;var ji=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Zm=new ji;var Fi=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},ep=new Fi;var Ui=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},tp=new Ui;var Vi=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},rp=new Vi;var Ji=class{toSql(t){return {sql:"",bindings:[]}}},op=new Ji;var Hi=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},np=new Hi;var zi=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},sp=new zi;var Yi=class{toSql(t){let e=t,r;return e.defaultValue instanceof $?r=e.defaultValue.rawValue:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},ip=new Yi;var Gi=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},ap=new Gi;var Xi=class{toSql(t){return {sql:"",bindings:[]}}},lp=new Xi;var Zi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new h(this.model).formatStringColumn("postgres",q(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let a=e.length??1;return {sql:`${o} char(${a})`,bindings:[]}}else if(n==="varchar"){let a=e.length??255;return {sql:`${o} varchar(${a})`,bindings:[]}}else {if(n==="text"||n==="longtext"||n==="mediumtext"||n==="tinytext")return {sql:`${o} text`,bindings:[]};if(n==="uuid")return {sql:`${o} uuid`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar(26)`,bindings:[]};if(n==="bigint")return e.autoIncrement?{sql:`${o} bigserial`,bindings:[]}:{sql:`${o} bigint`,bindings:[]};if(n==="tinyint")return {sql:`${o} smallint`,bindings:[]};if(n==="smallint")return {sql:`${o} smallint`,bindings:[]};if(n==="mediumint")return {sql:`${o} integer`,bindings:[]};if(n==="float"||n==="real")return {sql:`${o} real`,bindings:[]};if(n==="double")return {sql:`${o} double precision`,bindings:[]};if(n==="decimal"||n==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${o} numeric(${a}, ${l})`,bindings:[]}}else {if(n==="date")return {sql:`${o} date`,bindings:[]};if(n==="year")return {sql:`${o} smallint`,bindings:[]};if(n==="time"){let a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} time${a}`,bindings:[]}}else if(n==="datetime"||n==="timestamp"){let a=e.withTimezone?" with time zone":" without time zone",l=typeof e.precision=="number"?`(${e.precision})`:"",u=`${o} timestamp${l}${a}`.trimEnd();return e.autoCreate&&(u+=" default current_timestamp"),{sql:u,bindings:[]}}else {if(n==="boolean"||n==="bool")return {sql:`${o} boolean`,bindings:[]};if(n==="bytea"||n==="binary"||n==="varbinary"||n==="blob"||n==="longblob"||n==="mediumblob"||n==="tinyblob")return {sql:`${o} bytea`,bindings:[]};if(n==="json")return {sql:`${o} json`,bindings:[]};if(n==="jsonb")return {sql:`${o} jsonb`,bindings:[]};if(n==="enum"){if(e.enumValues&&e.enumValues.length>0){let a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${o} text check (${o} in (${a}))`,bindings:[]}}return {sql:`${o} text`,bindings:[]}}else {if(n==="integer"||n==="int")return e.autoIncrement?{sql:`${o} serial`,bindings:[]}:{sql:`${o} integer`,bindings:[]};if(n==="geometry")return {sql:`${o} geometry`,bindings:[]};if(n==="point")return {sql:`${o} point`,bindings:[]};if(n==="linestring")return {sql:`${o} linestring`,bindings:[]};if(n==="polygon")return {sql:`${o} polygon`,bindings:[]};if(n==="multipoint")return {sql:`${o} multipoint`,bindings:[]}}}}}let s=e.length?`(${e.length})`:"";return {sql:`${o} ${n}${s}`,bindings:[]}}},up=new Zi;var ea=class{toSql(t){return {sql:"",bindings:[]}}},dp=new ea;var ta=class{toSql(t){let e=t,r=new h(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let o=e.constraintName?`constraint "${e.constraintName}" `:"",n=(e.columns??[]).map(s=>r.formatStringColumn("postgres",q(s))).join(", ");return {sql:`${o}primary key (${n})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let o=e.columns??[],n=e.constraintName?`constraint "${e.constraintName}" `:"",s=o.map(a=>r.formatStringColumn("postgres",q(a))).join(", ");return e.constraintName?{sql:`${n}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let o=e.defaultValue;return o instanceof $?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let o=e.columns.map(u=>r.formatStringColumn("postgres",q(u))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("postgres",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("postgres",q(u))).join(", "),l=`${e.constraintName?`constraint "${e.constraintName}" `:""}foreign key (${o}) references ${n}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint "${e.constraintName}" `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},cp=new ta;var ra=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new N(this.model,"postgres"),s=[],a=[];for(let b of e.children){let{sql:C,bindings:R}=n.parse([b]);if(b.folder==="constraint"){let _=s.pop()??"",D=C;if(/not null/i.test(D)||/null/i.test(D)||/default/i.test(D)){let A=`${_} ${D}`.trim();A=A.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(A),a.push(...R);continue}s.push(_),s.push(D),a.push(...R);continue}s.push(C),a.push(...R);}for(let b of e.namedConstraints){let{sql:C,bindings:R}=n.parse([b]);s.push(C),a.push(...R);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.temporary&&d.push("TEMPORARY"),e.unlogged&&d.push("UNLOGGED");let c=[];if(e.postgresWith){let b=Object.entries(e.postgresWith).map(([C,R])=>`${C}=${R}`).join(", ");b&&c.push(`WITH (${b})`);}let m=e.tablespace?`TABLESPACE ${e.tablespace}`:"",p=d.length>0?`${d.join(" ")} `:"",f=c.length>0?` ${c.join(" ")}`:"",y=m?` ${m}`:"";return {sql:`${u}${p}${o} (${l})${f}${y}`,bindings:a}}},mp=new ra;var oa=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode.table=="string")return {sql:e.fromNode.table,bindings:[]};let r=new h(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);if(e.returning&&e.returning.length){let s=e.returning.map(a=>r.formatStringColumn("postgres",a)).join(", ");n+=` returning ${s}`;}return {sql:n,bindings:[]}}},pp=new oa;var na=class{toSql(t){return {sql:"",bindings:[]}}},fp=new na;var sa=class{toSql(t){return {sql:`(${t.columns.map(o=>new h(this.model).formatStringColumn("postgres",o)).join(", ")})`,bindings:[]}}},yp=new sa;var ia=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},hp=new ia;var aa=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},gp=new aa;var la=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new h(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("postgres",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("postgres",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new N(this.model,"postgres").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},bp=new la;var ua=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new h(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},Tp=new ua;var da=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,o="",n=[];if(!(e.value instanceof w)&&!Array.isArray(e.value)&&(o=`${new h(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new h(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Np=new da;var ca=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("postgres",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},wp=new ca;var ma=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},Sp=new ma;var pa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new h(this.model),o=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n);if(!s.length)return {sql:o,bindings:[]};let a=s.map(m=>r.formatStringColumn("postgres",m)).join(", "),l=[],u=[],d=e.currParamIndex;for(let m of e.records){let p=s.map(y=>m[y]),f=[];for(let y=0;y<s.length;y++){let T=p[y];T instanceof $?f.push(T.rawValue):(l.push(T),f.push(`$${d++}${this.formatTypeCast(T)}`));}u.push(`(${f.join(", ")})`);}let c=`${o} (${a}) values ${u.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(p=>r.formatStringColumn("postgres",p)).join(", ");c+=` returning ${m}`;}else c+=" returning *";return {sql:c,bindings:l}}formatTypeCast(t){let e="";return Buffer.isBuffer(t)?e="::bytea":Array.isArray(t)?e="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?e="::jsonb":typeof t=="boolean"?e="::boolean":typeof t=="bigint"&&(e="::bigint"),e}},Cp=new pa;var fa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("postgres",o),a=r.formatStringColumn("postgres",n),u=`${r.formatStringTable("postgres",e.table)} on ${s} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new N(this.model,"postgres");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let f=p.sql.replace(/^where\s+/i,"");u+=` and ${f}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},qp=new fa;var ya=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},_p=new ya;var Lh={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},ha=class{toSql(t){let e=t,r=Lh[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},Rp=new ha;var ga=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},Mp=new ga;var ba=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(this.model),o=e.conflictColumns.map(a=>r.formatStringColumnBare("postgres",a)).join(", ");if(e.mode==="ignore"){let a=`on conflict (${o}) do nothing`;if(e.returning&&e.returning.length){let l=e.returning.map(u=>r.formatStringColumn("postgres",u)).join(", ");a+=` returning ${l}`;}return {sql:a,bindings:[]}}let n=e.columnsToUpdate.map(a=>`${r.formatStringColumnBare("postgres",a)} = excluded.${r.formatStringColumnBare("postgres",a)}`).join(", "),s=`on conflict (${o}) do update set ${n}`;if(e.returning&&e.returning.length){let a=e.returning.map(l=>r.formatStringColumn("postgres",l)).join(", ");s+=` returning ${a}`;}return {sql:s,bindings:[]}}},xp=new ba;var Ta=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new h(this.model).formatStringColumn("postgres",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Ap=new Ta;var Na=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Op=new Na;var wa=class{toSql(t){return {sql:`SELECT
|
|
190
|
+
ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},cc=new Js;var Hs=class{toSql(t){return {sql:`SELECT COLUMN_NAME AS column_name, DATA_TYPE AS data_type, COLUMN_TYPE AS column_type, IS_NULLABLE AS is_nullable, COLUMN_DEFAULT AS column_default, CHARACTER_MAXIMUM_LENGTH AS char_length, NUMERIC_PRECISION AS numeric_precision, NUMERIC_SCALE AS numeric_scale FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${t.table}' ORDER BY ORDINAL_POSITION`,bindings:[]}}},mc=new Hs;var zs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new y(this.model).formatStringColumn("mysql",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"mysql").parse(t),i=`(${o.sql})`;return e&&(i=`${e.toLowerCase()}${i}`),{sql:i,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"mysql").parse([t]),i=`(${o.sql})`;return e&&(i=`${e.toLowerCase()}${i}`),{sql:i,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new y(this.model).formatStringColumn("mysql",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"mysql").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},pc=new zs;var Gs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("mysql",e.column),n=qe.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMysql();return r==="$"?t:`JSON_EXTRACT(${t}, '${r}')`}buildExtractTextSql(t,e){let r=e.toMysql();return r==="$"?`JSON_UNQUOTE(${t})`:`JSON_UNQUOTE(JSON_EXTRACT(${t}, '${r}'))`}buildArrayLengthSql(t,e){let r=e.toMysql();return r==="$"?`JSON_LENGTH(${t})`:`JSON_LENGTH(${t}, '${r}')`}buildObjectKeysSql(t,e){let r=e.toMysql();return r==="$"?`JSON_KEYS(${t})`:`JSON_KEYS(${t}, '${r}')`}formatWithAlias(t,e){return e&&e.length>0?`${t} as \`${e}\``:t}},fc=new Gs;var Ys=class{toSql(t){let e=t,r=this.renderToken(e.fn);if(r!==void 0)return {sql:r,bindings:[]};let n=e.args.map(o=>o instanceof A?o.rawValue:o instanceof k?this.toSql(o).sql:typeof o=="number"?String(o):`'${o}'`).join(", ");return {sql:`${e.fn}(${n})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":throw new Error("hysteria-orm: $uuid has no mysql/mariadb default \u2014 uuid columns must be generated in JS");case "$now":return "now()";case "$currentTimestamp":return "current_timestamp";default:return}}},yc=new Ys;var Zs=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},hc=new Zs;var Xs=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},gc=new Xs;var ei=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],i=e.columns.map((l,u)=>{let d=e.values[u];if(d instanceof A)return `${r.formatStringColumn("mysql",l)} = ${d.rawValue}`;if(d instanceof k){let m=new b(this.model,"mysql").parse([d],1,true).sql;return `${r.formatStringColumn("mysql",l)} = ${m}`}return o.push(d),`${r.formatStringColumn("mysql",l)} = ?`}).join(", ");return {sql:`${n} set ${i}`,bindings:o}}},bc=new ei;var ti=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",n=[];if(this.isRawNode(e.value)){let o=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${o}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,n=e.value;else {let o=e.value.map(i=>"?").join(", ");r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${o})`,n=e.value;}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ?`,n=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("mysql",t):t}},Tc=new ti;var ri=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"mysql"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},wc=new ri;var ni=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new y(this.model).formatStringColumn("mysql",e.column);switch(e.jsonOperator){case "=":r=`${o} = CAST(? AS JSON)`,n=[JSON.stringify(e.value)];break;case "contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},Sc=new ni;var oi=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"mysql"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"mysql"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},Nc=new oi;var si=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex);return {sql:`${e.alias} as (${o.sql})`,bindings:o.bindings}}},qc=new si;var ii=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length){let i=[];for(let a of o){let{sql:l}=r.parse([a]);i.push(l);}i.length&&(n+=` ${i.join(" ")}`);}return {sql:`add column ${n}`,bindings:[]}}},Cc=new ii;var ai=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Rc=new ai;var li=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`"${n}"`).join(", ")})`,bindings:[]}}},Mc=new li;var ui=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),i=o.join(" ");i=i.replace(/\s*check\s*\(.*\)\s*$/i,"").trim(),e.newType.dataType==="uuid"&&(i=i.replace(/\s+default\s+.+$/i,"").trim());let a=`alter column "${e.column}" type ${i}`;if(e.options.nullable!==void 0){let l=e.options.nullable?`alter column "${e.column}" drop not null`:`alter column "${e.column}" set not null`;a+=`, ${l}`;}if(e.options.dropDefault)a+=`, alter column "${e.column}" drop default`;else if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=`, alter column "${e.column}" set default ${l}`;}return e.options.unique!==void 0&&(e.options.unique?a+=`, add constraint "unique_${e.column}" unique ("${e.column}")`:a+=`, drop constraint "unique_${e.column}"`),{sql:a,bindings:[]}}},_c=new ui;var di=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"postgres"),i=[],a=[];for(let m of e.children){let{sql:c,bindings:p}=o.parse([m]);i.push(c.trim()),a.push(...p);}let l=i.join(", ");return {sql:`${e.ifExists?"if exists ":""}${n} ${l}`,bindings:a}}},xc=new di;var ci=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Oc=new ci;var mi=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},Ac=new mi;var pi=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Dc=new pi;var fi=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},$c=new fi;var yi=class{toSql(t){return {sql:"",bindings:[]}}},Pc=new yi;var hi=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},vc=new hi;var gi=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Ic=new gi;var bi=class{toSql(t){let e=t,r;return e.defaultValue instanceof A?r=e.defaultValue.rawValue:e.defaultValue instanceof k?r=new b(this.model,"postgres").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},Ec=new bi;var Ti=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},kc=new Ti;var wi=class{toSql(t){return {sql:"",bindings:[]}}},Bc=new wi;var Si=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new y(this.model).formatStringColumn("postgres",C(e.column)),o=e.dataType.toLowerCase();if(o==="char"){let a=e.length??1;return {sql:`${n} char(${a})`,bindings:[]}}else if(o==="varchar"){let a=e.length??255;return {sql:`${n} varchar(${a})`,bindings:[]}}else {if(o==="text"||o==="longtext"||o==="mediumtext"||o==="tinytext")return {sql:`${n} text`,bindings:[]};if(o==="uuid"){let a=e.isForeignKey?"":" default gen_random_uuid()";return {sql:`${n} uuid${a}`,bindings:[]}}else {if(o==="ulid")return {sql:`${n} varchar(26)`,bindings:[]};if(o==="bigint")return e.autoIncrement?{sql:`${n} bigserial`,bindings:[]}:{sql:`${n} bigint`,bindings:[]};if(o==="tinyint")return {sql:`${n} smallint`,bindings:[]};if(o==="smallint")return {sql:`${n} smallint`,bindings:[]};if(o==="mediumint")return {sql:`${n} integer`,bindings:[]};if(o==="float"||o==="real")return {sql:`${n} real`,bindings:[]};if(o==="double")return {sql:`${n} double precision`,bindings:[]};if(o==="decimal"||o==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${n} numeric(${a}, ${l})`,bindings:[]}}else {if(o==="date")return {sql:`${n} date`,bindings:[]};if(o==="year")return {sql:`${n} smallint`,bindings:[]};if(o==="time"){let a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${n} time${a}`,bindings:[]}}else if(o==="datetime"||o==="timestamp"){let a=e.withTimezone?" with time zone":" without time zone",l=typeof e.precision=="number"?`(${e.precision})`:"",u=`${n} timestamp${l}${a}`.trimEnd();return e.autoCreate&&(u+=" default current_timestamp"),{sql:u,bindings:[]}}else {if(o==="boolean"||o==="bool")return {sql:`${n} boolean`,bindings:[]};if(o==="bytea"||o==="binary"||o==="varbinary"||o==="blob"||o==="longblob"||o==="mediumblob"||o==="tinyblob")return {sql:`${n} bytea`,bindings:[]};if(o==="json")return {sql:`${n} json`,bindings:[]};if(o==="jsonb")return {sql:`${n} jsonb`,bindings:[]};if(o==="enum"){if(e.enumValues&&e.enumValues.length>0){let a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${n} text check (${n} in (${a}))`,bindings:[]}}return {sql:`${n} text`,bindings:[]}}else {if(o==="integer"||o==="int")return e.autoIncrement?{sql:`${n} serial`,bindings:[]}:{sql:`${n} integer`,bindings:[]};if(o==="geometry")return {sql:`${n} geometry`,bindings:[]};if(o==="point")return {sql:`${n} point`,bindings:[]};if(o==="linestring")return {sql:`${n} linestring`,bindings:[]};if(o==="polygon")return {sql:`${n} polygon`,bindings:[]};if(o==="multipoint")return {sql:`${n} multipoint`,bindings:[]}}}}}}let i=e.length?`(${e.length})`:"";return {sql:`${n} ${o}${i}`,bindings:[]}}},Qc=new Si;var Ni=class{toSql(t){return {sql:"",bindings:[]}}},Kc=new Ni;var qi=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let n=e.constraintName?`constraint "${e.constraintName}" `:"",o=(e.columns??[]).map(i=>r.formatStringColumn("postgres",C(i))).join(", ");return {sql:`${n}primary key (${o})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns??[],o=e.constraintName?`constraint "${e.constraintName}" `:"",i=n.map(a=>r.formatStringColumn("postgres",C(a))).join(", ");return e.constraintName?{sql:`${o}unique (${i})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let n=e.defaultValue;return n instanceof A?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof k?{sql:`default ${new b(this.model,"postgres").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let n=e.columns.map(u=>r.formatStringColumn("postgres",C(u))).join(", ");if(!e.references)return {sql:"",bindings:[]};let o=r.formatStringTable("postgres",e.references.table),i=e.references.columns.map(u=>r.formatStringColumn("postgres",C(u))).join(", "),l=`${e.constraintName?`constraint "${e.constraintName}" `:""}foreign key (${n}) references ${o}(${i})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint "${e.constraintName}" `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Lc=new qi;var Ci=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"postgres"),i=[],a=[];for(let N of e.children){let{sql:w,bindings:R}=o.parse([N]);if(N.folder==="constraint"){let _=i.pop()??"",E=w;if(/not null/i.test(E)||/null/i.test(E)||/default/i.test(E)){let O=`${_} ${E}`.trim();O=O.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),i.push(O),a.push(...R);continue}i.push(_),i.push(E),a.push(...R);continue}i.push(w),a.push(...R);}for(let N of e.namedConstraints){let{sql:w,bindings:R}=o.parse([N]);i.push(w),a.push(...R);}let l=i.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.temporary&&d.push("TEMPORARY"),e.unlogged&&d.push("UNLOGGED");let m=[];if(e.postgresWith){let N=Object.entries(e.postgresWith).map(([w,R])=>`${w}=${R}`).join(", ");N&&m.push(`WITH (${N})`);}let c=e.tablespace?`TABLESPACE ${e.tablespace}`:"",p=d.length>0?`${d.join(" ")} `:"",h=m.length>0?` ${m.join(" ")}`:"",f=c?` ${c}`:"";return {sql:`${u}${p}${n} (${l})${h}${f}`,bindings:a}}},jc=new Ci;var Ri=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},Wc=new Ri;var Mi=class{toSql(t){return {sql:"",bindings:[]}}},Fc=new Mi;var _i=class{toSql(t){return {sql:`(${t.columns.map(n=>new y(this.model).formatStringColumn("postgres",n)).join(", ")})`,bindings:[]}}},Uc=new _i;var xi=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Vc=new xi;var Oi=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},Jc=new Oi;var Ai=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("postgres",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("postgres",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"postgres").parse(r),i=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${o.sql})${i}`,bindings:o.bindings}}},Hc=new Ai;var Di=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},zc=new Di;var $i=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(!(e.value instanceof S)&&!Array.isArray(e.value)&&(n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,o=[e.value]),Array.isArray(e.value)){let i=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${i})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},Gc=new $i;var Pi=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table),o=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${n} (${o})`,bindings:[]}}},Yc=new Pi;var vi=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},Zc=new vi;var Ii=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],i=Object.keys(o);if(!i.length)return {sql:n,bindings:[]};let a=i.map(c=>r.formatStringColumn("postgres",c)).join(", "),l=[],u=[],d=e.currParamIndex;for(let c of e.records){let p=i.map(f=>c[f]),h=[];for(let f=0;f<i.length;f++){let T=p[f];T instanceof A?h.push(T.rawValue):(l.push(T),h.push(`$${d++}${this.formatTypeCast(T)}`));}u.push(`(${h.join(", ")})`);}let m=`${n} (${a}) values ${u.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let c=e.returning.map(p=>r.formatStringColumn("postgres",p)).join(", ");m+=` returning ${c}`;}else m+=" returning *";return {sql:m,bindings:l}}formatTypeCast(t){let e="";return Buffer.isBuffer(t)?e="::bytea":Array.isArray(t)?e="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?e="::jsonb":typeof t=="boolean"?e="::boolean":typeof t=="bigint"&&(e="::bigint"),e}},Xc=new Ii;var Ei=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let i=r.formatStringColumn("postgres",n),a=r.formatStringColumn("postgres",o),u=`${r.formatStringTable("postgres",e.table)} on ${i} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let m=new b(this.model,"postgres");for(let c of e.additionalConditions){let p=m.parse([c]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},em=new Ei;var ki=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},tm=new ki;var Oy={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},Bi=class{toSql(t){let e=t,r=Oy[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},rm=new Bi;var Qi=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},nm=new Qi;var Ki=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.conflictColumns.map(a=>r.formatStringColumnBare("postgres",a)).join(", ");if(e.mode==="ignore"){let a=`on conflict (${n}) do nothing`;if(e.returning&&e.returning.length){let l=e.returning.map(u=>r.formatStringColumn("postgres",u)).join(", ");a+=` returning ${l}`;}return {sql:a,bindings:[]}}let o=e.columnsToUpdate.map(a=>`${r.formatStringColumnBare("postgres",a)} = excluded.${r.formatStringColumnBare("postgres",a)}`).join(", "),i=`on conflict (${n}) do update set ${o}`;if(e.returning&&e.returning.length){let a=e.returning.map(l=>r.formatStringColumn("postgres",l)).join(", ");i+=` returning ${a}`;}return {sql:i,bindings:[]}}},om=new Ki;var Li=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("postgres",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},sm=new Li;var ji=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},im=new ji;var Wi=class{toSql(t){let e=t,r=new y(this.model);return {sql:`returning ${!e.columns.length||e.columns.includes("*")?"*":e.columns.map(o=>r.formatStringColumn("postgres",o)).join(", ")}`,bindings:[]}}},am=new Wi;var Fi=class{toSql(t){return {sql:`SELECT
|
|
248
191
|
con.conname AS name,
|
|
249
192
|
pg_get_constraintdef(con.oid) AS expression
|
|
250
193
|
FROM pg_constraint con
|
|
@@ -252,7 +195,7 @@ ORDER BY column_id`,bindings:[]}}},km=new Mi;var xi=class{toSql(t){let e=t;if(e.
|
|
|
252
195
|
JOIN pg_namespace nsp ON nsp.oid = rel.relnamespace
|
|
253
196
|
WHERE con.contype = 'c'
|
|
254
197
|
AND rel.relname = '${t.table}'
|
|
255
|
-
AND nsp.nspname = current_schema()`,bindings:[]}}},
|
|
198
|
+
AND nsp.nspname = current_schema()`,bindings:[]}}},lm=new Fi;var Ui=class{toSql(t){return {sql:`SELECT
|
|
256
199
|
tc.constraint_name as name,
|
|
257
200
|
kcu.column_name as column_name,
|
|
258
201
|
ccu.table_name as referenced_table,
|
|
@@ -267,7 +210,7 @@ ORDER BY column_id`,bindings:[]}}},km=new Mi;var xi=class{toSql(t){let e=t;if(e.
|
|
|
267
210
|
JOIN information_schema.referential_constraints rc
|
|
268
211
|
ON rc.constraint_name = tc.constraint_name AND rc.constraint_schema = tc.table_schema
|
|
269
212
|
WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
|
|
270
|
-
ORDER BY kcu.ordinal_position`,bindings:[]}}}
|
|
213
|
+
ORDER BY kcu.ordinal_position`,bindings:[]}}},um=new Ui;var Vi=class{toSql(t){return {sql:`SELECT column_name FROM information_schema.columns WHERE table_schema = current_schema() AND table_name = '${t.table}' ORDER BY ordinal_position`,bindings:[]}}},dm=new Vi;var Ji=class{toSql(t){return {sql:"SELECT table_name AS name FROM information_schema.tables WHERE table_schema = current_schema() AND table_type = 'BASE TABLE' ORDER BY table_name",bindings:[]}}},cm=new Ji;var Hi=class{toSql(t){let e=t;return {sql:`SELECT EXISTS (SELECT FROM information_schema.check_constraints cc INNER JOIN information_schema.table_constraints tc ON cc.constraint_name = tc.constraint_name WHERE tc.table_schema = current_schema() AND tc.table_name = '${e.table}' AND cc.constraint_name = '${e.constraint}') as exists`,bindings:[]}}},mm=new Hi;var zi=class{toSql(t){let e=t;return {sql:`SELECT EXISTS (SELECT FROM information_schema.columns WHERE table_schema = current_schema() AND table_name = '${e.table}' AND column_name = '${e.column}') as exists`,bindings:[]}}},pm=new zi;var Gi=class{toSql(t){let e=t;return {sql:`SELECT EXISTS (SELECT FROM pg_indexes WHERE tablename = '${e.table}' AND indexname = '${e.index}') as exists`,bindings:[]}}},fm=new Gi;var Yi=class{toSql(t){return {sql:`SELECT EXISTS (SELECT FROM information_schema.table_constraints WHERE table_schema = current_schema() AND table_name = '${t.table}' AND constraint_type = 'PRIMARY KEY') as exists`,bindings:[]}}},ym=new Yi;var Zi=class{toSql(t){return {sql:`SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_schema = current_schema() AND table_name = '${t.table}') as exists`,bindings:[]}}},hm=new Zi;var Xi=class{toSql(t){return {sql:`SELECT
|
|
271
214
|
i.relname as index_name,
|
|
272
215
|
a.attname as column_name,
|
|
273
216
|
ix.indisunique as is_unique
|
|
@@ -286,14 +229,14 @@ ORDER BY column_id`,bindings:[]}}},km=new Mi;var xi=class{toSql(t){let e=t;if(e.
|
|
|
286
229
|
AND t.relname = '${t.table}'
|
|
287
230
|
AND t.relnamespace = n.oid
|
|
288
231
|
AND n.nspname = current_schema()
|
|
289
|
-
AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},
|
|
232
|
+
AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},gm=new Xi;var ea=class{toSql(t){return {sql:`SELECT
|
|
290
233
|
tc.constraint_name as name,
|
|
291
234
|
kcu.column_name as column_name
|
|
292
235
|
FROM information_schema.table_constraints tc
|
|
293
236
|
JOIN information_schema.key_column_usage kcu
|
|
294
237
|
ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
|
|
295
238
|
WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
|
|
296
|
-
ORDER BY kcu.ordinal_position`,bindings:[]}}},
|
|
239
|
+
ORDER BY kcu.ordinal_position`,bindings:[]}}},bm=new ea;var ta=class{toSql(t){return {sql:`SELECT column_name,
|
|
297
240
|
data_type,
|
|
298
241
|
is_nullable,
|
|
299
242
|
column_default,
|
|
@@ -303,13 +246,13 @@ ORDER BY column_id`,bindings:[]}}},km=new Mi;var xi=class{toSql(t){let e=t;if(e.
|
|
|
303
246
|
FROM information_schema.columns
|
|
304
247
|
WHERE table_schema = current_schema()
|
|
305
248
|
AND table_name = '${t.table}'
|
|
306
|
-
ORDER BY ordinal_position`,bindings:[]}}},Wp=new $a;var Ia=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new h(this.model).formatStringColumn("postgres",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new N(this.model,"postgres").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new N(this.model,"postgres").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new h(this.model).formatStringColumn("postgres",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new N(this.model,"postgres").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,o)=>{let n=t.slice(0,o),s=n.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=n.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},jp=new Ia;var Ea=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new h(this.model).formatStringColumn("postgres",e.column),o=de.from(e.jsonPath),n="";switch(e.jsonOperator){case "extract":n=this.buildExtractSql(r,o);break;case "extract_text":n=this.buildExtractTextSql(r,o);break;case "array_length":n=this.buildArrayLengthSql(r,o);break;case "object_keys":n=this.buildObjectKeysSql(r,o);break;case "raw":n=e.column;break}return {sql:this.formatWithAlias(n,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toPostgres(false);return r?`${t}${r}`:t}buildExtractTextSql(t,e){if(e.isEmpty())return `${t}::text`;let r=e.toPostgres(true);return `${t}${r}`}buildArrayLengthSql(t,e){return `jsonb_array_length(${this.buildExtractSql(t,e)})`}buildObjectKeysSql(t,e){return `jsonb_object_keys(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},Fp=new Ea;var Pa=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new h(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},Up=new Pa;var va=class{toSql(t){let e=t,r=new N(this.model,"postgres"),o=Array.isArray(e.query)?e.query:[e.query],n=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(o.filter(Boolean),e.currParamIndex);return {sql:n.sql,bindings:n.bindings}}},Vp=new va;var ka=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new h(this.model),o=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=0,s=[],a=e.columns.map((u,d)=>{let c=e.currParamIndex+d-n,m=e.values[d];return m instanceof $?(n++,`${r.formatStringColumn("postgres",u)} = ${m.rawValue}`):(s.push(m),`${r.formatStringColumn("postgres",u)} = $${c}${this.formatTypeCast(m)}`)}).join(", "),l=`${o} set ${a}`;if(e.returning&&e.returning.length){let u=e.returning.map(d=>r.formatStringColumn("postgres",d)).join(", ");l+=` returning ${u}`;}return {sql:l,bindings:s}}formatTypeCast(t){let e="";return Buffer.isBuffer(t)?e="::bytea":Array.isArray(t)?e="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?e="::jsonb":typeof t=="boolean"?e="::boolean":typeof t=="bigint"&&(e="::bigint"),e}},Jp=new ka;var Ba=class{toSql(t){let e=t;if(e.isRawValue){let s=e.value??[];if(s.length===0)return {sql:e.column,bindings:[]};let a=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`$${a++}`),bindings:s}}let r=e.currParamIndex,o="",n=[];if(this.isRawNode(e.value)){let s=this.formatRawIdentifierIfPossible(e.value.rawValue);o=`${new h(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between"){let s=`$${r} AND $${r+1}`;o=`${new h(this.model).formatStringColumn("postgres",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new h(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new h(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new h(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,n=[e.value];}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new h(this.model).formatStringColumn("postgres",t):t}},Hp=new Ba;var Qa=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new N(this.model,"postgres"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},zp=new Qa;var Ka=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new h(this.model).formatStringColumn("postgres",e.column);switch(e.jsonOperator){case "=":o=`${s} = $${r}::jsonb`,n=[JSON.stringify(e.value)];break;case "contains":o=`${s} @> $${r}::jsonb`,n=[JSON.stringify(e.value)];break;case "not contains":o=`${s} @> $${r}::jsonb`,n=[JSON.stringify(e.value)];break;case "raw":o=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(o=`NOT (${o})`),{sql:o.trim(),bindings:n}}},Yp=new Ka;var La=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new N(this.model,"postgres"),{sql:r,bindings:o}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}handleObjectSubquery(t){let e=new N(this.model,"postgres"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},Gp=new La;var Wa=class{toSql(t){let e=t,r=new N(this.model,"postgres"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" materialized":"";return {sql:`${e.alias} as${s} (${n.sql})`,bindings:n.bindings}}},Xp=new Wa;var ja=class{toSql(t){let e=t,r=new N(this.model,"sqlite"),{sql:o}=r.parse([e.column]),n=e.inlineConstraints;if(n&&n.length>0){let s=[];for(let a of n){let{sql:l}=r.parse([a]);s.push(l);}s.length>0&&(o+=` ${s.join(" ")}`);}return {sql:`add column ${o}`,bindings:[]}}},Zp=new ja;var Fa=class{toSql(t){return {sql:"",bindings:[]}}},ef=new Fa;var Ua=class{toSql(t){return {sql:"",bindings:[]}}},tf=new Ua;var Va=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new N(this.model,"sqlite"),s=[],a=[],l=false;for(let m of e.children){let{sql:p,bindings:f}=n.parse([m]);if(!(!p||!p.trim())){if(m.file==="add_column")s.push(p),l=true;else if(m.file==="add_constraint"&&l){let y=s.pop()??"",T=p.replace(/^\s*add\s+/i,"").trimStart();s.push(`${y} ${T}`);}else {if(m.file==="set_not_null"||m.file==="drop_not_null")continue;if(m.file==="set_default"||m.file==="drop_default")continue;s.push(p),l=false;}a.push(...f);}}let u=s.join(", "),d=e.ifExists?"if exists ":"";return u.trim()?{sql:`${d}${o} ${u}`,bindings:a}:{sql:"",bindings:[]}}},rf=new Va;var Ja=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},of=new Ja;var Ha=class{toSql(t){return {sql:"",bindings:[]}}},nf=new Ha;var za=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},sf=new za;var Ya=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},af=new Ya;var Ga=class{toSql(t){return {sql:"",bindings:[]}}},lf=new Ga;var Xa=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},uf=new Xa;var Za=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},df=new Za;var el=class{toSql(t){let e=t,r;return e.defaultValue instanceof $?r=e.defaultValue.rawValue:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},cf=new el;var tl=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},mf=new tl;var rl=class{toSql(t){return {sql:"",bindings:[]}}},pf=new rl;var ol=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new h(this.model).formatStringColumn("sqlite",q(e.column)),n=e.dataType.toLowerCase();if(n==="bigincrement")return {sql:`${o} integer primary key autoincrement`,bindings:[]};if(n==="char"||n==="varchar")return {sql:`${o} text`,bindings:[]};if(n==="uuid")return {sql:`${o} varchar(36)`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar(26)`,bindings:[]};if(n.includes("text"))return {sql:`${o} text`,bindings:[]};if(n==="integer"||n==="bigint"||n==="int")return e.autoIncrement?{sql:`${o} integer primary key autoincrement`,bindings:[]}:{sql:`${o} integer`,bindings:[]};if(n==="tinyint")return {sql:`${o} integer`,bindings:[]};if(n==="smallint")return {sql:`${o} integer`,bindings:[]};if(n==="mediumint")return {sql:`${o} integer`,bindings:[]};if(n==="float"||n==="double")return {sql:`${o} real`,bindings:[]};if(n==="decimal"||n==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${o} numeric(${a}, ${l})`,bindings:[]}}if(n==="date"||n==="datetime"||n==="timestamp"||n==="time"||n==="year"){let a=`${o} text`;return (n==="datetime"||n==="timestamp")&&e.autoCreate&&(a+=" default current_timestamp"),{sql:a,bindings:[]}}else {if(n==="boolean")return {sql:`${o} integer`,bindings:[]};if(n==="json"||n==="jsonb")return {sql:`${o} text`,bindings:[]};if(n==="enum")return {sql:`${o} text`,bindings:[]};if(n==="bytea"||n==="blob"||n==="binary"||n==="longblob"||n==="mediumblob"||n==="tinyblob")return {sql:`${o} blob`,bindings:[]};if(n==="geometry"||n==="point"||n==="linestring"||n==="polygon"||n==="multipoint")return {sql:`${o} ${n}`,bindings:[]}}let s=e.length?`(${e.length})`:"";return {sql:`${o} ${n}${s}`,bindings:[]}}},ff=new ol;var nl=class{toSql(t){return {sql:"",bindings:[]}}},yf=new nl;var sl=class{toSql(t){let e=t,r=new h(this.model),o=e.constraintName?`constraint "${e.constraintName}" `:"";if(e.constraintType==="primary_key"){let n=!!e.autoIncrement,s=(e.columnType||"").toLowerCase();return n&&(s==="integer"||s==="bigint")?{sql:`${o}primary key autoincrement`,bindings:[]}:{sql:`${o}primary key`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length){let n=e.columns.map(s=>r.formatStringColumn("sqlite",q(s))).join(", ");return e.constraintName?{sql:`${o}unique (${n})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let n=e.defaultValue;return n instanceof $?{sql:`default ${n.rawValue}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let n=(e.columns??[]).map(u=>r.formatStringColumn("sqlite",q(u))).join(", "),s=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(u=>r.formatStringColumn("sqlite",q(u))).join(", "),l=`${o}foreign key (${n}) references ${s}(${a})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${o}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},hf=new sl;var il=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new N(this.model,"sqlite"),s=[],a=[];for(let y of e.children){let{sql:T,bindings:b}=n.parse([y]);if(y.folder==="constraint"){let C=s.pop()??"",R=T;if(/not null/i.test(R)||/null/i.test(R)||/default/i.test(R)||/primary key/i.test(R)){let _=`${C} ${R}`.trim();_=_.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(_),a.push(...b);continue}s.push(C),s.push(R),a.push(...b);continue}s.push(T),a.push(...b);}for(let y of e.namedConstraints){let{sql:T,bindings:b}=n.parse([y]);s.push(T),a.push(...b);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.sqliteTemporary&&d.push("TEMPORARY");let c=d.length>0?`${d.join(" ")} `:"",m=e.withoutRowId?" WITHOUT ROWID":"",p=e.strict?" STRICT":"";return {sql:`${u}${c}${o} (${l})${m}${p}`,bindings:a}}},gf=new il;var al=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new h(this.model).getFromForWriteOperations("sqlite",e.fromNode),bindings:[]}}},bf=new al;var ll=class{toSql(t){return {sql:"distinct",bindings:[]}}},Tf=new ll;var ul=class{toSql(t){return g.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},Nf=new ul;var dl=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},wf=new dl;var cl=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},Sf=new cl;var ml=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new h(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("sqlite",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("sqlite",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new N(this.model,"sqlite").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Cf=new ml;var pl=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new h(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},qf=new pl;var fl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,o="",n=[];if(!(e.value instanceof w)&&!Array.isArray(e.value)&&(o=`${new h(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} $${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new h(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},_f=new fl;var yl=class{toSql(t){let e=t,o=new h(this.model).formatStringTable("sqlite",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},Rf=new yl;var hl=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},Mf=new hl;var gl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new h(this.model),o=r.getFromForWriteOperations("sqlite",e.fromNode);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n);if(!s.length)return {sql:o,bindings:[]};let a=s.map(c=>r.formatStringColumn("sqlite",c)).join(", "),l=[],u=[];for(let c of e.records){let m=s.map(f=>c[f]),p=[];for(let f of m)f instanceof $?p.push(f.rawValue):(l.push(f),p.push("?"));u.push(`(${p.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${u.join(", ")}`,bindings:l}}},xf=new gl;var bl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("sqlite",o),a=r.formatStringColumn("sqlite",n),u=`${r.formatStringTable("sqlite",e.table)} on ${s} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new N(this.model,"sqlite");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let f=p.sql.replace(/^where\s+/i,"");u+=` and ${f}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},Af=new bl;var Tl=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Of=new Tl;var Nl=class{toSql(t){return {sql:"",bindings:[]}}},Df=new Nl;var wl=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},$f=new wl;var Sl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(this.model),o=e.conflictColumns.map(s=>r.formatStringColumnBare("sqlite",s)).join(", ");if(e.mode==="ignore")return {sql:`ON CONFLICT (${o}) DO NOTHING`,bindings:[]};let n=e.columnsToUpdate.map(s=>`${r.formatStringColumnBare("sqlite",s)} = EXCLUDED.${r.formatStringColumnBare("sqlite",s)}`).join(", ");return {sql:`ON CONFLICT (${o}) DO UPDATE SET ${n}`,bindings:[]}}},If=new Sl;var Cl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new h(this.model).formatStringColumn("sqlite",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Ef=new Cl;var ql=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Pf=new ql;var _l=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},vf=new _l;var Rl=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},kf=new Rl;var Ml=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Bf=new Ml;var xl=class{toSql(t){return {sql:"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name",bindings:[]}}},Qf=new xl;var Al=class{toSql(t){return {sql:`SELECT sql FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},Kf=new Al;var Ol=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Lf=new Ol;var Dl=class{toSql(t){let e=t;return {sql:`SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='${e.table}' AND name='${e.index}'`,bindings:[]}}},Wf=new Dl;var $l=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},jf=new $l;var Il=class{toSql(t){return {sql:`SELECT name FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},Ff=new Il;var El=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},Uf=new El;var Pl=class{toSql(t){return {sql:`SELECT
|
|
249
|
+
ORDER BY ordinal_position`,bindings:[]}}},Tm=new ta;var ra=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new y(this.model).formatStringColumn("postgres",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"postgres").parse(t),i=`(${o.sql})`;return e&&(i=`${e.toLowerCase()}${i}`),{sql:i,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"postgres").parse([t]),i=`(${o.sql})`;return e&&(i=`${e.toLowerCase()}${i}`),{sql:i,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new y(this.model).formatStringColumn("postgres",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"postgres").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),i=o.toLowerCase(),a=i.lastIndexOf("cast");for(;a>=0;){let l=a>0?i[a-1]:" ",u=i[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=i.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},wm=new ra;var na=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("postgres",e.column),n=qe.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toPostgres(false);return r?`${t}${r}`:t}buildExtractTextSql(t,e){if(e.isEmpty())return `${t}::text`;let r=e.toPostgres(true);return `${t}${r}`}buildArrayLengthSql(t,e){return `jsonb_array_length(${this.buildExtractSql(t,e)})`}buildObjectKeysSql(t,e){return `jsonb_object_keys(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},Sm=new na;var oa=class{toSql(t){let e=t,r=this.renderToken(e.fn);if(r!==void 0)return {sql:r,bindings:[]};let n=e.args.map(o=>o instanceof A?o.rawValue:o instanceof k?this.toSql(o).sql:typeof o=="number"?String(o):`'${o}'`).join(", ");return {sql:`${e.fn}(${n})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "gen_random_uuid()";case "$now":return "now()";case "$currentTimestamp":return "current_timestamp";default:return}}},Nm=new oa;var sa=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},qm=new sa;var ia=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Cm=new ia;var aa=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=0,i=[],a=e.columns.map((u,d)=>{let m=e.currParamIndex+d-o,c=e.values[d];if(c instanceof A)return o++,`${r.formatStringColumn("postgres",u)} = ${c.rawValue}`;if(c instanceof k){o++;let p=new b(this.model,"postgres").parse([c],1,true).sql;return `${r.formatStringColumn("postgres",u)} = ${p}`}return i.push(c),`${r.formatStringColumn("postgres",u)} = $${m}${this.formatTypeCast(c)}`}).join(", ");return {sql:`${n} set ${a}`,bindings:i}}formatTypeCast(t){let e="";return Buffer.isBuffer(t)?e="::bytea":Array.isArray(t)?e="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?e="::jsonb":typeof t=="boolean"?e="::boolean":typeof t=="bigint"&&(e="::bigint"),e}},Rm=new aa;var la=class{toSql(t){let e=t;if(e.isRawValue){let i=e.value??[];if(i.length===0)return {sql:e.column,bindings:[]};let a=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`$${a++}`),bindings:i}}let r=e.currParamIndex,n="",o=[];if(this.isRawNode(e.value)){let i=this.formatRawIdentifierIfPossible(e.value.rawValue);n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${i}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between"){let i=`$${r} AND $${r+1}`;n=`${new y(this.model).formatStringColumn("postgres",e.column)} between ${i}`,o=e.value;}else {let i=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${i})`,o=e.value;}else if(e.operator.includes("null"))n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,o=[e.value];}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("postgres",t):t}},Mm=new la;var ua=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"postgres"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},_m=new ua;var da=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],i=new y(this.model).formatStringColumn("postgres",e.column);switch(e.jsonOperator){case "=":n=`${i} = $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "contains":n=`${i} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "not contains":n=`${i} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`NOT (${n})`),{sql:n.trim(),bindings:o}}},xm=new da;var ca=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},Om=new ca;var ma=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),i=e.clause==="materialized"?" materialized":"";return {sql:`${e.alias} as${i} (${o.sql})`,bindings:o.bindings}}},Am=new ma;var pa=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length>0){let i=[];for(let a of o){let{sql:l}=r.parse([a]);i.push(l);}i.length>0&&(n+=` ${i.join(" ")}`);}return {sql:`add column ${n}`,bindings:[]}}},Dm=new pa;var fa=class{toSql(t){return {sql:"",bindings:[]}}},$m=new fa;var ya=class{toSql(t){return {sql:"",bindings:[]}}},Pm=new ya;var ha=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"sqlite"),i=[],a=[],l=false;for(let c of e.children){let{sql:p,bindings:h}=o.parse([c]);if(!(!p||!p.trim())){if(c.file==="add_column")i.push(p),l=true;else if(c.file==="add_constraint"&&l){let f=i.pop()??"",T=p.replace(/^\s*add\s+/i,"").trimStart();i.push(`${f} ${T}`);}else {if(c.file==="set_not_null"||c.file==="drop_not_null")continue;if(c.file==="set_default"||c.file==="drop_default")continue;i.push(p),l=false;}a.push(...h);}}let u=i.join(", "),d=e.ifExists?"if exists ":"";return u.trim()?{sql:`${d}${n} ${u}`,bindings:a}:{sql:"",bindings:[]}}},vm=new ha;var ga=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Im=new ga;var ba=class{toSql(t){return {sql:"",bindings:[]}}},Em=new ba;var Ta=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},km=new Ta;var wa=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Bm=new wa;var Sa=class{toSql(t){return {sql:"",bindings:[]}}},Qm=new Sa;var Na=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Km=new Na;var qa=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Lm=new qa;var Ca=class{toSql(t){let e=t,r;return e.defaultValue instanceof A?r=e.defaultValue.rawValue:e.defaultValue instanceof k?r=new b(this.model,"sqlite").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},jm=new Ca;var Ra=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Wm=new Ra;var Ma=class{toSql(t){return {sql:"",bindings:[]}}},Fm=new Ma;var _a=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new y(this.model).formatStringColumn("sqlite",C(e.column)),o=e.dataType.toLowerCase();if(o==="bigincrement")return {sql:`${n} integer primary key autoincrement`,bindings:[]};if(o==="char"||o==="varchar")return {sql:`${n} text`,bindings:[]};if(o==="uuid"){let a=e.isForeignKey?"":" default (lower(hex(randomblob(16))))";return {sql:`${n} varchar(36)${a}`,bindings:[]}}else if(o==="ulid")return {sql:`${n} varchar(26)`,bindings:[]};if(o.includes("text"))return {sql:`${n} text`,bindings:[]};if(o==="integer"||o==="bigint"||o==="int")return e.autoIncrement?{sql:`${n} integer primary key autoincrement`,bindings:[]}:{sql:`${n} integer`,bindings:[]};if(o==="tinyint")return {sql:`${n} integer`,bindings:[]};if(o==="smallint")return {sql:`${n} integer`,bindings:[]};if(o==="mediumint")return {sql:`${n} integer`,bindings:[]};if(o==="float"||o==="double")return {sql:`${n} real`,bindings:[]};if(o==="decimal"||o==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${n} numeric(${a}, ${l})`,bindings:[]}}if(o==="date"||o==="datetime"||o==="timestamp"||o==="time"||o==="year"){let a=`${n} text`;return (o==="datetime"||o==="timestamp")&&e.autoCreate&&(a+=" default current_timestamp"),{sql:a,bindings:[]}}else {if(o==="boolean")return {sql:`${n} integer`,bindings:[]};if(o==="json"||o==="jsonb")return {sql:`${n} text`,bindings:[]};if(o==="enum")return {sql:`${n} text`,bindings:[]};if(o==="bytea"||o==="blob"||o==="binary"||o==="longblob"||o==="mediumblob"||o==="tinyblob")return {sql:`${n} blob`,bindings:[]};if(o==="geometry"||o==="point"||o==="linestring"||o==="polygon"||o==="multipoint")return {sql:`${n} ${o}`,bindings:[]}}let i=e.length?`(${e.length})`:"";return {sql:`${n} ${o}${i}`,bindings:[]}}},Um=new _a;var xa=class{toSql(t){return {sql:"",bindings:[]}}},Vm=new xa;var Oa=class{toSql(t){let e=t,r=new y(this.model),n=e.constraintName?`constraint "${e.constraintName}" `:"";if(e.constraintType==="primary_key"){let o=!!e.autoIncrement,i=(e.columnType||"").toLowerCase();return o&&(i==="integer"||i==="bigint")?{sql:`${n}primary key autoincrement`,bindings:[]}:{sql:`${n}primary key`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length){let o=e.columns.map(i=>r.formatStringColumn("sqlite",C(i))).join(", ");return e.constraintName?{sql:`${n}unique (${o})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let o=e.defaultValue;return o instanceof A?{sql:`default ${o.rawValue}`,bindings:[]}:o instanceof k?{sql:`default ${new b(this.model,"sqlite").parse([o],1,true).sql}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let o=(e.columns??[]).map(u=>r.formatStringColumn("sqlite",C(u))).join(", "),i=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(u=>r.formatStringColumn("sqlite",C(u))).join(", "),l=`${n}foreign key (${o}) references ${i}(${a})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${n}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Jm=new Oa;var Aa=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"sqlite"),i=[],a=[];for(let f of e.children){let{sql:T,bindings:N}=o.parse([f]);if(f.folder==="constraint"){let w=i.pop()??"",R=T;if(/not null/i.test(R)||/null/i.test(R)||/default/i.test(R)||/primary key/i.test(R)){let _=`${w} ${R}`.trim();_=_.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),i.push(_),a.push(...N);continue}i.push(w),i.push(R),a.push(...N);continue}i.push(T),a.push(...N);}for(let f of e.namedConstraints){let{sql:T,bindings:N}=o.parse([f]);i.push(T),a.push(...N);}let l=i.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.sqliteTemporary&&d.push("TEMPORARY");let m=d.length>0?`${d.join(" ")} `:"",c=e.withoutRowId?" WITHOUT ROWID":"",p=e.strict?" STRICT":"";return {sql:`${u}${m}${n} (${l})${c}${p}`,bindings:a}}},Hm=new Aa;var Da=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("sqlite",e.fromNode),bindings:[]}}},zm=new Da;var $a=class{toSql(t){return {sql:"distinct",bindings:[]}}},Gm=new $a;var Pa=class{toSql(t){return g.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},Ym=new Pa;var va=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Zm=new va;var Ia=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},Xm=new Ia;var Ea=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("sqlite",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("sqlite",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"sqlite").parse(r),i=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${o.sql})${i}`,bindings:o.bindings}}},ep=new Ea;var ka=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},tp=new ka;var Ba=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(!(e.value instanceof S)&&!Array.isArray(e.value)&&(n=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} $${r}`,o=[e.value]),Array.isArray(e.value)){let i=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${i})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},rp=new Ba;var Qa=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table),o=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${n} (${o})`,bindings:[]}}},np=new Qa;var Ka=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},op=new Ka;var La=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],i=Object.keys(o);if(!i.length)return {sql:n,bindings:[]};let a=i.map(m=>r.formatStringColumn("sqlite",m)).join(", "),l=[],u=[];for(let m of e.records){let c=i.map(h=>m[h]),p=[];for(let h of c)h instanceof A?p.push(h.rawValue):(l.push(h),p.push("?"));u.push(`(${p.join(", ")})`);}return {sql:`${n} (${a}) VALUES ${u.join(", ")}`,bindings:l}}},sp=new La;var ja=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let i=r.formatStringColumn("sqlite",n),a=r.formatStringColumn("sqlite",o),u=`${r.formatStringTable("sqlite",e.table)} on ${i} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let m=new b(this.model,"sqlite");for(let c of e.additionalConditions){let p=m.parse([c]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},ip=new ja;var Wa=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},ap=new Wa;var Fa=class{toSql(t){return {sql:"",bindings:[]}}},lp=new Fa;var Ua=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},up=new Ua;var Va=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.conflictColumns.map(i=>r.formatStringColumnBare("sqlite",i)).join(", ");if(e.mode==="ignore")return {sql:`ON CONFLICT (${n}) DO NOTHING`,bindings:[]};let o=e.columnsToUpdate.map(i=>`${r.formatStringColumnBare("sqlite",i)} = EXCLUDED.${r.formatStringColumnBare("sqlite",i)}`).join(", ");return {sql:`ON CONFLICT (${n}) DO UPDATE SET ${o}`,bindings:[]}}},dp=new Va;var Ja=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("sqlite",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},cp=new Ja;var Ha=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},mp=new Ha;var za=class{toSql(t){let e=t,r=new y(this.model);return {sql:`returning ${!e.columns.length||e.columns.includes("*")?"*":e.columns.map(o=>r.formatStringColumn("sqlite",o)).join(", ")}`,bindings:[]}}},pp=new za;var Ga=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},fp=new Ga;var Ya=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},yp=new Ya;var Za=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},hp=new Za;var Xa=class{toSql(t){return {sql:"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name",bindings:[]}}},gp=new Xa;var el=class{toSql(t){return {sql:`SELECT sql FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},bp=new el;var tl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Tp=new tl;var rl=class{toSql(t){let e=t;return {sql:`SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='${e.table}' AND name='${e.index}'`,bindings:[]}}},wp=new rl;var nl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Sp=new nl;var ol=class{toSql(t){return {sql:`SELECT name FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},Np=new ol;var sl=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},qp=new sl;var il=class{toSql(t){return {sql:`SELECT
|
|
307
250
|
'PRIMARY' as name,
|
|
308
251
|
name as column_name
|
|
309
252
|
FROM pragma_table_info('${t.table}')
|
|
310
253
|
WHERE pk > 0
|
|
311
|
-
ORDER BY pk`,bindings:[]}}},Vf=new Pl;var vl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Jf=new vl;var kl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new h(this.model).formatStringColumn("sqlite",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new N(this.model,"sqlite").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new N(this.model,"sqlite").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new h(this.model).formatStringColumn("sqlite",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new N(this.model,"sqlite").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,o)=>{let n=t.slice(0,o),s=n.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=n.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},Hf=new kl;var Bl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new h(this.model).formatStringColumn("sqlite",e.column),o=de.from(e.jsonPath),n="";switch(e.jsonOperator){case "extract":n=this.buildExtractSql(r,o);break;case "extract_text":n=this.buildExtractTextSql(r,o);break;case "array_length":n=this.buildArrayLengthSql(r,o);break;case "object_keys":n=this.buildObjectKeysSql(r,o);break;case "raw":n=e.column;break}return {sql:this.formatWithAlias(n,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toSqlite();return r==="$"?t:`json_extract(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toSqlite();return r==="$"?`json_array_length(${t})`:`json_array_length(${t}, '${r}')`}buildObjectKeysSql(t,e){return `json_each.key FROM json_each(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},zf=new Bl;var Ql=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return e.keyword="",{sql:e.fromNode,bindings:[]};let r=new h(this.model).getFromForWriteOperations("sqlite",e.fromNode);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},Yf=new Ql;var Kl=class{toSql(t){let e=t,r=new N(this.model,"sqlite"),o=Array.isArray(e.query)?e.query:[e.query],n=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(o.filter(Boolean),e.currParamIndex);return {sql:n.sql,bindings:n.bindings}}},Gf=new Kl;var Ll=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new h(this.model),o=r.getFromForWriteOperations("sqlite",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=[],s=e.columns.map((a,l)=>{let u=e.values[l];return u instanceof $?`${r.formatStringColumn("sqlite",a)} = ${u.rawValue}`:(n.push(u),`${r.formatStringColumn("sqlite",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},Xf=new Ll;var Wl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",o=[];if(this.isRawNode(e.value)){let n=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new h(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new h(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new h(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new h(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new h(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ?`,o=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new h(this.model).formatStringColumn("sqlite",t):t}},Zf=new Wl;var jl=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new N(this.model,"sqlite"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},ey=new jl;var Fl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new h(this.model).formatStringColumn("sqlite",e.column);switch(e.jsonOperator){case "=":r=`json(${n}) = json(?)`,o=[JSON.stringify(e.value)];break;case "contains":r=`json(${n}) = json(?)`,o=[JSON.stringify(e.value)];break;case "not contains":r=`json(${n}) = json(?)`,o=[JSON.stringify(e.value)];break;case "raw":r=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:o}}},ty=new Fl;var Ul=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new N(this.model,"sqlite"),{sql:r,bindings:o}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}handleObjectSubquery(t){let e=new N(this.model,"sqlite"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},ry=new Ul;var Vl=class{toSql(t){let e=t,r=new N(this.model,"sqlite"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex);return {sql:`${e.alias} as (${n.sql})`,bindings:n.bindings}}},oy=new Vl;var ny={mssql:{alter_table:{add_column:Iu,add_constraint:Eu,add_primary_key:Pu,alter_column_type:vu,alter_table:ku,drop_column:Bu,drop_constraint:Qu,drop_default:Ku,drop_not_null:Lu,drop_primary_key:Wu,rename_column:ju,rename_table:Fu,set_default:Uu,set_not_null:Vu,set_table_options:Ju},column:{column_type:Hu},constraint:{after:zu,constraint:Yu},create_table:{create_table:Gu},delete:{delete:Xu},distinct:{distinct:Zu,distinct_on:ed},drop_table:{drop_table:td},extension:{create_extension:rd},from:{from:od},group_by:{group_by:nd},having:{having:sd},index_op:{create_index:id,drop_index:ad},insert:{insert:ld},join:{join:ud},limit:{limit:dd},lock:{lock:cd},offset:{offset:md},on_duplicate:{on_duplicate:pd},order_by:{order_by:fd},raw:{raw:yd},schema:{check_constraint_info:hd,foreign_key_info:gd,get_column_listing:bd,get_tables:Td,has_check_constraint:Nd,has_column:wd,has_index:Sd,has_primary_key:Cd,has_table:qd,index_info:_d,primary_key_info:Rd,table_info:Md},select:{select:xd,select_json:Ad},truncate:{truncate:Od},union:{union:Dd},update:{update:$d},where:{where:Id,where_group:Ed,where_json:Pd,where_subquery:vd},with:{with:kd}},mysql:{alter_table:{add_column:Bd,add_constraint:Qd,add_primary_key:Kd,alter_column_type:Ld,alter_table:Wd,drop_column:jd,drop_constraint:Fd,drop_default:Ud,drop_not_null:Vd,drop_primary_key:Jd,rename_column:Hd,rename_table:zd,set_default:Yd,set_not_null:Gd,set_table_options:Xd},column:{column_type:Zd},constraint:{after:ec,constraint:tc},create_table:{create_table:rc},delete:{delete:oc},distinct:{distinct:nc,distinct_on:sc},drop_table:{drop_table:ic},extension:{create_extension:ac},from:{from:lc},group_by:{group_by:uc},having:{having:dc},index_op:{create_index:cc,drop_index:mc},insert:{insert:pc},join:{join:fc},limit:{limit:yc},lock:{lock:hc},offset:{offset:gc},on_duplicate:{on_duplicate:bc},order_by:{order_by:Tc},raw:{raw:Nc},schema:{check_constraint_info:wc,foreign_key_info:Sc,get_column_listing:Cc,get_tables:qc,has_check_constraint:_c,has_column:Rc,has_index:Mc,has_primary_key:xc,has_table:Ac,index_info:Oc,primary_key_info:Dc,table_info:$c},select:{select:Ic,select_json:Ec},truncate:{truncate:Pc},union:{union:vc},update:{update:kc},where:{where:Bc,where_group:Qc,where_json:Kc,where_subquery:Lc},with:{with:Wc}},oracledb:{alter_table:{add_column:jc,add_constraint:Fc,add_primary_key:Uc,alter_column_type:Vc,alter_table:Jc,drop_column:Hc,drop_constraint:zc,drop_default:Yc,drop_not_null:Gc,drop_primary_key:Xc,rename_column:Zc,rename_table:em,set_default:tm,set_not_null:rm,set_table_options:om},column:{column_type:nm},constraint:{after:sm,constraint:im},create_table:{create_table:am},delete:{delete:lm},distinct:{distinct:um,distinct_on:dm},drop_table:{drop_table:cm},extension:{create_extension:mm},from:{from:pm},group_by:{group_by:fm},having:{having:ym},index_op:{create_index:hm,drop_index:gm},insert:{insert:bm},join:{join:Tm},limit:{limit:Nm},lock:{lock:wm},offset:{offset:Sm},on_duplicate:{on_duplicate:Cm},order_by:{order_by:qm},raw:{raw:_m},schema:{check_constraint_info:Rm,foreign_key_info:Mm,get_column_listing:xm,get_tables:Am,has_check_constraint:Om,has_column:Dm,has_index:$m,has_primary_key:Im,has_table:Em,index_info:Pm,primary_key_info:vm,table_info:km},select:{select:Bm,select_json:Qm},truncate:{truncate:Km},union:{union:Lm},update:{update:Wm},where:{where:jm,where_group:Fm,where_json:Um,where_subquery:Vm},with:{with:Jm}},postgres:{alter_table:{add_column:Hm,add_constraint:zm,add_primary_key:Ym,alter_column_type:Gm,alter_table:Xm,drop_column:Zm,drop_constraint:ep,drop_default:tp,drop_not_null:rp,drop_primary_key:op,rename_column:np,rename_table:sp,set_default:ip,set_not_null:ap,set_table_options:lp},column:{column_type:up},constraint:{after:dp,constraint:cp},create_table:{create_table:mp},delete:{delete:pp},distinct:{distinct:fp,distinct_on:yp},drop_table:{drop_table:hp},extension:{create_extension:gp},from:{from:bp},group_by:{group_by:Tp},having:{having:Np},index_op:{create_index:wp,drop_index:Sp},insert:{insert:Cp},join:{join:qp},limit:{limit:_p},lock:{lock:Rp},offset:{offset:Mp},on_duplicate:{on_duplicate:xp},order_by:{order_by:Ap},raw:{raw:Op},schema:{check_constraint_info:Dp,foreign_key_info:$p,get_column_listing:Ip,get_tables:Ep,has_check_constraint:Pp,has_column:vp,has_index:kp,has_primary_key:Bp,has_table:Qp,index_info:Kp,primary_key_info:Lp,table_info:Wp},select:{select:jp,select_json:Fp},truncate:{truncate:Up},union:{union:Vp},update:{update:Jp},where:{where:Hp,where_group:zp,where_json:Yp,where_subquery:Gp},with:{with:Xp}},sqlite:{alter_table:{add_column:Zp,add_constraint:ef,alter_column_type:tf,alter_table:rf,drop_column:of,drop_constraint:nf,drop_default:sf,drop_not_null:af,drop_primary_key:lf,rename_column:uf,rename_table:df,set_default:cf,set_not_null:mf,set_table_options:pf},column:{column_type:ff},constraint:{after:yf,constraint:hf},create_table:{create_table:gf},delete:{delete:bf},distinct:{distinct:Tf,distinct_on:Nf},drop_table:{drop_table:wf},extension:{create_extension:Sf},from:{from:Cf},group_by:{group_by:qf},having:{having:_f},index_op:{create_index:Rf,drop_index:Mf},insert:{insert:xf},join:{join:Af},limit:{limit:Of},lock:{lock:Df},offset:{offset:$f},on_duplicate:{on_duplicate:If},order_by:{order_by:Ef},raw:{raw:Pf},schema:{check_constraint_info:vf,foreign_key_info:kf,get_column_listing:Bf,get_tables:Qf,has_check_constraint:Kf,has_column:Lf,has_index:Wf,has_primary_key:jf,has_table:Ff,index_info:Uf,primary_key_info:Vf,table_info:Jf},select:{select:Hf,select_json:zf},truncate:{truncate:Yf},union:{union:Gf},update:{update:Xf},where:{where:Zf,where_group:ey,where_json:ty,where_subquery:ry},with:{with:oy}}};var N=class{constructor(t,e){this.dbType=e,this.model=t;}parse(t,e=1,r=false){if(!t.length)return {sql:"",bindings:[]};let o=t.find(_=>!!_&&_.folder==="distinctOn"),n=!o&&t.find(_=>!!_&&_.folder==="distinct"),s=this.dbType==="mssql"?t.find(_=>!!_&&_.folder==="lock")??null:null,a=s?this.getMssqlTableHints(s):"",l=t.filter(_=>_!==null&&_.folder!=="distinct"&&_.folder!=="distinctOn"),u=l.some(_=>_.folder==="offset"),d=l.some(_=>_.folder==="order_by"),c=l.find(_=>_.folder==="limit"),m=l.find(_=>_.folder==="offset"),p=this.dbType==="mssql"&&c&&!u&&!d,f=this.dbType==="mssql"&&!p&&(c||m),y=this.dbType==="oracledb"&&(c||m),T=[],b=[],C=null;p&&c&&b.push(c.limit);for(let _=0;_<l.length;_++){let D=l[_];if(p&&D.folder==="limit"||f&&(D.folder==="limit"||D.folder==="offset")||y&&(D.folder==="limit"||D.folder==="offset"))continue;D.currParamIndex=e+b.length;let A=ny[this.mapCommonDbType(this.dbType)][D.folder][D.file];if(!A)throw new Error(`Interpreter not found for ${this.dbType} ${D.keyword}`);A.model=this.model;let M=A.toSql(D);if(!M.sql||!M.sql.trim().length)continue;let v=l[_+1],I=!v||v.keyword!==D.keyword?"":v.chainsWith;if(D.folder==="lock"||D.folder==="on_duplicate"||D.folder==="schema"){T.push(`${M.sql}${I}`),b.push(...M.bindings),C=D.keyword;continue}if(C!==D.keyword||D.canKeywordBeSeenMultipleTimes){if(r)T.push(`${M.sql}${I}`);else {let B=D.keyword;if(D.folder==="with"&&this.dbType!=="mssql"){let W=_,ue=false;for(;W<l.length&&l[W].keyword===D.keyword;){let se=l[W];if(se.folder==="with"&&se.clause==="recursive"){ue=true;break}W++;}ue&&(B=`${B} recursive`);}if(B==="select"){let W=p?`top (@${e}) `:"";if(o){let ue=Array.isArray(o.columns)?o.columns.join(", "):"";T.push(`select ${W}distinct on (${ue}) ${M.sql}${I}`);}else n?T.push(`select ${W}distinct ${M.sql}${I}`):T.push(`select ${W}${M.sql}${I}`);}else B==="from"&&a?T.push(`${B} ${M.sql}${a}${I}`):T.push(`${B} ${M.sql}${I}`);}C=D.keyword;}else T.push(`${M.sql}${I}`);b.push(...M.bindings);}if(f){d||T.push("order by (select null)");let _=m?.offset??0;b.push(_);let A=`offset @${e+b.length-1} rows`;if(c){b.push(c.limit);let M=e+b.length-1;A+=` fetch next @${M} rows only`;}T.push(A);}if(y){d||T.push("order by null");let _=m?.offset??0;b.push(_);let A=`offset :${e+b.length-1} rows`;if(c){b.push(c.limit);let M=e+b.length-1;A+=` fetch next :${M} rows only`;}T.push(A);}return {sql:T.join(" "),bindings:b}}mapCommonDbType(t){switch(t){case "mariadb":return "mysql";case "cockroachdb":return "postgres";default:return t}}getMssqlTableHints(t){let e=[];switch(t.lockType){case "UPDATE":e.push("UPDLOCK");break;case "SHARE":e.push("HOLDLOCK");break;case "NO_KEY_UPDATE":e.push("UPDLOCK");break;case "KEY_SHARE":e.push("HOLDLOCK");break}return t.skipLocked&&e.push("READPAST"),t.noWait&&e.push("NOWAIT"),e.length>0?` with (${e.join(", ")})`:""}};var lr=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var ur=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var dr=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var cr=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var mr=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var pr=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_table";this.table=e;}};var fr=class extends w{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_column";this.table=e,this.column=r;}};var yr=class extends w{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_index";this.table=e,this.index=r;}};var hr=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_primary_key";this.table=e;}};var gr=class extends w{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_check_constraint";this.table=e,this.constraint=r;}};var br=class extends w{constructor(){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_tables";}};var Tr=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_column_listing";this.table=e;}};var Nr=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var he=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var lt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var wr=class extends w{constructor(e,r,o={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="alter_column_type";this.column=e,this.newType=r,this.options=o;}};var ce=class extends w{constructor(e,r=[],o=false){super("alter table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="alter_table";this.table=e,this.children=r,this.ifExists=o;}};var Sr=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var ge=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var At=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var Cr=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var ut=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var qr=class extends w{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var _r=class extends w{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_default";this.column=e,this.defaultValue=r;}};var Rr=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var je=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="set_table_options";this.engine=e.engine,this.charset=e.charset,this.collate=e.collate;}};var V=class extends w{constructor(e,r={},o=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="constraint";this.constraintType=e,this.columns=r.columns,this.references=r.references,this.constraintName=r.constraintName,this.onDelete=r.onDelete,this.onUpdate=r.onUpdate,this.defaultValue=r.defaultValue,this.checkExpression=r.checkExpression,this.isRawValue=o;}};var Mr=class extends w{constructor(e,r=[],o=[],n=false,s){super("create table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="create_table";this.file="create_table";this.table=e,this.children=r,this.namedConstraints=o,this.ifNotExists=n,s&&Object.assign(this,s);}};var xr=class extends w{constructor(e,r=false){super("drop table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="drop_table";this.file="drop_table";this.table=e,this.ifExists=r;}};var Ar=class extends w{constructor(e,r=true){super("create extension");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="extension";this.file="create_extension";this.extensionName=e,this.ifNotExists=r;}};var Or=class extends w{constructor(e,r,o,n=false){super("create index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="index_op";this.file="create_index";this.table=e,this.columns=r,this.indexName=o,this.unique=n;}};var Dr=class extends w{constructor(e,r,o){super("drop index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.cascade=false;this.folder="index_op";this.file="drop_index";this.indexName=e,this.table=r,this.cascade=o??false;}};var dt=class extends w{constructor(e,r=false){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e;}};function Wh(i){return i.endsWith("ies")?i.slice(0,-3)+"y":i.endsWith("sses")||i.endsWith("shes")||i.endsWith("ches")||i.endsWith("xes")||i.endsWith("zes")?i.slice(0,-2):i.endsWith("s")&&!i.endsWith("ss")?i.slice(0,-1):i}var $r=Symbol("columns"),ct=Symbol("primaryKey"),Jl=Symbol("relations"),sy=Symbol("indexes"),iy=Symbol("uniques"),ay=Symbol("checks"),Hl=i=>`${Wh(i)}_id`,zl=(i,t)=>`idx_${i}_${t}`,be=(i,t)=>`uq_${i}_${t}`,Z=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,Te=(i,t)=>`pk_${i}_${t}`;var k=class extends w{constructor(e,r,o={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="column";this.file="column_type";this.isRawValue=false;this.column=e,this.dataType=r,this.length=o.length,this.precision=o.precision,this.scale=o.scale,this.enumValues=o.enumValues,this.withTimezone=o.withTimezone,this.autoIncrement=o.autoIncrement,this.autoCreate=o.autoCreate,this.autoUpdate=o.autoUpdate,this.collate=o.collate,this.isRawValue=o.isRawValue??false,this.unsigned=o.unsigned,this.zerofill=o.zerofill;}};var Ot=class extends w{constructor(e,r=false,o=false){super("lock");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="lock";this.file="lock";this.lockType=e,this.skipLocked=r,this.noWait=o;}};var Fe=class extends w{constructor(e,r=false){super(r?"union all":"union");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="union";this.file="union";this.query=e,this.isAll=r;}};var mt=class extends w{constructor(e,r,o){e==="normal"&&(e="");super("with");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="with";this.file="with";this.alias=r,this.body=o,this.clause=e;}};var Pe=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var Ir=class extends w{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var Er=class extends Pe{constructor(t,e,r,o,n=[],s="create_table"){super(e),this.columnNode=r,this.tableName=o,this.namedConstraints=n,this.context=s,this.sqlType=t;}primaryKey(t){let e=Te(this.tableName,q(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new V("primary_key",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new V("primary_key",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??e})),this)}foreignKey(t,e){let[r,o]=t.split("."),n=o.split(","),s=e?.constraintName??Z(this.tableName??"",q(this.columnNode.column),n[0]);return this.context==="alter_table"?(this.nodes.push(new V("foreign_key",{columns:[q(this.columnNode.column)],references:{table:r,columns:n},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this):(this.namedConstraints.push(new V("foreign_key",{columns:[q(this.columnNode.column)],references:{table:r,columns:n},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this)}increment(){return this.columnNode.autoIncrement=true,this}unsigned(){return this.columnNode.unsigned=true,this}zerofill(){return this.columnNode.zerofill=true,this}notNullable(){return this.nodes.push(new V("not_null",{columns:[q(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new V("null",{columns:[q(this.columnNode.column)]})),this}default(t){let e;return t instanceof $?e=t:t===null?e="NULL":typeof t=="boolean"?e=t?"TRUE":"FALSE":t!==void 0&&(e=t.toString()),this.nodes.push(new V("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new V("unique",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??be(this.tableName??"",q(this.columnNode.column))})),this):(this.namedConstraints.push(new V("unique",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName||be(this.tableName??"",q(this.columnNode.column))})),this)}check(t,e){let r=q(this.columnNode.column),o=e?.constraintName??`chk_${this.tableName}_${r}`.substring(0,63);return this.context==="alter_table"?(this.nodes.push(new V("check",{columns:[r],checkExpression:t,constraintName:o})),this):(this.namedConstraints.push(new V("check",{columns:[r],checkExpression:t,constraintName:o})),this)}after(t){return this.sqlType!=="mysql"?this:(this.nodes.push(new Ir(t)),this)}collate(t){return this.columnNode.collate=t,this}handleSqliteAutoIncrement(t){return this.nodes.push(new V("primary_key",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this}};var Ue=class extends Pe{constructor(e,r,o,n){super(r);this.context="create_table";this.tableName=o,this.namedConstraints=[],this.context=n??"create_table",this.sqlType=e;}mysqlOptions(e){return this._mysqlOptions=e,this}getMysqlOptions(){return this._mysqlOptions}build(e){return this.nodes.push(e),new Er(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new $(e)}char(e,r=1){let o=new k(e,"char",{length:r});return this.build(o)}varchar(e,r=255){let o=new k(e,"varchar",{length:r});return this.build(o)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let o=new k(e,r);return this.build(o)}longtext(e){return this.text(e,"longtext")}mediumtext(e){return this.text(e,"mediumtext")}tinytext(e){return this.text(e,"tinytext")}uuid(e){let r=new k(e,"uuid");return this.build(r)}ulid(e){let r=new k(e,"ulid");return this.build(r)}integer(e,r=255){let o=new k(e,"integer",{length:r});return this.build(o)}tinyint(e,r=255){let o=new k(e,"tinyint",{length:r});return this.build(o)}smallint(e,r=255){let o=new k(e,"smallint",{length:r});return this.build(o)}mediumint(e,r=255){let o=new k(e,"mediumint",{length:r});return this.build(o)}biginteger(e,r=255){let o=new k(e,"bigint",{length:r});return this.build(o)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let o=new k(e,"float",{precision:r});return this.build(o)}double(e,r=10){let o=new k(e,"double",{precision:r});return this.build(o)}real(e,r=10){let o=new k(e,"real",{precision:r});return this.build(o)}decimal(e,r=10,o=2){let n=new k(e,"decimal",{precision:r,scale:o});return this.build(n)}numeric(e,r=10,o=2){let n=new k(e,"numeric",{precision:r,scale:o});return this.build(n)}increment(e,r=255){return this.integer(e,r).increment()}bigIncrement(e,r=255){return this.biginteger(e,r).increment()}date(e,r){let o=new k(e,"date",{precision:r});return this.build(o)}time(e,r){let o=new k(e,"time",{precision:r});return this.build(o)}year(e){let r=new k(e,"year");return this.build(r)}datetime(e,r){let o=new k(e,"datetime",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(o)}timestamp(e,r){let o=new k(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(o)}boolean(e){let r=new k(e,"boolean");return this.build(r)}binary(e){let r=new k(e,"binary");return this.build(r)}varbinary(e,r=255){let o=new k(e,"varbinary",{length:r});return this.build(o)}blob(e){let r=new k(e,"blob");return this.build(r)}tinyblob(e){let r=new k(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new k(e,"mediumblob");return this.build(r)}longblob(e){let r=new k(e,"longblob");return this.build(r)}json(e){let r=new k(e,"json");return this.build(r)}jsonb(e){let r=new k(e,"jsonb");return this.build(r)}enum(e,r){let o=new k(e,"enum",{enumValues:r});return this.build(o)}custom(e,r,o){let n=new k(e,r,{length:o});return this.build(n)}rawColumn(e){let r=new k(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new k(e,"geometry");return this.build(r)}point(e){let r=new k(e,"point");return this.build(r)}linestring(e){let r=new k(e,"linestring");return this.build(r)}polygon(e){let r=new k(e,"polygon");return this.build(r)}multiPoint(e){let r=new k(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var Pr=class extends Pe{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new $(t)}addColumn(t){let e=[],r=new Ue(this.sqlType,e,this.table,"alter_table"),o=t(r);if(!e.length)return;let n=r.getNamedConstraints(),s=e.filter(c=>c.folder==="column");if(e=e.concat(n),s.length!==1)throw new Error("addColumn callback must define exactly one column");let a=s[0],l=o.getNodes().filter(c=>{let m=c;return m.constraintType==="not_null"||m.constraintType==="null"||m.constraintType==="default"}),u=new Nr(a);u.inlineConstraints=l,this.nodes.push(u),o.getNodes().filter(c=>{let m=c;return m.constraintType==="unique"||m.constraintType==="foreign_key"||m.constraintType==="primary_key"}).forEach(c=>{this.nodes.push(new he(c));});}alterColumn(t){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new Ue(this.sqlType,e,this.table,"alter_table"),o=t(r);if(!e.length)return;let n=e.filter(p=>p.folder==="column");if(n.length!==1)throw new Error("alterColumn callback must define exactly one column");let s=n[0],a=q(s.column),l=o.getNodes().find(p=>p.constraintType==="null"),d=o.getNodes().find(p=>p.constraintType==="not_null")||l,c=o.getNodes().find(p=>p.constraintType==="default"),m={};d&&(m.nullable=d.constraintType==="null"),c&&(c.defaultValue===void 0||c.defaultValue===null||c.defaultValue==="NULL"?m.dropDefault=true:m.default=c.defaultValue),s.collate&&(this.sqlType==="mysql"||this.sqlType==="mariadb")&&(m.collate=s.collate),this.nodes.push(new wr(q(a),s,m)),d&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(d.constraintType==="not_null"?this.nodes.push(new Rr(q(a))):d.constraintType==="null"&&this.nodes.push(new Cr(q(a)))),c&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(c.defaultValue===void 0||c.defaultValue===null||c.defaultValue==="NULL"?this.nodes.push(new At(q(a))):this.nodes.push(new _r(q(a),c.defaultValue))),o.getNodes().forEach(p=>{let f=p;switch(f.constraintType){case "primary_key":this.addPrimaryKey(q(a));break;case "unique":this.unique(q(a),{constraintName:f.constraintName});break;case "foreign_key":this.foreignKey(q(a),f.references?.table??"",q(f.references?.columns?.[0]??""),{constraintName:f.constraintName,onDelete:f.onDelete,onUpdate:f.onUpdate});break}});}dropColumn(t){this.nodes.push(new Sr(t));}renameColumn(t,e){this.nodes.push(new qr(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new At(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new lt([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new he(new V(...t)));}foreignKey(t,e,r,o){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new he(new V("foreign_key",{columns:[t],references:{table:e,columns:[r]},constraintName:o?.constraintName??Z(this.table,t,r),onDelete:o?.onDelete,onUpdate:o?.onUpdate})));}unique(t,e){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new he(new V("unique",{columns:[t],constraintName:e?.constraintName??be(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let r=Z(this.table,t,e);this.nodes.push(new ge(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new S("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??be(this.table,t);this.nodes.push(new ge(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ge(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new S("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new ut(t));}setTableOptions(t){let e=this.sqlType==="mysql"||this.sqlType==="mariadb",r=this.sqlType==="postgres"||this.sqlType==="cockroachdb",o=this.sqlType==="mssql",n=this.sqlType==="oracledb";return this.sqlType==="sqlite"?this:(e?this.nodes.push(new je(t)):r?this.nodes.push(new je(t)):o?this.nodes.push(new je(t)):n&&this.nodes.push(new je(t)),this)}};var ie=class{constructor(t){if(this.sqlType=t||E.DB_TYPE,!this.sqlType)throw new S("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new $(t)}rawQuery(t){this.queryStatements.push(t);}async execute(){for(let t of this.queryStatements)this.rawQuery(t);}runFile(t){if(!ne.existsSync(t))throw new S("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=st.basename(t),r=st.extname(e);if(r!==".sql"&&r!==".txt")throw new S("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let n=ne.readFileSync(t,"utf-8").split(";").map(s=>s.trim()).filter(s=>s.length>0&&!s.startsWith("--"));for(let s of n)this.rawQuery(s);}createTable(t,e,r){let o=new Ue(this.sqlType,[],t);e(o);let n=o.getNodes(),s=new N({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a={...r,...this.sqlType==="mysql"||this.sqlType==="mariadb"?o.getMysqlOptions()||{}:{}},l=new Mr(t,n,o.getNamedConstraints(),r?.ifNotExists,a),u=s.parse([l]).sql,d=u.startsWith("create table")?u:`create table ${u}`;this.rawQuery(d),this.generateAutoUpdateTriggers(t,n);}alterTable(t,e){let r=[],o=new Pr(t,r,this.sqlType);if(e(o),!r.length)return;let n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"}),s=[],a=()=>{if(!s.length)return;let u=new ce(t,s),d=n.parse([u]).sql;if(!d||!d.trim())return;let c=d.startsWith("alter table")?d:`alter table ${d}`;this.rawQuery(c),s=[];};for(let u of r)u.file==="add_constraint"&&s.length&&s[0].file==="add_column"||a(),s.push(u);a();let l=r.filter(u=>u.file==="add_column").map(u=>u.column);this.generateAutoUpdateTriggers(t,l);}dropTable(t,e=false){let r=new xr(t,e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}renameTable(t,e){let r=new ce(t,[new at(e)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}truncateTable(t){let e=new dt(t,true),r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}createIndex(t,e,r={}){Array.isArray(e)||(e=[e]);let o=r.constraintName||zl(t,e.join("_")),n=new Or(t,e,o),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([n]).sql);}dropIndex(t,e){let r=new Dr(t,e),o=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}addPrimaryKey(t,e){let r=new ce(t,[new lt(e)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}addUnique(t,e,r){let o=Array.isArray(e)?e:[e],n=r?.constraintName??be(t,o.join("_")),s=new V("unique",{columns:o,constraintName:n}),a=new ce(t,[new he(s)]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropForeignKey(t,e,r){let o=Z(t,e,r),n=new ge(o),s=new ce(t,[n]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropUnique(t,e,r){let o=Array.isArray(e)?be(t,e.join("_")):be(t,e),n=r?.constraintName??o,s=new ge(n),a=new ce(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new ut,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new V(...e),o=new ce(t,[new he(r)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([o]).sql);}dropConstraint(t,e){let r=new ge(e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}addCheck(t,e,r){let o=r?.constraintName??`chk_${t}_custom`.substring(0,63),n=new V("check",{checkExpression:e,constraintName:o}),s=new ce(t,[new he(n)]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropCheck(t,e){if(this.sqlType==="mysql"){this.rawQuery(`ALTER TABLE \`${t}\` DROP CHECK \`${e}\``);return}let r=new ge(e),o=new ce(t,[r]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([o]).sql);}createExtension(t,e=true){let r=new Ar(t,e),o=this.generateAstInstance({table:"",databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}generateAutoUpdateTriggers(t,e){if(this.sqlType==="mysql"||this.sqlType==="mariadb")return;let r=e.filter(o=>o.folder==="column"&&o.autoUpdate===true).map(o=>q(o.column));for(let o of r){let n=this.getAutoUpdateTriggerSql(t,o);for(let s of n)this.rawQuery(s);}}getAutoUpdateTriggerSql(t,e){let r=`trg_${t}_${e}_auto_update`;switch(this.sqlType){case "postgres":case "cockroachdb":return [`CREATE OR REPLACE FUNCTION ${r}_fn() RETURNS trigger AS $$ BEGIN NEW."${e}" = CURRENT_TIMESTAMP; RETURN NEW; END; $$ LANGUAGE plpgsql`,`CREATE OR REPLACE TRIGGER ${r} BEFORE UPDATE ON "${t}" FOR EACH ROW EXECUTE FUNCTION ${r}_fn()`];case "sqlite":return [`CREATE TRIGGER IF NOT EXISTS ${r} AFTER UPDATE ON "${t}" FOR EACH ROW BEGIN UPDATE "${t}" SET "${e}" = CURRENT_TIMESTAMP WHERE rowid = NEW.rowid; END`];case "mssql":return [`CREATE OR ALTER TRIGGER [${r}] ON [${t}] AFTER UPDATE AS BEGIN SET NOCOUNT ON; UPDATE t SET t.[${e}] = CURRENT_TIMESTAMP FROM [${t}] t INNER JOIN inserted i ON t.[id] = i.[id]; END`];case "oracledb":return [`CREATE OR REPLACE TRIGGER "${r}" BEFORE UPDATE ON "${t}" FOR EACH ROW BEGIN :NEW."${e}" := CURRENT_TIMESTAMP; END;`];default:return []}}generateAstInstance(t){return new N(t,this.sqlType)}};var vr,dy,Dt=class{constructor(t,e){pu(this,vr);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new ie(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=fu(this,vr,dy).call(this)),this.executionPromise.then(t,e)}rawStatement(t){return this.schema.rawStatement(t)}rawQuery(t){return this.schema.rawQuery(t),this}createTable(t,e,r){return this.schema.createTable(t,e,r),this}alterTable(t,e){return this.schema.alterTable(t,e),this}dropTable(t,e=false){return this.schema.dropTable(t,e),this}renameTable(t,e){return this.schema.renameTable(t,e),this}truncateTable(t){return this.schema.truncateTable(t),this}createIndex(t,e,r){return this.schema.createIndex(t,e,r),this}dropIndex(t,e){return this.schema.dropIndex(t,e),this}addPrimaryKey(t,e){return this.schema.addPrimaryKey(t,e),this}addUnique(t,e,r){return this.schema.addUnique(t,e,r),this}addConstraint(t,e,...r){return this.schema.addConstraint(t,e,...r),this}dropPrimaryKey(t){return this.schema.dropPrimaryKey(t),this}dropForeignKey(t,e,r){return this.schema.dropForeignKey(t,e,r),this}dropUnique(t,e,r){return this.schema.dropUnique(t,e,r),this}dropConstraint(t,e){return this.schema.dropConstraint(t,e),this}createExtension(t,e=true){return this.schema.createExtension(t,e),this}toQuery(){let t=this.schema.queryStatements;return t.length===1?t[0]:t}toQueries(){return [...this.schema.queryStatements]}toString(){let t=this.schema.queryStatements;return t.length===1?t[0]||"":t.join(`;
|
|
312
|
-
`)}async execute(){if(this.state!=="executed"){if(this.state==="failed")throw this.executionError;return this.then()}}isExecuted(){return this.state==="executed"}isPending(){return this.state==="pending"}hasFailed(){return this.state==="failed"}async hasTable(t){return this.dataSource.hasTable(t)}async hasColumn(t,e){return this.dataSource.hasColumn(t,e)}async hasColumns(t,...e){return this.dataSource.hasColumns(t,...e)}async hasIndex(t,e){return this.dataSource.hasIndex(t,e)}async hasPrimaryKey(t){return this.dataSource.hasPrimaryKey(t)}async hasUnique(t,e){return this.dataSource.hasUnique(t,e)}async hasForeignKey(t,e){return this.dataSource.hasForeignKey(t,e)}async hasCheckConstraint(t,e){return this.dataSource.hasCheckConstraint(t,e)}async getTables(){return this.dataSource.getTables()}async getColumnListing(t){return this.dataSource.getColumnListing(t)}dropTableIfExists(t){return this.schema.dropTable(t,true),this}async dropIndexIfExists(t,e){if(await this.dataSource.hasIndex(e,t)){let o=new ie(this.dataSource.getDbType());o.dropIndex(t,e);let n=o.queryStatements[0];n&&await this.dataSource.rawQuery(n);}}renameColumn(t,e,r){return this.schema.alterTable(t,o=>{o.renameColumn(e,r);}),this}};vr=new WeakSet,dy=async function(){try{this.state="pending";let t=this.schema.queryStatements;if(!t.length){this.state="executed";return}for(let e of t)await this.dataSource.rawQuery(e);this.state="executed";}catch(t){throw this.state="failed",this.executionError=t,t}};var Se=class{constructor(t,e){this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var kr=class{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}buildDropDependencies(t){let e=new Map,r=new Map,o=new Map;for(let n of t.relationsToDrop||[]){let s=`${n.table}.${n.relation.name}`,a=[];if(n.relation.referencedTable&&a.push(`table.${n.relation.referencedTable}`),n.relation.referencedColumns)for(let l of n.relation.referencedColumns)a.push(`column.${n.relation.referencedTable}.${l}`);e.set(s,a);}for(let n of t.tablesToDrop||[]){let s=`table.${n.table}`,a=[];for(let l of this.models){let u=l.getRelations();for(let d of u)d.type==="belongsTo"&&d.model().table===n.table&&a.push(`fk.${l.table}.${d.constraintName}`);}r.set(s,a);}for(let n of t.columnsToDrop||[]){let s=`column.${n.table}.${n.column}`,a=[],l=this.models.find(u=>u.table===n.table);if(l){let u=l.getColumns().find(d=>d.databaseName===n.column);if(u){u.isPrimary&&a.push(`pk.${n.table}`);let d=l.getRelations();for(let c of d)c.columnName===u.columnName&&a.push(`fk.${n.table}.${c.constraintName}`);}}o.set(s,a);}return {foreignKeys:e,tables:r,constraints:o}}topologicalSortReverse(t,e){let r=new Set,o=new Set,n=[],s=a=>{if(o.has(a))throw new Error(`Circular dependency detected: ${a}`);if(r.has(a))return;o.add(a);let l=e(a);for(let u of l)s(u);o.delete(a),r.add(a),n.push(a);};for(let a of t.keys())r.has(a)||s(a);return n}generateDropOperations(t){let e=this.buildDropDependencies(t),r=[],o=this.topologicalSortReverse(e.foreignKeys,s=>e.foreignKeys.get(s)||[]);for(let s of o){let[a,l]=s.split("."),u=t.relationsToDrop?.find(d=>d.table===a&&d.relation.name===l);u&&r.push({type:"DROP_FOREIGN_KEY",phase:"DESTRUCTIVE_OPERATIONS",table:a,constraint:l,data:u,dependencies:e.foreignKeys.get(s)||[],sqlStatements:this.generateDropForeignKeySql(u)});}let n=this.topologicalSortReverse(e.tables,s=>e.tables.get(s)||[]);for(let s of t.columnsToDrop||[]){let a=`column.${s.table}.${s.column}`,l=e.constraints.get(a)||[];for(let u of l)u.startsWith("pk.")?r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:"PRIMARY KEY",data:{type:"primary_key",table:s.table},dependencies:[a],sqlStatements:this.generateDropPrimaryKeySql(s.table)}):u.startsWith("unique.")&&r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:`UNIQUE_${s.column}`,data:{type:"unique",table:s.table,column:s.column},dependencies:[a],sqlStatements:this.generateDropUniqueConstraintSql(s.table,s.column)});}for(let s of t.columnsToDrop||[])r.push({type:"DROP_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,column:s.column,data:s,dependencies:[],sqlStatements:this.generateDropColumnSql(s)});for(let s of n){let a=s.replace("table.",""),l=t.tablesToDrop?.find(u=>u.table===a);l&&r.push({type:"DROP_TABLE",phase:"DESTRUCTIVE_OPERATIONS",table:a,data:l,dependencies:e.tables.get(s)||[],sqlStatements:this.generateDropTableSql(l)});}return r}analyzeConstraintImpact(t){let e=new Map;for(let r of t.columnsToDrop||[]){let o=[],n=this.models.find(s=>s.table===r.table);if(n){let s=n.getColumns().find(a=>a.databaseName===r.column);if(s){s.isPrimary&&o.push(`PRIMARY KEY on ${r.table}`);let a=n.getRelations();for(let l of a)l.columnName===s.columnName&&o.push(`FOREIGN KEY ${l.constraintName} on ${r.table}`);}}e.set(`${r.table}.${r.column}`,o);}return e}detectMixedOperations(t){let e=[];for(let r of t.columnsToModify||[]){let o=this.models.find(n=>n.table===r.table);o&&o.getColumns().find(s=>s.databaseName===r.dbColumns.name)&&this.hasConstraintChanges(r.dbColumns,r.modelColumn)&&e.push({type:"column_modification_with_constraints",table:r.table,column:r.dbColumns.name,description:`Column ${r.dbColumns.name} modification requires constraint recreation`});}for(let r of t.primaryKeysToModify||[])e.push({type:"primary_key_modification",table:r.table,description:`Primary key modification on ${r.table} requires FK recreation`});return e}hasConstraintChanges(t,e){return t.isNullable!==!e.constraints?.nullable||t.isUnique!==!!e.constraints?.unique||t.defaultValue!==e.constraints?.default}generateDropForeignKeySql(t){if(this.sql.getDbType()==="sqlite")return [];if(!t.relation.name)return [];let e=this.sql.schema().alterTable(t.table,o=>{o.dropConstraint(t.relation.name);}).toQueries(),r=this.sql.getDbType();return (r==="mysql"||r==="mariadb")&&e.push(`DROP INDEX \`${t.relation.name}\` ON \`${t.table}\``),e}generateDropPrimaryKeySql(t){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,e=>{e.dropPrimaryKey();}).toQueries()}generateDropUniqueConstraintSql(t,e){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,r=>{r.dropConstraint(`UNIQUE_${e}`);}).toQueries()}generateDropColumnSql(t){return this.sql.schema().alterTable(t.table,e=>{e.dropColumn(t.column);}).toQueries()}generateDropTableSql(t){return [`DROP TABLE ${t.table}`]}};var Br=class Br{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new kr(t);}generateOperations(t){let e=[];e.push(...this.generateStructureCreationOperations(t)),e.push(...this.generateConstraintCreationOperations(t)),e.push(...this.generateDestructiveOperations(t)),e.push(...this.generateColumnModificationOperations(t));let r=l=>l.table&&l.constraint?`${l.table}::${l.constraint}`:void 0,o=new Set(e.filter(l=>l.type==="ADD_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),n=new Set(e.filter(l=>l.type==="DROP_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),s=new Set([...o].filter(l=>n.has(l)));return e.filter(l=>{let u=r(l);return u?!(s.has(u)&&(l.type==="ADD_FOREIGN_KEY"||l.type==="DROP_FOREIGN_KEY")):true})}generateStructureCreationOperations(t){let e=[];for(let r of t.tablesToAdd){let o=this.sql.schema().createTable(r.table,n=>{for(let s of r.columns){if(Array.isArray(s.type)){n.enum(s.databaseName,s.type);continue}s.type&&this.executeBuilderMethod(r.table,n,s,[s.databaseName,s.length,s.precision&&!s.withTimezone?s.precision:void 0,s.scale,s.withTimezone?{withTimezone:s.withTimezone,precision:s.precision}:void 0].filter(Boolean),true);}}).toQuery();e.push({type:"CREATE_TABLE",phase:"STRUCTURE_CREATION",table:r.table,data:r,dependencies:[],sqlStatements:[o]});}for(let r of t.columnsToAdd){let o=this.generateAddColumnViaAlter(r);e.push({type:"ADD_COLUMN",phase:"STRUCTURE_CREATION",table:r.table,column:r.column.databaseName,data:r,dependencies:[`table.${r.table}`],sqlStatements:o});}return e}generateConstraintCreationOperations(t){let e=[];for(let o of t.uniquesToDrop||[]){let n=this.sql.schema().alterTable(o.table,s=>{s.dropConstraint(o.name);}).toQueries();e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:o.table,constraint:o.name,data:o,dependencies:[`table.${o.table}`],sqlStatements:n});}let r=new Set((t.uniquesToDrop||[]).map(o=>o.name));for(let o of t.indexesToDrop){if(r.has(o.index))continue;let n=new ie(this.sql.getDbType());n.dropIndex(o.index,o.table);let s=n.queryStatements[0];e.push({type:"DROP_INDEX",phase:"CONSTRAINT_CREATION",table:o.table,index:o.index,data:o,dependencies:[`table.${o.table}`],sqlStatements:[s]});}for(let o of t.primaryKeysToAdd){let a=this.models.find(u=>u.table===o.table)?.getColumns().find(u=>u.columnName===o.columns[0])?.primaryKeyConstraintName||Te(o.table,o.columns[0]),l=this.sql.schema().alterTable(o.table,u=>{let d=a||Te(o.table,o.columns[0]);u.addConstraint("primary_key",{columns:[o.columns[0]],constraintName:d});}).toQueries();e.push({type:"ADD_PRIMARY_KEY",phase:"CONSTRAINT_CREATION",table:o.table,constraint:a,data:o,dependencies:[`table.${o.table}`],sqlStatements:l});}for(let o of t.relationsToAdd){if(o.relation.type==="manyToMany")continue;let n=this.generateAddRelationViaAlter(o),s=this.computeFkConstraintName(o);e.push({type:"ADD_FOREIGN_KEY",phase:"CONSTRAINT_CREATION",table:o.table,constraint:s,data:o,dependencies:this.getForeignKeyDependencies(o),sqlStatements:n});}for(let o of t.uniquesToAdd||[]){let n=this.models.find(l=>l.table===o.table),s=(o.columns||[]).map(l=>n?.getColumns().find(d=>d.columnName===l)?.databaseName||l),a=this.sql.schema().alterTable(o.table,l=>{l.addConstraint("unique",{columns:s,constraintName:o.name||"mandatory"});}).toQueries();e.push({type:"ADD_UNIQUE_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:o.table,constraint:o.name||"mandatory",data:o,dependencies:[`table.${o.table}`],sqlStatements:a});}for(let o of t.indexesToAdd){let n=this.generateCreateIndexSql(o);e.push({type:"CREATE_INDEX",phase:"CONSTRAINT_CREATION",table:o.table,index:o.index,data:o,dependencies:[`table.${o.table}`],sqlStatements:[n]});}for(let o of t.checksToDrop||[]){let n=new ie(this.sql.getDbType());n.dropCheck(o.table,o.name);let s=n.queryStatements;e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:o.table,constraint:o.name,data:o,dependencies:[`table.${o.table}`],sqlStatements:s});}for(let o of t.checksToAdd||[]){let n=new ie(this.sql.getDbType());n.addCheck(o.table,o.expression,{constraintName:o.name});let s=n.queryStatements;e.push({type:"ADD_CHECK_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:o.table,constraint:o.name,data:o,dependencies:[`table.${o.table}`],sqlStatements:s});}return e}computeFkConstraintName(t){let e=q(t.relation.constraintName);if(e)return e;let r=t.table;t.relation.type==="belongsTo"?r=t.relation.model().table:t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(r=q(t.relation.manyToManyOptions.throughModel));let n=this.models.find(a=>a.table===t.table)?.getColumns()||[],s=t.relation.columnName;return t.relation.type==="belongsTo"?s=n.find(l=>l.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey:s=n.find(l=>l.columnName===s)?.databaseName||s,Z(t.table,s,r)}generateDestructiveOperations(t){return this.dropResolver.generateDropOperations(t)}generateColumnModificationOperations(t){let e=[];for(let r of t.columnsToModify||[]){let o=this.generateModifyColumnViaAlter(r);e.push({type:"MODIFY_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:r.table,column:r.dbColumns.name,data:r,dependencies:[],sqlStatements:o});}return e}getForeignKeyDependencies(t){let e=[];if(t.relation.type==="belongsTo"){let o=t.relation.model();e.push(`table.${o.table}`);let n=o.primaryKey||"id",s=o.getColumns().find(a=>a.columnName===n);s&&e.push(`column.${o.table}.${s.databaseName}`);}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let o=q(t.relation.manyToManyOptions.throughModel);e.push(`table.${o}`);}e.push(`table.${t.table}`);let r=this.models.find(o=>o.table===t.table);if(r){let o=r.getColumns().find(n=>n.columnName===t.relation.columnName||n.databaseName===t.relation.columnName);o&&e.push(`column.${t.table}.${o.databaseName}`);}return e}applyNullableConstraint(t,e){return e===false?t.notNullable():e===true||this.sql.getDbType()==="mariadb"?t.nullable():t}executeBuilderMethod(t,e,r,o,n=true){let s;if(Array.isArray(r.type))s=e.enum(o[0],r.type);else if(typeof r.type=="string"&&Br.BUILTIN_COLUMN_TYPES.has(r.type))s=e[r.type](...o);else if(typeof r.type=="string")s=e.custom(o[0],r.type,r.length);else throw new Error(`Unknown column type: ${String(r.type)} for column ${r.columnName}`);return n&&(r.isPrimary&&s.primaryKey({constraintName:r.primaryKeyConstraintName||Te(t,r.columnName)}),r.unsigned&&s.unsigned(),r.zerofill&&s.zerofill(),r.constraints?.default!==void 0&&s.default(r.constraints.default),this.applyNullableConstraint(s,r.constraints?.nullable)),s}generateAddColumnViaAlter(t){let e=[t.column.databaseName,t.column.length,t.column.precision&&!t.column.withTimezone?t.column.precision:void 0,t.column.scale,t.column.withTimezone?{withTimezone:t.column.withTimezone,precision:t.column.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,r=>{r.addColumn(o=>{let n=this.executeBuilderMethod(t.table,o,t.column,e,false);return t.column.constraints?.default!==void 0&&n.default(t.column.constraints.default),this.applyNullableConstraint(n,t.column.constraints?.nullable),n});}).toQueries()}generateModifyColumnViaAlter(t){if(this.sql.getDbType()==="sqlite")return [];let e=[t.modelColumn.databaseName,t.modelColumn.length,t.modelColumn.precision&&!t.modelColumn.withTimezone?t.modelColumn.precision:void 0,t.modelColumn.scale,t.modelColumn.withTimezone?{withTimezone:t.modelColumn.withTimezone,precision:t.modelColumn.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,o=>{o.alterColumn(n=>{let s=this.executeBuilderMethod(t.table,n,t.modelColumn,e,false);return t.modelColumn.constraints?.default!==void 0?s.default(t.modelColumn.constraints.default):t.dbColumns.defaultValue!=null&&t.dbColumns.defaultValue!==""&&s.default(null),this.applyNullableConstraint(s,t.modelColumn.constraints?.nullable),s});}).toQueries()}generateCreateIndexSql(t){let e=this.models.find(s=>s.table===t.table),o=(e?.getIndexes().find(s=>s.name===t.index)?.columns||[]).map(s=>e?.getColumns().find(l=>l.columnName===s)?.databaseName||s),n=new ie(this.sql.getDbType());return n.createIndex(t.table,o,{constraintName:t.index}),n.queryStatements[0]||""}generateAddRelationViaAlter(t){let e=t.table,r=t.relation.foreignKey;t.relation.type==="belongsTo"?(e=t.relation.model().table,r=t.relation.model().primaryKey||"id"):t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(e=q(t.relation.manyToManyOptions.throughModel),r=q(t.relation.manyToManyOptions.rightForeignKey),(!r||r==="undefined")&&(r=t.relation.model().primaryKey||"id"));let o=typeof t.relation.constraintName=="string"?t.relation.constraintName:void 0,n=q(r);if(t.relation.type==="belongsTo"){let m=t.relation.model(),p=m.primaryKey,y=m.getColumns().find(T=>T.columnName===p);if(y)n=y.databaseName;else {let T=m?.databaseCaseConvention||"preserve";n=z(p,T);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.model();if(typeof n=="string"&&n){let p=m.getColumns(),f=p.find(y=>y.columnName===n);if(f)n=f.databaseName;else {let y=m.primaryKey||"id",T=p.find(b=>b.columnName===y);if(T)n=T.databaseName;else {let b=m?.databaseCaseConvention||"preserve";n=z(n||y,b);}}}else {let p=m.primaryKey||"id",y=m.getColumns().find(T=>T.columnName===p);if(y)n=y.databaseName;else {let T=m?.databaseCaseConvention||"preserve";n=z(p,T);}}}let s=this.models.find(m=>m.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,u=a.find(m=>m.columnName===l);if(u)l=u.databaseName;else {let m=s?.databaseCaseConvention||"preserve";l=z(l,m);}if(t.relation.type==="belongsTo"){let m=a.find(p=>p.columnName===t.relation.foreignKey);if(m)l=m.databaseName;else {let p=s?.databaseCaseConvention||"preserve";l=z(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.manyToManyOptions.leftForeignKey,p=q(m),f=a.find(y=>y.columnName===p);if(f)l=f.databaseName;else {let y=s?.databaseCaseConvention||"preserve";l=z(p,y);}}let d=t.relation.onDelete?.toLowerCase(),c=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,m=>{let p=o||Z(t.table,l,e);m.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[n]},constraintName:p,onDelete:d,onUpdate:c});}).toQueries()}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};Br.BUILTIN_COLUMN_TYPES=new Set(["char","varchar","string","text","longtext","mediumtext","tinytext","uuid","ulid","integer","tinyint","smallint","mediumint","bigint","biginteger","float","double","real","decimal","numeric","increment","bigIncrement","boolean","date","time","datetime","timestamp","year","json","jsonb","binary","varbinary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]);var $t=Br;var Kr=class Kr{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}generateCode(t){let e=[],r=[],o=null,n={STRUCTURE_CREATION:"Structure creation",CONSTRAINT_CREATION:"Constraints and indexes",DESTRUCTIVE_OPERATIONS:"Destructive operations"};for(let s of t){s.phase!==o&&(o=s.phase,e.length>0&&e.push(""),e.push(`// ${n[o]}`));let{up:a,down:l}=this.generateOperationCode(s);a&&e.push(...a),l&&r.push(...l);}return {up:e,down:r}}generateOperationCode(t){switch(t.type){case "CREATE_TABLE":return this.generateCreateTableCode(t);case "ADD_COLUMN":return this.generateAddColumnCode(t);case "MODIFY_COLUMN":return this.generateModifyColumnCode(t);case "DROP_COLUMN":return this.generateDropColumnCode(t);case "CREATE_INDEX":return this.generateCreateIndexCode(t);case "DROP_INDEX":return this.generateDropIndexCode(t);case "ADD_FOREIGN_KEY":return this.generateAddForeignKeyCode(t);case "DROP_FOREIGN_KEY":return this.generateDropForeignKeyCode(t);case "ADD_UNIQUE_CONSTRAINT":return this.generateAddUniqueCode(t);case "DROP_CONSTRAINT":return this.generateDropConstraintCode(t);case "ADD_CHECK_CONSTRAINT":return this.generateAddCheckCode(t);case "ADD_PRIMARY_KEY":return this.generateAddPrimaryKeyCode(t);case "DROP_TABLE":return this.generateDropTableCode(t);case "MODIFY_PRIMARY_KEY":return this.generateModifyPrimaryKeyCode(t);default:return {up:null,down:null}}}generateCreateTableCode(t){let e=t.data,r=[];r.push(`this.schema.createTable(${this.quote(e.table)}, (table) => {`);for(let n of e.columns){let s=this.generateColumnCode(e.table,n,true);r.push(` ${s}`);}r.push("});");let o=[`this.schema.dropTable(${this.quote(e.table)});`];return {up:r,down:o}}generateAddColumnCode(t){let{table:e,column:r}=t.data,o=this.generateColumnCode(e,r,false),n=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.addColumn((col) => ${o.replace(/^table\./,"col.")});`,"});"],s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r.databaseName)});`,"});"];return {up:n,down:s}}generateModifyColumnCode(t){let{table:e,modelColumn:r,dbColumns:o}=t.data,n=this.generateColumnCodeForModify(e,r,o),s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.alterColumn((col) => ${n.replace(/^table\./,"col.")});`,"});"],a=[`// TODO: reverse column modification for ${this.quote(o.name)} on ${this.quote(e)}`];return {up:s,down:a}}generateDropColumnCode(t){let{table:e,column:r}=t.data,o=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r)});`,"});"],n=[`// TODO: reverse column drop for ${this.quote(r)} on ${this.quote(e)}`];return {up:o,down:n}}generateCreateIndexCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),n=(r?.getIndexes().find(u=>u.name===e.index)?.columns||[]).map(u=>r?.getColumns().find(c=>c.columnName===u)?.databaseName||u),s=n.length===1?this.quote(n[0]):`[${n.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.createIndex(${this.quote(e.table)}, ${s}, { constraintName: ${this.quote(e.index)} });`],l=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`];return {up:a,down:l}}generateDropIndexCode(t){let e=t.data,r=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`],o=[`// TODO: reverse index drop for ${this.quote(e.index)} on ${this.quote(e.table)}`];return {up:r,down:o}}generateAddForeignKeyCode(t){let e=t.data,{sourceColumn:r,referencedTable:o,referencedColumn:n,constraintName:s}=this.resolveRelationDetails(e),a=e.relation.onDelete?.toLowerCase(),l=e.relation.onUpdate?.toLowerCase(),u=[];s&&u.push(`constraintName: ${this.quote(s)}`),a&&u.push(`onDelete: ${this.quote(a)}`),l&&u.push(`onUpdate: ${this.quote(l)}`);let d=u.length>0?`, { ${u.join(", ")} }`:"",c=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.foreignKey(${this.quote(r)}, ${this.quote(o)}, ${this.quote(n)}${d});`,"});"],m=s||Z(e.table,r,o),p=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.dropConstraint(${this.quote(m)});`,"});"];return {up:c,down:p}}generateDropForeignKeyCode(t){let e=t.constraint||t.data?.relation?.name;if(!e)return {up:null,down:null};let r=t.table||t.data?.table,o=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(e)});`,"});"],n=[`// TODO: reverse FK drop for ${this.quote(e)} on ${this.quote(r)}`];return {up:o,down:n}}generateAddUniqueCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),n=`[${(e.columns||[]).map(u=>r?.getColumns().find(c=>c.columnName===u)?.databaseName||u).map(u=>this.quote(u)).join(", ")}]`,s=e.name||"mandatory",a=[`this.schema.addUnique(${this.quote(e.table)}, ${n}, { constraintName: ${this.quote(s)} });`],l=[`this.schema.dropUnique(${this.quote(e.table)}, ${n}, { constraintName: ${this.quote(s)} });`];return {up:a,down:l}}generateDropConstraintCode(t){let e=t.data,r=t.table||e.table,o=t.constraint||e.name;if(!o||!r)return {up:null,down:null};if(e.type==="primary_key"){let a=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});"],l=[`// TODO: reverse primary key drop on ${this.quote(r)}`];return {up:a,down:l}}if(e.type==="unique"){let a=e.column,l=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(o)});`,"});"],u=[`// TODO: reverse unique constraint drop for ${this.quote(a)} on ${this.quote(r)}`];return {up:l,down:u}}if(e.expression!==void 0){let a=[`this.schema.dropCheck(${this.quote(r)}, ${this.quote(o)});`],l=[`// TODO: reverse check constraint drop for ${this.quote(o)} on ${this.quote(r)}`];return {up:a,down:l}}let n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(o)});`,"});"],s=[`// TODO: reverse constraint drop for ${this.quote(o)} on ${this.quote(r)}`];return {up:n,down:s}}generateAddCheckCode(t){let e=t.data,r=[`this.schema.addCheck(${this.quote(e.table)}, ${this.quote(e.expression)}, { constraintName: ${this.quote(e.name)} });`],o=[`this.schema.dropCheck(${this.quote(e.table)}, ${this.quote(e.name)});`];return {up:r,down:o}}generateAddPrimaryKeyCode(t){let e=t.data,n=this.models.find(u=>u.table===e.table)?.getColumns().find(u=>u.columnName===e.columns[0])?.primaryKeyConstraintName||Te(e.table,e.columns[0]),s=`[${e.columns.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.addConstraint("primary_key", { columns: ${s}, constraintName: ${this.quote(n)} });`,"});"],l=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`," table.dropPrimaryKey();","});"];return {up:a,down:l}}generateDropTableCode(t){let e=t.table||t.data?.table,r=[`this.schema.dropTable(${this.quote(e)});`],o=[`// TODO: reverse table drop for ${this.quote(e)}`];return {up:r,down:o}}generateModifyPrimaryKeyCode(t){let e=t.data,r=e.table,o=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});",`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.addPrimaryKey(${this.quote(e.modelPrimaryKey)});`,"});"],n=[`// TODO: reverse primary key modification on ${this.quote(r)}`];return {up:o,down:n}}generateColumnCode(t,e,r){let o=this.generateColumnTypeCode(e);if(!r)return o;if(e.isPrimary){let n=e.primaryKeyConstraintName||Te(t,e.columnName);o+=`.primaryKey({ constraintName: ${this.quote(n)} })`;}return e.unsigned&&(o+=".unsigned()"),e.zerofill&&(o+=".zerofill()"),e.constraints?.default!==void 0&&(o+=`.default(${this.formatDefaultValue(e.constraints.default)})`),e.constraints?.nullable===false?o+=".notNullable()":e.constraints?.nullable===true&&(o+=".nullable()"),o+";"}generateColumnCodeForModify(t,e,r){let o=this.generateColumnTypeCode(e);return e.constraints?.default!==void 0?o+=`.default(${this.formatDefaultValue(e.constraints.default)})`:r.defaultValue!=null&&r.defaultValue!==""&&(o+=".default(null)"),e.constraints?.nullable===false?o+=".notNullable()":e.constraints?.nullable===true&&(o+=".nullable()"),o}generateColumnTypeCode(t){let e=t.databaseName;if(Array.isArray(t.type)){let s=t.type.map(a=>this.quote(a)).join(", ");return `table.enum(${this.quote(e)}, [${s}])`}let r=t.type;if(new Set(["uuid","ulid","boolean","year","json","jsonb","binary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]).has(r))return `table.${r}(${this.quote(e)})`;if(r==="timestamp"||r==="datetime"){let s=[];return t.withTimezone&&s.push("withTimezone: true"),t.precision!=null&&s.push(`precision: ${t.precision}`),s.length>0?`table.${r}(${this.quote(e)}, { ${s.join(", ")} })`:`table.${r}(${this.quote(e)})`}return r==="date"||r==="time"?t.precision!=null?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="increment"||r==="bigIncrement"?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:r==="decimal"||r==="numeric"?t.precision!=null?t.scale!=null?`table.${r}(${this.quote(e)}, ${t.precision}, ${t.scale})`:`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="float"||r==="double"||r==="real"?t.precision!=null&&t.precision!==10?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="longtext"||r==="mediumtext"||r==="tinytext"?`table.${r}(${this.quote(e)})`:new Set(["varchar","char","string","integer","tinyint","smallint","mediumint","bigint","biginteger","varbinary"]).has(r)?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:Kr.BUILTIN_COLUMN_TYPES.has(r)?`table.${r}(${this.quote(e)})`:t.length!=null?`table.custom(${this.quote(e)}, ${this.quote(r)}, ${t.length})`:`table.custom(${this.quote(e)}, ${this.quote(r)})`}resolveRelationDetails(t){let e=t.table,r="id";if(t.relation.type==="belongsTo"){let l=t.relation.model();e=l.table;let u=l.primaryKey||"id";r=l.getColumns().find(m=>m.columnName===u)?.databaseName||u;}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){e=q(t.relation.manyToManyOptions.throughModel);let l=q(t.relation.manyToManyOptions.rightForeignKey);l&&l!=="undefined"?r=l:r=t.relation.model().primaryKey||"id";}let n=this.models.find(l=>l.table===t.table)?.getColumns()||[],s=t.relation.columnName;if(t.relation.type==="belongsTo")s=n.find(u=>u.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey;else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let l=q(t.relation.manyToManyOptions.leftForeignKey);s=n.find(d=>d.columnName===l)?.databaseName||l;}else s=n.find(u=>u.columnName===s)?.databaseName||s;let a=typeof t.relation.constraintName=="string"?t.relation.constraintName:q(t.relation.constraintName)||void 0;return {sourceColumn:s,referencedTable:e,referencedColumn:r,constraintName:a}}quote(t){return `"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}formatDefaultValue(t){return t==null?"null":t==="NULL"?'"NULL"':typeof t=="boolean"||typeof t=="number"?t.toString():t==="TRUE"||t==="true"?"true":t==="FALSE"||t==="false"?"false":this.quote(String(t))}};Kr.BUILTIN_COLUMN_TYPES=new Set(["char","varchar","string","text","longtext","mediumtext","tinytext","uuid","ulid","integer","tinyint","smallint","mediumint","bigint","biginteger","float","double","real","decimal","numeric","increment","bigIncrement","boolean","date","time","datetime","timestamp","year","json","jsonb","binary","varbinary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]);var Qr=Kr;function Fh(i){return i.replace(/\s+/g," ").trim()}function Uh(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function Vh(i){let t=i.split(/\s+/).filter(o=>o.length>0),e=[],r=[];for(let o of t)o==="unsigned"||o==="zerofill"?e.push(o):r.push(o);return {bareBase:r.join(" "),modifiers:e}}function Jh(i,t){return t.length===0?i:`${i} ${t.join(" ")}`}function ve(i,t){let e=Fh(t.toLowerCase()),r=Uh(e);switch(i){case "sqlite":{let o=[{test:n=>n==="increment",normalized:"integer"},{test:n=>n==="bigincrement",normalized:"integer"},{test:n=>n.includes("int"),normalized:"integer"},{test:n=>n==="string",normalized:"varchar"},{test:n=>n.includes("char"),normalized:"varchar"},{test:n=>n.includes("text"),normalized:"text"},{test:n=>n.includes("clob"),normalized:"text"},{test:n=>n.includes("date"),normalized:"text"},{test:n=>n.includes("time"),normalized:"text"},{test:n=>n.includes("timestamp"),normalized:"text"},{test:n=>n.includes("datetime"),normalized:"text"},{test:n=>n.includes("blob"),normalized:"blob"},{test:n=>n.includes("real")||n.includes("floa")||n.includes("doub"),normalized:"real"},{test:n=>n.includes("numeric"),normalized:"numeric"},{test:n=>n.includes("bool"),normalized:"integer"},{test:n=>n.includes("uuid"),normalized:"varchar"},{test:n=>n.includes("ulid"),normalized:"varchar"},{test:n=>n.includes("jsonb"),normalized:"text"},{test:n=>n.includes("json"),normalized:"text"}];for(let n of o)if(n.test(r))return n.normalized;return r}case "mysql":case "mariadb":{let{bareBase:o,modifiers:n}=Vh(r),a=new Set(["int","integer","increment","tinyint","smallint","mediumint","bigint","bigincrement","float","double","double precision","real","decimal","numeric","year","bool","boolean"]).has(o);if(o.endsWith("text")||o==="text")return "text";let l;switch(o){case "int":case "integer":case "increment":l="integer";break;case "tinyint":l="boolean";break;case "smallint":l="smallint";break;case "mediumint":l="mediumint";break;case "bigint":case "bigincrement":l="bigint";break;case "float":l="float";break;case "double":case "double precision":l="double";break;case "real":l="double";break;case "decimal":case "numeric":l="numeric";break;case "string":case "varchar":case "character varying":l="varchar";break;case "char":case "character":l="char";break;case "uuid":l="varchar";break;case "ulid":l="varchar";break;case "date":l="date";break;case "datetime":l="datetime";break;case "timestamp":l="timestamp";break;case "time":l="time";break;case "year":l="year";break;case "jsonb":case "json":l=i==="mariadb"?"text":"json";break;case "enum":l="enum";break;case "binary":l="binary";break;case "varbinary":l="varbinary";break;case "tinyblob":l="tinyblob";break;case "mediumblob":l="mediumblob";break;case "longblob":l="longblob";break;case "blob":l="blob";break;case "boolean":case "bool":l="boolean";break;default:l=o;break}return a&&n.length>0?Jh(l,n):l}case "postgres":case "cockroachdb":{if(r.endsWith("text")||r==="text")return "text";if(r.startsWith("timestamp"))return "timestamp";if(r.startsWith("time"))return "time";if(r==="datetime")return "timestamp";switch(r){case "string":case "varchar":case "character varying":return "varchar";case "char":case "character":return "char";case "ulid":return "varchar";case "double precision":return "double";case "real":return "real";case "float":return "real";case "integer":case "int4":case "int":case "increment":case "serial":return "integer";case "mediumint":return "integer";case "bigint":case "int8":case "bigincrement":case "bigserial":return "bigint";case "smallint":case "int2":return "smallint";case "tinyint":return "smallint";case "uuid":return "uuid";case "year":return "smallint";case "bytea":return "bytea";case "binary":case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":return "bytea";case "boolean":case "bool":return "boolean";case "numeric":case "decimal":return "numeric";case "jsonb":return "jsonb";case "json":return "json";case "date":return "date";default:return r}}case "mssql":{if(r.endsWith("text")||r==="text"||r==="ntext")return "text";if(r.startsWith("datetime2"))return "datetime2";if(r.startsWith("datetimeoffset"))return "datetimeoffset";switch(r){case "int":case "integer":case "increment":return "int";case "tinyint":return "tinyint";case "smallint":return "smallint";case "bigint":case "bigincrement":return "bigint";case "float":return "float";case "real":return "real";case "double":case "double precision":return "float";case "decimal":case "numeric":return "decimal";case "money":return "money";case "smallmoney":return "smallmoney";case "string":case "varchar":case "character varying":return "varchar";case "nvarchar":return "nvarchar";case "char":case "character":return "char";case "nchar":return "nchar";case "uuid":case "uniqueidentifier":return "uniqueidentifier";case "ulid":return "varchar";case "date":return "date";case "datetime":return "datetime";case "smalldatetime":return "smalldatetime";case "time":return "time";case "timestamp":return "datetime2";case "binary":return "binary";case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":case "bytea":return "varbinary";case "image":return "image";case "bit":case "boolean":case "bool":return "bit";case "json":case "jsonb":return "nvarchar";case "xml":return "xml";case "sql_variant":return "sql_variant";default:return r}}case "oracledb":{if(r.endsWith("clob")||r==="clob"||r==="nclob")return "clob";if(r.startsWith("timestamp"))return "timestamp";if(r.startsWith("interval"))return "interval";switch(r){case "string":case "varchar":case "varchar2":case "nvarchar2":case "character varying":return "varchar2";case "char":case "nchar":case "character":return "char";case "number":case "numeric":case "decimal":case "integer":case "int":case "smallint":case "tinyint":case "mediumint":case "bigint":return "number";case "binary_float":case "float":case "real":return "binary_float";case "binary_double":case "double":case "double precision":return "binary_double";case "date":return "date";case "blob":case "raw":case "long raw":case "bytea":case "binary":case "varbinary":return "blob";case "json":case "jsonb":return "clob";case "boolean":case "bool":return "number";case "uuid":case "ulid":return "varchar2";default:return r}}default:return r}}var Ve=class i{constructor(t){this.emptyStatements=[/^alter table [`'"]?[\w]+[`'"]?\s*$/i];this.sql=t,this.models=Object.values(this.sql._models),this.data={columnsToAdd:[],columnsToDrop:[],columnsToModify:[],indexesToAdd:[],indexesToDrop:[],uniquesToAdd:[],uniquesToDrop:[],checksToAdd:[],checksToDrop:[],tablesToAdd:[],relationsToAdd:[],relationsToDrop:[],relationsToModify:[],primaryKeysToAdd:[],primaryKeysToDrop:[],primaryKeysToModify:[]};}static async makeDiff(t){let e=new i(t);return await Promise.all(e.models.map(async r=>{let o=await e.sql.getTableSchema(r.table),n={columns:r.getColumns().filter(y=>y?.type!==void 0&&y?.type!==null),indexes:r.getIndexes(),relations:r.getRelations()};if(!o.columns.length){e.data.tablesToAdd.push({table:r.table,columns:n.columns});for(let b of n.indexes)o.indexes.map(C=>C.name).includes(b.name)||e.data.indexesToAdd.push({table:r.table,index:b.name});let y=r.getUniques?.()||[];for(let b of y)e.data.uniquesToAdd.push({table:r.table,name:b.name||"mandatory",columns:b.columns});let T=r.getChecks?.()||[];for(let b of T)e.data.checksToAdd.push({table:r.table,name:b.name,expression:b.expression});for(let b of n.relations){if(b.type!=="belongsTo")continue;let C=q(b.constraintName);o.foreignKeys.find(_=>_.name===C)||e.data.relationsToAdd.push({table:r.table,relation:b,onDelete:b.onDelete,onUpdate:b.onUpdate});}return}for(let y of n.columns)o.columns.some(b=>b.name===y.databaseName||b.name===y.columnName)||e.data.columnsToAdd.push({table:r.table,column:y});let s=r.getColumns();for(let y of o.columns)s.some(b=>b.databaseName===y.name||b.columnName===y.name)||e.data.columnsToDrop.push({table:r.table,column:y.name});for(let y of n.indexes)o.indexes.map(T=>T.name).includes(y.name)||e.data.indexesToAdd.push({table:r.table,index:y.name});let a=r.getUniques?.()||[];for(let y of a)o.indexes.some(b=>b.name===y.name&&b.isUnique)||e.data.uniquesToAdd.push({table:r.table,name:y.name||"mandatory",columns:y.columns});let l=o.foreignKeys.map(y=>y.name);for(let y of o.indexes)y.isUnique||l.includes(y.name)||n.indexes.map(b=>b.name).includes(y.name)||e.data.indexesToDrop.push({table:r.table,index:y.name});for(let y of o.indexes){if(!y.isUnique||y.name==="PRIMARY")continue;(r.getUniques?.()||[]).map(b=>b.name).includes(y.name)||e.data.uniquesToDrop.push({table:r.table,name:y.name});}let u=r.getChecks?.()||[];for(let y of u)o.checkConstraints.some(b=>b.name===y.name)||e.data.checksToAdd.push({table:r.table,name:y.name,expression:y.expression});let d=new Set(u.map(y=>y.name)),c=n.columns.filter(y=>Array.isArray(y.type)),m=new Set(c.map(y=>y.databaseName||y.columnName));for(let y of o.checkConstraints)if(!d.has(y.name)){let T=[...m].find(b=>{let C=b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),R=new RegExp(`[\\["\\[]?${C}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),_=new RegExp(`[\\("\\[]?${C}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return R.test(y.expression)||_.test(y.expression)});if(T){let b=c.find(R=>(R.databaseName||R.columnName)===T),C=o.columns.find(R=>R.name===T);if(b&&C?.enumValues&&Array.isArray(b.type)){let R=[...b.type].sort(),_=[...C.enumValues].sort();if(!(R.length===_.length&&R.every((A,M)=>A===_[M]))){e.data.checksToDrop.push({table:r.table,name:y.name});let A=e.sql.getDbType(),M=A==="mssql"?"[":'"',v=A==="mssql"?"]":'"',H=b.type.map(I=>`'${I.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:y.name,expression:`${M}${T}${v} IN (${H})`});}}}else e.data.checksToDrop.push({table:r.table,name:y.name});}for(let y of n.columns){let T=o.columns.find(R=>R.name===y.databaseName||R.name===y.columnName);if(!T)continue;let b=!e.areColumnsEqual(T,y,o.indexes),C=e.getDefaultChange({table:r.table,dbColumns:T,modelColumn:y});(b||C)&&e.data.columnsToModify.push({table:r.table,dbColumns:T,modelColumn:y});}for(let y of n.relations){if(y.type!=="belongsTo"&&y.type!=="manyToMany")continue;if(y.type==="manyToMany"&&y.manyToManyOptions){let C=q(y.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:C,relation:{type:"belongsTo",model:()=>r,columnName:q(y.manyToManyOptions.leftForeignKey),foreignKey:y.manyToManyOptions.leftForeignKey,constraintName:y.constraintName?q(y.constraintName):Z(C,q(y.manyToManyOptions.leftForeignKey||Hl(r.table)),r.table),onDelete:y.onDelete,onUpdate:y.onUpdate},onDelete:y.onDelete,onUpdate:y.onUpdate});continue}let T=q(y.constraintName);if(T&&o.foreignKeys.some(C=>C.name===T))continue;o.foreignKeys.find(C=>e.relationMatchesDbRelation(r,y,C))||e.data.relationsToAdd.push({table:r.table,relation:y,onDelete:y.onDelete,onUpdate:y.onUpdate});}let p=new Set(n.relations.filter(y=>y.type==="belongsTo").map(y=>{let T=q(y.foreignKey)||y.columnName,C=r.getColumns().find(R=>R.columnName===T)?.databaseName||T;return q(y.constraintName)||Z(r.table,C,y.model().table)}));for(let y of o.foreignKeys){if(y.name&&p.has(y.name))continue;n.relations.find(b=>b.type!=="belongsTo"&&b.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,b,y))||e.data.relationsToDrop.push({table:r.table,relation:y});}for(let y of n.relations){if(y.type!=="belongsTo"&&y.type!=="manyToMany")continue;let T=o.foreignKeys.find(b=>e.relationMatchesDbRelation(r,y,b));T&&!e.areRelationsEqual(T,y)&&e.data.relationsToModify.push({table:r.table,dbRelation:T,modelRelation:y,onDelete:y.onDelete,onUpdate:y.onUpdate});}let f=r.primaryKey;if(f&&!o.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[f]}),o.primaryKey&&!f&&e.data.primaryKeysToDrop.push({table:r.table,columns:o.primaryKey.columns,name:o.primaryKey.name}),f&&o.primaryKey){let y=r.getColumns().find(T=>T.columnName===f);y&&!e.arePrimaryKeysEqual(o.primaryKey,y)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:o.primaryKey,modelPrimaryKey:f});}})),await e.processManyToMany(),await e.removeFkChurnByName(),e}getSqlStatements(){let t=this.getSqlStatementsByPhase();return Object.values(t).flat().filter(r=>{let o=r.trim();return o?!this.emptyStatements.some(n=>n.test(o)):false})}getCodeStatements(){let e=new $t(this.sql).generateOperations(this.data);return new Qr(this.sql).generateCode(e)}getSqlStatementsByPhase(){let t=new $t(this.sql),e=t.generateOperations(this.data),r=t.formatSqlStatements(e),o={STRUCTURE_CREATION:[],CONSTRAINT_CREATION:[],DESTRUCTIVE_OPERATIONS:[]};for(let n of r)o[n.phase].push(...n.sqlStatements);return o}areColumnsEqual(t,e,r=[]){let o=t.name===e.databaseName,n=this.sql.getDbType(),s=ve(n,t.dataType),a=typeof e.type=="string"?ve(n,e.type):void 0,l=s.split(" ").filter(d=>d!=="unsigned"&&d!=="zerofill").join(" ");if(a&&o&&(o=l===a),Array.isArray(e.type)&&(n==="mysql"||n==="mariadb")){let d=[...e.type].sort(),c=t.enumValues?[...t.enumValues].sort():null;c&&o&&(o=d.length===c.length&&d.every((m,p)=>m===c[p]));}e.length!=null&&t.length!=null&&o&&(o=t.length===e.length);let u=a==="real"||a==="double"||a==="float";if(e.precision!=null&&t.precision!=null&&((n==="postgres"||n==="cockroachdb")&&u||o&&(o=t.precision===e.precision)),e.scale!=null&&t.scale!=null&&((n==="postgres"||n==="cockroachdb")&&u||o&&(o=t.scale===e.scale)),typeof e.type=="string"&&(a==="timestamp"||a==="time")&&(n==="postgres"||n==="cockroachdb")&&e.withTimezone!==void 0&&t.withTimezone!==void 0&&o&&(o=!!t.withTimezone==!!e.withTimezone),e.constraints?.nullable!==void 0){let d=e.constraints.nullable,c=t.isNullable;o=o&&d===c;}if(n==="mysql"||n==="mariadb"){if(e.unsigned!==void 0){let d=e.unsigned??false,c=t.unsigned??false;o&&(o=d===c);}if(e.zerofill!==void 0){let d=e.zerofill??false,c=t.zerofill??false;o&&(o=d===c);}}if(e.stringMode!==void 0){let d=e.stringMode??false,c=t.stringMode??false;o&&(o=d===c);}return o}areRelationsEqual(t,e){let r=q(e.constraintName),o=r?t.name===r:true;if(e.type==="belongsTo"){let u=e.model(),d=u.primaryKey||"id",c=u.getColumns().find(f=>f.columnName===d),m=u.table,p=c?.databaseName||d;o=o&&t.referencedTable===m&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===p;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let u=q(e.manyToManyOptions.throughModel);o=o&&t.referencedTable===u;}let n=t.onDelete?.toLowerCase(),s=t.onUpdate?.toLowerCase(),a=e.onDelete?.toLowerCase(),l=e.onUpdate?.toLowerCase();return a&&o&&(o=n===a),l&&o&&(o=s===l),o}relationMatchesDbRelation(t,e,r){let o,n=e;if(n&&n.model){if(typeof n.model=="function"&&n.model.table)o=n.model;else if(typeof n.model=="function")try{let y=n.model();y&&y.table&&(o=y);}catch{}}if(!o)return false;let s=e.type==="belongsTo"?o.table:e.type==="manyToMany"&&e.manyToManyOptions?q(e.manyToManyOptions.throughModel):void 0;if(s&&r.referencedTable!==s)return false;let a=q(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),d=(n.type||"belongsTo")==="belongsTo"?q(n.foreignKey):n.columnName,c=l.find(y=>y.columnName===d);c&&(d=c.databaseName);let m=o.primaryKey||"id",f=o.getColumns().find(y=>y.columnName===m)?.databaseName||m;return r.columns.length===1&&r.columns[0]===d&&r.referencedColumns.length===1&&r.referencedColumns[0]===f}arePrimaryKeysEqual(t,e){if(t.columns.length!==1)return false;let o=t.columns[0]===e.databaseName,n=this.sql.getDbType();if(["mysql","mariadb"].includes(n))return o;let a=!t.name||!e.primaryKeyConstraintName||t.name===e.primaryKeyConstraintName;return o&&a}getDefaultChange(t){let e=this.sql.getDbType(),r=ve(e,t.dbColumns.dataType),o=typeof t.modelColumn.type=="string"?ve(e,t.modelColumn.type):void 0;if(o&&r!==o||t.modelColumn.length!=null&&t.dbColumns.length!=null&&t.dbColumns.length!==t.modelColumn.length||t.modelColumn.precision!=null&&t.dbColumns.precision!=null&&t.dbColumns.precision!==t.modelColumn.precision||t.modelColumn.scale!=null&&t.dbColumns.scale!=null&&t.dbColumns.scale!==t.modelColumn.scale||(this.sql.getDbType()==="postgres"||this.sql.getDbType()==="cockroachdb")&&typeof t.modelColumn.type=="string"&&(o==="timestamp"||o==="time")&&t.modelColumn.withTimezone!==void 0&&t.dbColumns.withTimezone!==void 0&&!!t.dbColumns.withTimezone!=!!t.modelColumn.withTimezone)return false;let s=t.modelColumn.constraints?.default!==void 0,a=t.dbColumns.defaultValue!==null&&t.dbColumns.defaultValue!==void 0,l=t.modelColumn.type==="bigIncrement"||t.modelColumn.type==="increment",u=typeof t.dbColumns.defaultValue=="string"&&t.dbColumns.defaultValue.includes("nextval(");if(s&&!a)return "set";if(!s&&a)return l&&u?false:"drop";if(s&&a){let d=String(t.dbColumns.defaultValue),c=String(t.modelColumn.constraints?.default),m=this.normalizeDefaultValue(e,r,d),p=this.normalizeDefaultValue(e,o||r,c);return m!==p?"set":false}return false}normalizeDefaultValue(t,e,r){let o=String(r).trim();if(!o)return o;if(t==="postgres"||t==="cockroachdb"){if(e==="json"||e==="jsonb")try{o=o.replace(/^\((.*)\)$/s,"$1"),o=o.replace(/::(jsonb?|[a-zA-Z_ ]+[\[\]]*)/g,"");let s=o.match(/^'(.*)'$/s);if(s&&(o=s[1]),o==="{}"||o==="")return "{}";let a=JSON.parse(o);return JSON.stringify(a)}catch{}o=o.replace(/^\((.*)\)$/s,"$1"),o=o.replace(/::[a-zA-Z_ ]+[\[\]]*/g,"");let n=o.match(/^'(.*)'$/s);return n&&(o=n[1]),/^true$/i.test(o)?"true":/^false$/i.test(o)?"false":/^null$/i.test(o)?"null":(o)}if(t==="mysql"||t==="mariadb"){o=o.replace(/^\((.*)\)$/s,"$1");let n=o.match(/^'(.*)'$/s);if(n&&(o=n[1]),/^current_timestamp(?:\(\d+\))?$/i.test(o))return "current_timestamp";if(e==="boolean"){if(/^1$/.test(o))return "true";if(/^0$/.test(o))return "false"}return o}if(t==="sqlite"){o=o.replace(/^\((.*)\)$/s,"$1");let n=o.match(/^'(.*)'$/s);return n&&(o=n[1]),o.toLowerCase()}return o}async processManyToMany(){let t=new Set;for(let e of this.models){let r=e.getRelations();for(let o of r){if(o.type!=="manyToMany"||!o.manyToManyOptions||o.manyToManyOptions.wasModelProvided)continue;let n=q(o.manyToManyOptions.throughModel);if(t.has(n))continue;t.add(n);let s=this.models.find(I=>I.table===o?.manyToManyOptions?.primaryModel),a=o.model();if(!s||!a)continue;let l=s.primaryKey||"id",u=a.primaryKey||"id",d=s.getColumns().find(I=>I.columnName===l),c=a.getColumns().find(I=>I.columnName===u);if(!d||!c)continue;let m=q(o.manyToManyOptions.leftForeignKey)||l,p=q(o.manyToManyOptions.rightForeignKey)||u,f=await this.sql.getTableSchema(n);if(!f.columns.length){this.data.tablesToAdd.push({table:n,columns:[this.clonePkAsColumn(d,m),this.clonePkAsColumn(c,p)]}),this.pushM2mFkRelations({throughTable:n,leftModel:s,rightModel:a,leftFkName:m,rightFkName:p,onDelete:o.onDelete,onUpdate:o.onUpdate,constraintName:void 0});continue}let y=this.clonePkAsColumn(d,m),T=this.clonePkAsColumn(c,p),b=f.columns.find(I=>I.name===m),C=f.columns.find(I=>I.name===p),R=b?this.areColumnsEqual(b,y,f.indexes):false,_=C?this.areColumnsEqual(C,T,f.indexes):false;for(let I of f.foreignKeys){let B=I.referencedTable===s.table,W=I.referencedTable===a.table;if(!B&&!W)continue;let ue=B?m:p,se=I.columns[0];se&&se!==ue&&(this.data.relationsToDrop.push({table:n,relation:I}),se!==m&&se!==p&&this.data.columnsToDrop.push({table:n,column:se}));}let D={};R||(D[y.databaseName]=y),_||(D[T.databaseName]=D[T.databaseName]||T);for(let I of Object.keys(D))this.data.columnsToAdd.push({table:n,column:D[I]});let A=this.buildBelongsToRelation(n,()=>s,m,l,void 0,o.onDelete,o.onUpdate),M=this.buildBelongsToRelation(n,o.model,p,u,void 0,o.onDelete,o.onUpdate),v=f.foreignKeys.find(I=>I.referencedTable===s.table&&I.columns.length===1&&I.columns[0]===m),H=f.foreignKeys.find(I=>I.referencedTable===a.table&&I.columns.length===1&&I.columns[0]===p);if(!v){let I=f.foreignKeys.find(B=>B.referencedTable===s.table);I&&this.data.relationsToDrop.push({table:n,relation:I}),this.data.relationsToAdd.push(A);}if(!H){let I=f.foreignKeys.find(B=>B.referencedTable===a.table);I&&this.data.relationsToDrop.push({table:n,relation:I}),this.data.relationsToAdd.push(M);}}}}async removeFkChurnByName(){let t=new Set;for(let o of this.data.relationsToAdd)t.add(o.table);for(let o of this.data.relationsToDrop)t.add(o.table);let e=new Map;for(let o of t){let n=await this.sql.getTableSchema(o),s=new Set((n.foreignKeys||[]).map(a=>a.name).filter(Boolean));e.set(o,s);}let r=new Map;for(let o of this.models){let n=o.getRelations(),s=new Set;for(let a of n){if(a.type!=="belongsTo")continue;let l=a.foreignKey||a.columnName,d=o.getColumns().find(m=>m.columnName===l)?.databaseName||l,c=q(a.constraintName)||Z(o.table,d,a.model().table);s.add(c);}r.set(o.table,s);}this.data.relationsToAdd=await Promise.all(this.data.relationsToAdd.map(async o=>{let n=await this.sql.getTableSchema(o.table),s=this.models.find(y=>y.table===o.table),a=s?.getColumns()||[],l=o.relation.columnName;o.relation.type==="belongsTo"?l=a.find(T=>T.columnName===o.relation.foreignKey)?.databaseName||o.relation.foreignKey:l=a.find(T=>T.columnName===l)?.databaseName||l;let u=o.table,d=o.relation.foreignKey;if(o.relation.type==="belongsTo"){let y=o.relation.model();u=y.table;let T=y.primaryKey||"id";d=y.getColumns().find(C=>C.columnName===T)?.databaseName||T;}let c=new Set([l,o.relation.columnName].filter(Boolean)),m=n.foreignKeys.some(y=>{if(y.columns.length!==1||y.referencedColumns.length!==1)return false;let T=c.has(y.columns[0]),b=y.referencedTable===u,C=y.referencedColumns[0]===d;return T&&b&&C}),p=q(o.relation.constraintName)||Z(o.table,l,u),f=e.get(o.table)||new Set;if(m||p&&f.has(p))return null;if(o.relation.type==="manyToMany"&&o.relation.manyToManyOptions){let y=q(o.relation.manyToManyOptions.throughModel),T=q(o.relation.manyToManyOptions.leftForeignKey),b=q(o.relation.manyToManyOptions.rightForeignKey),C=o.table===y&&o.relation.columnName===T&&o.relation.model().table===s?.table,R=o.table===y&&o.relation.columnName===b&&o.relation.model().table!==s?.table,_=await this.sql.getTableSchema(y),D=_.foreignKeys.some(M=>M.columns.length===1&&M.columns[0]===T&&M.referencedTable===(s?.table||"")),A=_.foreignKeys.some(M=>M.columns.length===1&&M.columns[0]===b&&M.referencedTable===o.relation.model().table);if(C&&D||R&&A)return null}return o})).then(o=>o.filter(Boolean)),this.data.relationsToDrop=await Promise.all(this.data.relationsToDrop.map(async o=>{let n=this.models.find(u=>u.table===o.table);if(!n)return o;let s=n.getRelations(),a=n.getColumns();return s.some(u=>{if(u.type!=="belongsTo")return false;let c=a.find(T=>T.columnName===u.foreignKey)?.databaseName||u.foreignKey,m=u.model(),p=m.primaryKey||"id",y=m.getColumns().find(T=>T.columnName===p)?.databaseName||p;return o.relation.columns.length===1&&o.relation.columns[0]===c&&o.relation.referencedTable===m.table&&o.relation.referencedColumns.length===1&&o.relation.referencedColumns[0]===y})?null:o})).then(o=>o.filter(Boolean));}clonePkAsColumn(t,e){let r=t.type;return r==="bigIncrement"?r="bigint":r==="increment"&&(r="integer"),{columnName:e,databaseName:e,isPrimary:false,type:r,length:t.length,precision:t.precision,scale:t.scale,withTimezone:t.withTimezone,constraints:{nullable:false}}}pushM2mFkRelations(t){let e=this.buildBelongsToRelation(t.throughTable,()=>t.leftModel,t.leftFkName,t.leftModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate),r=this.buildBelongsToRelation(t.throughTable,()=>t.rightModel,t.rightFkName,t.rightModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate);this.data.relationsToAdd.push(e),this.data.relationsToAdd.push(r);}buildBelongsToRelation(t,e,r,o,n,s,a){let l=n?q(n):Z(t,r,e().table);return {table:t,relation:{type:"belongsTo",model:e,columnName:r,foreignKey:r,constraintName:l,onDelete:s,onUpdate:a},onDelete:s,onUpdate:a}}};var ke=class{};ke.modelCaseConvention="camel",ke.databaseCaseConvention="snake";function qe(i){return String(i).padStart(2,"0")}function Hh(i,t){let e=i.getFullYear(),r=qe(i.getMonth()+1),o=qe(i.getDate()),n=qe(i.getHours()),s=qe(i.getMinutes()),a=qe(i.getSeconds());switch(t){case "ISO":return `${e}-${r}-${o} ${n}:${s}:${a}`;case "DATE_ONLY":return `${e}-${r}-${o}`;case "TIME_ONLY":return `${n}:${s}:${a}`;case "TIMESTAMP":return Math.floor(i.getTime()/1e3).toString()}}function my(i,t){let e=i.getUTCFullYear(),r=qe(i.getUTCMonth()+1),o=qe(i.getUTCDate()),n=qe(i.getUTCHours()),s=qe(i.getUTCMinutes()),a=qe(i.getUTCSeconds());switch(t){case "ISO":return `${e}-${r}-${o} ${n}:${s}:${a}`;case "DATE_ONLY":return `${e}-${r}-${o}`;case "TIME_ONLY":return `${n}:${s}:${a}`;case "TIMESTAMP":return Math.floor(i.getTime()/1e3).toString()}}var Me=(i,t="ISO",e="UTC")=>{if(!(i instanceof Date)||isNaN(i.getTime()))throw new Error("Invalid date provided");return e==="LOCAL"?Hh(i,t):my(i,t)};var pt=(i=new Date)=>my(i,"ISO");var py=(i,t)=>{try{let e=xe.createHash("sha256").update(i).digest(),r=xe.randomBytes(16),o=xe.createCipheriv("aes-256-cbc",e,r),n=o.update(t,"utf8","hex");return n+=o.final("hex"),`${r.toString("hex")}:${n}`}catch(e){throw new S("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},fy=(i,t)=>{try{let e=xe.createHash("sha256").update(i).digest(),r=String(t).trim(),[o,n]=r.split(":");if(!o||!n)throw new Error(`Invalid encrypted value format: expected "iv:data" but got "${r.substring(0,50)}..."`);let s=o.toLowerCase(),a=n.toLowerCase(),l=xe.createDecipheriv("aes-256-cbc",e,Buffer.from(s,"hex")),u=l.update(a,"hex","utf8");return u+=l.final("utf8"),u}catch(e){throw new S("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},yy=(i,t)=>{try{let e=xe.randomBytes(32),r=xe.randomBytes(16),o=xe.createCipheriv("aes-256-cbc",e,r),n=o.update(t,"utf8","hex");n+=o.final("hex");let s=publicEncrypt(i,e);return `${r.toString("hex")}:${s.toString("hex")}:${n}`}catch(e){throw new S("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},hy=(i,t)=>{try{let e=String(t).trim(),[r,o,n]=e.split(":");if(!r||!o||!n)throw new Error(`Invalid encrypted value format: expected "iv:key:data" but got "${e.substring(0,50)}..."`);let s=privateDecrypt(i,Buffer.from(o,"hex")),a=xe.createDecipheriv("aes-256-cbc",s,Buffer.from(r,"hex")),l=a.update(n,"hex","utf8");return l+=a.final("utf8"),l}catch(e){throw new S("Encryption::decryptAsymmetric","FAILED_TO_DECRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}};var G=class{static defineMetadata(t,e,r,o){if((typeof r!="object"||r===null)&&typeof r!="function")throw new TypeError("target must be an object or function");let n=this.store.get(r);n||(n=new Map,this.store.set(r,n));let s=n.get(o);s||(s=new Map,n.set(o,s)),s.set(t,e);}static getMetadata(t,e,r){if((typeof e!="object"||e===null)&&typeof e!="function")throw new TypeError("target must be an object or function");let o=e;for(;o;){let n=this.store.get(o);if(n){let s=n.get(r);if(s&&s.has(t))return s.get(t)}o=Object.getPrototypeOf(o);}}};G.store=new WeakMap;var Xl="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Gl=Xl.length,Xh=10,Zh=16,eg=(i,t)=>{let e="";for(let r=0;r<t;r++){let o=i%Gl;e=Xl.charAt(o)+e,i=(i-o)/Gl;}return e},tg=i=>{let t=randomBytes(i),e="";for(let r=0;r<i;r++){let o=t[r];e+=Xl.charAt(o%Gl);}return e},gy=()=>{let i=Math.floor(Date.now()/1e3),t=eg(i,Xh),e=tg(Zh);return t+e};var Lr=class extends Se{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var Wr=class extends Se{constructor(e,r,o){super(e,r);this.type="hasMany";this.foreignKey=o,this.type="hasMany";}};var jr=class extends Se{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var Fr=class extends Se{constructor(e,r,o){super(e,r);this.type="manyToMany";this.primaryModel=o.primaryModel,this.relatedModel=e.table,this.throughModel=o.throughModel,this.leftForeignKey=o.leftForeignKey,this.rightForeignKey=o.rightForeignKey;}};function x(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let o=e.constructor;if(t){if(G.getMetadata(ct,e))throw new S("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");G.defineMetadata(ct,r,e),G.defineMetadata(ct,r,e.constructor);}let n=i.databaseName??z(r,o.databaseCaseConvention),s={columnName:r,serialize:i.serialize,prepare:i.prepare,isPrimary:t,primaryKeyConstraintName:i.primaryKeyConstraintName??Te(o.table,r),autoUpdate:i.autoUpdate,databaseName:n,openApi:i.openApi,type:i.type,length:i?.length,precision:i?.precision,scale:i?.scale,withTimezone:i?.withTimezone,unsigned:i.unsigned,zerofill:i.zerofill,stringMode:i.stringMode,expression:i.expression,constraints:{nullable:i.nullable,default:i.default}};s.validate=i.validate;let a=G.getMetadata($r,e)||[];a.push(s),G.defineMetadata($r,a,e);}}x.primary=og;x.date=Tg;x.datetime=Ng;x.timestamp=wg;x.time=Sg;x.boolean=bg;x.json=Cg;x.uuid=lg;x.ulid=ug;x.integer=sg;x.bigInteger=mg;x.float=ng;x.decimal=pg;x.increment=ig;x.bigIncrement=ag;x.string=dg;x.text=cg;x.binary=fg;x.enum=yg;x.encryption={symmetric:hg,asymmetric:gg};x.computed=qg;function og(i={}){return x({...i,primaryKey:true})}function ng(i={}){return x({type:"float",...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?Number.parseInt(t):Number.parseFloat(t)},openApi:{type:"number",format:"float",description:"A floating point number",...i.openApi||{}}})}function sg(i={}){return x({type:"integer",...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?+t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An integer number",...i.openApi||{}}})}function ig(i={}){return x({type:"increment",...i,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An auto-incrementing integer number",...i.openApi||{}}})}function ag(i={}){return x({type:"bigIncrement",...i,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An auto-incrementing bigint number",...i.openApi||{}}})}function lg(i={}){return x({type:"uuid",...i,prepare:t=>t||xe.randomUUID(),openApi:{type:"string",format:"uuid",description:"uuid (Universally Unique Identifier)",...i.openApi||{}}})}function ug(i={}){return x({type:"ulid",...i,prepare:t=>t||gy(),openApi:{type:"string",format:"ulid",description:"ulid (Universally Unique Lexicographically Sortable Identifier)",...i.openApi||{}}})}function dg(i={}){return x({type:"string",...i,openApi:{type:"string",description:"A string value",...i.openApi||{}}})}function cg(i={}){return x({type:"longtext",...i,openApi:{type:"string",description:"A text value",...i.openApi||{}}})}function mg(i={}){return x({type:"bigint",...i,serialize:t=>{if(t!==void 0){if(t===null)return null;if(typeof t=="number")return t;if(typeof t=="string")return Number.parseInt(t);if(typeof t=="bigint")return Number(t)}},openApi:{type:"integer",format:"int64",description:"A bigint number",...i.openApi||{}}})}function pg(i={}){return x({type:"decimal",precision:i.precision??10,scale:i.scale??2,...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseFloat(t)},openApi:{type:"number",format:"double",description:"A decimal number",...i.openApi||{}}})}function fg(i={}){return x({type:"binary",...i,openApi:{type:"string",format:"binary",description:"Binary data",...i.openApi||{}}})}function yg(i,t={}){return x({type:i,...t,openApi:{type:"string",enum:i,description:"An enum value",...t.openApi||{}}})}function hg(i){return x({...i,prepare:t=>t&&py(i.key,t),serialize:t=>t&&fy(i.key,t)})}function gg(i){return x({...i,prepare:t=>t&&yy(i.publicKey,t),serialize:t=>t&&hy(i.privateKey,t)})}function bg(i={}){return x({type:"boolean",...i,serialize:t=>!!t,prepare:t=>{if(t!=null)return !!t},openApi:{type:"boolean",description:"A boolean value",...i.openApi||{}}})}function Tg(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:o=false,...n}=i,s=!!o,a=!!r,l=()=>new Date,u=()=>Me(new Date,"DATE_ONLY",e),d=t?typeof o=="function"?o:u:typeof o=="function"?o:l,c=t?typeof r=="function"?r:u:typeof r=="function"?r:l;return x({type:"date",...n,autoUpdate:a,prepare:t?f=>f?a?c():f:s?d():null:f=>f?a?c():f:s?d():null,serialize:t?f=>{if(f!==void 0)return f===null?null:f instanceof Date?Me(f,"DATE_ONLY",e):String(f)}:f=>{if(f!==void 0)return f===null?null:f instanceof Date?f:new Date(f)},openApi:{type:"string",format:"date",description:"YYYY-MM-DD",...n.openApi||{}}})}function Ng(i={},t=false){let{timezone:e,withTimezone:r,autoUpdate:o=false,autoCreate:n=false,...s}=i,a=e??"UTC",l=r??e!==void 0,u=!!n,d=!!o,c=()=>new Date,m=()=>Me(new Date,"ISO",a),p=t?typeof n=="function"?n:m:typeof n=="function"?n:c,f=t?typeof o=="function"?o:m:typeof o=="function"?o:c;return x({type:"datetime",...s,withTimezone:l,autoUpdate:d,prepare:t?b=>b?d?f():b:u?p():null:b=>b?d?f():b:u?p():null,serialize:t?b=>{if(b!==void 0)return b===null?null:b instanceof Date?Me(b,"ISO",a):String(b)}:b=>{if(b!==void 0)return b===null?null:b instanceof Date?b:new Date(b)},stringMode:t,openApi:{type:"string",format:"date-time",description:"YYYY-MM-DD HH:mm:ss",...s.openApi||{}}})}function wg(i={},t=false){let{timezone:e,withTimezone:r,autoUpdate:o=false,autoCreate:n=false,...s}=i,a=e??"UTC",l=r??e!==void 0,u=!!n,d=!!o,c=()=>new Date,m=()=>Me(new Date,"TIMESTAMP",a),p=t?typeof n=="function"?n:m:typeof n=="function"?n:c,f=t?typeof o=="function"?o:m:typeof o=="function"?o:c;return x({type:"timestamp",...s,withTimezone:l,autoUpdate:d,prepare:t?b=>b?d?f():b:u?p():null:b=>b?d?f():b:u?p():null,serialize:t?b=>{if(b!==void 0)return b===null?null:b instanceof Date?Me(b,"TIMESTAMP",a):String(b)}:b=>{if(b!==void 0)return b===null?null:b instanceof Date?b:new Date(b)},stringMode:t,openApi:{type:"string",format:"date-time",description:"Unix timestamp",...s.openApi||{}}})}function Sg(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:o=false,...n}=i,s=!!o,a=!!r,l=()=>new Date,u=()=>Me(new Date,"TIME_ONLY",e),d=t?typeof o=="function"?o:u:typeof o=="function"?o:l,c=t?typeof r=="function"?r:u:typeof r=="function"?r:l;return x({type:"time",...n,autoUpdate:a,prepare:t?f=>f?a?c():f:s?d():null:f=>f?a?c():f:s?d():null,serialize:t?f=>{if(f!==void 0)return f===null?null:f instanceof Date?Me(f,"TIME_ONLY",e):String(f)}:f=>{if(f!==void 0)return f===null?null:f instanceof Date?f:new Date(f)},stringMode:t,openApi:{type:"string",format:"time",description:"HH:mm:ss",...n.openApi||{}}})}function Cg(i={}){return x({type:"jsonb",...i,serialize:t=>typeof t=="string"?JSON.parse(t):t,prepare:t=>typeof t!="string"?JSON.stringify(t):t,openApi:{type:"object",description:"A JSON object",...i.openApi||{}}})}function qg(i,t={}){return x({...t,expression:i})}function by(i){try{return G.getMetadata($r,i.prototype)||[]}catch{return []}}function Ty(i){return G.getMetadata(Jl,i.prototype)||[]}function Ny(i){return (G.getMetadata(Jl,i.prototype)||[]).map(e=>{let{type:r,model:o,columnName:n,foreignKey:s}=e,a=q(s),l=o();switch(r){case "belongsTo":return new Lr(l,n,a);case "hasOne":return new jr(l,n,a);case "hasMany":return new Wr(l,n,a);case "manyToMany":if(!e.manyToManyOptions)throw new S("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let u=o();return new Fr(u,n,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:q(e.manyToManyOptions.throughModel),leftForeignKey:q(e.manyToManyOptions.leftForeignKey),rightForeignKey:q(e.manyToManyOptions.rightForeignKey)});default:throw new S("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function wy(i){return G.getMetadata(ct,i)||G.getMetadata(ct,i.prototype)}function Sy(i){return G.getMetadata(sy,i.prototype)||[]}function Cy(i){return G.getMetadata(iy,i.prototype)||[]}function qy(i){return G.getMetadata(ay,i.prototype)||[]}var me=class{};me.columns=new WeakMap,me.byName=new WeakMap,me.byDatabaseName=new WeakMap;var _e=class extends ke{static get table(){let t=Object.getOwnPropertyDescriptor(this,"table");if(t&&"value"in t)return t.value;throw new Error(`Table name not set for model "${this.name}". Use defineModel() to create models.`)}static set table(t){Object.defineProperty(this,"table",{value:t,writable:true,enumerable:true,configurable:true});}static get primaryKey(){return wy(this)}constructor(t){if(super(),t)for(let e in t)Object.assign(this,{[e]:t[e]});}static getColumns(){let t=me.columns.get(this);return t||(t=by(this),me.columns.set(this,t)),t}static getColumnsByName(){let t=me.byName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.columnName,e])),me.byName.set(this,t)),t}static getColumnsByDatabaseName(){let t=me.byDatabaseName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.databaseName,e])),me.byDatabaseName.set(this,t)),t}static getRelations(){return Ty(this)}static getIndexes(){return Sy(this)}static getUniques(){return Cy(this)}static getChecks(){return qy(this)}static async validate(t){var s,a;let e=this.getColumns(),r={},o=this.primaryKey,n=o&&t?.[o]!==void 0?"update":"insert";for(let l of e){if(l.expression)continue;let u=l.validate;if(!u)continue;let d=t?t[l.columnName]:void 0,c=Array.isArray(u)?u:[u];for(let m of c)try{let p=await m(d,{model:this,column:l.columnName,operation:n,data:t});if(!(p&&p.valid)){let f=p&&p.message||"Validation failed";(r[s=l.columnName]||(r[s]=[])).push(f);}}catch{(r[a=l.columnName]||(r[a]=[])).push("Validation error");}}if(Object.keys(r).length>0)throw new bt(r);return {valid:true}}};_e.zodEngine=null,_e.softDeleteColumn="deletedAt",_e.softDeleteValue=pt();var ft=class extends w{constructor(e,r=false,o){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.fromNode=e,this.returning=o;}};var U=class extends w{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var Y=class extends w{constructor(e,r=[],o,n=false,s=false){super("insert into",s);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="insert";this.file="insert";this.fromNode=e,this.records=r,this.returning=o,this.disableReturning=n;}};var Ne=class extends w{constructor(e,r,o,n="update",s,a=false){super("on duplicate",a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="on_duplicate";this.file="on_duplicate";this.table=e,this.conflictColumns=r,this.columnsToUpdate=o,this.mode=n,this.returning=s;}};var Ae=class extends w{constructor(e,r=[],o=[],n=false,s){super("update",n);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="update";this.file="update";this.fromNode=e,this.columns=r,this.values=o,this.returning=s;}};var O=class extends w{constructor(e,r,o=false,n,s,a=false){super("where",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where";this.column=e,this.chainsWith=` ${r}`,this.isNegated=o,this.operator=n,this.value=s;}};var Re=class extends w{constructor(e,r="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`;}};var ae=class extends O{constructor(e,r,o=false,n,s,a=false){super(e,r,o,"=",s,a);this.file="where_json";this.jsonOperator=n,this.value=s;}};var we=class extends w{constructor(e,r,o,n="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_subquery";this.column=e,this.operator=r,this.subquery=o,this.chainsWith=` ${n}`;}};var _y;_y=Symbol.toStringTag;var X=class{constructor(t,e,r,o){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=o;this[_y]="WriteOperation";}then(t,e){return this.executor().then(t,e)}catch(t){return this.executor().catch(t)}finally(t){return this.executor().finally(t)}toQuery(){return this.toQueryFn()}toSql(){return this.toSqlFn()}unWrap(){return this.unWrapFn()}};var _g=async(i,t,e,r,o,n=false)=>{let s=Object.create(t.prototype),a=null;for(let l of Object.keys(i)){let u=i[l],d=r.get(l)?.columnName??l,c=e.has(d),m=n?true:o?o.has(d):true;if(c){if(!m)continue;if(u===null){s[d]=null;continue}let p=e.get(d);if(p?.serialize){let f=p.serialize(u);f!==null&&typeof f?.then=="function"?(a||(a=[]),a.push({key:d,promise:f})):s[d]=f;continue}s[d]=u;continue}(!n||o&&o.has(d))&&(s[d]=u);}if(a){let l=await Promise.all(a.map(u=>u.promise));for(let u=0;u<a.length;u++)s[a[u].key]=l[u];}if(o)for(let l of o)l in s||(s[l]=null);return s},Oe=async(i,t,e=[])=>{if(!i.length)return null;let r=t.getColumnsByName(),o=t.getColumnsByDatabaseName(),n=e.some(u=>u.includes("*")),s=[];for(let u of e){if(u.toLowerCase().includes(" as ")){let p=u.match(/\s+as\s+(.+)$/i);p&&s.push(p[1].trim());continue}let c=u;if(c.includes(".")&&(c=c.split(".").pop()),c==="*")continue;let m=r.get(c)?.columnName??c;s.push(m);}let a=s.length?new Set(s):null,l=await Promise.all(i.map(u=>_g(u,t,r,o,a,n)));return l.length===1?l[0]:l};var Rg=/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/,Mg=/^\d{4}-\d{2}-\d{2}$/,Zl=i=>typeof i!="string"?i:Rg.test(i)?new Date(i.replace(" ","T")+"Z"):Mg.test(i)?new Date(i+"T00:00:00Z"):i,xg=async i=>new Promise((t,e)=>{if(i.type===2017){let o="";i.setEncoding("utf8"),i.on("data",n=>{o+=n;}),i.on("end",()=>t(o)),i.on("error",e);}else {let o=[];i.on("data",n=>{o.push(n);}),i.on("end",()=>t(Buffer.concat(o))),i.on("error",e);}}),Ry=async i=>{let t={};for(let e in i){let r=i[e];r&&typeof r=="object"&&r.constructor?.name==="Lob"?t[e]=await xg(r):t[e]=r;}return t};var Ur=class extends Readable{constructor(t,e,r=[],o){super({objectMode:true}),this.db=t,this.query=e,this.params=r,this.started=false,this.events=o;}_read(){this.started||(this.started=true,this.readRows());}readRows(){let t=0,e=false,r=false;this.db.each(this.query,this.params,(o,n)=>{if(o){r=true,this.emit("error",o);return}t++;let s=false,a,l={write:u=>{s=true,a=u;}};Promise.resolve(this.events.onData?.(l,n)).then(()=>{if(!r){if(s){this.push(a);return}this.push(n);}}).catch(u=>{r=true,this.emit("error",u);}).finally(()=>{t--,e&&t===0&&!r&&this.push(null);});},o=>{if(o){r=true,this.emit("error",o);return}e=true,t===0&&!r&&this.push(null);});}},My=(i,t,e,r)=>{let o=["begin","begin transaction","commit","rollback"].includes(i.trim().toLowerCase()),n=r.customConnection??e.getPool();if(o)return new Promise((u,d)=>{n.run(i,t,function(c){c&&d(c),u(this.changes);});});if(r.mode==="fetch")return new Promise((u,d)=>{n.all(i,t,(c,m)=>{c&&d(c),(!m||!m.length)&&u([]),u(m);});});let s=r?.typeofModel;if(!s)return new Promise((u,d)=>{n.run(i,t,function(c){c?d(new Error(c.message)):u(this.changes);});});let a=s.primaryKey,l=s.table;if(r.mode==="insertOne"||r.mode==="insertMany"){if(r.mode==="insertOne")return new Promise((c,m)=>{n.run(i,t,function(p){if(p)return m(p);let f=r.models&&Array.isArray(r.models)&&r.models.length?r.models[0]:null;if(!a){c([f]);return}let y=f?.[a]||this.lastID;if(!y)return m(new S("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let T=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(T,[y],(b,C)=>{if(b)return m(b);c([C]);});});});if(!Array.isArray(r.models))throw new S("SqlRunnerUtils::massiveInsert models should be an array, report to the maintainers.","DEVELOPMENT_ERROR");let u=r.models;if(!a)return new Promise((c,m)=>{n.run(i,t,function(p){if(p)return m(p);c(u);});});let d=[];return new Promise(async(c,m)=>{try{let p=u.map(async f=>{let y=new h(s),{columns:T,values:b}=await y.prepareColumns(Object.keys(f),Object.values(f),"insert"),C=Object.fromEntries(T.map((A,M)=>[A,b[M]])),R=new N(s,e.getDbType()),{sql:_,bindings:D}=R.parse([new Y(new U(s.table),[C])]);return new Promise((A,M)=>{n.run(_,D,function(v){if(v)return M(v);let H=f[a]||this.lastID;if(!H)return M(new S("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let I=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(I,[H],(B,W)=>{if(B)return M(B);A(W);});});})});d=await Promise.all(p),c(d);}catch(p){m(p);}})}return new Promise((u,d)=>{n.run(i,t,function(c){c?d(new Error(c.message)):u(this.changes);});})};var It=class{constructor(t){this.observers=t??[];}add(t){this.observers.push(t);}async notifyBefore(t){for(let e of this.observers)e?.onBeforeQuery&&await e.onBeforeQuery(t);}async notifyAfter(t,e){for(let r of this.observers)r?.onAfterQuery&&(t.result??(t.result=e),await r.onAfterQuery(t));}async notifyError(t){for(let e of this.observers)e?.onQueryError&&await e.onQueryError(t);}},xy=i=>{if(!i)return "OTHER";let t=i.trim().toUpperCase();return t.startsWith("SELECT")?"SELECT":t.startsWith("INSERT")?"INSERT":t.startsWith("UPDATE")?"UPDATE":t.startsWith("DELETE")?"DELETE":"OTHER"};function Je(i){let t=performance.now()-i;return Math.round(t*100)/100}var J=async(i,t,e,r,o="rows",n)=>{await e.ensureConnected();let s={id:randomUUID(),sql:i,params:t,model:void 0,operation:xy(i),timestamp:performance.now()};try{let u=e.observerChain;u&&typeof u.notifyBefore=="function"&&await u.notifyBefore(s);}catch{}let a=performance.now(),l=u=>{n?.shouldNotLog||ye(i,e.logs,t,e.inputDetails.queryFormatOptions,r,u);};try{let u=await(async()=>{switch(r){case "mysql":case "mariadb":let d=e.sqlConnection??e.getPool(),c=await Et(()=>d.query(i,t),e.inputDetails.connectionPolicies?.retry,e.logs);try{let B=Je(a),W=e.observerChain;if(W&&typeof W.notifyAfter=="function"){let ue={...s,duration:B,result:c};await W.notifyAfter(ue);}}catch{}return o==="affectedRows"?c[0].affectedRows:o==="raw"?c:c[0];case "postgres":case "cockroachdb":let m=e.sqlConnection??e.getPool(),p=0,f=i.replace(/\?/g,()=>`$${++p}`),y=await Et(()=>m.query(f,t),e.inputDetails.connectionPolicies?.retry,e.logs);try{let B=Je(a),W=e.observerChain;if(W&&typeof W.notifyAfter=="function"){let ue={...s,duration:B,result:y};await W.notifyAfter(ue);}}catch{}return o==="rows"?y.rows:o==="raw"?y:y.rowCount;case "sqlite":let T=await Et(()=>My(i,t,e,{typeofModel:n?.sqlLiteOptions?.typeofModel,mode:n?.sqlLiteOptions?.mode||"fetch",models:n?.sqlLiteOptions?.models}),e.inputDetails.connectionPolicies?.retry,e.logs),b=Je(a);try{let B=e.observerChain;if(B&&typeof B.notifyAfter=="function"){let W={...s,duration:b,result:T};await B.notifyAfter(W);}}catch{}return o==="raw"?Array.isArray(T)?T:[T]:T;case "mssql":let C=e.getPool(),R=e.sqlConnection?e.sqlConnection.request():C.request();t.forEach((B,W)=>{R.input(`p${W}`,B);});let _=0,D=i.replace(/\?|@(\d+)/g,()=>`@p${_++}`),A=await Et(()=>R.query(D),e.inputDetails.connectionPolicies?.retry,e.logs),M=Je(a);try{let B=e.observerChain;if(B&&typeof B.notifyAfter=="function"){let W={...s,duration:M,result:A};await B.notifyAfter(W);}}catch{}return o==="affectedRows"?A.rowsAffected[0]:o==="raw"?A:A.recordset;case "oracledb":let v=4002,H=null,I=!!e.sqlConnection;try{H=e.sqlConnection?e.sqlConnection:await e.getConnection();let B=t.map(Zl),W=0,ue=i.replace(/\?/g,()=>`:${++W}`),se=await Et(()=>H.execute(ue,B,{outFormat:v,autoCommit:!I}),e.inputDetails.connectionPolicies?.retry,e.logs),rh=Je(a);try{let gt=e.observerChain;if(gt&&typeof gt.notifyAfter=="function"){let Ut={...s,duration:rh,result:se};await gt.notifyAfter(Ut);}}catch{}return o==="affectedRows"?se.rowsAffected:o==="raw"?se:await Promise.all(se.rows?.map(async gt=>{let Ut=await Ry(gt),uu={};for(let du in Ut)uu[du.toLowerCase()]=Ut[du];return uu})??[])}finally{H&&!I&&await H.close();}default:throw new S("ExecSql",`UNSUPPORTED_DATABASE_TYPE_${r}`)}})();return l(Je(a)),u}catch(u){throw l(Je(a)),u}},Jr=async(i,t,e,r={},o)=>{let n=e.type;switch(n){case "mariadb":case "mysql":{let s=e.getPool(),a=e.sqlConnection??await s.getConnection(),l=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),d=a.connection.query(i,t).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),c=0,m=false,p=false,f=()=>{try{a.release();}catch{}};return d.on("data",y=>{if(o.onData){c++,Promise.resolve(o.onData(l,y)).then(()=>{c--,m&&c===0&&!p&&(f(),l.end());}).catch(T=>{p=true,f(),l.destroy(T);});return}l.write(y);}),d.on("end",()=>{m=true,c===0&&!p&&(f(),l.end());}),d.on("error",y=>{p=true,f(),l.destroy(y);}),l.on("close",()=>{f();}),l}case "cockroachdb":case "postgres":{let s=e.getPool(),a=e.sqlConnection,l=!a,u=a??await s.connect(),d=await import('pg-query-stream').catch(()=>{throw new L("pg-query-stream")}),c=new PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),m=0,p=i.replace(/\?/g,()=>`$${++m}`),f=new d.default(p,t,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),y=u.query(f),T=0,b=false,C=false,R=_=>{if(l)try{u.release(_);}catch{}};return y.on("data",_=>{if(o.onData){T++,Promise.resolve(o.onData(c,_)).then(()=>{T--,b&&T===0&&!C&&(R(),c.end());}).catch(D=>{C=true,R(D),c.destroy(D);});return}c.write(_);}),y.on("end",()=>{b=true,T===0&&!C&&(R(),c.end());}),y.on("error",_=>{C=true,R(_),c.destroy(_);}),c}case "sqlite":{let s=e.sqlConnection??e.getPool();return new Ur(s,i,t,{onData:o.onData})}case "mssql":{let s=e.sqlConnection??e.getPool(),a=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),l=s.request();l.stream=true,t.forEach((f,y)=>{l.input(`p${y}`,f);});let u=0,d=i.replace(/\?|@(\d+)/g,()=>`@p${u++}`),c=0,m=false,p=false;return l.on("row",f=>{if(!p){if(o.onData){c++,Promise.resolve(o.onData(a,f)).then(()=>{c--,m&&c===0&&!p&&a.end();}).catch(y=>{p=true,a.destroy(y);});return}a.write(f);}}),l.on("error",f=>{p=true,a.destroy(f);}),l.on("done",()=>{m=true,c===0&&!p&&a.end();}),l.query(d),a}case "oracledb":{let s=e.getPool(),a=e.sqlConnection??await s.getConnection(),l=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),u=4002,d=0,c=i.replace(/\?/g,()=>`:${++d}`),m=t.map(Zl),p=a.queryStream(c,m,{outFormat:u}),f=0,y=false,T=false,b=async()=>{try{await a.close();}catch{}};return p.on("data",C=>{if(T)return;let R={};for(let _ in C)R[_.toLowerCase()]=C[_];if(o.onData){f++,Promise.resolve(o.onData(l,R)).then(()=>{f--,y&&f===0&&!T&&(b(),l.end());}).catch(_=>{T=true,b(),l.destroy(_);});return}l.write(R);}),p.on("end",()=>{y=true,f===0&&!T&&(b(),l.end());}),p.on("error",C=>{T=true,b(),l.destroy(C);}),l}default:throw new S("ExecSqlStreaming",`UNSUPPORTED_DATABASE_TYPE_${n}`)}};async function Et(i,t={maxRetries:0,delay:0},e=false){let r=0,o=t.maxRetries||0,n=t.delay||0;async function s(){try{return i()}catch(a){if(!Object.prototype.hasOwnProperty.call(a,"code")||a.code!=="ECONNREFUSED")throw a;if(r<o)return r++,Su(`Retrying sql in ${n}ms (attempt ${r}/${o})`,"info",e),await new Promise(l=>setTimeout(l,n)),s();throw a}}return s()}var Pt=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=Ny(t),this.modelRelationsMap=new Map(this.modelRelations.map(o=>[o.columnName,o]));}getRelationFromModel(t){let e=this.modelRelationsMap.get(t.toString());if(!e)throw new S("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function Hr(i,t,e){return {total:e,perPage:t,currentPage:i,firstPage:1,isEmpty:e===0,lastPage:Math.max(1,Math.ceil(e/t)),hasMorePages:i<Math.max(1,Math.ceil(e/t)),hasPages:e>t}}var yt=i=>typeof i=="number"?i:parseFloat(i);var oe=class extends w{constructor(e,r,o,n){super("select");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="select";this.file="select";this.column=e,this.alias=r,this.sqlFunction=o,this.isRawValue=n??false;}};var He=class extends w{constructor(e,r,o=false,n,s,a=false){super("having",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="having";this.file="having";this.column=e,this.chainsWith=`${r} `,this.isNegated=o,this.operator=n,this.value=s;}};var zr=class extends w{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var Yr=class extends w{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var Be=class extends w{constructor(e,r,o,n="extract",s=false){super("select");this.folder="select";this.file="select_json";this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.column=e,this.jsonPath=r,this.alias=o,this.jsonOperator=n,this.isRawValue=s;}};var le=class extends w{constructor(e,r,o,n="inner",s,a=false,l){super(`${n} join`,a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="join";this.file="join";this.type="inner";this.table=e,this.left=r,this.right=o,this.on=s,this.additionalConditions=l;}};var vt=class extends w{constructor(e,r=false){super("group by",r);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="group_by";this.file="group_by";this.column=e;}};var Gr=class extends w{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var Xr=class extends w{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var kt=class extends w{constructor(e,r="asc",o=false){super("order by",o);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="order_by";this.file="order_by";this.column=e,this.direction=r;}};var eo=class eo{constructor(t,e){this.model=t,this.sqlDataSource=e,this.groupByNodes=[],this.orderByNodes=[],this.limitNode=null,this.offsetNode=null,this.logs=this.sqlDataSource.logs,typeof t.getColumns=="function"?(this.modelColumns=t.getColumns(),this.modelColumnsMap=t.getColumnsByName?.()??new Map(this.modelColumns.map(r=>[r.columnName,r]))):(this.modelColumns=[],this.modelColumnsMap=eo.EMPTY_MAP);}clearGroupBy(){return this.groupByNodes=[],this}clearOrderBy(){return this.orderByNodes=[],this}clearLimit(){return this.limitNode=null,this}clearOffset(){return this.offsetNode=null,this}groupBy(...t){return t.forEach(e=>{this.groupByNodes.push(new vt(e));}),this}groupByRaw(t){return this.groupByNodes.push(new vt(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new kt(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new kt(t,"asc",true)),this}limit(t){return typeof t!="number"&&g.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new Gr(t),this}offset(t){return typeof t!="number"&&g.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new Xr(t),this}};eo.EMPTY_MAP=new Map;var Zr=eo;var ze=class i{constructor(t,e=false){this.sqlDataSource=t;this.isNestedCondition=false;this.whereNodes=[],this.isNestedCondition=e;}getConditions(){return this.whereNodes}where(t,e,r){return typeof t=="function"?this.andWhereGroup(t):this.andWhere(t,e,r)}andWhere(t,e,r){if(typeof t=="function")return this.andWhereGroup(t);let o="=",n;return typeof e=="string"&&r!==void 0?(o=e,n=r):(n=e,o="="),this.whereNodes.push(new O(t,"and",false,o,n)),this}orWhere(t,e,r){if(typeof t=="function")return this.orWhereGroup(t);let o="=",n;return typeof e=="string"&&r!==void 0?(o=e,n=r):(n=e,o="="),this.whereNodes.push(new O(t,"or",false,o,n)),this}whereNot(t,e,r){let o="=",n;return typeof e=="string"&&r!==void 0?(o=e,n=r):(n=e,o="="),this.whereNodes.push(new O(t,"and",true,o,n)),this}andWhereNot(t,e,r){let o="=",n;return typeof e=="string"&&r!==void 0?(o=e,n=r):(n=e,o="="),this.whereNodes.push(new O(t,"and",true,o,n)),this}orWhereNot(t,e,r){let o="=",n;return typeof e=="string"&&r!==void 0?(o=e,n=r):(n=e,o="="),this.whereNodes.push(new O(t,"or",true,o,n)),this}whereBetween(t,e,r){return this.andWhereBetween(t,e,r)}andWhereBetween(t,e,r){return this.whereNodes.push(new O(t,"and",false,"between",[e,r])),this}orWhereBetween(t,e,r){return this.whereNodes.push(new O(t,"or",false,"between",[e,r])),this}whereNotBetween(t,e,r){return this.andWhereNotBetween(t,e,r)}andWhereNotBetween(t,e,r){return this.whereNodes.push(new O(t,"and",true,"between",[e,r])),this}orWhereNotBetween(t,e,r){return this.whereNodes.push(new O(t,"or",true,"between",[e,r])),this}whereLike(t,e){return this.andWhereLike(t,e)}andWhereLike(t,e){return this.where(t,"like",e),this}orWhereLike(t,e){return this.orWhere(t,"like",e),this}whereILike(t,e){return this.andWhereILike(t,e)}andWhereILike(t,e){return this.where(t,"ilike",e),this}orWhereILike(t,e){return this.orWhere(t,"ilike",e),this}whereNotLike(t,e){return this.andWhereNotLike(t,e)}andWhereNotLike(t,e){return this.where(t,"not like",e),this}orWhereNotLike(t,e){return this.orWhere(t,"not like",e),this}whereNotILike(t,e){return this.andWhereNotILike(t,e)}andWhereNotILike(t,e){return this.where(t,"not ilike",e),this}orWhereNotILike(t,e){return this.orWhere(t,"not ilike",e),this}whereIn(t,e){return this.andWhereIn(t,e)}andWhereIn(t,e){return e.length?(this.whereNodes.push(new O(t,"and",false,"in",e)),this):(this.whereNodes.push(new O("false","and",true,"=",[],true)),this)}orWhereIn(t,e){return e.length?(this.whereNodes.push(new O(t,"or",false,"in",e)),this):(this.whereNodes.push(new O("false","or",true,"=",[],true)),this)}whereNotIn(t,e){return this.andWhereNotIn(t,e)}andWhereNotIn(t,e){return e.length?(this.whereNodes.push(new O(t,"and",true,"in",e)),this):(this.whereNodes.push(new O("true","and",true,"=",[],true)),this)}orWhereNotIn(t,e){return e.length?(this.whereNodes.push(new O(t,"or",true,"in",e)),this):(this.whereNodes.push(new O("true","or",true,"=",[],true)),this)}whereNull(t){return this.andWhereNull(t)}andWhereNull(t){return this.whereNodes.push(new O(t,"and",false,"is null",void 0)),this}orWhereNull(t){return this.whereNodes.push(new O(t,"or",false,"is null",void 0)),this}whereNotNull(t){return this.andWhereNotNull(t)}andWhereNotNull(t){return this.whereNodes.push(new O(t,"and",false,"is not null",void 0)),this}orWhereNotNull(t){return this.whereNodes.push(new O(t,"or",false,"is not null",void 0)),this}whereRegexp(t,e){return this.andWhereRegexp(t,e)}andWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(t,"and",false,r?"~":"regexp",e.source)),this}orWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(t,"or",false,r?"~":"regexp",e.source)),this}whereNotRegexp(t,e){return this.andWhereNotRegexp(t,e)}andWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(t,"and",true,r?"~":"regexp",e.source)),this}orWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(t,"or",true,r?"~":"regexp",e.source)),this}whereGroup(t){return this.andWhereGroup(t)}andWhereGroup(t){let e=new i(this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new Re(r,"and")),this}orWhereGroup(t){let e=new i(this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new Re(r,"or")),this}whereRaw(t,e){return this.andWhereRaw(t,e)}andWhereRaw(t,e){return this.whereNodes.push(new O(t,"and",true,"=",e??[],true)),this}orWhereRaw(t,e){return this.whereNodes.push(new O(t,"or",true,"=",e??[],true)),this}};var to=class extends Zr{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new le(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new le(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new le(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new le(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new le(t,"","","cross",{operator:"="},true)),this}naturalJoinRaw(t){return this.joinNodes.push(new le(t,"","","natural",{operator:"="},true)),this}innerJoin(t,e,r,o,n){let s=r,a=o,l=typeof o=="function"?o:n;if(!s){if(!this.model.primaryKey)throw new S("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}return this.join(typeof t=="string"?t:t.table,e,s,a,l),this}join(t,e,r,o,n){let s=r,a="=",l;if(typeof o=="function"?l=o:typeof o=="string"&&(a=o,l=n),!s){if(!this.model.primaryKey)throw new S("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new le(typeof t=="string"?t:t.table,e,s,"inner",{operator:a||"="},false,u)),this}leftJoin(t,e,r,o,n){let s=r,a="=",l;if(typeof o=="function"?l=o:typeof o=="string"&&(a=o,l=n),!s){if(!this.model.primaryKey)throw new S("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new le(typeof t=="string"?t:t.table,e,s,"left",{operator:a||"="},false,u)),this}rightJoin(t,e,r,o,n){let s=r,a="=",l;if(typeof o=="function"?l=o:typeof o=="string"&&(a=o,l=n),!s){if(!this.model.primaryKey)throw new S("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new le(typeof t=="string"?t:t.table,e,s,"right",{operator:a||"="},false,u)),this}fullJoin(t,e,r,o,n){let s=r,a="=",l;if(typeof o=="function"?l=o:typeof o=="string"&&(a=o,l=n),!s){if(!this.model.primaryKey)throw new S("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new le(typeof t=="string"?t:t.table,e,s,"full",{operator:a||"="},false,u)),this}};var ro=class extends to{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.dbType=r.getDbType(),this.fromNode=new U(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return e.forEach(r=>{if(Array.isArray(r)){let[a,l]=r;this.modelSelectedColumns.push(l);let u=this.resolveComputedColumn(a);if(u){this.selectNodes.push(new oe(`(${u.expression}) as ${l}`,void 0,void 0,true));return}let d=z(a,this.model.databaseCaseConvention);this.selectNodes.push(new oe(d,l));return}let o=r;this.modelSelectedColumns.push(o);let n=this.resolveComputedColumn(o);if(n){this.selectNodes.push(new oe(`(${n.expression}) as ${n.alias}`,void 0,void 0,true));return}let s=z(o,this.model.databaseCaseConvention);this.selectNodes.push(new oe(s));}),this}selectRaw(e){return this.selectNodes.push(new oe(e,void 0,void 0,true)),this}selectFunc(e,r,o){let n=r==="*"?"*":z(r,this.model.databaseCaseConvention);return this.selectNodes.push(new oe(`${e.toLowerCase()}(${n}) as ${o}`,void 0,void 0,true)),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}resolveComputedColumn(e){let r=this.model.getColumnsByName?.();if(!r||r.size===0)return;let o=e.includes(".")?e.split(".").pop():e,n=r.get(o);if(n?.expression)return {expression:n.expression,alias:n.databaseName||o}}clearFrom(){return this.fromNode=new U(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new U(e),this}distinct(){return this.distinctNode=new zr,this}distinctOn(...e){return this.distinctOnNode=new Yr(e),this}selectJson(e,r,o){return this.selectNodes.push(new Be(e,r,o,"extract")),this}selectJsonText(e,r,o){return this.selectNodes.push(new Be(e,r,o,"extract_text")),this}selectJsonArrayLength(e,r,o){return this.selectNodes.push(new Be(e,r,o,"array_length")),this}selectJsonKeys(e,r,o){return this.selectNodes.push(new Be(e,r,o,"object_keys")),this}selectJsonRaw(e,r){return this.selectNodes.push(new Be(e,"",r,"raw",true)),this}};var oo=class extends ro{constructor(e,r,o=false){super(e,r);this.isNestedCondition=false;this.whereNodes=[],this.havingNodes=[],this.isNestedCondition=o;}clearWhere(){return this.whereNodes=[],this}clearHaving(){return this.havingNodes=[],this}strictWhen(e,r){return e==null?this:(r(this),this)}when(e,r){return e?(r(this),this):this}where(e,r,o){return typeof e=="function"?this.andWhereGroup(e):typeof r=="function"&&o===void 0?this.andWhereSubQuery(e,"in",r):r instanceof Q&&o===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof Q||typeof o=="function")?this.andWhereSubQuery(e,r,o):this.andWhere(e,r,o)}andWhere(e,r,o){if(typeof e=="function")return this.andWhereGroup(e);if(typeof r=="function"&&o===void 0)return this.andWhereSubQuery(e,"in",r);if(r instanceof Q&&o===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof Q||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof Q)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new O(e,"and",false,n,s)),this}orWhere(e,r,o){if(typeof e=="function")return this.orWhereGroup(e);if(typeof r=="function"&&o===void 0)return this.orWhereSubQuery(e,"in",r);if(r instanceof Q&&o===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof Q||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof Q)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new O(e,"or",false,n,s)),this}whereColumn(e,r,o){return this.andWhereColumn(e,r,o)}andWhereColumn(e,r,o){let n="=",s;return o!==void 0?(n=r,s=o):s=r,this.whereNodes.push(new O(e,"and",false,n,new $(s))),this}orWhereColumn(e,r,o){let n="=",s;return o!==void 0?(n=r,s=o):s=r,this.whereNodes.push(new O(e,"or",false,n,new $(s))),this}whereNot(e,r,o){if(typeof r=="function"&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof Q&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof Q||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof Q)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new O(e,"and",true,n,s)),this}andWhereNot(e,r,o){if(typeof r=="function"&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof Q&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof Q||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof Q)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new O(e,"and",true,n,s)),this}orWhereNot(e,r,o){if(typeof r=="function"&&o===void 0)return this.orWhereSubQuery(e,"not in",r);if(r instanceof Q&&o===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof Q||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof Q)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new O(e,"or",true,n,s)),this}whereBetween(e,r,o){return this.andWhereBetween(e,r,o)}andWhereBetween(e,r,o){return this.whereNodes.push(new O(e,"and",false,"between",[r,o])),this}orWhereBetween(e,r,o){return this.whereNodes.push(new O(e,"or",false,"between",[r,o])),this}whereNotBetween(e,r,o){return this.andWhereNotBetween(e,r,o)}andWhereNotBetween(e,r,o){return this.whereNodes.push(new O(e,"and",true,"between",[r,o])),this}orWhereNotBetween(e,r,o){return this.whereNodes.push(new O(e,"or",true,"between",[r,o])),this}whereLike(e,r){return this.andWhereLike(e,r)}andWhereLike(e,r){return this.where(e,"like",r),this}orWhereLike(e,r){return this.orWhere(e,"like",r),this}whereILike(e,r){return this.andWhereILike(e,r)}andWhereILike(e,r){return this.where(e,"ilike",r),this}orWhereILike(e,r){return this.orWhere(e,"ilike",r),this}whereNotLike(e,r){return this.andWhereNotLike(e,r)}andWhereNotLike(e,r){return this.where(e,"not like",r),this}orWhereNotLike(e,r){return this.orWhere(e,"not like",r),this}whereNotILike(e,r){return this.andWhereNotILike(e,r)}andWhereNotILike(e,r){return this.where(e,"not ilike",r),this}orWhereNotILike(e,r){return this.orWhere(e,"not ilike",r),this}whereIn(e,r){return this.andWhereIn(e,r)}andWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new O(e,"and",false,"in",r)),this):(this.whereNodes.push(new O("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new O(e,"or",false,"in",r)),this):(this.whereNodes.push(new O("false","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"in",r)}whereNotIn(e,r){return this.andWhereNotIn(e,r)}andWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new O(e,"and",true,"in",r)),this):(this.whereNodes.push(new O("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new O(e,"or",true,"in",r)),this):(this.whereNodes.push(new O("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new O(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new O(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new O(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new O(e,"or",false,"is not null",void 0)),this}whereRegexp(e,r){return this.andWhereRegexp(e,r)}andWhereRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(e,"and",false,o?"~":"regexp",r.source)),this}orWhereRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(e,"or",false,o?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new O(e,"and",true,o?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new O(e,"and",true,o?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new O(e,"or",true,o?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof Q?e:new Q(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new we("","exists",r.extractQueryNodes(),"and")),this}orWhereExists(e){let r=e instanceof Q?e:new Q(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new we("","exists",r.extractQueryNodes(),"or")),this}whereNotExists(e){return this.andWhereNotExists(e)}andWhereNotExists(e){let r=e instanceof Q?e:new Q(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new we("","not exists",r.extractQueryNodes(),"and")),this}orWhereNotExists(e){let r=e instanceof Q?e:new Q(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new we("","not exists",r.extractQueryNodes(),"or")),this}whereRaw(e,r=[]){return this.andWhereRaw(e,r)}andWhereRaw(e,r=[]){return this.whereNodes.push(new O(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new O(e,"or",false,"=",r,true)),this}having(e,r,o){return this.andHaving(e,r,o)}andHaving(e,r,o){let n="=",s;return typeof r=="string"&&o?(n=r,s=o):(s=r,n="="),this.havingNodes.push(new He(e,"and",false,n,s)),this}orHaving(e,r,o){let n="=",s;return typeof r=="string"&&o?(n=r,s=o):(s=r,n="="),this.havingNodes.push(new He(e,"or",false,n,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new He(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new He(e,"or",false,"=",[],true)),this}buildSubQuery(e){if(e instanceof Q)return e;let r=new Q(this.model,this.sqlDataSource),o=e(r);return o!=null&&"extractQueryNodes"in o?o:r}andWhereSubQuery(e,r,o){let n=this.buildSubQuery(o);return this.whereNodes.push(new we(e,r,n.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,o){let n=this.buildSubQuery(o);return this.whereNodes.push(new we(e,r,n.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new Q(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new Re(r.whereNodes,"and");return this.whereNodes.push(o),this}orWhereGroup(e){let r=new Q(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new Re(r.whereNodes,"or");return this.whereNodes.push(o),this}};var no=class extends oo{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new ae(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new ae(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new ae(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new ae(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new ae(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new ae(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new ae(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new ae(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new ae(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new ae(t,"or",false,"raw",e)),this}};var Q=class i extends no{constructor(e,r){super(e,r);this.isNestedCondition=false;this._interpreterUtils=null;this.insertNode=null;this.onDuplicateNode=null;this.updateNode=null;this.deleteNode=null;this.truncateNode=null;this.replicationMode=null;this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.astParser=new N(this.model,this.dbType);}get interpreterUtils(){return this._interpreterUtils||(this._interpreterUtils=new h(this.model)),this._interpreterUtils}setReplicationMode(e){return this.replicationMode=e,this}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof i)&&typeof e[1]=="string"){let[r,o]=e;if(typeof r=="function"){let n=new i(this.model,this.sqlDataSource),s=r(n),a=s!=null&&"extractQueryNodes"in s?s:n;return this.selectNodes.push(new oe(a.extractQueryNodes(),o)),this}return this.selectNodes.push(new oe(r.extractQueryNodes(),o)),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}clearSelect(){return super.clearSelect(),this}selectFunc(e,r,o){return super.selectFunc(e,r,o),this}selectJson(e,r,o){return super.selectJson(e,r,o),this}selectJsonText(e,r,o){return super.selectJsonText(e,r,o),this}selectJsonArrayLength(e,r,o){return super.selectJsonArrayLength(e,r,o),this}selectJsonKeys(e,r,o){return super.selectJsonKeys(e,r,o),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}async exists(){return !!await this.one()}async many(){let{sql:e,bindings:r}=this.unWrap();return this.execSqlWithSlaveHandling("read",o=>J(e,r,o,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}))}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async pluck(e){return (await this.many()).map(o=>o[e])}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async oneOrFail(){let e=await this.one();if(!e)throw new S("SqlDataSource::query::oneOrFail","ROW_NOT_FOUND");return e}async stream(e={}){let{sql:r,bindings:o}=this.unWrap();return this.execSqlWithSlaveHandling("read",async n=>await Jr(r,o,n,e,{onData:(a,l)=>{a.write(l);}}))}async*chunk(e){let r=0;for(;;){let o=await this.limit(e).offset(r).many();if(!o.length)break;r+=o.length,yield o;}}async paginateWithCursor(e,r){if(!this.orderByNodes.length)throw new S(this.model.name+"::paginateWithCursor","ORDER_BY_REQUIRED");let o=this.orderByNodes;if(o.some(m=>m.isRawValue))throw new S(this.model.name+"::paginateWithCursor","ORDER_BY_RAW_NOT_SUPPORTED");let n=o.map(m=>m.column),s=o[0].direction==="desc"?"<":">";if(r){let m=Array.isArray(r.value)?r.value:[r.value];this.andWhere(p=>{for(let f=0;f<n.length;f++){let y=f;p.orWhere(T=>{for(let b=0;b<y;b++)T.where(n[b],"=",m[b]);T.where(n[y],s,m[y]);});}});}this.limit(e+1);let a=await this.many(),l=a.length>e,u=l?a.slice(0,e):a,d=u[u.length-1],c=n.map(m=>m.includes(".")?m.slice(m.lastIndexOf(".")+1):m);return {data:u,hasMore:l,nextCursor:d?{key:c.length===1?c[0]:c,value:c.length===1?d[c[0]]:c.map(m=>d[m])}:null}}lockForUpdate(e={}){return this.lockQueryNodes.push(new Ot("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new Ot("for_share",e.skipLocked,e.noWait)),this}union(e){if(typeof e=="string")return this.unionNodes.push(new Fe(e)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Fe(o)),this}unionAll(e){if(typeof e=="string")return this.unionNodes.push(new Fe(e,true)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Fe(o,true)),this}increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?yt(r.total):0}needsDerivedTableCount(){return this.groupByNodes.length>0||this.havingNodes.length>0||this.distinctNode!==null||this.distinctOnNode!==null}buildCountQuery(e="*"){if(!this.needsDerivedTableCount()){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);return}this.clearOrderBy(),this.clearLimit(),this.clearOffset();let r=this.extractQueryNodes();this.withNodes=[],this.distinctNode=null,this.distinctOnNode=null,this.clearSelect(),this.fromNode=new U(r,"g"),this.joinNodes=[],this.whereNodes=[],this.groupByNodes=[],this.havingNodes=[],this.lockQueryNodes=[],this.unionNodes=[],this.selectRaw(`count(${e}) as total`);}async getMax(e){this.clearForFunctions(),this.selectRaw(`max(${e}) as total`);let r=await this.one();return r?yt(r.total):0}async getMin(e){this.clearForFunctions(),this.selectRaw(`min(${e}) as total`);let r=await this.one();return r?yt(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectRaw(`avg(${e}) as total`);let r=await this.one();return r?yt(r.total):0}async getSum(e){this.clearForFunctions(),this.selectRaw(`sum(${e}) as total`);let r=await this.one();return r?yt(r.total):0}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&g.warn(`${this.model.name}::paginate Non numeric values provided to \`paginate\``);let o=this.clone(),n=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>n.many(),()=>o.getCount("*"));return {paginationMetadata:Hr(e,r,a),data:s}}table(e,r){if(typeof e=="function"){if(!r)throw new S("QueryBuilder::table","MISSING_ALIAS_FOR_SUBQUERY");let o=new i(this.model,this.sqlDataSource),n=e(o),a=(n!=null&&"extractQueryNodes"in n?n:o).extractQueryNodes();return this.fromNode=new U(a,r),this}return this.fromNode=new U(e,r),this}with(e,r){let o=new i(this.model,this.sqlDataSource),n=r(o),s=n!=null&&"extractQueryNodes"in n?n:o;return this.withNodes.push(new mt("normal",e,s.extractQueryNodes())),this}withRecursive(e,r){let o=new i(this.model,this.sqlDataSource),n=r(o),s=n!=null&&"extractQueryNodes"in n?n:o;return this.withNodes.push(new mt("recursive",e,s.extractQueryNodes())),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new S("QueryBuilder::withMaterialized","MATERIALIZED_CTE_NOT_SUPPORTED",new Error("MATERIALIZED CTE is only supported by postgres"));let o=new i(this.model,this.sqlDataSource),n=r(o),s=n!=null&&"extractQueryNodes"in n?n:o;return this.withNodes.push(new mt("materialized",e,s.extractQueryNodes())),this}insert(e,r){let o=Object.fromEntries(Object.keys(e).map(s=>[s,e[s]])),n=!r||r.length===0;return this.insertNode=new Y(this.fromNode,[this.interpreterUtils.stripComputedFromData(o)],r,n),new X(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:s,values:a}=await this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert"),l=Object.fromEntries(s.map((p,f)=>[p,a[f]]));this.insertNode=new Y(this.fromNode,[l],r,n);let{sql:u,bindings:d}=this.astParser.parse([this.insertNode]),c=await this.getSqlDataSource("write"),m=await J(u,d,c,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[e]}});if(!n)return Array.isArray(m)&&m.length?m[0]:m})}insertMany(e,r){let o=e.map(s=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(s).map(a=>[a,s[a]])))),n=!r||r.length===0;return this.insertNode=new Y(this.fromNode,o,r,n),new X(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{if(!e.length)return n?void 0:[];let s=await Promise.all(e.map(async c=>{let{columns:m,values:p}=await this.interpreterUtils.prepareColumns(Object.keys(c),Object.values(c),"insert");return Object.fromEntries(m.map((f,y)=>[f,p[y]]))}));this.insertNode=new Y(this.fromNode,s,r,n);let{sql:a,bindings:l}=this.astParser.parse([this.insertNode]),u=await this.getSqlDataSource("write"),d=await J(a,l,u,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:s}});if(!n)return d})}upsert(e,r,o={updateOnConflict:true}){let n=this.interpreterUtils.filterComputedColumns(Object.keys(e)),s=Object.keys(r),a=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(e).map(l=>[l,e[l]])));return this.insertNode=new Y(new U(this.model.table),[a],void 0,true),this.onDuplicateNode=new Ne(this.model.table,s,n,o.updateOnConflict??true?"update":"ignore",o.returning),new X(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:u}=await this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert"),d=Object.fromEntries(l.map((y,T)=>[y,u[T]]));if(this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw([d],s,n,o,[e]);let{sql:c,bindings:m}=this.astParser.parse([new Y(new U(this.model.table),[d],void 0,true),new Ne(this.model.table,s,n,o.updateOnConflict??true?"update":"ignore",o.returning)]),p=await this.getSqlDataSource("write"),f=await J(c,m,p,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:[e]}});return Array.isArray(f)?f:[f]})}upsertMany(e,r,o,n={updateOnConflict:true}){let s=this.interpreterUtils.filterComputedColumns(r),a=o.map(l=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(l).map(u=>[u,l[u]]))));return this.insertNode=new Y(new U(this.model.table),a,void 0,true),this.onDuplicateNode=new Ne(this.model.table,e,s,n.updateOnConflict??true?"update":"ignore",n.returning),new X(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let l=[];if(await Promise.all(o.map(async p=>{let{columns:f,values:y}=await this.interpreterUtils.prepareColumns(Object.keys(p),Object.values(p),"insert"),T=Object.fromEntries(f.map((b,C)=>[b,y[C]]));l.push(T);})),this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw(l,e,s,n,o);let{sql:u,bindings:d}=this.astParser.parse([new Y(new U(this.model.table),l,void 0,true),new Ne(this.model.table,e,s,n.updateOnConflict??true?"update":"ignore",n.returning)]),c=await this.getSqlDataSource("write"),m=await J(u,d,c,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});return Array.isArray(m)?m:[m]})}async executeMssqlMergeRaw(e,r,o,n,s){if(!e.length)return [];let a=Object.keys(e[0]),l=this.interpreterUtils.formatStringColumn("mssql",this.model.table),u=v=>this.interpreterUtils.formatStringColumn("mssql",v),d=[],c=e.map(v=>`select ${a.map(I=>(d.push(v[I]),`@${d.length}`)).join(", ")}`),m=a.map(u).join(", "),p=c.join(" union all "),f=r.map(v=>`target.${u(v)} = source.${u(v)}`).join(" and "),y=o.filter(v=>!r.includes(v)).map(v=>`target.${u(v)} = source.${u(v)}`).join(", "),T=a.map(u).join(", "),b=a.map(v=>`source.${u(v)}`).join(", "),C=n.returning&&n.returning.length?n.returning.map(v=>`inserted.${u(v)}`).join(", "):a.map(v=>`inserted.${u(v)}`).join(", "),_=(n.updateOnConflict??true)&&y?`when matched then update set ${y}`:"",D=`merge into ${l} as target using (${p}) as source (${m}) on ${f} ${_} when not matched then insert (${T}) values (${b}) output ${C};`,A=await this.getSqlDataSource("write"),M=await J(D,d,A,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(M)?M:[M]}update(e,r){let o=this.interpreterUtils.stripComputedFromData(e),n=Object.keys(o),s=Object.values(o);this.updateNode=new Ae(this.fromNode,n,s,false,r);let a=r&&r.length>0;return new X(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:u}=await this.interpreterUtils.prepareColumns(n,s,"update");this.updateNode=new Ae(this.fromNode,l,u,false,r);let{sql:d,bindings:c}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),m=await this.getSqlDataSource("write");return J(d,c,m,this.dbType,a?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:a?"fetch":"affectedRows"}})})}truncate(){return this.truncateNode=new dt(this.fromNode),new X(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:e,bindings:r}=this.astParser.parse([this.truncateNode]),o=await this.getSqlDataSource("write");await J(e,r,o,this.dbType,"rows");})}delete(e){this.deleteNode=new ft(this.fromNode,false,e);let r=e&&e.length>0;return new X(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:o,bindings:n}=this.astParser.parse([this.deleteNode,...this.whereNodes,...this.joinNodes]),s=await this.getSqlDataSource("write");return J(o,n,s,this.dbType,r?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:r?"fetch":"affectedRows"}})})}softDelete(e={}){let{column:r="deletedAt",value:o=pt()}=e||{};return this.updateNode=new Ae(this.fromNode,[r],[o]),new X(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:n,values:s}=await this.interpreterUtils.prepareColumns([r],[o],"update");this.updateNode=new Ae(this.fromNode,n,s);let{sql:a,bindings:l}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),u=await this.getSqlDataSource("write");return J(a,l,u,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return Ze(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),o=tt(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${o}`:o,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new oe("*")]);let{sql:e,bindings:r}=this.astParser.parse(this.extractQueryNodes());return {sql:this.withQuery?`${this.withQuery} ${e}`:e,bindings:[...r||[]]}}clone(){let e=new i(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=j(this.modelSelectedColumns),e.distinctNode=j(this.distinctNode),e.distinctOnNode=j(this.distinctOnNode),e.selectNodes=j(this.selectNodes),e.withQuery=j(this.withQuery),e.joinNodes=j(this.joinNodes),e.whereNodes=j(this.whereNodes),e.groupByNodes=j(this.groupByNodes),e.havingNodes=j(this.havingNodes),e.orderByNodes=j(this.orderByNodes),e.lockQueryNodes=j(this.lockQueryNodes),e.unionNodes=j(this.unionNodes),e.withNodes=j(this.withNodes),e.fromNode=j(this.fromNode),e.limitNode=j(this.limitNode),e.offsetNode=j(this.offsetNode),e.isNestedCondition=this.isNestedCondition,e}clear(){let e=new i(this.model,this.sqlDataSource);return this.fromNode.alias&&e.table(e.model.table,this.fromNode.alias),e}clearLockQuery(){return this.lockQueryNodes=[],this}clearUnionQuery(){return this.unionNodes=[],this}clearWithQuery(){return this.withNodes=[],this}extractQueryNodes(){return this.selectNodes.length||(this.selectNodes=[new oe("*")]),this.insertNode?[this.insertNode,this.onDuplicateNode].filter(Boolean):this.updateNode?[this.updateNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode].filter(Boolean):this.deleteNode?[this.deleteNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode].filter(Boolean):this.truncateNode?[this.truncateNode]:[...this.withNodes,this.distinctNode,this.distinctOnNode,...this.selectNodes,this.fromNode,...this.joinNodes,...this.whereNodes,...this.groupByNodes,...this.havingNodes,...this.orderByNodes,this.limitNode,this.offsetNode,...this.lockQueryNodes,...this.unionNodes].filter(Boolean)}clearForFunctions(){return this.clearSelect(),this.clearGroupBy(),this.clearOrderBy(),this.clearLimit(),this.clearOffset(),this}isMssqlTransaction(){return this.sqlDataSource.type==="mssql"&&!!this.sqlDataSource.sqlConnection}async executePaginateQueries(e,r){if(this.isMssqlTransaction()){let o=await e(),n=await r();return [o,n]}return Promise.all([e(),r()])}async getSqlDataSource(e){return this.replicationMode?this.replicationMode==="master"?this.sqlDataSource:e==="write"?this.sqlDataSource:this.sqlDataSource.getSlave()||this.sqlDataSource:e==="read"?this.sqlDataSource.getSlave()||this.sqlDataSource:this.sqlDataSource}async execSqlWithSlaveHandling(e,r){let o=await this.getSqlDataSource(e);if(!(o!==this.sqlDataSource))return r(o);try{return await r(o)}catch(s){let a=s instanceof Error?s:new Error(String(s)),l=this.sqlDataSource.getOnSlaveServerFailure();if(l)return await l(a,{host:o.host,port:o.port,username:o.username,password:o.password,database:o.database,type:o.getDbType()}),await r(this.sqlDataSource);throw a}}};function Ay(i,t){return t.strategy&&t.strategy!=="auto"?t.strategy:Dg(i)}function Dg(i){let{parentCount:t,relationType:e,hasLimitOffset:r}=i;return r&&(e==="hasMany"||e==="manyToMany")?"batched":t===1?"join":e==="manyToMany"?typeof t=="number"&&t<=10?"join":"batched":typeof t=="number"&&t<10?"join":"batched"}var Ye=class i extends Q{constructor(e,r){super(e,r);this.loadOptions={strategy:"auto"};this.sqlModelManagerUtils=new Pt(e,this.dbType,r),this.relationQueryBuilders=[],this.modelSelectedColumns=[],this.modelColumnsMap=this.model.getColumnsByDatabaseName(),this.modelColumnsDatabaseNames=new Map;for(let[o,n]of this.modelColumnsMap)this.modelColumnsDatabaseNames.set(o,n.columnName);}get isRelationQueryBuilder(){return !!this.relation}static from(e,r={}){if(r.connection)return new i(e,r.connection);if(r.trx)return new i(e,r.trx.sql);throw new Error("ModelQueryBuilder::from - A connection or transaction is required. Use sql.from(Model) instead.")}async one(e={}){let r=await this.limit(1).many(e);return !r||!r.length?null:r[0]}async oneOrFail(e){let r=await this.one(e);if(!r)throw new S(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return r}async many(e={}){!e.ignoreHooks?.includes("beforeFetch")&&await this.model.beforeFetch?.(this);let o=(await super.many()).map(a=>this.addAdditionalColumnsToModel(a));if(!o.length)return [];let n=await Oe(o,this.model,this.modelSelectedColumns);if(!n)return [];let s=Array.isArray(n)?n:[n];return e.ignoreHooks?.includes("afterFetch")||await this.model.afterFetch?.(s),this.relationQueryBuilders.length&&await this.processRelationsWithStrategy(s),s}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async*chunk(e,r={}){let o=0;for(;;){let n=await this.limit(e).offset(o).many(r);if(!n.length)break;yield n,o+=n.length;}}async stream(e={}){!e.ignoreHooks?.includes("beforeFetch")&&await this.model.beforeFetch?.(this);let{sql:r,bindings:o}=this.unWrap(),n=await this.getSqlDataSource("read");return await Jr(r,o,n,e,{onData:async(a,l)=>{let u=this.addAdditionalColumnsToModel(l),d=await Oe([u],this.model,this.modelSelectedColumns);d&&(e.ignoreHooks?.includes("afterFetch")||await this.model.afterFetch?.([d]),this.relationQueryBuilders.length&&await this.processRelationsRecursively([d]),a.write(d));}})}async paginateWithCursor(e,r){return super.paginateWithCursor(e,r)}insert(e,r={}){return this.getModelManager(r.trx).insert(e,{ignoreHooks:r.ignoreHooks,returning:r.returning})}insertMany(e,r={}){return this.getModelManager(r.trx).insertMany(e,{ignoreHooks:r.ignoreHooks,returning:r.returning})}upsert(e,r,o={updateOnConflict:true}){let n=this.getModelManager(o.trx),s=Object.keys(e),a=Object.keys(r),l={...e,...r};return n.upsertMany(s,a,[l],{updateOnConflict:o.updateOnConflict??true,returning:o.returning}).then(u=>Array.isArray(u)?u[0]:u)}upsertMany(e,r,o={updateOnConflict:true}){let n=this.getModelManager(o.trx),s=r.length>0?Object.keys(r[0]):[];return n.upsertMany(e,s,r,{updateOnConflict:o.updateOnConflict??true,returning:o.returning})}getModelManager(e){let r=e?e.sql:this.sqlDataSource.getTransactionBoundSqlDataSource()??this.sqlDataSource;return new Ge(this.model,r)}async find(e){return this.getModelManager().find(e)}async findOne(e){return this.getModelManager().findOne(e)}async findOneOrFail(e){return this.getModelManager().findOneOrFail(e)}async findOneByPrimaryKey(e,r){return this.getModelManager().findOneByPrimaryKey(e,r)}async updateRecord(e,r,o){return this.getModelManager(o?.trx).updateRecord(e,r,o)}async deleteRecord(e,r){return this.getModelManager(r?.trx).deleteRecord(e)}async save(e,r){let o=this.model.primaryKey;if(!o)throw new S(this.model.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");let n=e[o],s=n?{[o]:n}:{};return this.upsert(s,e,{updateOnConflict:true,returning:r?.returning,trx:r?.trx})}async softDeleteRecord(e,r,o){let{column:n=this.model.softDeleteColumn,value:s=this.model.softDeleteValue}=r||{},a={[n]:s};return this.getModelManager(o?.trx).updateRecord(e,a,{returning:o?.returning})}async firstOrInsert(e,r,o){let n=this.getModelManager(o?.trx),s=await n.findOne({where:e,ignoreHooks:["afterFetch","beforeFetch"]});if(s)return s;let a={...e,...r};return n.insert(a,{returning:["*"]})}async refresh(e){return this.getModelManager().findOneByPrimaryKey(e)}async sync(e,r,o,n,s={}){if(Array.isArray(o)||(o=[o]),!o.length)return;let a=this.sqlModelManagerUtils.getRelationFromModel(e);if(a.type!=="manyToMany")throw new S(`${this.model.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let l=z(a.leftForeignKey,s.caseConvention||this.model.databaseCaseConvention),u=z(a.rightForeignKey,s.caseConvention||this.model.databaseCaseConvention),d=o.map((p,f)=>({[l]:r[this.model.primaryKey],[u]:p[a.model.primaryKey],...n?n(p,f):{}}));class c extends _e{static get table(){return a.throughModel}}c.databaseCaseConvention="preserve",c.modelCaseConvention="preserve",await new Ge(c,s.trx?s.trx.sql:this.sqlDataSource).insertMany(d);}truncate(){return super.truncate()}update(e,r={}){let o=r.returning,n=super.update(e,o);return new X(()=>n.unWrap(),()=>n.toSql(),()=>n.toQuery(),async()=>(r.ignoreBeforeUpdateHook||await this.model.beforeUpdate?.(this),n))}softDelete(e={}){let r=super.softDelete(e),{ignoreBeforeUpdateHook:o=false}=e||{};return new X(()=>r.unWrap(),()=>r.toSql(),()=>r.toQuery(),async()=>(o||await this.model.beforeUpdate?.(this),r))}delete(e={}){let r=e.returning,o=super.delete(r);return new X(()=>o.unWrap(),()=>o.toSql(),()=>o.toQuery(),async()=>(e.ignoreBeforeDeleteHook||await this.model.beforeDelete?.(this),o))}async getCount(e="*",r={ignoreHooks:false}){this.buildCountQuery(e);let o=r.ignoreHooks?["beforeFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.total:0}async getMax(e,r={ignoreHooks:false}){this.clearForFunctions(),this.selectRaw(`max(${e}) as total`);let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.total:0}async getMin(e,r={ignoreHooks:false}){this.clearForFunctions(),this.selectRaw(`min(${e}) as total`);let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.total:0}async getAvg(e,r={ignoreHooks:false}){this.clearForFunctions(),this.selectRaw(`avg(${e}) as total`);let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.total:0}async getSum(e,r={ignoreHooks:false}){this.clearForFunctions(),this.selectRaw(`sum(${e}) as total`);let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.total:0}async paginate(e,r,o={ignoreHooks:false}){let n=this.clone(),s=this.limit(r).offset((e-1)*r),a=o.ignoreHooks?["beforeFetch","afterFetch"]:[],[l,u]=await this.executePaginateQueries(()=>s.many({ignoreHooks:a}),()=>n.getCount("*",{ignoreHooks:o.ignoreHooks}));return {paginationMetadata:Hr(e,r,u),data:l}}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof Q)&&typeof e[1]=="string"){let[r,o]=e;return super.select(r,o),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}selectFunc(e,r,o){return super.selectFunc(e,r,o),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}selectJson(e,r,o){return super.selectJson(e,r,o),this}selectJsonText(e,r,o){return super.selectJsonText(e,r,o),this}selectJsonArrayLength(e,r,o){return super.selectJsonArrayLength(e,r,o),this}selectJsonKeys(e,r,o){return super.selectJsonKeys(e,r,o),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}load(e,r,o){let n,s={strategy:"auto"};typeof r=="function"?(n=r,o&&(s=o)):r&&typeof r=="object"&&(s=r);let a=this.sqlModelManagerUtils.getRelationFromModel(e),l=new i(a.model,this.sqlDataSource);return l.relation=a,l.loadOptions=s,n?.(l),this.relationQueryBuilders.push(l),this}clearRelations(){return this.relationQueryBuilders=[],this}havingRelated(e,r,o){return this.andHavingRelated(e,r,o)}andHavingRelated(e,r,o){let n,s,a;typeof r=="function"?a=r:typeof r=="string"&&o!==void 0?(s=r,n=o):r!==void 0&&(n=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,n),this.whereExists(d),this}orHavingRelated(e,r,o){let n,s,a;typeof r=="function"?a=r:typeof r=="string"&&o!==void 0?(s=r,n=o):r!==void 0&&(n=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,n),this.orWhereExists(d),this}notHavingRelated(e,r,o){return this.andNotHavingRelated(e,r,o)}andNotHavingRelated(e,r,o){let n,s,a;typeof r=="function"?a=r:typeof r=="string"&&o!==void 0?(s=r,n=o):r!==void 0&&(n=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,n),this.whereNotExists(d),this}orNotHavingRelated(e,r,o){let n,s,a;typeof r=="function"?a=r:typeof r=="string"&&o!==void 0?(s=r,n=o):r!==void 0&&(n=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,n),this.orWhereNotExists(d),this}clone(){let e=super.clone();return e.relationQueryBuilders=j(this.relationQueryBuilders),e}async processRelationsRecursively(e){await Promise.all(this.relationQueryBuilders.filter(r=>r.isRelationQueryBuilder).map(async r=>{let o=await this.getRelatedModelsForRelation(r,r.relation,e);this.mapRelatedModelsToModels(r.relation,e,o);}));}async processRelationsWithStrategy(e){let r=e.length,o=this.relationQueryBuilders.filter(s=>s.isRelationQueryBuilder),n=async s=>{let a=Ay({parentCount:r,relationType:s.relation.type,hasLimitOffset:!!s.limitNode||!!s.offsetNode,hasOrderBy:s.orderByNodes.length>0},s.loadOptions),l=s.relationQueryBuilders.length>0;a==="join"&&!l?await this.loadRelationViaJoin(s,e):await this.loadRelationViaBatch(s,e);};if(this.dbType==="mssql"){for(let s of o)await n(s);return}await Promise.all(o.map(n));}async loadRelationViaJoin(e,r){let o=e.relation,n=e.loadOptions.joinSeparator||"__",a=await this.buildJoinQuery(e,o,n).many({ignoreHooks:["beforeFetch","afterFetch"]});this.mapJoinedResultsToModels(a,r,o,n);}buildJoinQuery(e,r,o){let n=new i(this.model,this.sqlDataSource);if(this.modelSelectedColumns.length>0)for(let s of this.selectNodes)n.selectNodes.push(j(s));else for(let[s,a]of this.model.getColumnsByDatabaseName())a.expression||n.selectRaw(`${this.model.table}.${s}`);for(let s of this.whereNodes){let a=j(s);this.qualifyWhereNodeColumns(a,this.model.table),n.whereNodes.push(a);}for(let s of this.groupByNodes)n.groupByNodes.push(j(s));for(let s of this.orderByNodes)n.orderByNodes.push(j(s));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(n.limitNode=j(this.limitNode)),this.offsetNode&&(n.offsetNode=j(this.offsetNode))),r.type){case "hasOne":case "hasMany":n.leftJoin(r.model.table,`${this.model.table}.${this.model.primaryKey}`,`${r.model.table}.${r.foreignKey}`);break;case "belongsTo":n.leftJoin(r.model.table,`${this.model.table}.${r.foreignKey}`,`${r.model.table}.${r.model.primaryKey}`);break;case "manyToMany":{let s=r;n.leftJoin(s.throughModel,`${this.model.table}.${this.model.primaryKey}`,`${s.throughModel}.${s.leftForeignKey}`),n.leftJoin(s.model.table,`${s.throughModel}.${s.rightForeignKey}`,`${s.model.table}.${s.model.primaryKey}`);break}}this.selectRelationColumnsWithAlias(n,r,e,o);for(let s of e.whereNodes)n.whereNodes.push(j(s));for(let s of e.orderByNodes)n.orderByNodes.push(j(s));return n}selectRelationColumnsWithAlias(e,r,o,n){let s=r.columnName,a=r.model,l=a.getColumnsByName(),u=a.getColumnsByDatabaseName(),d=o.selectNodes.filter(m=>typeof m.column=="string"),c=d.some(m=>m.column==="*"||m.column.endsWith(".*"));if(d.length===0||c)for(let[m,p]of u)e.selectRaw(`${a.table}.${m} as ${s}${n}${p.columnName}`);else for(let m of d){let p=m.column,f=p.includes(".")?p.split(".").pop():p,y=u.get(f)||l.get(f),T=y?.databaseName??f,b=m.alias??y?.columnName??f;e.selectRaw(`${a.table}.${T} as ${s}${n}${b}`);}}mapJoinedResultsToModels(e,r,o,n){let{columnName:s,type:a}=o,l=o.model.getColumnsByName();if(a==="hasMany"||a==="manyToMany"){let u=new Map;e.forEach(d=>{let c=d[this.model.primaryKey];u.has(c)||u.set(c,[]);let m=this.extractRelationDataFromRow(d,s,n);m&&(this.serializeRelationData(m,l),u.get(c).push(m));}),r.forEach(d=>{let c=d[this.model.primaryKey];d[s]=u.get(c)||[];});}else {let u=new Map;e.forEach(d=>{let c=d[this.model.primaryKey];if(!u.has(c)){let m=this.extractRelationDataFromRow(d,s,n);m&&(this.serializeRelationData(m,l),u.set(c,m));}}),r.forEach(d=>{let c=d[this.model.primaryKey];d[s]=u.get(c)||null;});}}extractRelationDataFromRow(e,r,o){let n=`${r}${o}`,s={},a=false,l=false;for(let u of Object.keys(e))if(u.startsWith(n)){let d=u.substring(n.length);s[d]=e[u],a=true,e[u]!==null&&e[u]!==void 0&&(l=true);}return a&&l?s:null}qualifyWhereNodeColumns(e,r){if(e instanceof O)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof we)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof Re)for(let o of e.nodes)this.qualifyWhereNodeColumns(o,r);}serializeRelationData(e,r){for(let o of Object.keys(e)){let n=r.get(o);n?.serialize&&e[o]!==null&&e[o]!==void 0&&(e[o]=n.serialize(e[o]));}}async loadRelationViaBatch(e,r){let o=await this.getRelatedModelsForRelation(e,e.relation,r);this.mapRelatedModelsToModels(e.relation,r,o);}mapRelatedModelsToModels(e,r,o){switch(e.type){case "hasOne":if(!this.model.primaryKey)throw new S(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let n=new Map;o.forEach(m=>{let p=m[e.foreignKey];p&&n.set(String(p),m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=null;return}let f=n.get(String(p));m[e.columnName]=f||null;});break;case "belongsTo":let s=new Map;o.forEach(m=>{if(!e.model.primaryKey)throw new S(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let p=m[e.model.primaryKey];p&&s.set(String(p),m);}),r.forEach(m=>{let p=m[e.foreignKey];if(!p){m[e.columnName]=null;return}let f=s.get(String(p));m[e.columnName]=f||null;});break;case "hasMany":if(!this.model.primaryKey)throw new S(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;o.forEach(m=>{let p=m[e.foreignKey];if(!p)return;let f=String(p);a.has(f)||a.set(f,[]),a.get(f).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let f=a.get(String(p))||[];m[e.columnName]=f;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new S(this.model.name+"::mapRelatedModelsToModels::manyToMany","MODEL_HAS_NO_PRIMARY_KEY");let l=e,u=new Map,d=l.leftForeignKey,c=this.modelColumnsMap.get(d)||this.modelColumnsDatabaseNames.get(d)||z(d,this.model.modelCaseConvention);o.forEach(m=>{let p=m[c];if(p==null)return;let f=String(p);u.has(f)||u.set(f,[]),delete m[c],u.get(f).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let f=u.get(String(p))||[];m[e.columnName]=f;});break;default:throw new S(this.model.name+"::mapRelatedModelsToModels","UNSUPPORTED_RELATION_TYPE")}}async getRelatedModelsForRelation(e,r,o){return this.getRelatedModelsQueryForRelation(e,r,o).many()}getRelatedModelsQueryForRelation(e,r,o){let n=this.getFilterValuesFromModelsForRelation(r,o);switch(r.type){case "belongsTo":case "hasOne":return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,n);case "hasMany":let s=e.limitNode?.limit,a=e.offsetNode?.offset;if(!s&&!a)return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,n);let l=xe.randomBytes(6).toString("hex"),u=`${r.model.table}_cte_${l}`,d=e.orderByNodes.map(M=>M.isRawValue?M.column:`${this.interpreterUtils.formatStringColumn(this.dbType,M.column)} ${M.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let c=e.with(u,M=>M.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${d}) as rn_${l}`).whereIn(r.foreignKey,n));s&&c.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&c.whereRaw(`rn_${l} > ${a}`);let m=e.modelSelectedColumns.map(M=>vo(M,u,e.model.table));return c.select(...m).table(u);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new S(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!o.length)return e;let f=e.limitNode?.limit,y=e.offsetNode?.offset,T=e.modelSelectedColumns.length?e.modelSelectedColumns.map(M=>M.includes(".")?M:`${r.model.table}.${M}`):[`${r.model.table}.*`];if(!f&&!y)return e.select(...T).select([`${p.throughModel}.${p.leftForeignKey}`,p.leftForeignKey]).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,n);let b=xe.randomBytes(6).toString("hex"),C=`${r.model.table}_cte_${b}`,R=e.orderByNodes.map(M=>{if(M.isRawValue)return M.column;let v=M.column.includes(".")?M.column:`${r.model.table}.${M.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,v)} ${M.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let _=`${xe.randomBytes(6).toString("hex")}_left_foreign_key`,D=e.with(C,M=>M.select(...T).select([`${p.throughModel}.${p.leftForeignKey}`,_]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${R}) as rn_${b}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,n));f&&D.whereRaw(`rn_${b} <= ${f+(y||0)}`),y&&D.whereRaw(`rn_${b} > ${y}`);let A=T.map(M=>vo(M,C,e.model.table));return D.select(...A).select([`${C}.${_}`,p.leftForeignKey]).table(C);default:throw new S(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new S(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(o=>o[this.model.primaryKey]);case "belongsTo":return r.map(o=>o[e.foreignKey]);case "manyToMany":if(!this.model.primaryKey)throw new S(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(o=>o[this.model.primaryKey]);default:throw new S(this.model.name+"::getFilterValuesFromModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}applyHavingRelatedFilter(e,r,o,n){let s=new h(r.model),a=new h(this.model),l=this.dbType;switch(r.type){case "hasOne":case "hasMany":{if(!this.model.primaryKey||!r.foreignKey)throw new S(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");let u=s.formatStringColumn(l,`${r.model.table}.${r.foreignKey}`),d=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${u} = ${d}`),o&&typeof n=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${o} ${n}`);return}case "belongsTo":{if(!r.model.primaryKey||!r.foreignKey)throw new S(this.model.name+"::applyHavingRelatedFilter",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${r.model.name}`);let u=s.formatStringColumn(l,`${r.model.table}.${r.model.primaryKey}`),d=a.formatStringColumn(l,`${this.model.table}.${r.foreignKey}`);e.whereRaw(`${u} = ${d}`),o&&typeof n=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${o} ${n}`);return}case "manyToMany":{let u=r;if(!this.model.primaryKey||!r.model.primaryKey)throw new S(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");e.joinNodes?.some(p=>!p.isRawValue&&p.table===u.throughModel&&p.type==="left")||e.leftJoin(u.throughModel,`${u.relatedModel}.${r.model.primaryKey}`,`${u.throughModel}.${u.rightForeignKey}`);let c=a.formatStringColumn(l,`${u.throughModel}.${u.leftForeignKey}`),m=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${c} = ${m}`),o&&typeof n=="number"&&e.groupByRaw(c).andHavingRaw(`count(*) ${o} ${n}`);return}default:throw new S(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}addAdditionalColumnsToModel(e){let r={};return Object.entries(e).forEach(([o,n])=>{if(this.modelColumnsDatabaseNames.get(o)){r[o]=n;return}r[o]=n;}),r}};function Oy(){return {}}var Ge=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=Oy(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new N(this.model,this.sqlType),this.interpreterUtils=new h(this.model);}setReplicationMode(t){return this.replicationMode=t,this}async find(t){if(!t)return this.query().many();let e=this.query();return t.select&&e.select(...t.select),t.relations&&t.relations.forEach(r=>{e.load(r);}),t.where&&this.handleWhereCondition(e,t.where),t.orderBy&&Object.entries(t.orderBy).forEach(([r,o])=>{e.orderBy(r,o);}),t.limit&&e.limit(t.limit),t.offset&&e.offset(t.offset),t.groupBy&&e.groupBy(...t.groupBy),e.many({ignoreHooks:t.ignoreHooks||[]})}async findOne(t){let e=await this.find({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,ignoreHooks:t.ignoreHooks,offset:t.offset,limit:1});return e.length?e[0]:null}async findOneOrFail(t){let e=await this.findOne({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,ignoreHooks:t.ignoreHooks,offset:t.offset});if(e===null)throw t.customError?t.customError:new S(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new S(this.model.name+"::findOneByPrimaryKey","MODEL_HAS_NO_PRIMARY_KEY");return this.query().select(...e||[]).where(this.model.primaryKey,t).one({ignoreHooks:["afterFetch","beforeFetch"]})}insert(t,e={}){let r=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(t).map(u=>[u,t[u]]))),o=!e.returning||e.returning.length===0,n=new Y(new U(this.model.table),[r],e.returning,o),s=()=>{let u=this.astParser.parse([n]);return {sql:u.sql,bindings:u.bindings}},a=()=>{let u=this.astParser.parse([n]);return {sql:tt(this.sqlDataSource,u.sql),bindings:u.bindings}},l=()=>{let{sql:u,bindings:d}=a();return Ze(u,d)};return new X(s,a,l,async()=>{try{await this.model.validate?.(t);}catch(C){throw C}e.ignoreHooks||await this.model.beforeInsert?.(t);let{columns:u,values:d}=await this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert"),c={};u.forEach((C,R)=>{let _=d[R];c[C]=_,t[C]??(t[C]=_);});let m=!e.returning||e.returning.length===0,{sql:p,bindings:f}=this.astParser.parse([new Y(new U(this.model.table),[c],e.returning,m)]),y=await J(p,f,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(m)return;if(this.sqlType==="mysql"||this.sqlType==="mariadb")return this.handleMysqlInsert(y,[t],"one",e.returning);let T=y[0];return T?(await this.model.afterFetch?.([T]),await Oe([T],this.model,e.returning)):t})}insertMany(t,e={}){let r=t.map(u=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(u).map(d=>[d,u[d]])))),o=!e.returning||e.returning.length===0,n=new Y(new U(this.model.table),r,e.returning,o),s=()=>{let u=this.astParser.parse([n]);return {sql:u.sql,bindings:u.bindings}},a=()=>{let u=this.astParser.parse([n]);return {sql:tt(this.sqlDataSource,u.sql),bindings:u.bindings}},l=()=>{let{sql:u,bindings:d}=a();return Ze(u,d)};return new X(s,a,l,async()=>{try{await this.model.validate?.(t);}catch(T){throw T}if(await this.model.beforeInsertMany?.(t),this.sqlType==="oracledb"){let T=this.model.primaryKey,b=Object.keys(t[0]||{});if(T&&!b.includes(T))return this.handleOracleIdentityInsert(t,e)}let u=new Array(t.length);await Promise.all(t.map(async(T,b)=>{let{columns:C,values:R}=await this.interpreterUtils.prepareColumns(Object.keys(T),Object.values(T),"insert"),_={};C.forEach((D,A)=>{let M=R[A];_[D]=M,T[D]??(T[D]=M);}),u[b]=_;}));let d=!e.returning||e.returning.length===0,{sql:c,bindings:m}=this.astParser.parse([new Y(new U(this.model.table),u,e.returning,d)]),p=await J(c,m,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(d)return [];if(this.sqlType==="mysql"||this.sqlType==="mariadb")return await this.handleMysqlInsert(p,t,"many",e.returning)||[];let f=p;return f.length?(await this.model.afterFetch?.(f),await Oe(f,this.model,e.returning)||[]):[]})}upsertMany(t,e,r,o={updateOnConflict:true}){let n=this.interpreterUtils.filterComputedColumns(e),s=r.map(p=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(p).map(f=>[f,p[f]])))),a=new Y(new U(this.model.table),s,void 0,true),l=o.returning?.length&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?o.returning:void 0;new Ne(this.model.table,t,n,o.updateOnConflict??true?"update":"ignore",l);let d=()=>{let p=this.astParser.parse([a]);return {sql:p.sql,bindings:p.bindings}},c=()=>{let p=this.astParser.parse([a]);return {sql:tt(this.sqlDataSource,p.sql),bindings:p.bindings}},m=()=>{let{sql:p,bindings:f}=c();return Ze(p,f)};return new X(d,c,m,async()=>{let p=[];if(await this.model.beforeInsertMany?.(r),await Promise.all(r.map(async A=>{let{columns:M,values:v}=await this.interpreterUtils.prepareColumns(Object.keys(A),Object.values(A),"insert"),H=Object.fromEntries(M.map((I,B)=>[I,v[B]]));p.push(H);})),this.sqlType==="mssql")return this.executeMssqlMerge(p,t,n,o,r);let f=!o.returning||o.returning.length===0,y=!f&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?o.returning:void 0,{sql:T,bindings:b}=this.astParser.parse([new Y(new U(this.model.table),p,void 0,true),new Ne(this.model.table,t,n,o.updateOnConflict??true?"update":"ignore",y)]),C=await J(T,b,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:r}});if(f)return [];if(this.sqlType==="postgres"||this.sqlType==="cockroachdb"){if(C.length<r.length&&!(o.updateOnConflict??true)){let v=t[0],H=r.map(B=>B[v]);return await this.query().select(...o.returning?.length?o.returning:["*"]).whereIn(v,H).many()}let A=C;return await this.model.afterFetch?.(A),await Oe(A,this.model,o.returning)||[]}let R=t[0],_=r.map(A=>A[R]);return await this.query().select(...o.returning?.length?o.returning:["*"]).whereIn(R,_).many()})}async executeMssqlMerge(t,e,r,o,n){if(!t.length)return [];let s=Object.keys(t[0]),a=this.interpreterUtils.formatStringColumn("mssql",this.model.table),l=A=>this.interpreterUtils.formatStringColumn("mssql",A),u=[],d=t.map(A=>`select ${s.map(v=>(u.push(A[v]),`@${u.length}`)).join(", ")}`),c=s.map(l).join(", "),m=d.join(" union all "),p=e.map(A=>`target.${l(A)} = source.${l(A)}`).join(" and "),f=r.filter(A=>!e.includes(A)).map(A=>`target.${l(A)} = source.${l(A)}`).join(", "),y=s.map(l).join(", "),T=s.map(A=>`source.${l(A)}`).join(", "),b=o.returning&&o.returning.length?o.returning.map(A=>`inserted.${l(A)}`).join(", "):s.map(A=>`inserted.${l(A)}`).join(", "),R=(o.updateOnConflict??true)&&f?`when matched then update set ${f}`:"",_=`merge into ${a} as target using (${m}) as source (${c}) on ${p} ${R} when not matched then insert (${y}) values (${T}) output ${b};`,D=await J(_,u,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:n}});if(D.length===0&&!(o.updateOnConflict??true)){let A=e[0],M=n.map(H=>H[A]);return await this.query().select(...o.returning?.length?o.returning:["*"]).whereIn(A,M).many()}return D}async updateRecord(t,e,r){let o=new Set(this.model.getColumns().map(f=>f.columnName)),n=Object.keys(e).filter(f=>o.has(f)),s=n.map(f=>e[f]),{columns:a,values:l}=await this.interpreterUtils.prepareColumns(n,s,"update"),{primaryKey:u}=this.model;if(!u)throw new S(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let d=a.indexOf(u);d!==-1&&(a.splice(d,1),l.splice(d,1));let{sql:c,bindings:m}=this.astParser.parse([new Ae(new U(this.model.table),a,l),new O(u,"and",false,"=",t)]);if(await J(c,m,this.sqlDataSource,this.sqlType,"affectedRows"),!r?.returning||r.returning.length===0)return;let p=await this.findOneByPrimaryKey(t,r.returning);if(!p)throw new S(this.model.name+"::updateRecord","ROW_NOT_FOUND");return p}async deleteRecord(t){if(!this.model.primaryKey)throw new S(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new O(this.model.primaryKey,"and",false,"=",t),{sql:r,bindings:o}=this.astParser.parse([new ft(new U(this.model.table)),e]);await J(r,o,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new Ye(this.model,this.sqlDataSource);return this.replicationMode&&t.setReplicationMode(this.replicationMode),t}async handleMysqlInsert(t,e,r,o){if(!this.model.primaryKey){if(r==="one"){let a=e.length?e[0]:null;return a?await Oe([a],this.model):null}return await Oe(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(d=>d[this.model.primaryKey]),l=a.map(d=>`'${d}'`).join(","),u=await this.query().select(...o??["*"]).whereIn(this.model.primaryKey,a).orderByRaw(`FIELD(${this.model.primaryKey}, ${l})`).many();return r==="one"?u.length?u[0]:null:u}let n=Array.from({length:t.affectedRows},(a,l)=>l+t.insertId),s=await this.query().select(...o||["*"]).whereIn(this.model.primaryKey,n).many();return r==="one"?s.length?s[0]:null:s}async handleOracleIdentityInsert(t,e){let r=[],o=this.model.primaryKey;for(let n of t){let{columns:s,values:a}=await this.interpreterUtils.prepareColumns(Object.keys(n),Object.values(n),"insert"),l={};s.forEach((p,f)=>{let y=a[f];l[p]=y,n[p]??(n[p]=y);});let{sql:u,bindings:d}=this.astParser.parse([new Y(new U(this.model.table),[l],e.returning)]);await J(u,d,this.sqlDataSource,this.sqlType,"rows");let c=this.query().select(...e.returning||["*"]);for(let[p,f]of Object.entries(l))f!=null&&p!==o&&c.where(p,"=",f);o&&c.orderBy(o,"desc");let m=await c.one({ignoreHooks:["beforeFetch"]});if(m){let p=m;o&&p[o]&&(n[o]=p[o]),r.push(m);}else r.push(n);}return await this.model.afterFetch?.(r),r}handleWhereCondition(t,e,r=false){if(e)for(let[o,n]of Object.entries(e))o==="$and"&&Array.isArray(n)?t[r?"orWhere":"where"](a=>{for(let l of n)this.handleWhereCondition(a,l,false);}):o==="$or"&&Array.isArray(n)?t[r?"orWhere":"where"](a=>{let l=true;for(let u of n)this.handleWhereCondition(a,u,!l),l=false;}):this.applyFieldCondition(t,o,n,r);}applyFieldCondition(t,e,r,o=false){if(r==null||typeof r!="object"){r===null?o?t.orWhereNull(e):t.whereNull(e):o?t.orWhere(e,"=",r):t.where(e,"=",r);return}let n=r,s=n.op,a=n.value;switch(s){case "$eq":a===null?o?t.orWhereNull(e):t.whereNull(e):o?t.orWhere(e,"=",a):t.where(e,"=",a);break;case "$ne":a===null?o?t.orWhereNotNull(e):t.whereNotNull(e):o?t.orWhere(e,"!=",a):t.where(e,"!=",a);break;case "$gt":o?t.orWhere(e,">",a):t.where(e,">",a);break;case "$gte":o?t.orWhere(e,">=",a):t.where(e,">=",a);break;case "$lt":o?t.orWhere(e,"<",a):t.where(e,"<",a);break;case "$lte":o?t.orWhere(e,"<=",a):t.where(e,"<=",a);break;case "$between":{let[l,u]=a;o?t.orWhereBetween(e,l,u):t.whereBetween(e,l,u);break}case "$not between":{let[l,u]=a;o?t.orWhereNotBetween(e,l,u):t.whereNotBetween(e,l,u);break}case "$regexp":o?t.orWhereRegexp(e,a):t.whereRegexp(e,a);break;case "$not regexp":o?t.orWhereNotRegexp(e,a):t.whereNotRegexp(e,a);break;case "$is null":o?t.orWhereNull(e):t.whereNull(e);break;case "$is not null":o?t.orWhereNotNull(e):t.whereNotNull(e);break;case "$like":o?t.orWhereLike(e,a):t.whereLike(e,a);break;case "$not like":o?t.orWhereNotLike(e,a):t.whereNotLike(e,a);break;case "$ilike":o?t.orWhereILike(e,a):t.whereILike(e,a);break;case "$not ilike":o?t.orWhereNotILike(e,a):t.whereNotILike(e,a);break;case "$in":o?t.orWhereIn(e,a):t.whereIn(e,a);break;case "$nin":o?t.orWhereNotIn(e,a):t.whereNotIn(e,a);break;default:o?t.orWhere(e,"=",r):t.where(e,"=",r);}}};var Dy=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??pt()});var Bt=class Bt{constructor(){}static run(t,e){return Bt.storage.run(t,e)}static getTransaction(){return Bt.storage.getStore()}};Bt.storage=new AsyncLocalStorage;var Qe=Bt;var Qt=class i{constructor(t,e,r=false,o=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=xe.randomBytes(16).toString("hex"),this.isolationLevel=e,this.isNested=r,this.nestingDepth=o;}async nestedTransaction(t){let e=new i(this.sql,this.isolationLevel,true,this.nestingDepth+1);if(await e.transaction(),t)try{let r=await Qe.run(e,()=>t(e));return await e.commit(),r}catch(r){throw await e.rollback(),r}return e}async transaction(){let t=this.getIsolationLevelQuery();if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":await this.sql.rawQuery(`SAVE TRANSACTION ${e}`),this.isActive=true;return;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "oracledb":await this.sql.rawQuery(`SAVEPOINT ${e}`),this.isActive=true;return;case "sqlite":await this.sql.rawQuery(`SAVEPOINT ${e}`),this.isActive=true;return}}switch(this.sql.type){case "mssql":t&&await this.sql.rawQuery(t),ye("BEGIN TRANSACTION",this.sql.logs);let e=await this.getMssqlTransactionLevel();await this.sql.sqlConnection.begin(e),this.isActive=true;break;case "mysql":case "mariadb":t&&await this.sql.rawQuery(t);let r=this.sql.sqlConnection;ye("BEGIN TRANSACTION",this.sql.logs),await r.beginTransaction(),this.isActive=true;break;case "postgres":case "cockroachdb":await this.sql.rawQuery("BEGIN TRANSACTION"),t&&await this.sql.rawQuery(t),this.isActive=true;break;case "sqlite":t&&await this.sql.rawQuery(t),await this.sql.rawQuery("BEGIN TRANSACTION"),this.isActive=true;break;case "oracledb":t&&await this.sql.rawQuery(t),this.isActive=true;break}}async commit(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new S("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":case "oracledb":break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "sqlite":await this.sql.rawQuery(`RELEASE SAVEPOINT ${e}`);break}this.isActive=false;return}try{switch(this.sql.type){case "mssql":ye("COMMIT",this.sql.logs),await this.sql.sqlConnection.commit();break;case "mysql":case "mariadb":let e=this.sql.sqlConnection;ye("COMMIT",this.sql.logs),await e.commit();break;case "postgres":case "cockroachdb":await this.sql.rawQuery("COMMIT");break;case "sqlite":await this.sql.rawQuery("COMMIT");break;case "oracledb":ye("COMMIT",this.sql.logs),await this.sql.sqlConnection.commit();break}}catch(e){throw g.error(e),e}finally{await this.releaseConnection(),this.isActive=false;}}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new S("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":await this.sql.rawQuery(`ROLLBACK TRANSACTION ${e}`);break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "oracledb":await this.sql.rawQuery(`ROLLBACK TO SAVEPOINT ${e}`);break;case "sqlite":await this.sql.rawQuery(`ROLLBACK TO ${e}`);break;default:throw new S("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}this.isActive=false;return}try{switch(this.sql.type){case "mssql":ye("ROLLBACK",this.sql.logs),await this.sql.sqlConnection.rollback();break;case "mysql":case "mariadb":let e=this.sql.sqlConnection;ye("ROLLBACK",this.sql.logs),await e.rollback();break;case "postgres":case "cockroachdb":await this.sql.rawQuery("ROLLBACK");break;case "sqlite":await this.sql.rawQuery("ROLLBACK");break;case "oracledb":ye("ROLLBACK",this.sql.logs),await this.sql.sqlConnection.rollback();break;default:throw new S("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}}catch(e){throw g.error(e),e}finally{await this.releaseConnection(),this.isActive=false;}}async releaseConnection(){if(this.connectionReleased)return;let t=null;try{switch(this.sql.type){case "mssql":break;case "mysql":case "mariadb":this.sql.sqlConnection.release();break;case "postgres":case "cockroachdb":this.sql.sqlConnection.release();break;case "sqlite":break;case "oracledb":await this.sql.sqlConnection.close();break;default:throw new S("TRANSACTION::releaseConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}}catch(e){t=e,g.error(e);}this.sql.sqlConnection=null;try{await this.sql.disconnect();}catch(e){g.warn(`Transaction::releaseConnection - disconnect failed: ${e?.message??e}`);}if(this.connectionReleased=true,t)throw t}getIsolationLevelQuery(){if(!this.isolationLevel||this.sql.type==="mssql")return "";if(this.sql.type==="sqlite"&&this.isolationLevel!=="SERIALIZABLE")throw new S("TRANSACTION::getIsolationLevelQuery","SQLITE_ONLY_SUPPORTS_SERIALIZABLE_ISOLATION_LEVEL");if(this.sql.type==="mysql"||this.sql.type==="mariadb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="postgres"||this.sql.type==="cockroachdb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="oracledb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="sqlite")return "";throw new S("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}async getMssqlTransactionLevel(){if(!this.isolationLevel)return;let t=await import('mssql').then(e=>e.default.ISOLATION_LEVEL).catch(e=>{throw g.error(e),new L("mssql")});switch(this.isolationLevel){case "READ UNCOMMITTED":return t.READ_UNCOMMITTED;case "READ COMMITTED":return t.READ_COMMITTED;case "REPEATABLE READ":return t.REPEATABLE_READ;case "SERIALIZABLE":return t.SERIALIZABLE;default:throw new S("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${this.isolationLevel}`)}}};var ru=Symbol.for("hysteria.orm.SqlDataSource"),Iy,Ey,De=class i extends(Ey=xt,Iy=ru,Ey){constructor(e){super(e);this[Iy]=true;this.globalTransaction=null;this.globalTransactionLock=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.id=randomUUID();this.logicalSourceId=randomUUID();this.cacheAdapter=new sr;this.migrationConfig={path:E.MIGRATION_PATH||"database/migrations",lock:true,transactional:true,lockTimeout:3e4};this.seederConfig={path:"database/seeders"};this.zodEngine=null;this.lazyLoad=false;this.connecting=null;this.sqlType=e?.type||this.type;let r=e;this.inputDetails={...e,type:this.sqlType,host:r?.host??this.host,port:r?.port??this.port,username:r?.username??this.username,password:r?.password??this.password,database:r?.database??this.database,logs:r?.logs??this.logs},this.inputDetails.connectionPolicies=e?.connectionPolicies||{retry:{maxRetries:0,delay:0}},this.inputDetails.queryFormatOptions=e?.queryFormatOptions||{language:_t(this.sqlType),keywordCase:"lower",dataTypeCase:"lower",functionCase:"lower"},this.cacheKeys=e?.cacheStrategy?.keys??{},this.cacheAdapter=e?.cacheStrategy?.cacheAdapter??this.cacheAdapter,this.adminJsOptions=e?.adminJs,e?.migrations&&(this.migrationConfig={path:e.migrations.path||this.migrationConfig.path,tsconfig:e.migrations.tsconfig,lock:e.migrations.lock??this.migrationConfig.lock,transactional:"transactional"in e.migrations?e.migrations.transactional??this.migrationConfig.transactional:this.migrationConfig.transactional}),e?.seeders&&(this.seederConfig={path:e.seeders.path||this.seederConfig.path,tsconfig:e.seeders.tsconfig}),this._models=e?.models||{},this.slaves=(e?.replication?.slaves||[]).map(o=>new i(o)),this.slaveAlgorithm=e?.replication?.slaveAlgorithm||"roundRobin",this.onSlaveServerFailure=e?.replication?.onSlaveServerFailure,this.lazyLoad=e?.lazyLoad??false,this.clsEnabled=e?.clsEnabled??true;}static isSqlDataSource(e){return typeof e=="object"&&e!==null&&ru in e&&e[ru]===true}get isClsEnabled(){return this.clsEnabled}getOnSlaveServerFailure(){return this.onSlaveServerFailure}addObserver(e){return this.observerChain||(this.observerChain=new It([])),this.observerChain.add(e),this}static async useConnection(e,r){let o=new i(e);await o.connect();try{await r(o),o.isConnected&&await o.disconnect();}catch(n){throw o.isConnected&&await o.disconnect(),n}}async connect(){if(this.isConnected)throw new S("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");try{this.sqlPool=await Xe(this.sqlType,this.inputDetails),this.ownsPool=!0,this.slaves.length&&await Promise.all(this.slaves.map(async e=>{e.sqlPool=await Xe(e.sqlType,e.inputDetails),e.ownsPool=!0;}));}catch(e){this.sqlPool=null,this.ownsPool=false;for(let r of this.slaves)r.ownsPool&&(r.sqlPool=null,r.ownsPool=false);throw e}}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new S("SqlDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.connect().finally(()=>{this.connecting=null;})),await this.connecting;}}get isInGlobalTransaction(){return !!this.globalTransaction}get models(){let e=this;return new Proxy(this._models,{get(r,o){if(typeof o=="string"&&o in r)return e.from(r[o])}})}getSlave(){if(!this.slaves.length)return null;if(this.slaveAlgorithm==="random")return this.slaves[Math.floor(Math.random()*this.slaves.length)];let e=this.slaves[this.roundRobinIndex%this.slaves.length];return this.roundRobinIndex=(this.roundRobinIndex+1)%this.slaves.length,e}getTransactionBoundSqlDataSource(){if(this.globalTransaction?.isActive)return this.globalTransaction.sql;if(this.clsEnabled){let e=Qe.getTransaction();if(e?.isActive&&e.sql.logicalSourceId===this.logicalSourceId)return e.sql}return null}async useCache(e,r,...o){if(!this.cacheAdapter)throw new S("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new S("SqlDataSource::useCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);let s=n.length,a=typeof r=="number"&&s===o.length,l,u=[];a?(l=r,u=o):(l=void 0,u=r!==void 0?[r,...o]:o);let d=bo(JSON.stringify(u)),c=d?`${e}:${d}`:e,m=await this.cacheAdapter.get(c);if(m!==void 0)return m;let p=await n(...u);return await this.cacheAdapter.set(c,p,l),p}async invalidCache(e,...r){if(!this.cacheAdapter)throw new S("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new S("SqlDataSource::invalidCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);if(o.length>0&&r.length===0){let l=e;await this.cacheAdapter.invalidate(l);return}let s=bo(JSON.stringify(r)),a=s?`${e}:${s}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new S("SqlDataSource::invalidateAllCache","CACHE_ADAPTER_NOT_CONFIGURED");await this.cacheAdapter.invalidateAll(e);}async clone(e){let r=new i(this.inputDetails);return r.id=this.id,r.logicalSourceId=this.logicalSourceId,r.sqlType==="sqlite"||!!e?.shouldRecreatePool?(r.sqlPool=await Xe(r.sqlType,this.inputDetails),r.ownsPool=true):(r.sqlPool=this.sqlPool,r.ownsPool=false),r}getDbType(){return this.sqlType}from(e,r){let o=this.getTransactionBoundSqlDataSource()??this;if(typeof e=="string"){let n=new Q(Dy(e,r),o);return r?.alias&&n.table(e,r.alias),n}return new Ye(e,o)}schema(){if(!this.isConnected&&!this.lazyLoad)throw new S("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new Dt(this,this.getDbType())}async startGlobalTransaction(e){for(;this.globalTransactionLock;)await this.globalTransactionLock;if(this.globalTransaction?.isActive)throw new S("SqlDataSource::startGlobalTransaction","GLOBAL_TRANSACTION_ALREADY_STARTED");let r=()=>{};this.globalTransactionLock=new Promise(o=>{r=o;});try{let o=await this.clone();return o.sqlConnection=await o.getConnection(),this.globalTransaction=new Qt(o,e?.isolationLevel),await this.globalTransaction.transaction(),this.globalTransaction}finally{r(),this.globalTransactionLock=null;}}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new S("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");try{await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async rollbackGlobalTransaction(e){if(!this.globalTransaction){g.warn("SqlDataSource::rollbackGlobalTransaction - GLOBAL_TRANSACTION_NOT_STARTED");return}try{await this.globalTransaction.rollback({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async transaction(e,r){let o=typeof e=="function"?r:e;if(this.globalTransaction?.isActive)return typeof e=="function"?this.globalTransaction.nestedTransaction(e):this.globalTransaction.nestedTransaction();let n=this.clsEnabled?Qe.getTransaction():void 0;if(n?.isActive&&n.sql.logicalSourceId===this.logicalSourceId)return typeof e=="function"?n.nestedTransaction(e):n.nestedTransaction();let s=await this.clone();s.sqlConnection=await s.getConnection();let a=new Qt(s,o?.isolationLevel);if(await a.transaction(),typeof e=="function")try{let l=this.clsEnabled?await Qe.run(a,()=>e(a)):await e(a);return await a.commit({throwErrorOnInactiveTransaction:!1}),l}catch(l){throw await a.rollback({throwErrorOnInactiveTransaction:false}),l}return a}getModelManager(e){if(!this.isConnected&&!this.lazyLoad)throw new S("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");let r=this.getTransactionBoundSqlDataSource()??this;return new Ge(e,r)}getPool(){if(!this.sqlPool)throw this.lazyLoad?new S("SqlDataSource::getPool - call ensureConnected() or connect() first when using lazyLoad","CONNECTION_NOT_ESTABLISHED"):new S("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(){if(this.sqlConnection)return this.sqlConnection;switch(await this.ensureConnected(),this.sqlType){case "mysql":case "mariadb":return await this.sqlPool.getConnection();case "postgres":case "cockroachdb":return await this.sqlPool.connect();case "sqlite":return this.sqlPool;case "mssql":return this.sqlPool.transaction();case "oracledb":return await this.sqlPool.getConnection();default:throw new S("SqlDataSource::getConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sqlType}`)}}async disconnect(){if(!this.isConnected){g.warn("Connection already closed or not established");return}if(!this.ownsPool){if(this.sqlConnection)try{switch(this.sqlType){case "mysql":case "mariadb":this.sqlConnection.release?.();break;case "postgres":case "cockroachdb":this.sqlConnection.release?.();break;case "oracledb":await this.sqlConnection.close?.();break}}catch(e){g.warn(`SqlDataSource::disconnect - releasing borrowed connection failed: ${e?.message??e}`);}this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{g.warn("SqlDataSource::disconnect - Error while rolling back global transaction");}switch(await this.cacheAdapter?.disconnect?.(),this.slaves.length&&await Promise.all(this.slaves.map(async e=>{try{await e.disconnect();}catch(r){g.warn(`SqlDataSource::disconnect - Error while closing slave connection: ${r.message}`);}})),g.warn("Closing connection"),this.sqlType){case "mysql":case "mariadb":await this.sqlPool.end();break;case "postgres":case "cockroachdb":await this.sqlPool.end();break;case "sqlite":await new Promise((e,r)=>{this.sqlPool.close(o=>{o&&r(o),e();});});break;case "mssql":await this.sqlPool.close();break;case "oracledb":await this.sqlPool.close();break;default:throw new S("SqlDataSource::disconnect",`UNSUPPORTED_DATABASE_TYPE_${this.sqlType}`)}this.sqlPool=null,this.sqlConnection=null;}getConnectionDetails(){return {type:this.getDbType(),host:this.host,port:this.port,username:this.username,password:this.password,database:this.database,connectionPolicies:this.inputDetails.connectionPolicies,queryFormatOptions:this.inputDetails.queryFormatOptions}}async introspectSchema(){let e=this.getDbType(),r;e==="postgres"||e==="cockroachdb"?r=`
|
|
254
|
+
ORDER BY pk`,bindings:[]}}},Cp=new il;var al=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Rp=new al;var ll=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new y(this.model).formatStringColumn("sqlite",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"sqlite").parse(t),i=`(${o.sql})`;return e&&(i=`${e.toLowerCase()}${i}`),{sql:i,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"sqlite").parse([t]),i=`(${o.sql})`;return e&&(i=`${e.toLowerCase()}${i}`),{sql:i,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new y(this.model).formatStringColumn("sqlite",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"sqlite").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),i=o.toLowerCase(),a=i.lastIndexOf("cast");for(;a>=0;){let l=a>0?i[a-1]:" ",u=i[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=i.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},Mp=new ll;var ul=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("sqlite",e.column),n=qe.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toSqlite();return r==="$"?t:`json_extract(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toSqlite();return r==="$"?`json_array_length(${t})`:`json_array_length(${t}, '${r}')`}buildObjectKeysSql(t,e){return `json_each.key FROM json_each(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},_p=new ul;var dl=class{toSql(t){let e=t,r=this.renderToken(e.fn);if(r!==void 0)return {sql:r,bindings:[]};let n=e.args.map(o=>o instanceof A?o.rawValue:o instanceof k?this.toSql(o).sql:typeof o=="number"?String(o):`'${o}'`).join(", ");return {sql:`${e.fn}(${n})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "lower(hex(randomblob(16)))";case "$now":case "$currentTimestamp":return "current_timestamp";default:return}}},xp=new dl;var cl=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return e.keyword="",{sql:e.fromNode,bindings:[]};let r=new y(this.model).getFromForWriteOperations("sqlite",e.fromNode);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},Op=new cl;var ml=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Ap=new ml;var pl=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],i=e.columns.map((a,l)=>{let u=e.values[l];if(u instanceof A)return `${r.formatStringColumn("sqlite",a)} = ${u.rawValue}`;if(u instanceof k){let d=new b(this.model,"sqlite").parse([u],1,true).sql;return `${r.formatStringColumn("sqlite",a)} = ${d}`}return o.push(u),`${r.formatStringColumn("sqlite",a)} = ?`}).join(", ");return {sql:`${n} set ${i}`,bindings:o}}},Dp=new pl;var fl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",n=[];if(this.isRawNode(e.value)){let o=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${o}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,n=e.value;else {let o=e.value.map(i=>"?").join(", ");r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${o})`,n=e.value;}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ?`,n=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("sqlite",t):t}},$p=new fl;var yl=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"sqlite"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},Pp=new yl;var hl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new y(this.model).formatStringColumn("sqlite",e.column);switch(e.jsonOperator){case "=":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},vp=new hl;var gl=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"sqlite"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"sqlite"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},Ip=new gl;var bl=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex);return {sql:`${e.alias} as (${o.sql})`,bindings:o.bindings}}},Ep=new bl;var kp={mssql:{alter_table:{add_column:du,add_constraint:cu,add_primary_key:mu,alter_column_type:pu,alter_table:fu,drop_column:yu,drop_constraint:hu,drop_default:gu,drop_not_null:bu,drop_primary_key:Tu,rename_column:wu,rename_table:Su,set_default:Nu,set_not_null:qu,set_table_options:Cu},column:{column_type:Ru},constraint:{after:Mu,constraint:_u},create_table:{create_table:xu},delete:{delete:Ou},distinct:{distinct:Au,distinct_on:Du},drop_table:{drop_table:$u},extension:{create_extension:Pu},from:{from:vu},group_by:{group_by:Iu},having:{having:Eu},index_op:{create_index:ku,drop_index:Bu},insert:{insert:Qu},join:{join:Ku},limit:{limit:Lu},lock:{lock:ju},offset:{offset:Wu},on_duplicate:{on_duplicate:Fu},order_by:{order_by:Uu},raw:{raw:Vu},returning:{returning:Ju},schema:{check_constraint_info:Hu,foreign_key_info:zu,get_column_listing:Gu,get_tables:Yu,has_check_constraint:Zu,has_column:Xu,has_index:ed,has_primary_key:td,has_table:rd,index_info:nd,primary_key_info:od,table_info:sd},select:{select:id,select_json:ad},sqlfunc:{sqlfunc:ld},truncate:{truncate:ud},union:{union:dd},update:{update:cd},where:{where:md,where_group:pd,where_json:fd,where_subquery:yd},with:{with:hd}},mysql:{alter_table:{add_column:gd,add_constraint:bd,add_primary_key:Td,alter_column_type:wd,alter_table:Sd,drop_column:Nd,drop_constraint:qd,drop_default:Cd,drop_not_null:Rd,drop_primary_key:Md,rename_column:_d,rename_table:xd,set_default:Od,set_not_null:Ad,set_table_options:Dd},column:{column_type:$d},constraint:{after:Pd,constraint:vd},create_table:{create_table:Id},delete:{delete:Ed},distinct:{distinct:kd,distinct_on:Bd},drop_table:{drop_table:Qd},extension:{create_extension:Kd},from:{from:Ld},group_by:{group_by:jd},having:{having:Wd},index_op:{create_index:Fd,drop_index:Ud},insert:{insert:Vd},join:{join:Jd},limit:{limit:Hd},lock:{lock:zd},offset:{offset:Gd},on_duplicate:{on_duplicate:Yd},order_by:{order_by:Zd},raw:{raw:Xd},returning:{returning:ec},schema:{check_constraint_info:tc,foreign_key_info:rc,get_column_listing:nc,get_tables:oc,has_check_constraint:sc,has_column:ic,has_index:ac,has_primary_key:lc,has_table:uc,index_info:dc,primary_key_info:cc,table_info:mc},select:{select:pc,select_json:fc},sqlfunc:{sqlfunc:yc},truncate:{truncate:hc},union:{union:gc},update:{update:bc},where:{where:Tc,where_group:wc,where_json:Sc,where_subquery:Nc},with:{with:qc}},postgres:{alter_table:{add_column:Cc,add_constraint:Rc,add_primary_key:Mc,alter_column_type:_c,alter_table:xc,drop_column:Oc,drop_constraint:Ac,drop_default:Dc,drop_not_null:$c,drop_primary_key:Pc,rename_column:vc,rename_table:Ic,set_default:Ec,set_not_null:kc,set_table_options:Bc},column:{column_type:Qc},constraint:{after:Kc,constraint:Lc},create_table:{create_table:jc},delete:{delete:Wc},distinct:{distinct:Fc,distinct_on:Uc},drop_table:{drop_table:Vc},extension:{create_extension:Jc},from:{from:Hc},group_by:{group_by:zc},having:{having:Gc},index_op:{create_index:Yc,drop_index:Zc},insert:{insert:Xc},join:{join:em},limit:{limit:tm},lock:{lock:rm},offset:{offset:nm},on_duplicate:{on_duplicate:om},order_by:{order_by:sm},raw:{raw:im},returning:{returning:am},schema:{check_constraint_info:lm,foreign_key_info:um,get_column_listing:dm,get_tables:cm,has_check_constraint:mm,has_column:pm,has_index:fm,has_primary_key:ym,has_table:hm,index_info:gm,primary_key_info:bm,table_info:Tm},select:{select:wm,select_json:Sm},sqlfunc:{sqlfunc:Nm},truncate:{truncate:qm},union:{union:Cm},update:{update:Rm},where:{where:Mm,where_group:_m,where_json:xm,where_subquery:Om},with:{with:Am}},sqlite:{alter_table:{add_column:Dm,add_constraint:$m,alter_column_type:Pm,alter_table:vm,drop_column:Im,drop_constraint:Em,drop_default:km,drop_not_null:Bm,drop_primary_key:Qm,rename_column:Km,rename_table:Lm,set_default:jm,set_not_null:Wm,set_table_options:Fm},column:{column_type:Um},constraint:{after:Vm,constraint:Jm},create_table:{create_table:Hm},delete:{delete:zm},distinct:{distinct:Gm,distinct_on:Ym},drop_table:{drop_table:Zm},extension:{create_extension:Xm},from:{from:ep},group_by:{group_by:tp},having:{having:rp},index_op:{create_index:np,drop_index:op},insert:{insert:sp},join:{join:ip},limit:{limit:ap},lock:{lock:lp},offset:{offset:up},on_duplicate:{on_duplicate:dp},order_by:{order_by:cp},raw:{raw:mp},returning:{returning:pp},schema:{check_constraint_info:fp,foreign_key_info:yp,get_column_listing:hp,get_tables:gp,has_check_constraint:bp,has_column:Tp,has_index:wp,has_primary_key:Sp,has_table:Np,index_info:qp,primary_key_info:Cp,table_info:Rp},select:{select:Mp,select_json:_p},sqlfunc:{sqlfunc:xp},truncate:{truncate:Op},union:{union:Ap},update:{update:Dp},where:{where:$p,where_group:Pp,where_json:vp,where_subquery:Ip},with:{with:Ep}}};var b=class{constructor(t,e){this.dbType=e,this.model=t;}parse(t,e=1,r=false){if(!t.length)return {sql:"",bindings:[]};let n=t.find(R=>!!R&&R.folder==="distinctOn"),o=!n&&t.find(R=>!!R&&R.folder==="distinct"),i=this.dbType==="mssql"?t.find(R=>!!R&&R.folder==="lock")??null:null,a=i?this.getMssqlTableHints(i):"",l=t.filter(R=>R!==null&&R.folder!=="distinct"&&R.folder!=="distinctOn"),u=l.some(R=>R.folder==="offset"),d=l.some(R=>R.folder==="order_by"),m=l.find(R=>R.folder==="limit"),c=l.find(R=>R.folder==="offset"),p=this.dbType==="mssql"&&m&&!u&&!d,h=this.dbType==="mssql"&&!p&&(m||c),f=[],T=[],N=null;p&&m&&T.push(m.limit);for(let R=0;R<l.length;R++){let _=l[R];if(p&&_.folder==="limit"||h&&(_.folder==="limit"||_.folder==="offset"))continue;_.currParamIndex=e+T.length;let E=kp[this.mapCommonDbType(this.dbType)][_.folder][_.file];if(!E)throw new Error(`Interpreter not found for ${this.dbType} ${_.keyword}`);E.model=this.model,E.dbType=this.dbType;let O=E.toSql(_);if(!O.sql||!O.sql.trim().length)continue;let D=l[R+1],V=!D||D.keyword!==_.keyword?"":D.chainsWith;if(_.folder==="lock"||_.folder==="on_duplicate"||_.folder==="returning"||_.folder==="schema"){f.push(`${O.sql}${V}`),T.push(...O.bindings),N=_.keyword;continue}if(N!==_.keyword||_.canKeywordBeSeenMultipleTimes){if(r)f.push(`${O.sql}${V}`);else {let $=_.keyword;if(_.folder==="with"&&this.dbType!=="mssql"){let Y=R,ve=false;for(;Y<l.length&&l[Y].keyword===_.keyword;){let er=l[Y];if(er.folder==="with"&&er.clause==="recursive"){ve=true;break}Y++;}ve&&($=`${$} recursive`);}if($==="select"){let Y=p?`top (@${e}) `:"";if(n){let ve=Array.isArray(n.columns)?n.columns.join(", "):"";f.push(`select ${Y}distinct on (${ve}) ${O.sql}${V}`);}else o?f.push(`select ${Y}distinct ${O.sql}${V}`):f.push(`select ${Y}${O.sql}${V}`);}else $==="from"&&a?f.push(`${$} ${O.sql}${a}${V}`):f.push(`${$} ${O.sql}${V}`);}N=_.keyword;}else f.push(`${O.sql}${V}`);T.push(...O.bindings);}if(h){d||f.push("order by (select null)");let R=c?.offset??0;T.push(R);let E=`offset @${e+T.length-1} rows`;if(m){T.push(m.limit);let O=e+T.length-1;E+=` fetch next @${O} rows only`;}f.push(E);}return {sql:f.join(" "),bindings:T}}mapCommonDbType(t){switch(t){case "mariadb":return "mysql";case "cockroachdb":return "postgres";default:return t}}getMssqlTableHints(t){let e=[];switch(t.lockType){case "UPDATE":e.push("UPDLOCK");break;case "SHARE":e.push("HOLDLOCK");break;case "NO_KEY_UPDATE":e.push("UPDLOCK");break;case "KEY_SHARE":e.push("HOLDLOCK");break}return t.skipLocked&&e.push("READPAST"),t.noWait&&e.push("NOWAIT"),e.length>0?` with (${e.join(", ")})`:""}};var pr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var fr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var yr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var hr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var gr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var br=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_table";this.table=e;}};var Tr=class extends S{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_column";this.table=e,this.column=r;}};var wr=class extends S{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_index";this.table=e,this.index=r;}};var Sr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_primary_key";this.table=e;}};var Nr=class extends S{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_check_constraint";this.table=e,this.constraint=r;}};var qr=class extends S{constructor(){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_tables";}};var Cr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_column_listing";this.table=e;}};var Rr=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var ge=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var pt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var Mr=class extends S{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="alter_column_type";this.column=e,this.newType=r,this.options=n;}};var ce=class extends S{constructor(e,r=[],n=false){super("alter table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="alter_table";this.table=e,this.children=r,this.ifExists=n;}};var _r=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var be=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var Pt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var xr=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var ft=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var Or=class extends S{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var Ar=class extends S{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_default";this.column=e,this.defaultValue=r;}};var Dr=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var yt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="set_table_options";this.engine=e.engine,this.charset=e.charset,this.collate=e.collate;}};var F=class extends S{constructor(e,r={},n=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="constraint";this.constraintType=e,this.columns=r.columns,this.references=r.references,this.constraintName=r.constraintName,this.onDelete=r.onDelete,this.onUpdate=r.onUpdate,this.defaultValue=r.defaultValue,this.checkExpression=r.checkExpression,this.isRawValue=n;}};var $r=class extends S{constructor(e,r=[],n=[],o=false,i){super("create table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="create_table";this.file="create_table";this.table=e,this.children=r,this.namedConstraints=n,this.ifNotExists=o,i&&Object.assign(this,i);}};var Pr=class extends S{constructor(e,r=false){super("drop table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="drop_table";this.file="drop_table";this.table=e,this.ifExists=r;}};var vr=class extends S{constructor(e,r=true){super("create extension");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="extension";this.file="create_extension";this.extensionName=e,this.ifNotExists=r;}};var Ir=class extends S{constructor(e,r,n,o=false){super("create index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="index_op";this.file="create_index";this.table=e,this.columns=r,this.indexName=n,this.unique=o;}};var Er=class extends S{constructor(e,r,n){super("drop index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.cascade=false;this.folder="index_op";this.file="drop_index";this.indexName=e,this.table=r,this.cascade=n??false;}};var ht=class extends S{constructor(e,r=false){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e;}};function Ay(s){return s.endsWith("ies")?s.slice(0,-3)+"y":s.endsWith("sses")||s.endsWith("shes")||s.endsWith("ches")||s.endsWith("xes")||s.endsWith("zes")?s.slice(0,-2):s.endsWith("s")&&!s.endsWith("ss")?s.slice(0,-1):s}var kr=Symbol("columns"),gt=Symbol("primaryKey"),Tl=Symbol("relations"),Bp=Symbol("indexes"),Qp=Symbol("uniques"),Kp=Symbol("checks"),wl=s=>`${Ay(s)}_id`,Sl=(s,t)=>`idx_${s}_${t}`,Te=(s,t)=>`uq_${s}_${t}`,Z=(s,t,e)=>`fk_${s}_${t}${e?`_${e}`:""}`,we=(s,t)=>`pk_${s}_${t}`;var I=class extends S{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="column";this.file="column_type";this.isRawValue=false;this.column=e,this.dataType=r,this.length=n.length,this.precision=n.precision,this.scale=n.scale,this.enumValues=n.enumValues,this.withTimezone=n.withTimezone,this.autoIncrement=n.autoIncrement,this.autoCreate=n.autoCreate,this.autoUpdate=n.autoUpdate,this.collate=n.collate,this.isRawValue=n.isRawValue??false,this.unsigned=n.unsigned,this.zerofill=n.zerofill;}};var vt=class extends S{constructor(e,r=false,n=false){super("lock");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="lock";this.file="lock";this.lockType=e,this.skipLocked=r,this.noWait=n;}};var He=class extends S{constructor(e,r=false){super(r?"union all":"union");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="union";this.file="union";this.query=e,this.isAll=r;}};var bt=class extends S{constructor(e,r,n){e==="normal"&&(e="");super("with");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="with";this.file="with";this.alias=r,this.body=n,this.clause=e;}};var Ke=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var Br=class extends S{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var Qr=class extends Ke{constructor(t,e,r,n,o=[],i="create_table"){super(e),this.columnNode=r,this.tableName=n,this.namedConstraints=o,this.context=i,this.sqlType=t;}primaryKey(t){let e=we(this.tableName,C(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new F("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new F("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??e})),this)}foreignKey(t,e){this.columnNode.isForeignKey=true;let[r,n]=t.split("."),o=n.split(","),i=e?.constraintName??Z(this.tableName??"",C(this.columnNode.column),o[0]);return this.context==="alter_table"?(this.nodes.push(new F("foreign_key",{columns:[C(this.columnNode.column)],references:{table:r,columns:o},constraintName:i,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this):(this.namedConstraints.push(new F("foreign_key",{columns:[C(this.columnNode.column)],references:{table:r,columns:o},constraintName:i,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this)}increment(){return this.columnNode.autoIncrement=true,this}unsigned(){return this.columnNode.unsigned=true,this}zerofill(){return this.columnNode.zerofill=true,this}notNullable(){return this.nodes.push(new F("not_null",{columns:[C(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new F("null",{columns:[C(this.columnNode.column)]})),this}default(t){let e;return t instanceof A||t instanceof k?e=t:t===null?e="NULL":typeof t=="boolean"?e=t?"TRUE":"FALSE":t!==void 0&&(e=t.toString()),this.nodes.push(new F("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new F("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??Te(this.tableName??"",C(this.columnNode.column))})),this):(this.namedConstraints.push(new F("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName||Te(this.tableName??"",C(this.columnNode.column))})),this)}check(t,e){let r=C(this.columnNode.column),n=e?.constraintName??`chk_${this.tableName}_${r}`.substring(0,63);return this.context==="alter_table"?(this.nodes.push(new F("check",{columns:[r],checkExpression:t,constraintName:n})),this):(this.namedConstraints.push(new F("check",{columns:[r],checkExpression:t,constraintName:n})),this)}after(t){return this.sqlType!=="mysql"?this:(this.nodes.push(new Br(t)),this)}collate(t){return this.columnNode.collate=t,this}handleSqliteAutoIncrement(t){return this.nodes.push(new F("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this}};var ze=class extends Ke{constructor(e,r,n,o){super(r);this.context="create_table";this.tableName=n,this.namedConstraints=[],this.context=o??"create_table",this.sqlType=e;}mysqlOptions(e){return this._mysqlOptions=e,this}getMysqlOptions(){return this._mysqlOptions}build(e){return this.nodes.push(e),new Qr(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new A(e)}char(e,r=1){let n=new I(e,"char",{length:r});return this.build(n)}varchar(e,r=255){let n=new I(e,"varchar",{length:r});return this.build(n)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let n=new I(e,r);return this.build(n)}longtext(e){return this.text(e,"longtext")}mediumtext(e){return this.text(e,"mediumtext")}tinytext(e){return this.text(e,"tinytext")}uuid(e){let r=new I(e,"uuid");return this.build(r)}ulid(e){let r=new I(e,"ulid");return this.build(r)}integer(e,r=255){let n=new I(e,"integer",{length:r});return this.build(n)}tinyint(e,r=255){let n=new I(e,"tinyint",{length:r});return this.build(n)}smallint(e,r=255){let n=new I(e,"smallint",{length:r});return this.build(n)}mediumint(e,r=255){let n=new I(e,"mediumint",{length:r});return this.build(n)}biginteger(e,r=255){let n=new I(e,"bigint",{length:r});return this.build(n)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let n=new I(e,"float",{precision:r});return this.build(n)}double(e,r=10){let n=new I(e,"double",{precision:r});return this.build(n)}real(e,r=10){let n=new I(e,"real",{precision:r});return this.build(n)}decimal(e,r=10,n=2){let o=new I(e,"decimal",{precision:r,scale:n});return this.build(o)}numeric(e,r=10,n=2){let o=new I(e,"numeric",{precision:r,scale:n});return this.build(o)}increment(e,r=255){return this.integer(e,r).increment()}bigIncrement(e,r=255){return this.biginteger(e,r).increment()}date(e,r){let n=new I(e,"date",{precision:r});return this.build(n)}time(e,r){let n=new I(e,"time",{precision:r});return this.build(n)}year(e){let r=new I(e,"year");return this.build(r)}datetime(e,r){let n=new I(e,"datetime",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}timestamp(e,r){let n=new I(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}boolean(e){let r=new I(e,"boolean");return this.build(r)}binary(e){let r=new I(e,"binary");return this.build(r)}varbinary(e,r=255){let n=new I(e,"varbinary",{length:r});return this.build(n)}blob(e){let r=new I(e,"blob");return this.build(r)}tinyblob(e){let r=new I(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new I(e,"mediumblob");return this.build(r)}longblob(e){let r=new I(e,"longblob");return this.build(r)}json(e){let r=new I(e,"json");return this.build(r)}jsonb(e){let r=new I(e,"jsonb");return this.build(r)}enum(e,r){let n=new I(e,"enum",{enumValues:r});return this.build(n)}custom(e,r,n){let o=new I(e,r,{length:n});return this.build(o)}rawColumn(e){let r=new I(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new I(e,"geometry");return this.build(r)}point(e){let r=new I(e,"point");return this.build(r)}linestring(e){let r=new I(e,"linestring");return this.build(r)}polygon(e){let r=new I(e,"polygon");return this.build(r)}multiPoint(e){let r=new I(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var Kr=class extends Ke{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new A(t)}addColumn(t){let e=[],r=new ze(this.sqlType,e,this.table,"alter_table"),n=t(r);if(!e.length)return;let o=r.getNamedConstraints(),i=e.filter(m=>m.folder==="column");if(e=e.concat(o),i.length!==1)throw new Error("addColumn callback must define exactly one column");let a=i[0],l=n.getNodes().filter(m=>{let c=m;return c.constraintType==="not_null"||c.constraintType==="null"||c.constraintType==="default"}),u=new Rr(a);u.inlineConstraints=l,this.nodes.push(u),n.getNodes().filter(m=>{let c=m;return c.constraintType==="unique"||c.constraintType==="foreign_key"||c.constraintType==="primary_key"}).forEach(m=>{this.nodes.push(new ge(m));});}alterColumn(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new ze(this.sqlType,e,this.table,"alter_table"),n=t(r);if(!e.length)return;let o=e.filter(p=>p.folder==="column");if(o.length!==1)throw new Error("alterColumn callback must define exactly one column");let i=o[0],a=C(i.column),l=n.getNodes().find(p=>p.constraintType==="null"),d=n.getNodes().find(p=>p.constraintType==="not_null")||l,m=n.getNodes().find(p=>p.constraintType==="default"),c={};d&&(c.nullable=d.constraintType==="null"),m&&(m.defaultValue===void 0||m.defaultValue===null||m.defaultValue==="NULL"?c.dropDefault=true:c.default=m.defaultValue),i.collate&&(this.sqlType==="mysql"||this.sqlType==="mariadb")&&(c.collate=i.collate),this.nodes.push(new Mr(C(a),i,c)),d&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(d.constraintType==="not_null"?this.nodes.push(new Dr(C(a))):d.constraintType==="null"&&this.nodes.push(new xr(C(a)))),m&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(m.defaultValue===void 0||m.defaultValue===null||m.defaultValue==="NULL"?this.nodes.push(new Pt(C(a))):this.nodes.push(new Ar(C(a),m.defaultValue))),n.getNodes().forEach(p=>{let h=p;switch(h.constraintType){case "primary_key":this.addPrimaryKey(C(a));break;case "unique":this.unique(C(a),{constraintName:h.constraintName});break;case "foreign_key":this.foreignKey(C(a),h.references?.table??"",C(h.references?.columns?.[0]??""),{constraintName:h.constraintName,onDelete:h.onDelete,onUpdate:h.onUpdate});break}});}dropColumn(t){this.nodes.push(new _r(t));}renameColumn(t,e){this.nodes.push(new Or(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Pt(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new pt([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ge(new F(...t)));}foreignKey(t,e,r,n){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ge(new F("foreign_key",{columns:[t],references:{table:e,columns:[r]},constraintName:n?.constraintName??Z(this.table,t,r),onDelete:n?.onDelete,onUpdate:n?.onUpdate})));}unique(t,e){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ge(new F("unique",{columns:[t],constraintName:e?.constraintName??Te(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let r=Z(this.table,t,e);this.nodes.push(new be(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new q("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??Te(this.table,t);this.nodes.push(new be(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new be(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new q("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new ft(t));}setTableOptions(t){let e=this.sqlType==="mysql"||this.sqlType==="mariadb",r=this.sqlType==="postgres"||this.sqlType==="cockroachdb",n=this.sqlType==="mssql";return this.sqlType==="sqlite"?this:(e?this.nodes.push(new yt(t)):r?this.nodes.push(new yt(t)):n&&this.nodes.push(new yt(t)),this)}};var ie=class{constructor(t){if(this.sqlType=t||v.DB_TYPE,!this.sqlType)throw new q("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new A(t)}rawQuery(t){this.queryStatements.push(t);}async execute(){for(let t of this.queryStatements)this.rawQuery(t);}runFile(t){if(!oe.existsSync(t))throw new q("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=dt.basename(t),r=dt.extname(e);if(r!==".sql"&&r!==".txt")throw new q("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let o=oe.readFileSync(t,"utf-8").split(";").map(i=>i.trim()).filter(i=>i.length>0&&!i.startsWith("--"));for(let i of o)this.rawQuery(i);}createTable(t,e,r){let n=new ze(this.sqlType,[],t);e(n);let o=n.getNodes(),i=new b({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a={...r,...this.sqlType==="mysql"||this.sqlType==="mariadb"?n.getMysqlOptions()||{}:{}},l=new $r(t,o,n.getNamedConstraints(),r?.ifNotExists,a),u=i.parse([l]).sql,d=u.startsWith("create table")?u:`create table ${u}`;this.rawQuery(d),this.generateAutoUpdateTriggers(t,o);}alterTable(t,e){let r=[],n=new Kr(t,r,this.sqlType);if(e(n),!r.length)return;let o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"}),i=[],a=()=>{if(!i.length)return;let u=new ce(t,i),d=o.parse([u]).sql;if(!d||!d.trim())return;let m=d.startsWith("alter table")?d:`alter table ${d}`;this.rawQuery(m),i=[];};for(let u of r)u.file==="add_constraint"&&i.length&&i[0].file==="add_column"||a(),i.push(u);a();let l=r.filter(u=>u.file==="add_column").map(u=>u.column);this.generateAutoUpdateTriggers(t,l);}dropTable(t,e=false){let r=new Pr(t,e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}renameTable(t,e){let r=new ce(t,[new mt(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}truncateTable(t){let e=new ht(t,true),r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}createIndex(t,e,r={}){Array.isArray(e)||(e=[e]);let n=r.constraintName||Sl(t,e.join("_")),o=new Ir(t,e,n),i=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(i.parse([o]).sql);}dropIndex(t,e){let r=new Er(t,e),n=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addPrimaryKey(t,e){let r=new ce(t,[new pt(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addUnique(t,e,r){let n=Array.isArray(e)?e:[e],o=r?.constraintName??Te(t,n.join("_")),i=new F("unique",{columns:n,constraintName:o}),a=new ce(t,[new ge(i)]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropForeignKey(t,e,r){let n=Z(t,e,r),o=new be(n),i=new ce(t,[o]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([i]).sql);}dropUnique(t,e,r){let n=Array.isArray(e)?Te(t,e.join("_")):Te(t,e),o=r?.constraintName??n,i=new be(o),a=new ce(t,[i]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new ft,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new F(...e),n=new ce(t,[new ge(r)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}dropConstraint(t,e){let r=new be(e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addCheck(t,e,r){let n=r?.constraintName??`chk_${t}_custom`.substring(0,63),o=new F("check",{checkExpression:e,constraintName:n}),i=new ce(t,[new ge(o)]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([i]).sql);}dropCheck(t,e){if(this.sqlType==="mysql"){this.rawQuery(`ALTER TABLE \`${t}\` DROP CHECK \`${e}\``);return}let r=new be(e),n=new ce(t,[r]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}createExtension(t,e=true){let r=new vr(t,e),n=this.generateAstInstance({table:"",databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}generateAutoUpdateTriggers(t,e){if(this.sqlType==="mysql"||this.sqlType==="mariadb")return;let r=e.filter(n=>n.folder==="column"&&n.autoUpdate===true).map(n=>C(n.column));for(let n of r){let o=this.getAutoUpdateTriggerSql(t,n);for(let i of o)this.rawQuery(i);}}getAutoUpdateTriggerSql(t,e){let r=`trg_${t}_${e}_auto_update`;switch(this.sqlType){case "postgres":case "cockroachdb":return [`CREATE OR REPLACE FUNCTION ${r}_fn() RETURNS trigger AS $$ BEGIN NEW."${e}" = CURRENT_TIMESTAMP; RETURN NEW; END; $$ LANGUAGE plpgsql`,`CREATE OR REPLACE TRIGGER ${r} BEFORE UPDATE ON "${t}" FOR EACH ROW EXECUTE FUNCTION ${r}_fn()`];case "sqlite":return [`CREATE TRIGGER IF NOT EXISTS ${r} AFTER UPDATE ON "${t}" FOR EACH ROW BEGIN UPDATE "${t}" SET "${e}" = CURRENT_TIMESTAMP WHERE rowid = NEW.rowid; END`];case "mssql":return [`CREATE OR ALTER TRIGGER [${r}] ON [${t}] AFTER UPDATE AS BEGIN SET NOCOUNT ON; UPDATE t SET t.[${e}] = CURRENT_TIMESTAMP FROM [${t}] t INNER JOIN inserted i ON t.[id] = i.[id]; END`];default:return []}}generateAstInstance(t){return new b(t,this.sqlType)}};var Lr,Wp,It=class{constructor(t,e){Fl(this,Lr);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new ie(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=Ul(this,Lr,Wp).call(this)),this.executionPromise.then(t,e)}rawStatement(t){return this.schema.rawStatement(t)}rawQuery(t){return this.schema.rawQuery(t),this}createTable(t,e,r){return this.schema.createTable(t,e,r),this}alterTable(t,e){return this.schema.alterTable(t,e),this}dropTable(t,e=false){return this.schema.dropTable(t,e),this}renameTable(t,e){return this.schema.renameTable(t,e),this}truncateTable(t){return this.schema.truncateTable(t),this}createIndex(t,e,r){return this.schema.createIndex(t,e,r),this}dropIndex(t,e){return this.schema.dropIndex(t,e),this}addPrimaryKey(t,e){return this.schema.addPrimaryKey(t,e),this}addUnique(t,e,r){return this.schema.addUnique(t,e,r),this}addConstraint(t,e,...r){return this.schema.addConstraint(t,e,...r),this}dropPrimaryKey(t){return this.schema.dropPrimaryKey(t),this}dropForeignKey(t,e,r){return this.schema.dropForeignKey(t,e,r),this}dropUnique(t,e,r){return this.schema.dropUnique(t,e,r),this}dropConstraint(t,e){return this.schema.dropConstraint(t,e),this}createExtension(t,e=true){return this.schema.createExtension(t,e),this}toQuery(){let t=this.schema.queryStatements;return t.length===1?t[0]:t}toQueries(){return [...this.schema.queryStatements]}toString(){let t=this.schema.queryStatements;return t.length===1?t[0]||"":t.join(`;
|
|
255
|
+
`)}async execute(){if(this.state!=="executed"){if(this.state==="failed")throw this.executionError;return this.then()}}isExecuted(){return this.state==="executed"}isPending(){return this.state==="pending"}hasFailed(){return this.state==="failed"}async hasTable(t){return this.dataSource.hasTable(t)}async hasColumn(t,e){return this.dataSource.hasColumn(t,e)}async hasColumns(t,...e){return this.dataSource.hasColumns(t,...e)}async hasIndex(t,e){return this.dataSource.hasIndex(t,e)}async hasPrimaryKey(t){return this.dataSource.hasPrimaryKey(t)}async hasUnique(t,e){return this.dataSource.hasUnique(t,e)}async hasForeignKey(t,e){return this.dataSource.hasForeignKey(t,e)}async hasCheckConstraint(t,e){return this.dataSource.hasCheckConstraint(t,e)}async getTables(){return this.dataSource.getTables()}async getColumnListing(t){return this.dataSource.getColumnListing(t)}dropTableIfExists(t){return this.schema.dropTable(t,true),this}async dropIndexIfExists(t,e){if(await this.dataSource.hasIndex(e,t)){let n=new ie(this.dataSource.getDbType());n.dropIndex(t,e);let o=n.queryStatements[0];o&&await this.dataSource.rawQuery(o);}}renameColumn(t,e,r){return this.schema.alterTable(t,n=>{n.renameColumn(e,r);}),this}};Lr=new WeakSet,Wp=async function(){try{this.state="pending";let t=this.schema.queryStatements;if(!t.length){this.state="executed";return}for(let e of t)await this.dataSource.rawQuery(e);this.state="executed";}catch(t){throw this.state="failed",this.executionError=t,t}};var Ce=class{constructor(t,e){this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var jr=class{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}buildDropDependencies(t){let e=new Map,r=new Map,n=new Map;for(let o of t.relationsToDrop||[]){let i=`${o.table}.${o.relation.name}`,a=[];if(o.relation.referencedTable&&a.push(`table.${o.relation.referencedTable}`),o.relation.referencedColumns)for(let l of o.relation.referencedColumns)a.push(`column.${o.relation.referencedTable}.${l}`);e.set(i,a);}for(let o of t.tablesToDrop||[]){let i=`table.${o.table}`,a=[];for(let l of this.models){let u=l.getRelations();for(let d of u)d.type==="belongsTo"&&d.model().table===o.table&&a.push(`fk.${l.table}.${d.constraintName}`);}r.set(i,a);}for(let o of t.columnsToDrop||[]){let i=`column.${o.table}.${o.column}`,a=[],l=this.models.find(u=>u.table===o.table);if(l){let u=l.getColumns().find(d=>d.databaseName===o.column);if(u){u.isPrimary&&a.push(`pk.${o.table}`);let d=l.getRelations();for(let m of d)m.columnName===u.columnName&&a.push(`fk.${o.table}.${m.constraintName}`);}}n.set(i,a);}return {foreignKeys:e,tables:r,constraints:n}}topologicalSortReverse(t,e){let r=new Set,n=new Set,o=[],i=a=>{if(n.has(a))throw new Error(`Circular dependency detected: ${a}`);if(r.has(a))return;n.add(a);let l=e(a);for(let u of l)i(u);n.delete(a),r.add(a),o.push(a);};for(let a of t.keys())r.has(a)||i(a);return o}generateDropOperations(t){let e=this.buildDropDependencies(t),r=[],n=this.topologicalSortReverse(e.foreignKeys,i=>e.foreignKeys.get(i)||[]);for(let i of n){let[a,l]=i.split("."),u=t.relationsToDrop?.find(d=>d.table===a&&d.relation.name===l);u&&r.push({type:"DROP_FOREIGN_KEY",phase:"DESTRUCTIVE_OPERATIONS",table:a,constraint:l,data:u,dependencies:e.foreignKeys.get(i)||[],sqlStatements:this.generateDropForeignKeySql(u)});}let o=this.topologicalSortReverse(e.tables,i=>e.tables.get(i)||[]);for(let i of t.columnsToDrop||[]){let a=`column.${i.table}.${i.column}`,l=e.constraints.get(a)||[];for(let u of l)u.startsWith("pk.")?r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:i.table,constraint:"PRIMARY KEY",data:{type:"primary_key",table:i.table},dependencies:[a],sqlStatements:this.generateDropPrimaryKeySql(i.table)}):u.startsWith("unique.")&&r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:i.table,constraint:`UNIQUE_${i.column}`,data:{type:"unique",table:i.table,column:i.column},dependencies:[a],sqlStatements:this.generateDropUniqueConstraintSql(i.table,i.column)});}for(let i of t.columnsToDrop||[])r.push({type:"DROP_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:i.table,column:i.column,data:i,dependencies:[],sqlStatements:this.generateDropColumnSql(i)});for(let i of o){let a=i.replace("table.",""),l=t.tablesToDrop?.find(u=>u.table===a);l&&r.push({type:"DROP_TABLE",phase:"DESTRUCTIVE_OPERATIONS",table:a,data:l,dependencies:e.tables.get(i)||[],sqlStatements:this.generateDropTableSql(l)});}return r}analyzeConstraintImpact(t){let e=new Map;for(let r of t.columnsToDrop||[]){let n=[],o=this.models.find(i=>i.table===r.table);if(o){let i=o.getColumns().find(a=>a.databaseName===r.column);if(i){i.isPrimary&&n.push(`PRIMARY KEY on ${r.table}`);let a=o.getRelations();for(let l of a)l.columnName===i.columnName&&n.push(`FOREIGN KEY ${l.constraintName} on ${r.table}`);}}e.set(`${r.table}.${r.column}`,n);}return e}detectMixedOperations(t){let e=[];for(let r of t.columnsToModify||[]){let n=this.models.find(o=>o.table===r.table);n&&n.getColumns().find(i=>i.databaseName===r.dbColumns.name)&&this.hasConstraintChanges(r.dbColumns,r.modelColumn)&&e.push({type:"column_modification_with_constraints",table:r.table,column:r.dbColumns.name,description:`Column ${r.dbColumns.name} modification requires constraint recreation`});}for(let r of t.primaryKeysToModify||[])e.push({type:"primary_key_modification",table:r.table,description:`Primary key modification on ${r.table} requires FK recreation`});return e}hasConstraintChanges(t,e){return t.isNullable!==!e.constraints?.nullable||t.isUnique!==!!e.constraints?.unique||t.defaultValue!==e.constraints?.default}generateDropForeignKeySql(t){if(this.sql.getDbType()==="sqlite")return [];if(!t.relation.name)return [];let e=this.sql.schema().alterTable(t.table,n=>{n.dropConstraint(t.relation.name);}).toQueries(),r=this.sql.getDbType();return (r==="mysql"||r==="mariadb")&&e.push(`DROP INDEX \`${t.relation.name}\` ON \`${t.table}\``),e}generateDropPrimaryKeySql(t){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,e=>{e.dropPrimaryKey();}).toQueries()}generateDropUniqueConstraintSql(t,e){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,r=>{r.dropConstraint(`UNIQUE_${e}`);}).toQueries()}generateDropColumnSql(t){return this.sql.schema().alterTable(t.table,e=>{e.dropColumn(t.column);}).toQueries()}generateDropTableSql(t){return [`DROP TABLE ${t.table}`]}};var Wr=class Wr{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new jr(t);}generateOperations(t){let e=[];e.push(...this.generateStructureCreationOperations(t)),e.push(...this.generateConstraintCreationOperations(t)),e.push(...this.generateDestructiveOperations(t)),e.push(...this.generateColumnModificationOperations(t));let r=l=>l.table&&l.constraint?`${l.table}::${l.constraint}`:void 0,n=new Set(e.filter(l=>l.type==="ADD_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),o=new Set(e.filter(l=>l.type==="DROP_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),i=new Set([...n].filter(l=>o.has(l)));return e.filter(l=>{let u=r(l);return u?!(i.has(u)&&(l.type==="ADD_FOREIGN_KEY"||l.type==="DROP_FOREIGN_KEY")):true})}generateStructureCreationOperations(t){let e=[];for(let r of t.tablesToAdd){let n=this.sql.schema().createTable(r.table,o=>{for(let i of r.columns){if(Array.isArray(i.type)){o.enum(i.databaseName,i.type);continue}i.type&&this.executeBuilderMethod(r.table,o,i,[i.databaseName,i.length,i.precision&&!i.withTimezone?i.precision:void 0,i.scale,i.withTimezone?{withTimezone:i.withTimezone,precision:i.precision}:void 0].filter(Boolean),true);}}).toQuery();e.push({type:"CREATE_TABLE",phase:"STRUCTURE_CREATION",table:r.table,data:r,dependencies:[],sqlStatements:[n]});}for(let r of t.columnsToAdd){let n=this.generateAddColumnViaAlter(r);e.push({type:"ADD_COLUMN",phase:"STRUCTURE_CREATION",table:r.table,column:r.column.databaseName,data:r,dependencies:[`table.${r.table}`],sqlStatements:n});}return e}generateConstraintCreationOperations(t){let e=[];for(let n of t.uniquesToDrop||[]){let o=this.sql.schema().alterTable(n.table,i=>{i.dropConstraint(n.name);}).toQueries();e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:o});}let r=new Set((t.uniquesToDrop||[]).map(n=>n.name));for(let n of t.indexesToDrop){if(r.has(n.index))continue;let o=new ie(this.sql.getDbType());o.dropIndex(n.index,n.table);let i=o.queryStatements[0];e.push({type:"DROP_INDEX",phase:"CONSTRAINT_CREATION",table:n.table,index:n.index,data:n,dependencies:[`table.${n.table}`],sqlStatements:[i]});}for(let n of t.primaryKeysToAdd){let a=this.models.find(u=>u.table===n.table)?.getColumns().find(u=>u.columnName===n.columns[0])?.primaryKeyConstraintName||we(n.table,n.columns[0]),l=this.sql.schema().alterTable(n.table,u=>{let d=a||we(n.table,n.columns[0]);u.addConstraint("primary_key",{columns:[n.columns[0]],constraintName:d});}).toQueries();e.push({type:"ADD_PRIMARY_KEY",phase:"CONSTRAINT_CREATION",table:n.table,constraint:a,data:n,dependencies:[`table.${n.table}`],sqlStatements:l});}for(let n of t.relationsToAdd){if(n.relation.type==="manyToMany")continue;let o=this.generateAddRelationViaAlter(n),i=this.computeFkConstraintName(n);e.push({type:"ADD_FOREIGN_KEY",phase:"CONSTRAINT_CREATION",table:n.table,constraint:i,data:n,dependencies:this.getForeignKeyDependencies(n),sqlStatements:o});}for(let n of t.uniquesToAdd||[]){let o=this.models.find(l=>l.table===n.table),i=(n.columns||[]).map(l=>o?.getColumns().find(d=>d.columnName===l)?.databaseName||l),a=this.sql.schema().alterTable(n.table,l=>{l.addConstraint("unique",{columns:i,constraintName:n.name||"mandatory"});}).toQueries();e.push({type:"ADD_UNIQUE_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name||"mandatory",data:n,dependencies:[`table.${n.table}`],sqlStatements:a});}for(let n of t.indexesToAdd){let o=this.generateCreateIndexSql(n);e.push({type:"CREATE_INDEX",phase:"CONSTRAINT_CREATION",table:n.table,index:n.index,data:n,dependencies:[`table.${n.table}`],sqlStatements:[o]});}for(let n of t.checksToDrop||[]){let o=new ie(this.sql.getDbType());o.dropCheck(n.table,n.name);let i=o.queryStatements;e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:i});}for(let n of t.checksToAdd||[]){let o=new ie(this.sql.getDbType());o.addCheck(n.table,n.expression,{constraintName:n.name});let i=o.queryStatements;e.push({type:"ADD_CHECK_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:i});}return e}computeFkConstraintName(t){let e=C(t.relation.constraintName);if(e)return e;let r=t.table;t.relation.type==="belongsTo"?r=t.relation.model().table:t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(r=C(t.relation.manyToManyOptions.throughModel));let o=this.models.find(a=>a.table===t.table)?.getColumns()||[],i=t.relation.columnName;return t.relation.type==="belongsTo"?i=o.find(l=>l.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey:i=o.find(l=>l.columnName===i)?.databaseName||i,Z(t.table,i,r)}generateDestructiveOperations(t){return this.dropResolver.generateDropOperations(t)}generateColumnModificationOperations(t){let e=[];for(let r of t.columnsToModify||[]){let n=this.generateModifyColumnViaAlter(r);e.push({type:"MODIFY_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:r.table,column:r.dbColumns.name,data:r,dependencies:[],sqlStatements:n});}return e}getForeignKeyDependencies(t){let e=[];if(t.relation.type==="belongsTo"){let n=t.relation.model();e.push(`table.${n.table}`);let o=n.primaryKey||"id",i=n.getColumns().find(a=>a.columnName===o);i&&e.push(`column.${n.table}.${i.databaseName}`);}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let n=C(t.relation.manyToManyOptions.throughModel);e.push(`table.${n}`);}e.push(`table.${t.table}`);let r=this.models.find(n=>n.table===t.table);if(r){let n=r.getColumns().find(o=>o.columnName===t.relation.columnName||o.databaseName===t.relation.columnName);n&&e.push(`column.${t.table}.${n.databaseName}`);}return e}applyNullableConstraint(t,e){return e===false?t.notNullable():e===true||this.sql.getDbType()==="mariadb"?t.nullable():t}executeBuilderMethod(t,e,r,n,o=true){let i;if(Array.isArray(r.type))i=e.enum(n[0],r.type);else if(typeof r.type=="string"&&Wr.BUILTIN_COLUMN_TYPES.has(r.type))i=e[r.type](...n);else if(typeof r.type=="string")i=e.custom(n[0],r.type,r.length);else throw new Error(`Unknown column type: ${String(r.type)} for column ${r.columnName}`);return o&&(r.isPrimary&&i.primaryKey({constraintName:r.primaryKeyConstraintName||we(t,r.columnName)}),r.unsigned&&i.unsigned(),r.zerofill&&i.zerofill(),r.constraints?.default!==void 0&&i.default(r.constraints.default),this.applyNullableConstraint(i,r.constraints?.nullable)),i}generateAddColumnViaAlter(t){let e=[t.column.databaseName,t.column.length,t.column.precision&&!t.column.withTimezone?t.column.precision:void 0,t.column.scale,t.column.withTimezone?{withTimezone:t.column.withTimezone,precision:t.column.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,r=>{r.addColumn(n=>{let o=this.executeBuilderMethod(t.table,n,t.column,e,false);return t.column.constraints?.default!==void 0&&o.default(t.column.constraints.default),this.applyNullableConstraint(o,t.column.constraints?.nullable),o});}).toQueries()}generateModifyColumnViaAlter(t){if(this.sql.getDbType()==="sqlite")return [];let e=[t.modelColumn.databaseName,t.modelColumn.length,t.modelColumn.precision&&!t.modelColumn.withTimezone?t.modelColumn.precision:void 0,t.modelColumn.scale,t.modelColumn.withTimezone?{withTimezone:t.modelColumn.withTimezone,precision:t.modelColumn.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,n=>{n.alterColumn(o=>{let i=this.executeBuilderMethod(t.table,o,t.modelColumn,e,false);return t.modelColumn.constraints?.default!==void 0?i.default(t.modelColumn.constraints.default):t.dbColumns.defaultValue!=null&&t.dbColumns.defaultValue!==""&&i.default(null),this.applyNullableConstraint(i,t.modelColumn.constraints?.nullable),i});}).toQueries()}generateCreateIndexSql(t){let e=this.models.find(i=>i.table===t.table),n=(e?.getIndexes().find(i=>i.name===t.index)?.columns||[]).map(i=>e?.getColumns().find(l=>l.columnName===i)?.databaseName||i),o=new ie(this.sql.getDbType());return o.createIndex(t.table,n,{constraintName:t.index}),o.queryStatements[0]||""}generateAddRelationViaAlter(t){let e=t.table,r=t.relation.foreignKey;t.relation.type==="belongsTo"?(e=t.relation.model().table,r=t.relation.model().primaryKey||"id"):t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(e=C(t.relation.manyToManyOptions.throughModel),r=C(t.relation.manyToManyOptions.rightForeignKey),(!r||r==="undefined")&&(r=t.relation.model().primaryKey||"id"));let n=typeof t.relation.constraintName=="string"?t.relation.constraintName:void 0,o=C(r);if(t.relation.type==="belongsTo"){let c=t.relation.model(),p=c.primaryKey,f=c.getColumns().find(T=>T.columnName===p);if(f)o=f.databaseName;else {let T=c?.databaseCaseConvention||"preserve";o=H(p,T);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let c=t.relation.model();if(typeof o=="string"&&o){let p=c.getColumns(),h=p.find(f=>f.columnName===o);if(h)o=h.databaseName;else {let f=c.primaryKey||"id",T=p.find(N=>N.columnName===f);if(T)o=T.databaseName;else {let N=c?.databaseCaseConvention||"preserve";o=H(o||f,N);}}}else {let p=c.primaryKey||"id",f=c.getColumns().find(T=>T.columnName===p);if(f)o=f.databaseName;else {let T=c?.databaseCaseConvention||"preserve";o=H(p,T);}}}let i=this.models.find(c=>c.table===t.table),a=i?.getColumns()||[],l=t.relation.columnName,u=a.find(c=>c.columnName===l);if(u)l=u.databaseName;else {let c=i?.databaseCaseConvention||"preserve";l=H(l,c);}if(t.relation.type==="belongsTo"){let c=a.find(p=>p.columnName===t.relation.foreignKey);if(c)l=c.databaseName;else {let p=i?.databaseCaseConvention||"preserve";l=H(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let c=t.relation.manyToManyOptions.leftForeignKey,p=C(c),h=a.find(f=>f.columnName===p);if(h)l=h.databaseName;else {let f=i?.databaseCaseConvention||"preserve";l=H(p,f);}}let d=t.relation.onDelete?.toLowerCase(),m=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,c=>{let p=n||Z(t.table,l,e);c.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[o]},constraintName:p,onDelete:d,onUpdate:m});}).toQueries()}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};Wr.BUILTIN_COLUMN_TYPES=new Set(["char","varchar","string","text","longtext","mediumtext","tinytext","uuid","ulid","integer","tinyint","smallint","mediumint","bigint","biginteger","float","double","real","decimal","numeric","increment","bigIncrement","boolean","date","time","datetime","timestamp","year","json","jsonb","binary","varbinary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]);var Et=Wr;var Ur=class Ur{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}generateCode(t){let e=[],r=[],n=null,o={STRUCTURE_CREATION:"Structure creation",CONSTRAINT_CREATION:"Constraints and indexes",DESTRUCTIVE_OPERATIONS:"Destructive operations"};for(let i of t){i.phase!==n&&(n=i.phase,e.length>0&&e.push(""),e.push(`// ${o[n]}`));let{up:a,down:l}=this.generateOperationCode(i);a&&e.push(...a),l&&r.push(...l);}return {up:e,down:r}}generateOperationCode(t){switch(t.type){case "CREATE_TABLE":return this.generateCreateTableCode(t);case "ADD_COLUMN":return this.generateAddColumnCode(t);case "MODIFY_COLUMN":return this.generateModifyColumnCode(t);case "DROP_COLUMN":return this.generateDropColumnCode(t);case "CREATE_INDEX":return this.generateCreateIndexCode(t);case "DROP_INDEX":return this.generateDropIndexCode(t);case "ADD_FOREIGN_KEY":return this.generateAddForeignKeyCode(t);case "DROP_FOREIGN_KEY":return this.generateDropForeignKeyCode(t);case "ADD_UNIQUE_CONSTRAINT":return this.generateAddUniqueCode(t);case "DROP_CONSTRAINT":return this.generateDropConstraintCode(t);case "ADD_CHECK_CONSTRAINT":return this.generateAddCheckCode(t);case "ADD_PRIMARY_KEY":return this.generateAddPrimaryKeyCode(t);case "DROP_TABLE":return this.generateDropTableCode(t);case "MODIFY_PRIMARY_KEY":return this.generateModifyPrimaryKeyCode(t);default:return {up:null,down:null}}}generateCreateTableCode(t){let e=t.data,r=[];r.push(`this.schema.createTable(${this.quote(e.table)}, (table) => {`);for(let o of e.columns){let i=this.generateColumnCode(e.table,o,true);r.push(` ${i}`);}r.push("});");let n=[`this.schema.dropTable(${this.quote(e.table)});`];return {up:r,down:n}}generateAddColumnCode(t){let{table:e,column:r}=t.data,n=this.generateColumnCode(e,r,false),o=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.addColumn((col) => ${n.replace(/^table\./,"col.")});`,"});"],i=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r.databaseName)});`,"});"];return {up:o,down:i}}generateModifyColumnCode(t){let{table:e,modelColumn:r,dbColumns:n}=t.data,o=this.generateColumnCodeForModify(e,r,n),i=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.alterColumn((col) => ${o.replace(/^table\./,"col.")});`,"});"],a=[`// TODO: reverse column modification for ${this.quote(n.name)} on ${this.quote(e)}`];return {up:i,down:a}}generateDropColumnCode(t){let{table:e,column:r}=t.data,n=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r)});`,"});"],o=[`// TODO: reverse column drop for ${this.quote(r)} on ${this.quote(e)}`];return {up:n,down:o}}generateCreateIndexCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=(r?.getIndexes().find(u=>u.name===e.index)?.columns||[]).map(u=>r?.getColumns().find(m=>m.columnName===u)?.databaseName||u),i=o.length===1?this.quote(o[0]):`[${o.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.createIndex(${this.quote(e.table)}, ${i}, { constraintName: ${this.quote(e.index)} });`],l=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`];return {up:a,down:l}}generateDropIndexCode(t){let e=t.data,r=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`],n=[`// TODO: reverse index drop for ${this.quote(e.index)} on ${this.quote(e.table)}`];return {up:r,down:n}}generateAddForeignKeyCode(t){let e=t.data,{sourceColumn:r,referencedTable:n,referencedColumn:o,constraintName:i}=this.resolveRelationDetails(e),a=e.relation.onDelete?.toLowerCase(),l=e.relation.onUpdate?.toLowerCase(),u=[];i&&u.push(`constraintName: ${this.quote(i)}`),a&&u.push(`onDelete: ${this.quote(a)}`),l&&u.push(`onUpdate: ${this.quote(l)}`);let d=u.length>0?`, { ${u.join(", ")} }`:"",m=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.foreignKey(${this.quote(r)}, ${this.quote(n)}, ${this.quote(o)}${d});`,"});"],c=i||Z(e.table,r,n),p=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.dropConstraint(${this.quote(c)});`,"});"];return {up:m,down:p}}generateDropForeignKeyCode(t){let e=t.constraint||t.data?.relation?.name;if(!e)return {up:null,down:null};let r=t.table||t.data?.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(e)});`,"});"],o=[`// TODO: reverse FK drop for ${this.quote(e)} on ${this.quote(r)}`];return {up:n,down:o}}generateAddUniqueCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=`[${(e.columns||[]).map(u=>r?.getColumns().find(m=>m.columnName===u)?.databaseName||u).map(u=>this.quote(u)).join(", ")}]`,i=e.name||"mandatory",a=[`this.schema.addUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(i)} });`],l=[`this.schema.dropUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(i)} });`];return {up:a,down:l}}generateDropConstraintCode(t){let e=t.data,r=t.table||e.table,n=t.constraint||e.name;if(!n||!r)return {up:null,down:null};if(e.type==="primary_key"){let a=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});"],l=[`// TODO: reverse primary key drop on ${this.quote(r)}`];return {up:a,down:l}}if(e.type==="unique"){let a=e.column,l=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],u=[`// TODO: reverse unique constraint drop for ${this.quote(a)} on ${this.quote(r)}`];return {up:l,down:u}}if(e.expression!==void 0){let a=[`this.schema.dropCheck(${this.quote(r)}, ${this.quote(n)});`],l=[`// TODO: reverse check constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:a,down:l}}let o=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],i=[`// TODO: reverse constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:o,down:i}}generateAddCheckCode(t){let e=t.data,r=[`this.schema.addCheck(${this.quote(e.table)}, ${this.quote(e.expression)}, { constraintName: ${this.quote(e.name)} });`],n=[`this.schema.dropCheck(${this.quote(e.table)}, ${this.quote(e.name)});`];return {up:r,down:n}}generateAddPrimaryKeyCode(t){let e=t.data,o=this.models.find(u=>u.table===e.table)?.getColumns().find(u=>u.columnName===e.columns[0])?.primaryKeyConstraintName||we(e.table,e.columns[0]),i=`[${e.columns.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.addConstraint("primary_key", { columns: ${i}, constraintName: ${this.quote(o)} });`,"});"],l=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`," table.dropPrimaryKey();","});"];return {up:a,down:l}}generateDropTableCode(t){let e=t.table||t.data?.table,r=[`this.schema.dropTable(${this.quote(e)});`],n=[`// TODO: reverse table drop for ${this.quote(e)}`];return {up:r,down:n}}generateModifyPrimaryKeyCode(t){let e=t.data,r=e.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});",`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.addPrimaryKey(${this.quote(e.modelPrimaryKey)});`,"});"],o=[`// TODO: reverse primary key modification on ${this.quote(r)}`];return {up:n,down:o}}generateColumnCode(t,e,r){let n=this.generateColumnTypeCode(e);if(!r)return n;if(e.isPrimary){let o=e.primaryKeyConstraintName||we(t,e.columnName);n+=`.primaryKey({ constraintName: ${this.quote(o)} })`;}return e.unsigned&&(n+=".unsigned()"),e.zerofill&&(n+=".zerofill()"),e.constraints?.default!==void 0&&(n+=`.default(${this.formatDefaultValue(e.constraints.default)})`),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n+";"}generateColumnCodeForModify(t,e,r){let n=this.generateColumnTypeCode(e);return e.constraints?.default!==void 0?n+=`.default(${this.formatDefaultValue(e.constraints.default)})`:r.defaultValue!=null&&r.defaultValue!==""&&(n+=".default(null)"),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n}generateColumnTypeCode(t){let e=t.databaseName;if(Array.isArray(t.type)){let i=t.type.map(a=>this.quote(a)).join(", ");return `table.enum(${this.quote(e)}, [${i}])`}let r=t.type;if(new Set(["uuid","ulid","boolean","year","json","jsonb","binary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]).has(r))return `table.${r}(${this.quote(e)})`;if(r==="timestamp"||r==="datetime"){let i=[];return t.withTimezone&&i.push("withTimezone: true"),t.precision!=null&&i.push(`precision: ${t.precision}`),i.length>0?`table.${r}(${this.quote(e)}, { ${i.join(", ")} })`:`table.${r}(${this.quote(e)})`}return r==="date"||r==="time"?t.precision!=null?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="increment"||r==="bigIncrement"?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:r==="decimal"||r==="numeric"?t.precision!=null?t.scale!=null?`table.${r}(${this.quote(e)}, ${t.precision}, ${t.scale})`:`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="float"||r==="double"||r==="real"?t.precision!=null&&t.precision!==10?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="longtext"||r==="mediumtext"||r==="tinytext"?`table.${r}(${this.quote(e)})`:new Set(["varchar","char","string","integer","tinyint","smallint","mediumint","bigint","biginteger","varbinary"]).has(r)?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:Ur.BUILTIN_COLUMN_TYPES.has(r)?`table.${r}(${this.quote(e)})`:t.length!=null?`table.custom(${this.quote(e)}, ${this.quote(r)}, ${t.length})`:`table.custom(${this.quote(e)}, ${this.quote(r)})`}resolveRelationDetails(t){let e=t.table,r="id";if(t.relation.type==="belongsTo"){let l=t.relation.model();e=l.table;let u=l.primaryKey||"id";r=l.getColumns().find(c=>c.columnName===u)?.databaseName||u;}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){e=C(t.relation.manyToManyOptions.throughModel);let l=C(t.relation.manyToManyOptions.rightForeignKey);l&&l!=="undefined"?r=l:r=t.relation.model().primaryKey||"id";}let o=this.models.find(l=>l.table===t.table)?.getColumns()||[],i=t.relation.columnName;if(t.relation.type==="belongsTo")i=o.find(u=>u.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey;else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let l=C(t.relation.manyToManyOptions.leftForeignKey);i=o.find(d=>d.columnName===l)?.databaseName||l;}else i=o.find(u=>u.columnName===i)?.databaseName||i;let a=typeof t.relation.constraintName=="string"?t.relation.constraintName:C(t.relation.constraintName)||void 0;return {sourceColumn:i,referencedTable:e,referencedColumn:r,constraintName:a}}quote(t){return `"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}formatDefaultValue(t){return t==null?"null":t==="NULL"?'"NULL"':typeof t=="boolean"||typeof t=="number"?t.toString():t==="TRUE"||t==="true"?"true":t==="FALSE"||t==="false"?"false":this.quote(String(t))}};Ur.BUILTIN_COLUMN_TYPES=new Set(["char","varchar","string","text","longtext","mediumtext","tinytext","uuid","ulid","integer","tinyint","smallint","mediumint","bigint","biginteger","float","double","real","decimal","numeric","increment","bigIncrement","boolean","date","time","datetime","timestamp","year","json","jsonb","binary","varbinary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]);var Fr=Ur;function $y(s){return s.replace(/\s+/g," ").trim()}function Py(s){return s.replace(/\s*\([^)]*\)/g,"").trim()}function vy(s){let t=s.split(/\s+/).filter(n=>n.length>0),e=[],r=[];for(let n of t)n==="unsigned"||n==="zerofill"?e.push(n):r.push(n);return {bareBase:r.join(" "),modifiers:e}}function Iy(s,t){return t.length===0?s:`${s} ${t.join(" ")}`}function Le(s,t){let e=$y(t.toLowerCase()),r=Py(e);switch(s){case "sqlite":{let n=[{test:o=>o==="increment",normalized:"integer"},{test:o=>o==="bigincrement",normalized:"integer"},{test:o=>o.includes("int"),normalized:"integer"},{test:o=>o==="string",normalized:"varchar"},{test:o=>o.includes("char"),normalized:"varchar"},{test:o=>o.includes("text"),normalized:"text"},{test:o=>o.includes("clob"),normalized:"text"},{test:o=>o.includes("date"),normalized:"text"},{test:o=>o.includes("time"),normalized:"text"},{test:o=>o.includes("timestamp"),normalized:"text"},{test:o=>o.includes("datetime"),normalized:"text"},{test:o=>o.includes("blob"),normalized:"blob"},{test:o=>o.includes("real")||o.includes("floa")||o.includes("doub"),normalized:"real"},{test:o=>o.includes("numeric"),normalized:"numeric"},{test:o=>o.includes("bool"),normalized:"integer"},{test:o=>o.includes("uuid"),normalized:"varchar"},{test:o=>o.includes("ulid"),normalized:"varchar"},{test:o=>o.includes("jsonb"),normalized:"text"},{test:o=>o.includes("json"),normalized:"text"}];for(let o of n)if(o.test(r))return o.normalized;return r}case "mysql":case "mariadb":{let{bareBase:n,modifiers:o}=vy(r),a=new Set(["int","integer","increment","tinyint","smallint","mediumint","bigint","bigincrement","float","double","double precision","real","decimal","numeric","year","bool","boolean"]).has(n);if(n.endsWith("text")||n==="text")return "text";let l;switch(n){case "int":case "integer":case "increment":l="integer";break;case "tinyint":l="boolean";break;case "smallint":l="smallint";break;case "mediumint":l="mediumint";break;case "bigint":case "bigincrement":l="bigint";break;case "float":l="float";break;case "double":case "double precision":l="double";break;case "real":l="double";break;case "decimal":case "numeric":l="numeric";break;case "string":case "varchar":case "character varying":l="varchar";break;case "char":case "character":l="char";break;case "uuid":l="varchar";break;case "ulid":l="varchar";break;case "date":l="date";break;case "datetime":l="datetime";break;case "timestamp":l="timestamp";break;case "time":l="time";break;case "year":l="year";break;case "jsonb":case "json":l=s==="mariadb"?"text":"json";break;case "enum":l="enum";break;case "binary":l="binary";break;case "varbinary":l="varbinary";break;case "tinyblob":l="tinyblob";break;case "mediumblob":l="mediumblob";break;case "longblob":l="longblob";break;case "blob":l="blob";break;case "boolean":case "bool":l="boolean";break;default:l=n;break}return a&&o.length>0?Iy(l,o):l}case "postgres":case "cockroachdb":{if(r.endsWith("text")||r==="text")return "text";if(r.startsWith("timestamp"))return "timestamp";if(r.startsWith("time"))return "time";if(r==="datetime")return "timestamp";switch(r){case "string":case "varchar":case "character varying":return "varchar";case "char":case "character":return "char";case "ulid":return "varchar";case "double precision":return "double";case "real":return "real";case "float":return "real";case "integer":case "int4":case "int":case "increment":case "serial":return "integer";case "mediumint":return "integer";case "bigint":case "int8":case "bigincrement":case "bigserial":return "bigint";case "smallint":case "int2":return "smallint";case "tinyint":return "smallint";case "uuid":return "uuid";case "year":return "smallint";case "bytea":return "bytea";case "binary":case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":return "bytea";case "boolean":case "bool":return "boolean";case "numeric":case "decimal":return "numeric";case "jsonb":return "jsonb";case "json":return "json";case "date":return "date";default:return r}}case "mssql":{if(r.endsWith("text")||r==="text"||r==="ntext")return "text";if(r.startsWith("datetime2"))return "datetime2";if(r.startsWith("datetimeoffset"))return "datetimeoffset";switch(r){case "int":case "integer":case "increment":return "int";case "tinyint":return "tinyint";case "smallint":return "smallint";case "bigint":case "bigincrement":return "bigint";case "float":return "float";case "real":return "real";case "double":case "double precision":return "float";case "decimal":case "numeric":return "decimal";case "money":return "money";case "smallmoney":return "smallmoney";case "string":case "varchar":case "character varying":return "varchar";case "nvarchar":return "nvarchar";case "char":case "character":return "char";case "nchar":return "nchar";case "uuid":case "uniqueidentifier":return "uniqueidentifier";case "ulid":return "varchar";case "date":return "date";case "datetime":return "datetime";case "smalldatetime":return "smalldatetime";case "time":return "time";case "timestamp":return "datetime2";case "binary":return "binary";case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":case "bytea":return "varbinary";case "image":return "image";case "bit":case "boolean":case "bool":return "bit";case "json":case "jsonb":return "nvarchar";case "xml":return "xml";case "sql_variant":return "sql_variant";default:return r}}default:return r}}var Ge=class s{constructor(t){this.emptyStatements=[/^alter table [`'"]?[\w]+[`'"]?\s*$/i];this.sql=t,this.models=Object.values(this.sql._models),this.data={columnsToAdd:[],columnsToDrop:[],columnsToModify:[],indexesToAdd:[],indexesToDrop:[],uniquesToAdd:[],uniquesToDrop:[],checksToAdd:[],checksToDrop:[],tablesToAdd:[],relationsToAdd:[],relationsToDrop:[],relationsToModify:[],primaryKeysToAdd:[],primaryKeysToDrop:[],primaryKeysToModify:[]};}static async makeDiff(t){let e=new s(t);return await Promise.all(e.models.map(async r=>{let n=await e.sql.getTableSchema(r.table),o={columns:r.getColumns().filter(f=>f?.type!==void 0&&f?.type!==null),indexes:r.getIndexes(),relations:r.getRelations()};if(!n.columns.length){e.data.tablesToAdd.push({table:r.table,columns:o.columns});for(let N of o.indexes)n.indexes.map(w=>w.name).includes(N.name)||e.data.indexesToAdd.push({table:r.table,index:N.name});let f=r.getUniques?.()||[];for(let N of f)e.data.uniquesToAdd.push({table:r.table,name:N.name||"mandatory",columns:N.columns});let T=r.getChecks?.()||[];for(let N of T)e.data.checksToAdd.push({table:r.table,name:N.name,expression:N.expression});for(let N of o.relations){if(N.type!=="belongsTo")continue;let w=C(N.constraintName);n.foreignKeys.find(_=>_.name===w)||e.data.relationsToAdd.push({table:r.table,relation:N,onDelete:N.onDelete,onUpdate:N.onUpdate});}return}for(let f of o.columns)n.columns.some(N=>N.name===f.databaseName||N.name===f.columnName)||e.data.columnsToAdd.push({table:r.table,column:f});let i=r.getColumns();for(let f of n.columns)i.some(N=>N.databaseName===f.name||N.columnName===f.name)||e.data.columnsToDrop.push({table:r.table,column:f.name});for(let f of o.indexes)n.indexes.map(T=>T.name).includes(f.name)||e.data.indexesToAdd.push({table:r.table,index:f.name});let a=r.getUniques?.()||[];for(let f of a)n.indexes.some(N=>N.name===f.name&&N.isUnique)||e.data.uniquesToAdd.push({table:r.table,name:f.name||"mandatory",columns:f.columns});let l=n.foreignKeys.map(f=>f.name);for(let f of n.indexes)f.isUnique||l.includes(f.name)||o.indexes.map(N=>N.name).includes(f.name)||e.data.indexesToDrop.push({table:r.table,index:f.name});for(let f of n.indexes){if(!f.isUnique||f.name==="PRIMARY")continue;(r.getUniques?.()||[]).map(N=>N.name).includes(f.name)||e.data.uniquesToDrop.push({table:r.table,name:f.name});}let u=r.getChecks?.()||[];for(let f of u)n.checkConstraints.some(N=>N.name===f.name)||e.data.checksToAdd.push({table:r.table,name:f.name,expression:f.expression});let d=new Set(u.map(f=>f.name)),m=o.columns.filter(f=>Array.isArray(f.type)),c=new Set(m.map(f=>f.databaseName||f.columnName));for(let f of n.checkConstraints)if(!d.has(f.name)){let T=[...c].find(N=>{let w=N.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),R=new RegExp(`[\\["\\[]?${w}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),_=new RegExp(`[\\("\\[]?${w}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return R.test(f.expression)||_.test(f.expression)});if(T){let N=m.find(R=>(R.databaseName||R.columnName)===T),w=n.columns.find(R=>R.name===T);if(N&&w?.enumValues&&Array.isArray(N.type)){let R=[...N.type].sort(),_=[...w.enumValues].sort();if(!(R.length===_.length&&R.every((O,D)=>O===_[D]))){e.data.checksToDrop.push({table:r.table,name:f.name});let O=e.sql.getDbType(),D=O==="mssql"?"[":'"',Q=O==="mssql"?"]":'"',V=N.type.map($=>`'${$.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:f.name,expression:`${D}${T}${Q} IN (${V})`});}}}else e.data.checksToDrop.push({table:r.table,name:f.name});}for(let f of o.columns){let T=n.columns.find(R=>R.name===f.databaseName||R.name===f.columnName);if(!T)continue;let N=!e.areColumnsEqual(T,f,n.indexes),w=e.getDefaultChange({table:r.table,dbColumns:T,modelColumn:f});(N||w)&&e.data.columnsToModify.push({table:r.table,dbColumns:T,modelColumn:f});}for(let f of o.relations){if(f.type!=="belongsTo"&&f.type!=="manyToMany")continue;if(f.type==="manyToMany"&&f.manyToManyOptions){let w=C(f.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:w,relation:{type:"belongsTo",model:()=>r,columnName:C(f.manyToManyOptions.leftForeignKey),foreignKey:f.manyToManyOptions.leftForeignKey,constraintName:f.constraintName?C(f.constraintName):Z(w,C(f.manyToManyOptions.leftForeignKey||wl(r.table)),r.table),onDelete:f.onDelete,onUpdate:f.onUpdate},onDelete:f.onDelete,onUpdate:f.onUpdate});continue}let T=C(f.constraintName);if(T&&n.foreignKeys.some(w=>w.name===T))continue;n.foreignKeys.find(w=>e.relationMatchesDbRelation(r,f,w))||e.data.relationsToAdd.push({table:r.table,relation:f,onDelete:f.onDelete,onUpdate:f.onUpdate});}let p=new Set(o.relations.filter(f=>f.type==="belongsTo").map(f=>{let T=C(f.foreignKey)||f.columnName,w=r.getColumns().find(R=>R.columnName===T)?.databaseName||T;return C(f.constraintName)||Z(r.table,w,f.model().table)}));for(let f of n.foreignKeys){if(f.name&&p.has(f.name))continue;o.relations.find(N=>N.type!=="belongsTo"&&N.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,N,f))||e.data.relationsToDrop.push({table:r.table,relation:f});}for(let f of o.relations){if(f.type!=="belongsTo"&&f.type!=="manyToMany")continue;let T=n.foreignKeys.find(N=>e.relationMatchesDbRelation(r,f,N));T&&!e.areRelationsEqual(T,f)&&e.data.relationsToModify.push({table:r.table,dbRelation:T,modelRelation:f,onDelete:f.onDelete,onUpdate:f.onUpdate});}let h=r.primaryKey;if(h&&!n.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[h]}),n.primaryKey&&!h&&e.data.primaryKeysToDrop.push({table:r.table,columns:n.primaryKey.columns,name:n.primaryKey.name}),h&&n.primaryKey){let f=r.getColumns().find(T=>T.columnName===h);f&&!e.arePrimaryKeysEqual(n.primaryKey,f)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:n.primaryKey,modelPrimaryKey:h});}})),await e.processManyToMany(),await e.removeFkChurnByName(),e}getSqlStatements(){let t=this.getSqlStatementsByPhase();return Object.values(t).flat().filter(r=>{let n=r.trim();return n?!this.emptyStatements.some(o=>o.test(n)):false})}getCodeStatements(){let e=new Et(this.sql).generateOperations(this.data);return new Fr(this.sql).generateCode(e)}getSqlStatementsByPhase(){let t=new Et(this.sql),e=t.generateOperations(this.data),r=t.formatSqlStatements(e),n={STRUCTURE_CREATION:[],CONSTRAINT_CREATION:[],DESTRUCTIVE_OPERATIONS:[]};for(let o of r)n[o.phase].push(...o.sqlStatements);return n}areColumnsEqual(t,e,r=[]){let n=t.name===e.databaseName,o=this.sql.getDbType(),i=Le(o,t.dataType),a=typeof e.type=="string"?Le(o,e.type):void 0,l=i.split(" ").filter(d=>d!=="unsigned"&&d!=="zerofill").join(" ");if(a&&n&&(n=l===a),Array.isArray(e.type)&&(o==="mysql"||o==="mariadb")){let d=[...e.type].sort(),m=t.enumValues?[...t.enumValues].sort():null;m&&n&&(n=d.length===m.length&&d.every((c,p)=>c===m[p]));}e.length!=null&&t.length!=null&&n&&(n=t.length===e.length);let u=a==="real"||a==="double"||a==="float";if(e.precision!=null&&t.precision!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.precision===e.precision)),e.scale!=null&&t.scale!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.scale===e.scale)),typeof e.type=="string"&&(a==="timestamp"||a==="time")&&(o==="postgres"||o==="cockroachdb")&&e.withTimezone!==void 0&&t.withTimezone!==void 0&&n&&(n=!!t.withTimezone==!!e.withTimezone),e.constraints?.nullable!==void 0){let d=e.constraints.nullable,m=t.isNullable;n=n&&d===m;}if(o==="mysql"||o==="mariadb"){if(e.unsigned!==void 0){let d=e.unsigned??false,m=t.unsigned??false;n&&(n=d===m);}if(e.zerofill!==void 0){let d=e.zerofill??false,m=t.zerofill??false;n&&(n=d===m);}}if(e.stringMode!==void 0){let d=e.stringMode??false,m=t.stringMode??false;n&&(n=d===m);}return n}areRelationsEqual(t,e){let r=C(e.constraintName),n=r?t.name===r:true;if(e.type==="belongsTo"){let u=e.model(),d=u.primaryKey||"id",m=u.getColumns().find(h=>h.columnName===d),c=u.table,p=m?.databaseName||d;n=n&&t.referencedTable===c&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===p;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let u=C(e.manyToManyOptions.throughModel);n=n&&t.referencedTable===u;}let o=t.onDelete?.toLowerCase(),i=t.onUpdate?.toLowerCase(),a=e.onDelete?.toLowerCase(),l=e.onUpdate?.toLowerCase();return a&&n&&(n=o===a),l&&n&&(n=i===l),n}relationMatchesDbRelation(t,e,r){let n,o=e;if(o&&o.model){if(typeof o.model=="function"&&o.model.table)n=o.model;else if(typeof o.model=="function")try{let f=o.model();f&&f.table&&(n=f);}catch{}}if(!n)return false;let i=e.type==="belongsTo"?n.table:e.type==="manyToMany"&&e.manyToManyOptions?C(e.manyToManyOptions.throughModel):void 0;if(i&&r.referencedTable!==i)return false;let a=C(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),d=(o.type||"belongsTo")==="belongsTo"?C(o.foreignKey):o.columnName,m=l.find(f=>f.columnName===d);m&&(d=m.databaseName);let c=n.primaryKey||"id",h=n.getColumns().find(f=>f.columnName===c)?.databaseName||c;return r.columns.length===1&&r.columns[0]===d&&r.referencedColumns.length===1&&r.referencedColumns[0]===h}arePrimaryKeysEqual(t,e){if(t.columns.length!==1)return false;let n=t.columns[0]===e.databaseName,o=this.sql.getDbType();if(["mysql","mariadb"].includes(o))return n;let a=!t.name||!e.primaryKeyConstraintName||t.name===e.primaryKeyConstraintName;return n&&a}getDefaultChange(t){let e=this.sql.getDbType(),r=Le(e,t.dbColumns.dataType),n=typeof t.modelColumn.type=="string"?Le(e,t.modelColumn.type):void 0;if(n&&r!==n||t.modelColumn.length!=null&&t.dbColumns.length!=null&&t.dbColumns.length!==t.modelColumn.length||t.modelColumn.precision!=null&&t.dbColumns.precision!=null&&t.dbColumns.precision!==t.modelColumn.precision||t.modelColumn.scale!=null&&t.dbColumns.scale!=null&&t.dbColumns.scale!==t.modelColumn.scale||(this.sql.getDbType()==="postgres"||this.sql.getDbType()==="cockroachdb")&&typeof t.modelColumn.type=="string"&&(n==="timestamp"||n==="time")&&t.modelColumn.withTimezone!==void 0&&t.dbColumns.withTimezone!==void 0&&!!t.dbColumns.withTimezone!=!!t.modelColumn.withTimezone)return false;let i=t.modelColumn.constraints?.default!==void 0,a=t.dbColumns.defaultValue!==null&&t.dbColumns.defaultValue!==void 0,l=t.modelColumn.type==="bigIncrement"||t.modelColumn.type==="increment",u=typeof t.dbColumns.defaultValue=="string"&&t.dbColumns.defaultValue.includes("nextval(");if(i&&!a)return "set";if(!i&&a)return l&&u||t.modelColumn.type==="uuid"&&this.isImplicitUuidDefault(e,t.dbColumns.defaultValue)?false:"drop";if(i&&a){let d=String(t.dbColumns.defaultValue),m=String(t.modelColumn.constraints?.default),c=this.normalizeDefaultValue(e,r,d),p=this.normalizeDefaultValue(e,n||r,m);return c!==p?"set":false}return false}isImplicitUuidDefault(t,e){let r=String(e??"").replace(/[()\s]/g,"").toLowerCase();return ({postgres:["gen_random_uuid"],cockroachdb:["gen_random_uuid"],mysql:["uuid"],mariadb:["uuid"],mssql:["newid"],sqlite:["lower(hex(randomblob(16)))"]}[t]??[]).includes(r)}normalizeDefaultValue(t,e,r){let n=String(r).trim();if(!n)return n;if(t==="postgres"||t==="cockroachdb"){if(e==="json"||e==="jsonb")try{n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::(jsonb?|[a-zA-Z_ ]+[\[\]]*)/g,"");let i=n.match(/^'(.*)'$/s);if(i&&(n=i[1]),n==="{}"||n==="")return "{}";let a=JSON.parse(n);return JSON.stringify(a)}catch{}n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::[a-zA-Z_ ]+[\[\]]*/g,"");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),/^true$/i.test(n)?"true":/^false$/i.test(n)?"false":/^null$/i.test(n)?"null":(n)}if(t==="mysql"||t==="mariadb"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);if(o&&(n=o[1]),/^current_timestamp(?:\(\d+\))?$/i.test(n))return "current_timestamp";if(e==="boolean"){if(/^1$/.test(n))return "true";if(/^0$/.test(n))return "false"}return n}if(t==="sqlite"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),n.toLowerCase()}return n}async processManyToMany(){let t=new Set;for(let e of this.models){let r=e.getRelations();for(let n of r){if(n.type!=="manyToMany"||!n.manyToManyOptions||n.manyToManyOptions.wasModelProvided)continue;let o=C(n.manyToManyOptions.throughModel);if(t.has(o))continue;t.add(o);let i=this.models.find($=>$.table===n?.manyToManyOptions?.primaryModel),a=n.model();if(!i||!a)continue;let l=i.primaryKey||"id",u=a.primaryKey||"id",d=i.getColumns().find($=>$.columnName===l),m=a.getColumns().find($=>$.columnName===u);if(!d||!m)continue;let c=C(n.manyToManyOptions.leftForeignKey)||l,p=C(n.manyToManyOptions.rightForeignKey)||u,h=await this.sql.getTableSchema(o);if(!h.columns.length){this.data.tablesToAdd.push({table:o,columns:[this.clonePkAsColumn(d,c),this.clonePkAsColumn(m,p)]}),this.pushM2mFkRelations({throughTable:o,leftModel:i,rightModel:a,leftFkName:c,rightFkName:p,onDelete:n.onDelete,onUpdate:n.onUpdate,constraintName:void 0});continue}let f=this.clonePkAsColumn(d,c),T=this.clonePkAsColumn(m,p),N=h.columns.find($=>$.name===c),w=h.columns.find($=>$.name===p),R=N?this.areColumnsEqual(N,f,h.indexes):false,_=w?this.areColumnsEqual(w,T,h.indexes):false;for(let $ of h.foreignKeys){let Y=$.referencedTable===i.table,ve=$.referencedTable===a.table;if(!Y&&!ve)continue;let er=Y?c:p,Mt=$.columns[0];Mt&&Mt!==er&&(this.data.relationsToDrop.push({table:o,relation:$}),Mt!==c&&Mt!==p&&this.data.columnsToDrop.push({table:o,column:Mt}));}let E={};R||(E[f.databaseName]=f),_||(E[T.databaseName]=E[T.databaseName]||T);for(let $ of Object.keys(E))this.data.columnsToAdd.push({table:o,column:E[$]});let O=this.buildBelongsToRelation(o,()=>i,c,l,void 0,n.onDelete,n.onUpdate),D=this.buildBelongsToRelation(o,n.model,p,u,void 0,n.onDelete,n.onUpdate),Q=h.foreignKeys.find($=>$.referencedTable===i.table&&$.columns.length===1&&$.columns[0]===c),V=h.foreignKeys.find($=>$.referencedTable===a.table&&$.columns.length===1&&$.columns[0]===p);if(!Q){let $=h.foreignKeys.find(Y=>Y.referencedTable===i.table);$&&this.data.relationsToDrop.push({table:o,relation:$}),this.data.relationsToAdd.push(O);}if(!V){let $=h.foreignKeys.find(Y=>Y.referencedTable===a.table);$&&this.data.relationsToDrop.push({table:o,relation:$}),this.data.relationsToAdd.push(D);}}}}async removeFkChurnByName(){let t=new Set;for(let n of this.data.relationsToAdd)t.add(n.table);for(let n of this.data.relationsToDrop)t.add(n.table);let e=new Map;for(let n of t){let o=await this.sql.getTableSchema(n),i=new Set((o.foreignKeys||[]).map(a=>a.name).filter(Boolean));e.set(n,i);}let r=new Map;for(let n of this.models){let o=n.getRelations(),i=new Set;for(let a of o){if(a.type!=="belongsTo")continue;let l=a.foreignKey||a.columnName,d=n.getColumns().find(c=>c.columnName===l)?.databaseName||l,m=C(a.constraintName)||Z(n.table,d,a.model().table);i.add(m);}r.set(n.table,i);}this.data.relationsToAdd=await Promise.all(this.data.relationsToAdd.map(async n=>{let o=await this.sql.getTableSchema(n.table),i=this.models.find(f=>f.table===n.table),a=i?.getColumns()||[],l=n.relation.columnName;n.relation.type==="belongsTo"?l=a.find(T=>T.columnName===n.relation.foreignKey)?.databaseName||n.relation.foreignKey:l=a.find(T=>T.columnName===l)?.databaseName||l;let u=n.table,d=n.relation.foreignKey;if(n.relation.type==="belongsTo"){let f=n.relation.model();u=f.table;let T=f.primaryKey||"id";d=f.getColumns().find(w=>w.columnName===T)?.databaseName||T;}let m=new Set([l,n.relation.columnName].filter(Boolean)),c=o.foreignKeys.some(f=>{if(f.columns.length!==1||f.referencedColumns.length!==1)return false;let T=m.has(f.columns[0]),N=f.referencedTable===u,w=f.referencedColumns[0]===d;return T&&N&&w}),p=C(n.relation.constraintName)||Z(n.table,l,u),h=e.get(n.table)||new Set;if(c||p&&h.has(p))return null;if(n.relation.type==="manyToMany"&&n.relation.manyToManyOptions){let f=C(n.relation.manyToManyOptions.throughModel),T=C(n.relation.manyToManyOptions.leftForeignKey),N=C(n.relation.manyToManyOptions.rightForeignKey),w=n.table===f&&n.relation.columnName===T&&n.relation.model().table===i?.table,R=n.table===f&&n.relation.columnName===N&&n.relation.model().table!==i?.table,_=await this.sql.getTableSchema(f),E=_.foreignKeys.some(D=>D.columns.length===1&&D.columns[0]===T&&D.referencedTable===(i?.table||"")),O=_.foreignKeys.some(D=>D.columns.length===1&&D.columns[0]===N&&D.referencedTable===n.relation.model().table);if(w&&E||R&&O)return null}return n})).then(n=>n.filter(Boolean)),this.data.relationsToDrop=await Promise.all(this.data.relationsToDrop.map(async n=>{let o=this.models.find(u=>u.table===n.table);if(!o)return n;let i=o.getRelations(),a=o.getColumns();return i.some(u=>{if(u.type!=="belongsTo")return false;let m=a.find(T=>T.columnName===u.foreignKey)?.databaseName||u.foreignKey,c=u.model(),p=c.primaryKey||"id",f=c.getColumns().find(T=>T.columnName===p)?.databaseName||p;return n.relation.columns.length===1&&n.relation.columns[0]===m&&n.relation.referencedTable===c.table&&n.relation.referencedColumns.length===1&&n.relation.referencedColumns[0]===f})?null:n})).then(n=>n.filter(Boolean));}clonePkAsColumn(t,e){let r=t.type;return r==="bigIncrement"?r="bigint":r==="increment"&&(r="integer"),{columnName:e,databaseName:e,isPrimary:false,type:r,length:t.length,precision:t.precision,scale:t.scale,withTimezone:t.withTimezone,constraints:{nullable:false}}}pushM2mFkRelations(t){let e=this.buildBelongsToRelation(t.throughTable,()=>t.leftModel,t.leftFkName,t.leftModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate),r=this.buildBelongsToRelation(t.throughTable,()=>t.rightModel,t.rightFkName,t.rightModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate);this.data.relationsToAdd.push(e),this.data.relationsToAdd.push(r);}buildBelongsToRelation(t,e,r,n,o,i,a){let l=o?C(o):Z(t,r,e().table);return {table:t,relation:{type:"belongsTo",model:e,columnName:r,foreignKey:r,constraintName:l,onDelete:i,onUpdate:a},onDelete:i,onUpdate:a}}};var je=class{};je.modelCaseConvention="camel",je.databaseCaseConvention="snake";function Me(s){return String(s).padStart(2,"0")}function Ey(s,t){let e=s.getFullYear(),r=Me(s.getMonth()+1),n=Me(s.getDate()),o=Me(s.getHours()),i=Me(s.getMinutes()),a=Me(s.getSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${i}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${i}:${a}`;case "TIMESTAMP":return Math.floor(s.getTime()/1e3).toString()}}function Up(s,t){let e=s.getUTCFullYear(),r=Me(s.getUTCMonth()+1),n=Me(s.getUTCDate()),o=Me(s.getUTCHours()),i=Me(s.getUTCMinutes()),a=Me(s.getUTCSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${i}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${i}:${a}`;case "TIMESTAMP":return Math.floor(s.getTime()/1e3).toString()}}var Ae=(s,t="ISO",e="UTC")=>{if(!(s instanceof Date)||isNaN(s.getTime()))throw new Error("Invalid date provided");return e==="LOCAL"?Ey(s,t):Up(s,t)};var Tt=(s=new Date)=>Up(s,"ISO");var Vp=(s,t)=>{try{let e=De.createHash("sha256").update(s).digest(),r=De.randomBytes(16),n=De.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");return o+=n.final("hex"),`${r.toString("hex")}:${o}`}catch(e){throw new q("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Jp=(s,t)=>{try{let e=De.createHash("sha256").update(s).digest(),r=String(t).trim(),[n,o]=r.split(":");if(!n||!o)throw new Error(`Invalid encrypted value format: expected "iv:data" but got "${r.substring(0,50)}..."`);let i=n.toLowerCase(),a=o.toLowerCase(),l=De.createDecipheriv("aes-256-cbc",e,Buffer.from(i,"hex")),u=l.update(a,"hex","utf8");return u+=l.final("utf8"),u}catch(e){throw new q("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Hp=(s,t)=>{try{let e=De.randomBytes(32),r=De.randomBytes(16),n=De.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");o+=n.final("hex");let i=publicEncrypt(s,e);return `${r.toString("hex")}:${i.toString("hex")}:${o}`}catch(e){throw new q("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},zp=(s,t)=>{try{let e=String(t).trim(),[r,n,o]=e.split(":");if(!r||!n||!o)throw new Error(`Invalid encrypted value format: expected "iv:key:data" but got "${e.substring(0,50)}..."`);let i=privateDecrypt(s,Buffer.from(n,"hex")),a=De.createDecipheriv("aes-256-cbc",i,Buffer.from(r,"hex")),l=a.update(o,"hex","utf8");return l+=a.final("utf8"),l}catch(e){throw new q("Encryption::decryptAsymmetric","FAILED_TO_DECRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}};var z=class{static defineMetadata(t,e,r,n){if((typeof r!="object"||r===null)&&typeof r!="function")throw new TypeError("target must be an object or function");let o=this.store.get(r);o||(o=new Map,this.store.set(r,o));let i=o.get(n);i||(i=new Map,o.set(n,i)),i.set(t,e);}static getMetadata(t,e,r){if((typeof e!="object"||e===null)&&typeof e!="function")throw new TypeError("target must be an object or function");let n=e;for(;n;){let o=this.store.get(n);if(o){let i=o.get(r);if(i&&i.has(t))return i.get(t)}n=Object.getPrototypeOf(n);}}};z.store=new WeakMap;var Cl="0123456789ABCDEFGHJKMNPQRSTVWXYZ",ql=Cl.length,Qy=10,Ky=16,Ly=(s,t)=>{let e="";for(let r=0;r<t;r++){let n=s%ql;e=Cl.charAt(n)+e,s=(s-n)/ql;}return e},jy=s=>{let t=re().crypto.randomBytes(s),e="";for(let r=0;r<s;r++){let n=t[r];e+=Cl.charAt(n%ql);}return e},Gp=()=>{let s=Math.floor(Date.now()/1e3),t=Ly(s,Qy),e=jy(Ky);return t+e};var Vr=class extends Ce{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var Jr=class extends Ce{constructor(e,r,n){super(e,r);this.type="hasMany";this.foreignKey=n,this.type="hasMany";}};var Hr=class extends Ce{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var zr=class extends Ce{constructor(e,r,n){super(e,r);this.type="manyToMany";this.primaryModel=n.primaryModel,this.relatedModel=e.table,this.throughModel=n.throughModel,this.leftForeignKey=n.leftForeignKey,this.rightForeignKey=n.rightForeignKey;}};function M(s={primaryKey:false}){let t=s?.primaryKey??false;return (e,r)=>{let n=e.constructor;if(t){if(z.getMetadata(gt,e))throw new q("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");z.defineMetadata(gt,r,e),z.defineMetadata(gt,r,e.constructor);}let o=s.databaseName??H(r,n.databaseCaseConvention),i={columnName:r,serialize:s.serialize,prepare:s.prepare,isPrimary:t,primaryKeyConstraintName:s.primaryKeyConstraintName??we(n.table,r),autoUpdate:s.autoUpdate,autoCreate:s.autoCreate,databaseName:o,openApi:s.openApi,type:s.type,length:s?.length,precision:s?.precision,scale:s?.scale,withTimezone:s?.withTimezone,unsigned:s.unsigned,zerofill:s.zerofill,stringMode:s.stringMode,expression:s.expression,constraints:{nullable:s.nullable,default:s.default}};i.validate=s.validate;let a=z.getMetadata(kr,e)||[];a.push(i),z.defineMetadata(kr,a,e);}}M.primary=Wy;M.date=sh;M.datetime=ih;M.timestamp=ah;M.time=lh;M.boolean=oh;M.json=uh;M.uuid=Hy;M.ulid=zy;M.integer=Uy;M.bigInteger=Zy;M.float=Fy;M.decimal=Xy;M.increment=Vy;M.bigIncrement=Jy;M.string=Gy;M.text=Yy;M.binary=eh;M.enum=th;M.encryption={symmetric:rh,asymmetric:nh};M.computed=dh;function Wy(s={}){return M({...s,primaryKey:true})}function Fy(s={}){return M({type:"float",...s,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?Number.parseInt(t):Number.parseFloat(t)},openApi:{type:"number",format:"float",description:"A floating point number",...s.openApi||{}}})}function Uy(s={}){return M({type:"integer",...s,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?+t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An integer number",...s.openApi||{}}})}function Vy(s={}){return M({type:"increment",...s,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An auto-incrementing integer number",...s.openApi||{}}})}function Jy(s={}){return M({type:"bigIncrement",...s,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An auto-incrementing bigint number",...s.openApi||{}}})}function Hy(s={}){return M({type:"uuid",...s,prepare:t=>t||re().crypto.randomUUID(),openApi:{type:"string",format:"uuid",description:"uuid (Universally Unique Identifier)",...s.openApi||{}}})}function zy(s={}){return M({type:"ulid",...s,prepare:t=>t||Gp(),openApi:{type:"string",format:"ulid",description:"ulid (Universally Unique Lexicographically Sortable Identifier)",...s.openApi||{}}})}function Gy(s={}){return M({type:"string",...s,openApi:{type:"string",description:"A string value",...s.openApi||{}}})}function Yy(s={}){return M({type:"longtext",...s,openApi:{type:"string",description:"A text value",...s.openApi||{}}})}function Zy(s={}){return M({type:"bigint",...s,serialize:t=>{if(t!==void 0){if(t===null)return null;if(typeof t=="number")return t;if(typeof t=="string")return Number.parseInt(t);if(typeof t=="bigint")return Number(t)}},openApi:{type:"integer",format:"int64",description:"A bigint number",...s.openApi||{}}})}function Xy(s={}){return M({type:"decimal",precision:s.precision??10,scale:s.scale??2,...s,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseFloat(t)},openApi:{type:"number",format:"double",description:"A decimal number",...s.openApi||{}}})}function eh(s={}){return M({type:"binary",...s,openApi:{type:"string",format:"binary",description:"Binary data",...s.openApi||{}}})}function th(s,t={}){return M({type:s,...t,openApi:{type:"string",enum:s,description:"An enum value",...t.openApi||{}}})}function rh(s){return M({...s,prepare:t=>t&&Vp(s.key,t),serialize:t=>t&&Jp(s.key,t)})}function nh(s){return M({...s,prepare:t=>t&&Hp(s.publicKey,t),serialize:t=>t&&zp(s.privateKey,t)})}function oh(s={}){return M({type:"boolean",...s,serialize:t=>!!t,prepare:t=>{if(t!=null)return !!t},openApi:{type:"boolean",description:"A boolean value",...s.openApi||{}}})}function sh(s={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=s,i=!!n,a=!!r,l=typeof n=="function"?"js":i?true:void 0,u=()=>new Date,d=()=>Ae(new Date,"DATE_ONLY",e),m=t?typeof n=="function"?n:d:typeof n=="function"?n:u,c=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return M({type:"date",...o,autoUpdate:a,autoCreate:l,prepare:t?f=>f?a?c():f:i?m():null:f=>f?a?c():f:i?m():null,serialize:t?f=>{if(f!==void 0)return f===null?null:f instanceof Date?Ae(f,"DATE_ONLY",e):String(f)}:f=>{if(f!==void 0)return f===null?null:f instanceof Date?f:new Date(f)},openApi:{type:"string",format:"date",description:"YYYY-MM-DD",...o.openApi||{}}})}function ih(s={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...i}=s,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,m=typeof o=="function"?"js":u?true:void 0,c=()=>new Date,p=()=>Ae(new Date,"ISO",a),h=t?typeof o=="function"?o:p:typeof o=="function"?o:c,f=t?typeof n=="function"?n:p:typeof n=="function"?n:c;return M({type:"datetime",...i,withTimezone:l,autoUpdate:d,autoCreate:m,prepare:t?w=>w?d?f():w:u?h():null:w=>w?d?f():w:u?h():null,serialize:t?w=>{if(w!==void 0)return w===null?null:w instanceof Date?Ae(w,"ISO",a):String(w)}:w=>{if(w!==void 0)return w===null?null:w instanceof Date?w:new Date(w)},stringMode:t,openApi:{type:"string",format:"date-time",description:"YYYY-MM-DD HH:mm:ss",...i.openApi||{}}})}function ah(s={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...i}=s,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,m=typeof o=="function"?"js":u?true:void 0,c=()=>new Date,p=()=>Ae(new Date,"TIMESTAMP",a),h=t?typeof o=="function"?o:p:typeof o=="function"?o:c,f=t?typeof n=="function"?n:p:typeof n=="function"?n:c;return M({type:"timestamp",...i,withTimezone:l,autoUpdate:d,autoCreate:m,prepare:t?w=>w?d?f():w:u?h():null:w=>w?d?f():w:u?h():null,serialize:t?w=>{if(w!==void 0)return w===null?null:w instanceof Date?Ae(w,"TIMESTAMP",a):String(w)}:w=>{if(w!==void 0)return w===null?null:w instanceof Date?w:new Date(w)},stringMode:t,openApi:{type:"string",format:"date-time",description:"Unix timestamp",...i.openApi||{}}})}function lh(s={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=s,i=!!n,a=!!r,l=typeof n=="function"?"js":i?true:void 0,u=()=>new Date,d=()=>Ae(new Date,"TIME_ONLY",e),m=t?typeof n=="function"?n:d:typeof n=="function"?n:u,c=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return M({type:"time",...o,autoUpdate:a,autoCreate:l,prepare:t?f=>f?a?c():f:i?m():null:f=>f?a?c():f:i?m():null,serialize:t?f=>{if(f!==void 0)return f===null?null:f instanceof Date?Ae(f,"TIME_ONLY",e):String(f)}:f=>{if(f!==void 0)return f===null?null:f instanceof Date?f:new Date(f)},stringMode:t,openApi:{type:"string",format:"time",description:"HH:mm:ss",...o.openApi||{}}})}function uh(s={}){return M({type:"jsonb",...s,serialize:t=>typeof t=="string"?JSON.parse(t):t,prepare:t=>typeof t!="string"?JSON.stringify(t):t,openApi:{type:"object",description:"A JSON object",...s.openApi||{}}})}function dh(s,t={}){return M({...t,expression:s})}function Yp(s){try{return z.getMetadata(kr,s.prototype)||[]}catch{return []}}function Zp(s){return z.getMetadata(Tl,s.prototype)||[]}function Xp(s){return (z.getMetadata(Tl,s.prototype)||[]).map(e=>{let{type:r,model:n,columnName:o,foreignKey:i}=e,a=C(i),l=n();switch(r){case "belongsTo":return new Vr(l,o,a);case "hasOne":return new Hr(l,o,a);case "hasMany":return new Jr(l,o,a);case "manyToMany":if(!e.manyToManyOptions)throw new q("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let u=n();return new zr(u,o,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:C(e.manyToManyOptions.throughModel),leftForeignKey:C(e.manyToManyOptions.leftForeignKey),rightForeignKey:C(e.manyToManyOptions.rightForeignKey)});default:throw new q("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function ef(s){return z.getMetadata(gt,s)||z.getMetadata(gt,s.prototype)}function tf(s){return z.getMetadata(Bp,s.prototype)||[]}function rf(s){return z.getMetadata(Qp,s.prototype)||[]}function nf(s){return z.getMetadata(Kp,s.prototype)||[]}var me=class{};me.columns=new WeakMap,me.byName=new WeakMap,me.byDatabaseName=new WeakMap;var _e=class extends je{static get table(){let t=Object.getOwnPropertyDescriptor(this,"table");if(t&&"value"in t)return t.value;throw new Error(`Table name not set for model "${this.name}". Use defineModel() to create models.`)}static set table(t){Object.defineProperty(this,"table",{value:t,writable:true,enumerable:true,configurable:true});}static get primaryKey(){return ef(this)}constructor(t){if(super(),t)for(let e in t)Object.assign(this,{[e]:t[e]});}static getColumns(){let t=me.columns.get(this);return t||(t=Yp(this),me.columns.set(this,t)),t}static getColumnsByName(){let t=me.byName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.columnName,e])),me.byName.set(this,t)),t}static getColumnsByDatabaseName(){let t=me.byDatabaseName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.databaseName,e])),me.byDatabaseName.set(this,t)),t}static getRelations(){return Zp(this)}static getIndexes(){return tf(this)}static getUniques(){return rf(this)}static getChecks(){return nf(this)}static async validate(t){var i,a;let e=this.getColumns(),r={},n=this.primaryKey,o=n&&t?.[n]!==void 0?"update":"insert";for(let l of e){if(l.expression)continue;let u=l.validate;if(!u)continue;let d=t?t[l.columnName]:void 0,m=Array.isArray(u)?u:[u];for(let c of m)try{let p=await c(d,{model:this,column:l.columnName,operation:o,data:t});if(!(p&&p.valid)){let h=p&&p.message||"Validation failed";(r[i=l.columnName]||(r[i]=[])).push(h);}}catch{(r[a=l.columnName]||(r[a]=[])).push("Validation error");}}if(Object.keys(r).length>0)throw new Ot(r);return {valid:true}}};_e.zodEngine=null,_e.softDeleteColumn="deletedAt",_e.softDeleteValue=Tt();var wt=class extends S{constructor(e,r=false){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.fromNode=e;}};var U=class extends S{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var ee=class extends S{constructor(e,r=[],n,o=false,i=false){super("insert into",i);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="insert";this.file="insert";this.fromNode=e,this.records=r,this.returning=n,this.disableReturning=o;}};var Se=class extends S{constructor(e,r,n,o="update",i,a=false){super("on duplicate",a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="on_duplicate";this.file="on_duplicate";this.table=e,this.conflictColumns=r,this.columnsToUpdate=n,this.mode=o,this.returning=i;}};var St=class extends S{constructor(e=[],r="inserted"){super("returning");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="returning";this.file="returning";this.columns=e,this.prefix=r;}};var $e=class extends S{constructor(e,r=[],n=[],o=false){super("update",o);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="update";this.file="update";this.fromNode=e,this.columns=r,this.values=n;}};var x=class extends S{constructor(e,r,n=false,o,i,a=false){super("where",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where";this.column=e,this.chainsWith=` ${r}`,this.isNegated=n,this.operator=o,this.value=i;}};var xe=class extends S{constructor(e,r="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`;}};var ae=class extends x{constructor(e,r,n=false,o,i,a=false){super(e,r,n,"=",i,a);this.file="where_json";this.jsonOperator=o,this.value=i;}};var Ne=class extends S{constructor(e,r,n,o="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_subquery";this.column=e,this.operator=r,this.subquery=n,this.chainsWith=` ${o}`;}};var of;of=Symbol.toStringTag;var G=class{constructor(t,e,r,n){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=n;this[of]="WriteOperation";}then(t,e){return this.executor().then(t,e)}catch(t){return this.executor().catch(t)}finally(t){return this.executor().finally(t)}toQuery(){return this.toQueryFn()}toSql(){return this.toSqlFn()}unWrap(){return this.unWrapFn()}};var ch=(s,t,e,r,n,o=false)=>{let i=Object.create(t.prototype);for(let a of Object.keys(s)){let l=s[a],u=e.get(a),d=a;u||(u=r.get(a),u&&(d=u.columnName));let m=u!==void 0,c=o?true:n?n.has(d):true;if(m){if(!c)continue;if(l===null){i[d]=null;continue}if(u?.serialize){let p=u.serialize(l);if(p!==null&&typeof p?.then=="function")throw new Error(`hysteria-orm: column "${d}" on model "${t.name}" has an async serialize function, but serializers must be synchronous. Move async work to prepare or a getter.`);i[d]=p;continue}i[d]=l;continue}(!o||n&&n.has(d))&&(i[d]=l);}if(n)for(let a of n)a in i||(i[a]=null);return i},pe=(s,t,e=[])=>{if(!s.length)return null;let r=t.getColumnsByName(),n=t.getColumnsByDatabaseName(),o=e.some(u=>u.includes("*")),i=[];for(let u of e){if(u.toLowerCase().includes(" as ")){let p=u.match(/\s+as\s+(.+)$/i);p&&i.push(p[1].trim());continue}let m=u;if(m.includes(".")&&(m=m.split(".").pop()),m==="*")continue;let c=r.get(m)?.columnName??m;i.push(c);}let a=i.length?new Set(i):null,l=s.map(u=>ch(u,t,r,n,a,o));return l.length===1?l[0]:l};var kt=class{constructor(t){this.observers=t??[];}add(t){this.observers.push(t);}async notifyBefore(t){for(let e of this.observers)e?.onBeforeQuery&&await e.onBeforeQuery(t);}async notifyAfter(t,e){for(let r of this.observers)r?.onAfterQuery&&(t.result??(t.result=e),await r.onAfterQuery(t));}async notifyError(t){for(let e of this.observers)e?.onQueryError&&await e.onQueryError(t);}},sf=s=>{if(!s)return "OTHER";let t=s.trim().toUpperCase();return t.startsWith("SELECT")?"SELECT":t.startsWith("INSERT")?"INSERT":t.startsWith("UPDATE")?"UPDATE":t.startsWith("DELETE")?"DELETE":"OTHER"};var Gr=re();function Rl(s){let t=Gr.timing.now()-s;return Math.round(t*100)/100}var J=async(s,t,e,r,n="rows",o)=>{await e.ensureConnected();let i={id:Gr.crypto.randomUUID(),sql:s,params:t,model:void 0,operation:sf(s),timestamp:Gr.timing.now()};try{let u=e.observerChain;u&&typeof u.notifyBefore=="function"&&await u.notifyBefore(i);}catch{}let a=Gr.timing.now(),l=u=>{o?.shouldNotLog||it(s,e.logs,t,e.inputDetails.queryFormatOptions,r,u);};try{let u=e.driverAdapter;if(!u)throw new q("ExecSql","CONNECTION_NOT_ESTABLISHED");let d=await mh(()=>u.execute(s,t,{returning:n,sqlLiteOptions:o?.sqlLiteOptions,connection:e.sqlConnection}),e.inputDetails.connectionPolicies?.retry,e.logs);try{let m=Rl(a),c=e.observerChain;if(c&&typeof c.notifyAfter=="function"){let p={...i,duration:m,result:d};await c.notifyAfter(p);}}catch{}return l(Rl(a)),u.extract(d,n)}catch(u){throw l(Rl(a)),u}},Yr=async(s,t,e,r={},n)=>{let o=e.driverAdapter;if(!o)throw new q("ExecSqlStreaming","CONNECTION_NOT_ESTABLISHED");return await o.stream(s,t,{...r,connection:e.sqlConnection??void 0},{onData:n.onData})};async function mh(s,t={maxRetries:0,delay:0},e=false){let r=0,n=t.maxRetries||0,o=t.delay||0;async function i(){try{return s()}catch(a){if(!Object.prototype.hasOwnProperty.call(a,"code")||a.code!=="ECONNREFUSED")throw a;if(r<n)return r++,Zl(`Retrying sql in ${o}ms (attempt ${r}/${n})`,"info",e),await new Promise(l=>setTimeout(l,o)),i();throw a}}return i()}var ne=class extends S{constructor(e,r,n,o){super("select");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="select";this.file="select";this.column=e,this.alias=r,this.sqlFunction=n,this.isRawValue=o??false;}};var Bt=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=Xp(t),this.modelRelationsMap=new Map(this.modelRelations.map(n=>[n.columnName,n]));}getRelationFromModel(t){let e=this.modelRelationsMap.get(t.toString());if(!e)throw new q("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function Zr(s,t,e){return {total:e,perPage:t,currentPage:s,firstPage:1,isEmpty:e===0,lastPage:Math.max(1,Math.ceil(e/t)),hasMorePages:s<Math.max(1,Math.ceil(e/t)),hasPages:e>t}}var Nt=s=>typeof s=="number"?s:parseFloat(s);var Ye=class extends S{constructor(e,r,n=false,o,i,a=false){super("having",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="having";this.file="having";this.column=e,this.chainsWith=`${r} `,this.isNegated=n,this.operator=o,this.value=i;}};var Xr=class extends S{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var en=class extends S{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var We=class extends S{constructor(e,r,n,o="extract",i=false){super("select");this.folder="select";this.file="select_json";this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.column=e,this.jsonPath=r,this.alias=n,this.jsonOperator=o,this.isRawValue=i;}};var le=class extends S{constructor(e,r,n,o="inner",i,a=false,l){super(`${o} join`,a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="join";this.file="join";this.type="inner";this.table=e,this.left=r,this.right=n,this.on=i,this.additionalConditions=l;}};var Qt=class extends S{constructor(e,r=false){super("group by",r);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="group_by";this.file="group_by";this.column=e;}};var tn=class extends S{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var rn=class extends S{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var Kt=class extends S{constructor(e,r="asc",n=false){super("order by",n);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="order_by";this.file="order_by";this.column=e,this.direction=r;}};var on=class on{constructor(t,e){this.model=t,this.sqlDataSource=e,this.groupByNodes=[],this.orderByNodes=[],this.limitNode=null,this.offsetNode=null,this.logs=this.sqlDataSource.logs,typeof t.getColumns=="function"?(this.modelColumns=t.getColumns(),this.modelColumnsMap=t.getColumnsByName?.()??new Map(this.modelColumns.map(r=>[r.columnName,r]))):(this.modelColumns=[],this.modelColumnsMap=on.EMPTY_MAP);}clearGroupBy(){return this.groupByNodes=[],this}clearOrderBy(){return this.orderByNodes=[],this}clearLimit(){return this.limitNode=null,this}clearOffset(){return this.offsetNode=null,this}groupBy(...t){return t.forEach(e=>{this.groupByNodes.push(new Qt(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Qt(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new Kt(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new Kt(t,"asc",true)),this}limit(t){return typeof t!="number"&&g.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new tn(t),this}offset(t){return typeof t!="number"&&g.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new rn(t),this}};on.EMPTY_MAP=new Map;var nn=on;var Ze=class s{constructor(t,e=false){this.sqlDataSource=t;this.isNestedCondition=false;this.whereNodes=[],this.isNestedCondition=e;}getConditions(){return this.whereNodes}where(t,e,r){return typeof t=="function"?this.andWhereGroup(t):this.andWhere(t,e,r)}andWhere(t,e,r){if(typeof t=="function")return this.andWhereGroup(t);let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"and",false,n,o)),this}orWhere(t,e,r){if(typeof t=="function")return this.orWhereGroup(t);let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"or",false,n,o)),this}whereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"and",true,n,o)),this}andWhereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"and",true,n,o)),this}orWhereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"or",true,n,o)),this}whereBetween(t,e,r){return this.andWhereBetween(t,e,r)}andWhereBetween(t,e,r){return this.whereNodes.push(new x(t,"and",false,"between",[e,r])),this}orWhereBetween(t,e,r){return this.whereNodes.push(new x(t,"or",false,"between",[e,r])),this}whereNotBetween(t,e,r){return this.andWhereNotBetween(t,e,r)}andWhereNotBetween(t,e,r){return this.whereNodes.push(new x(t,"and",true,"between",[e,r])),this}orWhereNotBetween(t,e,r){return this.whereNodes.push(new x(t,"or",true,"between",[e,r])),this}whereLike(t,e){return this.andWhereLike(t,e)}andWhereLike(t,e){return this.where(t,"like",e),this}orWhereLike(t,e){return this.orWhere(t,"like",e),this}whereILike(t,e){return this.andWhereILike(t,e)}andWhereILike(t,e){return this.where(t,"ilike",e),this}orWhereILike(t,e){return this.orWhere(t,"ilike",e),this}whereNotLike(t,e){return this.andWhereNotLike(t,e)}andWhereNotLike(t,e){return this.where(t,"not like",e),this}orWhereNotLike(t,e){return this.orWhere(t,"not like",e),this}whereNotILike(t,e){return this.andWhereNotILike(t,e)}andWhereNotILike(t,e){return this.where(t,"not ilike",e),this}orWhereNotILike(t,e){return this.orWhere(t,"not ilike",e),this}whereIn(t,e){return this.andWhereIn(t,e)}andWhereIn(t,e){return e.length?(this.whereNodes.push(new x(t,"and",false,"in",e)),this):(this.whereNodes.push(new x("false","and",true,"=",[],true)),this)}orWhereIn(t,e){return e.length?(this.whereNodes.push(new x(t,"or",false,"in",e)),this):(this.whereNodes.push(new x("false","or",true,"=",[],true)),this)}whereNotIn(t,e){return this.andWhereNotIn(t,e)}andWhereNotIn(t,e){return e.length?(this.whereNodes.push(new x(t,"and",true,"in",e)),this):(this.whereNodes.push(new x("true","and",true,"=",[],true)),this)}orWhereNotIn(t,e){return e.length?(this.whereNodes.push(new x(t,"or",true,"in",e)),this):(this.whereNodes.push(new x("true","or",true,"=",[],true)),this)}whereNull(t){return this.andWhereNull(t)}andWhereNull(t){return this.whereNodes.push(new x(t,"and",false,"is null",void 0)),this}orWhereNull(t){return this.whereNodes.push(new x(t,"or",false,"is null",void 0)),this}whereNotNull(t){return this.andWhereNotNull(t)}andWhereNotNull(t){return this.whereNodes.push(new x(t,"and",false,"is not null",void 0)),this}orWhereNotNull(t){return this.whereNodes.push(new x(t,"or",false,"is not null",void 0)),this}whereRegexp(t,e){return this.andWhereRegexp(t,e)}andWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(t,"and",false,r?"~":"regexp",e.source)),this}orWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(t,"or",false,r?"~":"regexp",e.source)),this}whereNotRegexp(t,e){return this.andWhereNotRegexp(t,e)}andWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(t,"and",true,r?"~":"regexp",e.source)),this}orWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(t,"or",true,r?"~":"regexp",e.source)),this}whereGroup(t){return this.andWhereGroup(t)}andWhereGroup(t){let e=new s(this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new xe(r,"and")),this}orWhereGroup(t){let e=new s(this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new xe(r,"or")),this}whereRaw(t,e){return this.andWhereRaw(t,e)}andWhereRaw(t,e){return this.whereNodes.push(new x(t,"and",true,"=",e??[],true)),this}orWhereRaw(t,e){return this.whereNodes.push(new x(t,"or",true,"=",e??[],true)),this}};var sn=class extends nn{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new le(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new le(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new le(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new le(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new le(t,"","","cross",{operator:"="},true)),this}naturalJoinRaw(t){return this.joinNodes.push(new le(t,"","","natural",{operator:"="},true)),this}innerJoin(t,e,r,n,o){let i=r,a=n,l=typeof n=="function"?n:o;if(!i){if(!this.model.primaryKey)throw new q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");i=`${this.model.table}.${this.model.primaryKey}`;}return this.join(typeof t=="string"?t:t.table,e,i,a,l),this}join(t,e,r,n,o){let i=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!i){if(!this.model.primaryKey)throw new q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");i=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new le(typeof t=="string"?t:t.table,e,i,"inner",{operator:a||"="},false,u)),this}leftJoin(t,e,r,n,o){let i=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!i){if(!this.model.primaryKey)throw new q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");i=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new le(typeof t=="string"?t:t.table,e,i,"left",{operator:a||"="},false,u)),this}rightJoin(t,e,r,n,o){let i=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!i){if(!this.model.primaryKey)throw new q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");i=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new le(typeof t=="string"?t:t.table,e,i,"right",{operator:a||"="},false,u)),this}fullJoin(t,e,r,n,o){let i=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!i){if(!this.model.primaryKey)throw new q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");i=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new le(typeof t=="string"?t:t.table,e,i,"full",{operator:a||"="},false,u)),this}};var an=class extends sn{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.dbType=r.getDbType(),this.fromNode=new U(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return e.forEach(r=>{if(Array.isArray(r)){let[a,l]=r;this.modelSelectedColumns.push(l);let u=this.resolveComputedColumn(a);if(u){this.selectNodes.push(new ne(`(${u.expression}) as ${l}`,void 0,void 0,true));return}let d=H(a,this.model.databaseCaseConvention);this.selectNodes.push(new ne(d,l));return}let n=r;this.modelSelectedColumns.push(n);let o=this.resolveComputedColumn(n);if(o){this.selectNodes.push(new ne(`(${o.expression}) as ${o.alias}`,void 0,void 0,true));return}let i=H(n,this.model.databaseCaseConvention);this.selectNodes.push(new ne(i));}),this}selectRaw(e){return this.selectNodes.push(new ne(e,void 0,void 0,true)),this}selectFunc(e,r,n){return this.selectNodes.push(new ne(r,n,e)),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}resolveComputedColumn(e){let r=this.model.getColumnsByName?.();if(!r||r.size===0)return;let n=e.includes(".")?e.split(".").pop():e,o=r.get(n);if(o?.expression)return {expression:o.expression,alias:o.databaseName||n}}clearFrom(){return this.fromNode=new U(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new U(e),this}distinct(){return this.distinctNode=new Xr,this}distinctOn(...e){return this.distinctOnNode=new en(e),this}selectJson(e,r,n){return this.selectNodes.push(new We(e,r,n,"extract")),this}selectJsonText(e,r,n){return this.selectNodes.push(new We(e,r,n,"extract_text")),this}selectJsonArrayLength(e,r,n){return this.selectNodes.push(new We(e,r,n,"array_length")),this}selectJsonKeys(e,r,n){return this.selectNodes.push(new We(e,r,n,"object_keys")),this}selectJsonRaw(e,r){return this.selectNodes.push(new We(e,"",r,"raw",true)),this}};var ln=class extends an{constructor(e,r,n=false){super(e,r);this.isNestedCondition=false;this.whereNodes=[],this.havingNodes=[],this.isNestedCondition=n;}clearWhere(){return this.whereNodes=[],this}clearHaving(){return this.havingNodes=[],this}strictWhen(e,r){return e==null?this:(r(this),this)}when(e,r){return e?(r(this),this):this}where(e,r,n){return typeof e=="function"?this.andWhereGroup(e):typeof r=="function"&&n===void 0?this.andWhereSubQuery(e,"in",r):r instanceof B&&n===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function")?this.andWhereSubQuery(e,r,n):this.andWhere(e,r,n)}andWhere(e,r,n){if(typeof e=="function")return this.andWhereGroup(e);if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",i;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,i=n):(i=r,o="="),this.whereNodes.push(new x(e,"and",false,o,i)),this}orWhere(e,r,n){if(typeof e=="function")return this.orWhereGroup(e);if(typeof r=="function"&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(r instanceof B&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",i;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,i=n):(i=r,o="="),this.whereNodes.push(new x(e,"or",false,o,i)),this}whereColumn(e,r,n){return this.andWhereColumn(e,r,n)}andWhereColumn(e,r,n){let o="=",i;return n!==void 0?(o=r,i=n):i=r,this.whereNodes.push(new x(e,"and",false,o,new A(i))),this}orWhereColumn(e,r,n){let o="=",i;return n!==void 0?(o=r,i=n):i=r,this.whereNodes.push(new x(e,"or",false,o,new A(i))),this}whereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",i;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,i=n):(i=r,o="="),this.whereNodes.push(new x(e,"and",true,o,i)),this}andWhereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",i;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,i=n):(i=r,o="="),this.whereNodes.push(new x(e,"and",true,o,i)),this}orWhereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",i;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,i=n):(i=r,o="="),this.whereNodes.push(new x(e,"or",true,o,i)),this}whereBetween(e,r,n){return this.andWhereBetween(e,r,n)}andWhereBetween(e,r,n){return this.whereNodes.push(new x(e,"and",false,"between",[r,n])),this}orWhereBetween(e,r,n){return this.whereNodes.push(new x(e,"or",false,"between",[r,n])),this}whereNotBetween(e,r,n){return this.andWhereNotBetween(e,r,n)}andWhereNotBetween(e,r,n){return this.whereNodes.push(new x(e,"and",true,"between",[r,n])),this}orWhereNotBetween(e,r,n){return this.whereNodes.push(new x(e,"or",true,"between",[r,n])),this}whereLike(e,r){return this.andWhereLike(e,r)}andWhereLike(e,r){return this.where(e,"like",r),this}orWhereLike(e,r){return this.orWhere(e,"like",r),this}whereILike(e,r){return this.andWhereILike(e,r)}andWhereILike(e,r){return this.where(e,"ilike",r),this}orWhereILike(e,r){return this.orWhere(e,"ilike",r),this}whereNotLike(e,r){return this.andWhereNotLike(e,r)}andWhereNotLike(e,r){return this.where(e,"not like",r),this}orWhereNotLike(e,r){return this.orWhere(e,"not like",r),this}whereNotILike(e,r){return this.andWhereNotILike(e,r)}andWhereNotILike(e,r){return this.where(e,"not ilike",r),this}orWhereNotILike(e,r){return this.orWhere(e,"not ilike",r),this}whereIn(e,r){return this.andWhereIn(e,r)}andWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new x(e,"and",false,"in",r)),this):(this.whereNodes.push(new x("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new x(e,"or",false,"in",r)),this):(this.whereNodes.push(new x("false","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"in",r)}whereNotIn(e,r){return this.andWhereNotIn(e,r)}andWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new x(e,"and",true,"in",r)),this):(this.whereNodes.push(new x("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new x(e,"or",true,"in",r)),this):(this.whereNodes.push(new x("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new x(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new x(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new x(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new x(e,"or",false,"is not null",void 0)),this}whereRegexp(e,r){return this.andWhereRegexp(e,r)}andWhereRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(e,"and",false,n?"~":"regexp",r.source)),this}orWhereRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(e,"or",false,n?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new x(e,"and",true,n?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new x(e,"and",true,n?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new x(e,"or",true,n?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ne("","exists",r.extractQueryNodes(),"and")),this}orWhereExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ne("","exists",r.extractQueryNodes(),"or")),this}whereNotExists(e){return this.andWhereNotExists(e)}andWhereNotExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ne("","not exists",r.extractQueryNodes(),"and")),this}orWhereNotExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ne("","not exists",r.extractQueryNodes(),"or")),this}whereRaw(e,r=[]){return this.andWhereRaw(e,r)}andWhereRaw(e,r=[]){return this.whereNodes.push(new x(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new x(e,"or",false,"=",r,true)),this}having(e,r,n){return this.andHaving(e,r,n)}andHaving(e,r,n){let o="=",i;return typeof r=="string"&&n?(o=r,i=n):(i=r,o="="),this.havingNodes.push(new Ye(e,"and",false,o,i)),this}orHaving(e,r,n){let o="=",i;return typeof r=="string"&&n?(o=r,i=n):(i=r,o="="),this.havingNodes.push(new Ye(e,"or",false,o,i)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Ye(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Ye(e,"or",false,"=",[],true)),this}buildSubQuery(e){if(e instanceof B)return e;let r=new B(this.model,this.sqlDataSource),n=e(r);return n!=null&&"extractQueryNodes"in n?n:r}andWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new Ne(e,r,o.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new Ne(e,r,o.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new B(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new xe(r.whereNodes,"and");return this.whereNodes.push(n),this}orWhereGroup(e){let r=new B(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new xe(r.whereNodes,"or");return this.whereNodes.push(n),this}};var un=class extends ln{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new ae(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new ae(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new ae(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new ae(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new ae(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new ae(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new ae(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new ae(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new ae(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new ae(t,"or",false,"raw",e)),this}};var B=class s extends un{constructor(e,r){super(e,r);this.isNestedCondition=false;this._interpreterUtils=null;this.insertNode=null;this.onDuplicateNode=null;this.updateNode=null;this.deleteNode=null;this.returningNode=null;this.truncateNode=null;this.replicationMode=null;this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.astParser=new b(this.model,this.dbType);}get interpreterUtils(){return this._interpreterUtils||(this._interpreterUtils=new y(this.model)),this._interpreterUtils}setReplicationMode(e){return this.replicationMode=e,this}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof s)&&typeof e[1]=="string"){let[r,n]=e;if(typeof r=="function"){let o=new s(this.model,this.sqlDataSource),i=r(o),a=i!=null&&"extractQueryNodes"in i?i:o;return this.selectNodes.push(new ne(a.extractQueryNodes(),n)),this}return this.selectNodes.push(new ne(r.extractQueryNodes(),n)),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}clearSelect(){return super.clearSelect(),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}async exists(){return !!await this.one()}async many(){let{sql:e,bindings:r}=this.unWrap();return this.execSqlWithSlaveHandling("read",n=>J(e,r,n,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}))}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async pluck(e){return (await this.many()).map(n=>n[e])}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async oneOrFail(){let e=await this.one();if(!e)throw new q("SqlDataSource::query::oneOrFail","ROW_NOT_FOUND");return e}async stream(e={}){let{sql:r,bindings:n}=this.unWrap();return this.execSqlWithSlaveHandling("read",async o=>await Yr(r,n,o,e,{onData:(a,l)=>{a.write(l);}}))}async*chunk(e){let r=0;for(;;){let n=await this.limit(e).offset(r).many();if(!n.length)break;r+=n.length,yield n;}}async paginateWithCursor(e,r){if(!this.orderByNodes.length)throw new q(this.model.name+"::paginateWithCursor","ORDER_BY_REQUIRED");let n=this.orderByNodes;if(n.some(c=>c.isRawValue))throw new q(this.model.name+"::paginateWithCursor","ORDER_BY_RAW_NOT_SUPPORTED");let o=n.map(c=>c.column),i=n[0].direction==="desc"?"<":">";if(r){let c=Array.isArray(r.value)?r.value:[r.value];this.andWhere(p=>{for(let h=0;h<o.length;h++){let f=h;p.orWhere(T=>{for(let N=0;N<f;N++)T.where(o[N],"=",c[N]);T.where(o[f],i,c[f]);});}});}this.limit(e+1);let a=await this.many(),l=a.length>e,u=l?a.slice(0,e):a,d=u[u.length-1],m=o.map(c=>c.includes(".")?c.slice(c.lastIndexOf(".")+1):c);return {data:u,hasMore:l,nextCursor:d?{key:m.length===1?m[0]:m,value:m.length===1?d[m[0]]:m.map(c=>d[c])}:null}}lockForUpdate(e={}){return this.lockQueryNodes.push(new vt("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new vt("for_share",e.skipLocked,e.noWait)),this}union(e){if(typeof e=="string")return this.unionNodes.push(new He(e)),this;let n=(e instanceof s?e:e(new s(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new He(n)),this}unionAll(e){if(typeof e=="string")return this.unionNodes.push(new He(e,true)),this;let n=(e instanceof s?e:e(new s(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new He(n,true)),this}increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?Nt(r.total):0}needsDerivedTableCount(){return this.groupByNodes.length>0||this.havingNodes.length>0||this.distinctNode!==null||this.distinctOnNode!==null}buildCountQuery(e="*"){if(!this.needsDerivedTableCount()){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);return}this.clearOrderBy(),this.clearLimit(),this.clearOffset();let r=this.extractQueryNodes();this.withNodes=[],this.distinctNode=null,this.distinctOnNode=null,this.clearSelect(),this.fromNode=new U(r,"g"),this.joinNodes=[],this.whereNodes=[],this.groupByNodes=[],this.havingNodes=[],this.lockQueryNodes=[],this.unionNodes=[],this.selectRaw(`count(${e}) as total`);}async getMax(e){this.clearForFunctions(),this.selectRaw(`max(${e}) as total`);let r=await this.one();return r?Nt(r.total):0}async getMin(e){this.clearForFunctions(),this.selectRaw(`min(${e}) as total`);let r=await this.one();return r?Nt(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectRaw(`avg(${e}) as total`);let r=await this.one();return r?Nt(r.total):0}async getSum(e){this.clearForFunctions(),this.selectRaw(`sum(${e}) as total`);let r=await this.one();return r?Nt(r.total):0}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&g.warn(`${this.model.name}::paginate Non numeric values provided to \`paginate\``);let n=this.clone(),o=this.limit(r).offset((e-1)*r),[i,a]=await this.executePaginateQueries(()=>o.many(),()=>n.getCount("*"));return {paginationMetadata:Zr(e,r,a),data:i}}table(e,r){if(typeof e=="function"){if(!r)throw new q("QueryBuilder::table","MISSING_ALIAS_FOR_SUBQUERY");let n=new s(this.model,this.sqlDataSource),o=e(n),a=(o!=null&&"extractQueryNodes"in o?o:n).extractQueryNodes();return this.fromNode=new U(a,r),this}return this.fromNode=new U(e,r),this}with(e,r){let n=new s(this.model,this.sqlDataSource),o=r(n),i=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new bt("normal",e,i.extractQueryNodes())),this}withRecursive(e,r){let n=new s(this.model,this.sqlDataSource),o=r(n),i=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new bt("recursive",e,i.extractQueryNodes())),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new q("QueryBuilder::withMaterialized","MATERIALIZED_CTE_NOT_SUPPORTED",new Error("MATERIALIZED CTE is only supported by postgres"));let n=new s(this.model,this.sqlDataSource),o=r(n),i=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new bt("materialized",e,i.extractQueryNodes())),this}insert(e,r){let n=Object.fromEntries(Object.keys(e).map(i=>[i,e[i]])),o=!r||r.length===0;return this.insertNode=new ee(this.fromNode,[this.interpreterUtils.stripComputedFromData(n)],r,o),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:i,values:a}=this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert",this.dbType),l=Object.fromEntries(i.map((p,h)=>[p,a[h]]));this.insertNode=new ee(this.fromNode,[l],r,o);let{sql:u,bindings:d}=this.astParser.parse([this.insertNode]),m=await this.getSqlDataSource("write"),c=await J(u,d,m,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[e]}});if(!o)return Array.isArray(c)&&c.length?c[0]:c})}insertMany(e,r){let n=e.map(i=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(i).map(a=>[a,i[a]])))),o=!r||r.length===0;return this.insertNode=new ee(this.fromNode,n,r,o),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{if(!e.length)return o?void 0:[];let i=await Promise.all(e.map(async m=>{let{columns:c,values:p}=this.interpreterUtils.prepareColumns(Object.keys(m),Object.values(m),"insert",this.dbType);return Object.fromEntries(c.map((h,f)=>[h,p[f]]))}));this.insertNode=new ee(this.fromNode,i,r,o);let{sql:a,bindings:l}=this.astParser.parse([this.insertNode]),u=await this.getSqlDataSource("write"),d=await J(a,l,u,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:i}});if(!o)return d})}upsert(e,r,n={updateOnConflict:true}){let o=this.interpreterUtils.filterComputedColumns(Object.keys(e)),i=Object.keys(r),a=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(e).map(l=>[l,e[l]])));return this.insertNode=new ee(new U(this.model.table),[a],void 0,true),this.onDuplicateNode=new Se(this.model.table,i,o,n.updateOnConflict??true?"update":"ignore",n.returning),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:u}=this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert",this.dbType),d=Object.fromEntries(l.map((f,T)=>[f,u[T]]));if(this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw([d],i,o,n,[e]);let{sql:m,bindings:c}=this.astParser.parse([new ee(new U(this.model.table),[d],void 0,true),new Se(this.model.table,i,o,n.updateOnConflict??true?"update":"ignore",n.returning)]),p=await this.getSqlDataSource("write"),h=await J(m,c,p,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:[e]}});return Array.isArray(h)?h:[h]})}upsertMany(e,r,n,o={updateOnConflict:true}){let i=this.interpreterUtils.filterComputedColumns(r),a=n.map(l=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(l).map(u=>[u,l[u]]))));return this.insertNode=new ee(new U(this.model.table),a,void 0,true),this.onDuplicateNode=new Se(this.model.table,e,i,o.updateOnConflict??true?"update":"ignore",o.returning),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let l=[];if(await Promise.all(n.map(async p=>{let{columns:h,values:f}=this.interpreterUtils.prepareColumns(Object.keys(p),Object.values(p),"insert",this.dbType),T=Object.fromEntries(h.map((N,w)=>[N,f[w]]));l.push(T);})),this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw(l,e,i,o,n);let{sql:u,bindings:d}=this.astParser.parse([new ee(new U(this.model.table),l,void 0,true),new Se(this.model.table,e,i,o.updateOnConflict??true?"update":"ignore",o.returning)]),m=await this.getSqlDataSource("write"),c=await J(u,d,m,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:n}});return Array.isArray(c)?c:[c]})}async executeMssqlMergeRaw(e,r,n,o,i){if(!e.length)return [];let a=Object.keys(e[0]),l=this.interpreterUtils.formatStringColumn("mssql",this.model.table),u=Q=>this.interpreterUtils.formatStringColumn("mssql",Q),d=[],m=e.map(Q=>`select ${a.map($=>(d.push(Q[$]),`@${d.length}`)).join(", ")}`),c=a.map(u).join(", "),p=m.join(" union all "),h=r.map(Q=>`target.${u(Q)} = source.${u(Q)}`).join(" and "),f=n.filter(Q=>!r.includes(Q)).map(Q=>`target.${u(Q)} = source.${u(Q)}`).join(", "),T=a.map(u).join(", "),N=a.map(Q=>`source.${u(Q)}`).join(", "),w=o.returning&&o.returning.length?o.returning.map(Q=>`inserted.${u(Q)}`).join(", "):a.map(Q=>`inserted.${u(Q)}`).join(", "),_=(o.updateOnConflict??true)&&f?`when matched then update set ${f}`:"",E=`merge into ${l} as target using (${p}) as source (${c}) on ${h} ${_} when not matched then insert (${T}) values (${N}) output ${w};`,O=await this.getSqlDataSource("write"),D=await J(E,d,O,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:i}});return Array.isArray(D)?D:[D]}update(e,r){let n=this.interpreterUtils.stripComputedFromData(e),o=Object.keys(n),i=Object.values(n);this.updateNode=new $e(this.fromNode,o,i),this.returningNode=this.buildReturningNode("update",r);let a=this.returningNode!==null;return new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:u}=this.interpreterUtils.prepareColumns(o,i,"update",this.dbType);this.updateNode=new $e(this.fromNode,l,u);let{sql:d,bindings:m}=this.astParser.parse(this.withReturningNode([this.updateNode,...this.whereNodes,...this.joinNodes])),c=await this.getSqlDataSource("write");return J(d,m,c,this.dbType,a?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:a?"fetch":"affectedRows"}})})}buildReturningNode(e,r){return !r?.length||!this.interpreterUtils.dialectEmitsReturning(this.dbType)?null:new St(r,e==="delete"?"deleted":"inserted")}withReturningNode(e){if(!this.returningNode)return e;if(this.dbType==="mssql"){let[r,...n]=e;return [r,this.returningNode,...n]}return [...e,this.returningNode]}truncate(){return this.truncateNode=new ht(this.fromNode),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:e,bindings:r}=this.astParser.parse([this.truncateNode]),n=await this.getSqlDataSource("write");await J(e,r,n,this.dbType,"rows");})}delete(e){this.deleteNode=new wt(this.fromNode),this.returningNode=this.buildReturningNode("delete",e);let r=this.returningNode!==null;return new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:n,bindings:o}=this.astParser.parse(this.withReturningNode([this.deleteNode,...this.whereNodes,...this.joinNodes])),i=await this.getSqlDataSource("write");return J(n,o,i,this.dbType,r?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:r?"fetch":"affectedRows"}})})}softDelete(e={}){let{column:r="deletedAt",value:n=Tt()}=e||{};return this.updateNode=new $e(this.fromNode,[r],[n]),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:o,values:i}=this.interpreterUtils.prepareColumns([r],[n],"update",this.dbType);this.updateNode=new $e(this.fromNode,o,i);let{sql:a,bindings:l}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),u=await this.getSqlDataSource("write");return J(a,l,u,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return tt(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),n=nt(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${n}`:n,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new ne("*")]);let{sql:e,bindings:r}=this.astParser.parse(this.extractQueryNodes());return {sql:this.withQuery?`${this.withQuery} ${e}`:e,bindings:[...r||[]]}}clone(){let e=new s(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=j(this.modelSelectedColumns),e.distinctNode=j(this.distinctNode),e.distinctOnNode=j(this.distinctOnNode),e.selectNodes=j(this.selectNodes),e.withQuery=j(this.withQuery),e.joinNodes=j(this.joinNodes),e.whereNodes=j(this.whereNodes),e.groupByNodes=j(this.groupByNodes),e.havingNodes=j(this.havingNodes),e.orderByNodes=j(this.orderByNodes),e.lockQueryNodes=j(this.lockQueryNodes),e.unionNodes=j(this.unionNodes),e.withNodes=j(this.withNodes),e.fromNode=j(this.fromNode),e.limitNode=j(this.limitNode),e.offsetNode=j(this.offsetNode),e.returningNode=j(this.returningNode),e.isNestedCondition=this.isNestedCondition,e}clear(){let e=new s(this.model,this.sqlDataSource);return this.fromNode.alias&&e.table(e.model.table,this.fromNode.alias),e}clearLockQuery(){return this.lockQueryNodes=[],this}clearUnionQuery(){return this.unionNodes=[],this}clearWithQuery(){return this.withNodes=[],this}extractQueryNodes(){return this.selectNodes.length||(this.selectNodes=[new ne("*")]),this.insertNode?[this.insertNode,this.onDuplicateNode].filter(Boolean):this.updateNode?this.withReturningNode([this.updateNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode]).filter(Boolean):this.deleteNode?this.withReturningNode([this.deleteNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode]).filter(Boolean):this.truncateNode?[this.truncateNode]:[...this.withNodes,this.distinctNode,this.distinctOnNode,...this.selectNodes,this.fromNode,...this.joinNodes,...this.whereNodes,...this.groupByNodes,...this.havingNodes,...this.orderByNodes,this.limitNode,this.offsetNode,...this.lockQueryNodes,...this.unionNodes].filter(Boolean)}clearForFunctions(){return this.clearSelect(),this.clearGroupBy(),this.clearOrderBy(),this.clearLimit(),this.clearOffset(),this}isMssqlTransaction(){return this.sqlDataSource.type==="mssql"&&!!this.sqlDataSource.sqlConnection}async executePaginateQueries(e,r){if(this.isMssqlTransaction()){let n=await e(),o=await r();return [n,o]}return Promise.all([e(),r()])}async getSqlDataSource(e){return this.replicationMode?this.replicationMode==="master"?this.sqlDataSource:e==="write"?this.sqlDataSource:this.sqlDataSource.getSlave()||this.sqlDataSource:e==="read"?this.sqlDataSource.getSlave()||this.sqlDataSource:this.sqlDataSource}async execSqlWithSlaveHandling(e,r){let n=await this.getSqlDataSource(e);if(!(n!==this.sqlDataSource))return r(n);try{return await r(n)}catch(i){let a=i instanceof Error?i:new Error(String(i)),l=this.sqlDataSource.getOnSlaveServerFailure();if(l)return await l(a,{host:n.host,port:n.port,username:n.username,password:n.password,database:n.database,type:n.getDbType()}),await r(this.sqlDataSource);throw a}}};function af(s,t){return t.strategy&&t.strategy!=="auto"?t.strategy:ph(s)}function ph(s){let{parentCount:t,relationType:e,hasLimitOffset:r}=s;return r&&(e==="hasMany"||e==="manyToMany")?"batched":t===1?"join":e==="manyToMany"?typeof t=="number"&&t<=10?"join":"batched":typeof t=="number"&&t<10?"join":"batched"}var Ml=re(),Xe=class s extends B{constructor(e,r){super(e,r);this.loadOptions={strategy:"auto"};this.sqlModelManagerUtils=new Bt(e,this.dbType,r),this.relationQueryBuilders=[],this.modelSelectedColumns=[],this.modelColumnsMap=this.model.getColumnsByDatabaseName(),this.modelColumnsDatabaseNames=new Map;for(let[n,o]of this.modelColumnsMap)this.modelColumnsDatabaseNames.set(n,o.columnName);}expandModelSelectColumns(){let e=this.selectNodes;if(!e.length){if(this.joinNodes.length)return;for(let[,r]of this.modelColumnsMap)r.expression||e.push(new ne(r.databaseName,r.columnName));return}for(let r of e){if(r.isRawValue||r.alias!==void 0||typeof r.column!="string"||r.column.includes(".")||r.column==="*")continue;let n=this.modelColumnsMap.get(r.column);!n||n.expression||(r.alias=n.columnName);}}get isRelationQueryBuilder(){return !!this.relation}static from(e,r={}){if(r.connection)return new s(e,r.connection);if(r.trx)return new s(e,r.trx.sql);throw new Error("ModelQueryBuilder::from - A connection or transaction is required. Use sql.from(Model) instead.")}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async oneOrFail(e){let r=await this.one();if(!r)throw new q(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return r}async many(){await this.model.beforeFetch?.(this),this.expandModelSelectColumns();let r=await super.many();if(!r.length)return [];let n=pe(r,this.model,this.modelSelectedColumns);if(!n)return [];let o=Array.isArray(n)?n:[n];return this.relationQueryBuilders.length&&await this.processRelationsWithStrategy(o),o}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async*chunk(e){let r=0;for(;;){let n=await this.limit(e).offset(r).many();if(!n.length)break;yield n,r+=n.length;}}async stream(e={}){await this.model.beforeFetch?.(this),this.expandModelSelectColumns();let{sql:r,bindings:n}=this.unWrap(),o=await this.getSqlDataSource("read");return await Yr(r,n,o,e,{onData:async(a,l)=>{let u=pe([l],this.model,this.modelSelectedColumns);u&&(this.relationQueryBuilders.length&&await this.processRelationsRecursively([u]),a.write(u));}})}async paginateWithCursor(e,r){return super.paginateWithCursor(e,r)}insert(e,r={}){return this.getModelManager(r.trx).insert(e,{returning:r.returning})}insertMany(e,r={}){return this.getModelManager(r.trx).insertMany(e,{returning:r.returning})}upsert(e,r,n={updateOnConflict:true}){let o=this.getModelManager(n.trx),i=Object.keys(e),a=Object.keys(r),l={...e,...r};return o.upsertMany(i,a,[l],{updateOnConflict:n.updateOnConflict??true,returning:n.returning}).then(u=>Array.isArray(u)?u[0]:u)}upsertMany(e,r,n={updateOnConflict:true}){let o=this.getModelManager(n.trx),i=r.length>0?Object.keys(r[0]):[];return o.upsertMany(e,i,r,{updateOnConflict:n.updateOnConflict??true,returning:n.returning})}getModelManager(e){let r=e?e.sql:this.sqlDataSource.getTransactionBoundSqlDataSource()??this.sqlDataSource;return new et(this.model,r)}async find(e){return this.getModelManager().find(e)}async findOne(e){return this.getModelManager().findOne(e)}async findOneOrFail(e){return this.getModelManager().findOneOrFail(e)}async findOneByPrimaryKey(e,r){return this.getModelManager().findOneByPrimaryKey(e,r)}async updateRecord(e,r,n){return this.getModelManager(n?.trx).updateRecord(e,r,n)}async deleteRecord(e,r){return this.getModelManager(r?.trx).deleteRecord(e)}async save(e,r){let n=this.model.primaryKey;if(!n)throw new q(this.model.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");let o=e[n],i=o?{[n]:o}:{};return this.upsert(i,e,{updateOnConflict:true,returning:r?.returning,trx:r?.trx})}async softDeleteRecord(e,r,n){let{column:o=this.model.softDeleteColumn,value:i=this.model.softDeleteValue}=r||{},a={[o]:i};return this.getModelManager(n?.trx).updateRecord(e,a,{returning:n?.returning})}async firstOrInsert(e,r,n){let o=this.getModelManager(n?.trx),i=await o.findOne({where:e});if(i)return i;let a={...e,...r};return o.insert(a,{returning:["*"]})}async refresh(e){return this.getModelManager().findOneByPrimaryKey(e)}async sync(e,r,n,o,i={}){if(Array.isArray(n)||(n=[n]),!n.length)return;let a=this.sqlModelManagerUtils.getRelationFromModel(e);if(a.type!=="manyToMany")throw new q(`${this.model.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let l=H(a.leftForeignKey,i.caseConvention||this.model.databaseCaseConvention),u=H(a.rightForeignKey,i.caseConvention||this.model.databaseCaseConvention),d=n.map((p,h)=>({[l]:r[this.model.primaryKey],[u]:p[a.model.primaryKey],...o?o(p,h):{}}));class m extends _e{static get table(){return a.throughModel}}m.databaseCaseConvention="preserve",m.modelCaseConvention="preserve",await new et(m,i.trx?i.trx.sql:this.sqlDataSource).insertMany(d);}truncate(){return super.truncate()}update(e,r={}){let n=r.returning,o=super.update(e,n);return new G(()=>o.unWrap(),()=>o.toSql(),()=>o.toQuery(),async()=>{if(!n||!this.returningNode)return o;let i=await o;return pe(i,this.model,n)})}softDelete(e={}){let r=super.softDelete(e);return new G(()=>r.unWrap(),()=>r.toSql(),()=>r.toQuery(),async()=>r)}delete(e={}){let r=e.returning,n=super.delete(r);return new G(()=>n.unWrap(),()=>n.toSql(),()=>n.toQuery(),async()=>{if(!r||!this.returningNode)return n;let o=await n;return pe(o,this.model,r)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?+r.total:0}async getMax(e){this.clearForFunctions(),this.selectRaw(`max(${e}) as total`);let r=await this.one();return r?+r.total:0}async getMin(e){this.clearForFunctions(),this.selectRaw(`min(${e}) as total`);let r=await this.one();return r?+r.total:0}async getAvg(e){this.clearForFunctions(),this.selectRaw(`avg(${e}) as total`);let r=await this.one();return r?+r.total:0}async getSum(e){this.clearForFunctions(),this.selectRaw(`sum(${e}) as total`);let r=await this.one();return r?+r.total:0}async paginate(e,r){let n=this.clone(),o=this.limit(r).offset((e-1)*r),[i,a]=await this.executePaginateQueries(()=>o.many(),()=>n.getCount("*"));return {paginationMetadata:Zr(e,r,a),data:i}}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof B)&&typeof e[1]=="string"){let[r,n]=e;return super.select(r,n),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}load(e,r,n){let o,i={strategy:"auto"};typeof r=="function"?(o=r,n&&(i=n)):r&&typeof r=="object"&&(i=r);let a=this.sqlModelManagerUtils.getRelationFromModel(e),l=new s(a.model,this.sqlDataSource);return l.relation=a,l.loadOptions=i,o?.(l),this.relationQueryBuilders.push(l),this}clearRelations(){return this.relationQueryBuilders=[],this}havingRelated(e,r,n){return this.andHavingRelated(e,r,n)}andHavingRelated(e,r,n){let o,i,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(i=r,o=n):r!==void 0&&(o=r,i="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new s(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,i,o),this.whereExists(d),this}orHavingRelated(e,r,n){let o,i,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(i=r,o=n):r!==void 0&&(o=r,i="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new s(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,i,o),this.orWhereExists(d),this}notHavingRelated(e,r,n){return this.andNotHavingRelated(e,r,n)}andNotHavingRelated(e,r,n){let o,i,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(i=r,o=n):r!==void 0&&(o=r,i="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new s(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,i,o),this.whereNotExists(d),this}orNotHavingRelated(e,r,n){let o,i,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(i=r,o=n):r!==void 0&&(o=r,i="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new s(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,i,o),this.orWhereNotExists(d),this}clone(){let e=super.clone();return e.relationQueryBuilders=j(this.relationQueryBuilders),e}async processRelationsRecursively(e){await Promise.all(this.relationQueryBuilders.filter(r=>r.isRelationQueryBuilder).map(async r=>{let n=await this.getRelatedModelsForRelation(r,r.relation,e);this.mapRelatedModelsToModels(r.relation,e,n);}));}async processRelationsWithStrategy(e){let r=e.length,n=this.relationQueryBuilders.filter(i=>i.isRelationQueryBuilder),o=async i=>{let a=af({parentCount:r,relationType:i.relation.type,hasLimitOffset:!!i.limitNode||!!i.offsetNode,hasOrderBy:i.orderByNodes.length>0},i.loadOptions),l=i.relationQueryBuilders.length>0;a==="join"&&!l?await this.loadRelationViaJoin(i,e):await this.loadRelationViaBatch(i,e);};if(this.dbType==="mssql"){for(let i of n)await o(i);return}await Promise.all(n.map(o));}async loadRelationViaJoin(e,r){let n=e.relation,o=e.loadOptions.joinSeparator||"__",a=await this.buildJoinQuery(e,n,o).many();this.mapJoinedResultsToModels(a,r,n,o);}buildJoinQuery(e,r,n){let o=new s(this.model,this.sqlDataSource);if(this.modelSelectedColumns.length>0)for(let i of this.selectNodes)o.selectNodes.push(j(i));else for(let[i,a]of this.model.getColumnsByDatabaseName())a.expression||o.selectRaw(`${this.model.table}.${i}`);for(let i of this.whereNodes){let a=j(i);this.qualifyWhereNodeColumns(a,this.model.table),o.whereNodes.push(a);}for(let i of this.groupByNodes)o.groupByNodes.push(j(i));for(let i of this.orderByNodes)o.orderByNodes.push(j(i));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(o.limitNode=j(this.limitNode)),this.offsetNode&&(o.offsetNode=j(this.offsetNode))),r.type){case "hasOne":case "hasMany":o.leftJoin(r.model.table,`${this.model.table}.${this.model.primaryKey}`,`${r.model.table}.${r.foreignKey}`);break;case "belongsTo":o.leftJoin(r.model.table,`${this.model.table}.${r.foreignKey}`,`${r.model.table}.${r.model.primaryKey}`);break;case "manyToMany":{let i=r;o.leftJoin(i.throughModel,`${this.model.table}.${this.model.primaryKey}`,`${i.throughModel}.${i.leftForeignKey}`),o.leftJoin(i.model.table,`${i.throughModel}.${i.rightForeignKey}`,`${i.model.table}.${i.model.primaryKey}`);break}}this.selectRelationColumnsWithAlias(o,r,e,n);for(let i of e.whereNodes)o.whereNodes.push(j(i));for(let i of e.orderByNodes)o.orderByNodes.push(j(i));return o}selectRelationColumnsWithAlias(e,r,n,o){let i=r.columnName,a=r.model,l=a.getColumnsByName(),u=a.getColumnsByDatabaseName(),d=n.selectNodes.filter(c=>typeof c.column=="string"),m=d.some(c=>c.column==="*"||c.column.endsWith(".*"));if(d.length===0||m)for(let[c,p]of u)e.selectRaw(`${a.table}.${c} as ${i}${o}${p.columnName}`);else for(let c of d){let p=c.column,h=p.includes(".")?p.split(".").pop():p,f=u.get(h)||l.get(h),T=f?.databaseName??h,N=c.alias??f?.columnName??h;e.selectRaw(`${a.table}.${T} as ${i}${o}${N}`);}}mapJoinedResultsToModels(e,r,n,o){let{columnName:i,type:a}=n,l=n.model.getColumnsByName();if(a==="hasMany"||a==="manyToMany"){let u=new Map;e.forEach(d=>{let m=d[this.model.primaryKey];u.has(m)||u.set(m,[]);let c=this.extractRelationDataFromRow(d,i,o);c&&(this.serializeRelationData(c,l),u.get(m).push(c));}),r.forEach(d=>{let m=d[this.model.primaryKey];d[i]=u.get(m)||[];});}else {let u=new Map;e.forEach(d=>{let m=d[this.model.primaryKey];if(!u.has(m)){let c=this.extractRelationDataFromRow(d,i,o);c&&(this.serializeRelationData(c,l),u.set(m,c));}}),r.forEach(d=>{let m=d[this.model.primaryKey];d[i]=u.get(m)||null;});}}extractRelationDataFromRow(e,r,n){let o=`${r}${n}`,i={},a=false,l=false;for(let u of Object.keys(e))if(u.startsWith(o)){let d=u.substring(o.length);i[d]=e[u],a=true,e[u]!==null&&e[u]!==void 0&&(l=true);}return a&&l?i:null}qualifyWhereNodeColumns(e,r){if(e instanceof x)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof Ne)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof xe)for(let n of e.nodes)this.qualifyWhereNodeColumns(n,r);}serializeRelationData(e,r){for(let n of Object.keys(e)){let o=r.get(n);o?.serialize&&e[n]!==null&&e[n]!==void 0&&(e[n]=o.serialize(e[n]));}}async loadRelationViaBatch(e,r){let n=await this.getRelatedModelsForRelation(e,e.relation,r);this.mapRelatedModelsToModels(e.relation,r,n);}mapRelatedModelsToModels(e,r,n){switch(e.type){case "hasOne":if(!this.model.primaryKey)throw new q(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let o=new Map;n.forEach(c=>{let p=c[e.foreignKey];p&&o.set(String(p),c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=null;return}let h=o.get(String(p));c[e.columnName]=h||null;});break;case "belongsTo":let i=new Map;n.forEach(c=>{if(!e.model.primaryKey)throw new q(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let p=c[e.model.primaryKey];p&&i.set(String(p),c);}),r.forEach(c=>{let p=c[e.foreignKey];if(!p){c[e.columnName]=null;return}let h=i.get(String(p));c[e.columnName]=h||null;});break;case "hasMany":if(!this.model.primaryKey)throw new q(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;n.forEach(c=>{let p=c[e.foreignKey];if(!p)return;let h=String(p);a.has(h)||a.set(h,[]),a.get(h).push(c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=[];return}let h=a.get(String(p))||[];c[e.columnName]=h;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new q(this.model.name+"::mapRelatedModelsToModels::manyToMany","MODEL_HAS_NO_PRIMARY_KEY");let l=e,u=new Map,d=l.leftForeignKey,m=this.modelColumnsMap.get(d)||this.modelColumnsDatabaseNames.get(d)||H(d,this.model.modelCaseConvention);n.forEach(c=>{let p=c[m];if(p==null)return;let h=String(p);u.has(h)||u.set(h,[]),delete c[m],u.get(h).push(c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=[];return}let h=u.get(String(p))||[];c[e.columnName]=h;});break;default:throw new q(this.model.name+"::mapRelatedModelsToModels","UNSUPPORTED_RELATION_TYPE")}}async getRelatedModelsForRelation(e,r,n){return this.getRelatedModelsQueryForRelation(e,r,n).many()}getRelatedModelsQueryForRelation(e,r,n){let o=this.getFilterValuesFromModelsForRelation(r,n);switch(r.type){case "belongsTo":case "hasOne":return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,o);case "hasMany":let i=e.limitNode?.limit,a=e.offsetNode?.offset;if(!i&&!a)return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,o);let l=ke(Ml.crypto.randomBytes(6)),u=`${r.model.table}_cte_${l}`,d=e.orderByNodes.map(D=>D.isRawValue?D.column:`${this.interpreterUtils.formatStringColumn(this.dbType,D.column)} ${D.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let m=e.with(u,D=>D.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${d}) as rn_${l}`).whereIn(r.foreignKey,o));i&&m.whereRaw(`rn_${l} <= ${i+(a||0)}`),a&&m.whereRaw(`rn_${l} > ${a}`);let c=e.modelSelectedColumns.map(D=>so(D,u,e.model.table));return m.select(...c).table(u);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new q(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!n.length)return e;let h=e.limitNode?.limit,f=e.offsetNode?.offset,T=e.modelSelectedColumns.length?e.modelSelectedColumns.map(D=>D.includes(".")?D:`${r.model.table}.${D}`):[`${r.model.table}.*`];if(!h&&!f)return e.select(...T).select([`${p.throughModel}.${p.leftForeignKey}`,p.leftForeignKey]).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o);let N=ke(Ml.crypto.randomBytes(6)),w=`${r.model.table}_cte_${N}`,R=e.orderByNodes.map(D=>{if(D.isRawValue)return D.column;let Q=D.column.includes(".")?D.column:`${r.model.table}.${D.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,Q)} ${D.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let _=`${ke(Ml.crypto.randomBytes(6))}_left_foreign_key`,E=e.with(w,D=>D.select(...T).select([`${p.throughModel}.${p.leftForeignKey}`,_]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${R}) as rn_${N}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o));h&&E.whereRaw(`rn_${N} <= ${h+(f||0)}`),f&&E.whereRaw(`rn_${N} > ${f}`);let O=T.map(D=>so(D,w,e.model.table));return E.select(...O).select([`${w}.${_}`,p.leftForeignKey]).table(w);default:throw new q(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new q(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);case "belongsTo":return r.map(n=>n[e.foreignKey]);case "manyToMany":if(!this.model.primaryKey)throw new q(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);default:throw new q(this.model.name+"::getFilterValuesFromModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}applyHavingRelatedFilter(e,r,n,o){let i=new y(r.model),a=new y(this.model),l=this.dbType;switch(r.type){case "hasOne":case "hasMany":{if(!this.model.primaryKey||!r.foreignKey)throw new q(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");let u=i.formatStringColumn(l,`${r.model.table}.${r.foreignKey}`),d=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${u} = ${d}`),n&&typeof o=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${n} ${o}`);return}case "belongsTo":{if(!r.model.primaryKey||!r.foreignKey)throw new q(this.model.name+"::applyHavingRelatedFilter",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${r.model.name}`);let u=i.formatStringColumn(l,`${r.model.table}.${r.model.primaryKey}`),d=a.formatStringColumn(l,`${this.model.table}.${r.foreignKey}`);e.whereRaw(`${u} = ${d}`),n&&typeof o=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${n} ${o}`);return}case "manyToMany":{let u=r;if(!this.model.primaryKey||!r.model.primaryKey)throw new q(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");e.joinNodes?.some(p=>!p.isRawValue&&p.table===u.throughModel&&p.type==="left")||e.leftJoin(u.throughModel,`${u.relatedModel}.${r.model.primaryKey}`,`${u.throughModel}.${u.rightForeignKey}`);let m=a.formatStringColumn(l,`${u.throughModel}.${u.leftForeignKey}`),c=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${m} = ${c}`),n&&typeof o=="number"&&e.groupByRaw(m).andHavingRaw(`count(*) ${n} ${o}`);return}default:throw new q(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}};function lf(){return {}}var et=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=lf(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new b(this.model,this.sqlType),this.interpreterUtils=new y(this.model);}setReplicationMode(t){return this.replicationMode=t,this}async find(t){if(!t)return this.query().many();let e=this.query();return t.select&&e.select(...t.select),t.relations&&t.relations.forEach(r=>{e.load(r);}),t.where&&this.handleWhereCondition(e,t.where),t.orderBy&&Object.entries(t.orderBy).forEach(([r,n])=>{e.orderBy(r,n);}),t.limit&&e.limit(t.limit),t.offset&&e.offset(t.offset),t.groupBy&&e.groupBy(...t.groupBy),e.many()}async findOne(t){let e=await this.find({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,offset:t.offset,limit:1});return e.length?e[0]:null}async findOneOrFail(t){let e=await this.findOne({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,offset:t.offset});if(e===null)throw t.customError?t.customError:new q(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new q(this.model.name+"::findOneByPrimaryKey","MODEL_HAS_NO_PRIMARY_KEY");return this.query().select(...e||[]).where(this.model.primaryKey,t).one()}insert(t,e={}){let r=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(t).map(u=>[u,t[u]]))),n=!e.returning||e.returning.length===0,o=new ee(new U(this.model.table),[r],e.returning,n),i=()=>{let u=this.astParser.parse([o]);return {sql:u.sql,bindings:u.bindings}},a=()=>{let u=this.astParser.parse([o]);return {sql:nt(this.sqlDataSource,u.sql),bindings:u.bindings}},l=()=>{let{sql:u,bindings:d}=a();return tt(u,d)};return new G(i,a,l,async()=>{try{await this.model.validate?.(t);}catch(w){throw w}let{columns:u,values:d}=this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert",this.sqlType),m={};u.forEach((w,R)=>{let _=d[R];m[w]=_,t[w]??(t[w]=_);});let c=!e.returning||e.returning.length===0,{sql:p,bindings:h}=this.astParser.parse([new ee(new U(this.model.table),[m],e.returning,c)]),f=await J(p,h,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(c)return;if(this.sqlType==="mysql")return this.handleMysqlInsert(f,[t],"one",e.returning);let T=f[0];return T?pe([T],this.model,e.returning):t})}insertMany(t,e={}){let r=t.map(u=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(u).map(d=>[d,u[d]])))),n=!e.returning||e.returning.length===0,o=new ee(new U(this.model.table),r,e.returning,n),i=()=>{let u=this.astParser.parse([o]);return {sql:u.sql,bindings:u.bindings}},a=()=>{let u=this.astParser.parse([o]);return {sql:nt(this.sqlDataSource,u.sql),bindings:u.bindings}},l=()=>{let{sql:u,bindings:d}=a();return tt(u,d)};return new G(i,a,l,async()=>{try{await this.model.validate?.(t);}catch(T){throw T}let u=t.map(T=>{let{columns:N,values:w}=this.interpreterUtils.prepareColumns(Object.keys(T),Object.values(T),"insert",this.sqlType),R={};return N.forEach((_,E)=>{let O=w[E];R[_]=O,T[_]??(T[_]=O);}),R}),d=!e.returning||e.returning.length===0,{sql:m,bindings:c}=this.astParser.parse([new ee(new U(this.model.table),u,e.returning,d)]),p=await J(m,c,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(d)return [];if(this.sqlType==="mysql")return await this.handleMysqlInsert(p,t,"many",e.returning)||[];let h=p;return h.length?pe(h,this.model,e.returning)||[]:[]})}upsertMany(t,e,r,n={updateOnConflict:true}){let o=this.interpreterUtils.filterComputedColumns(e),i=r.map(p=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(p).map(h=>[h,p[h]])))),a=new ee(new U(this.model.table),i,void 0,true),l=n.returning?.length&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?n.returning:void 0;new Se(this.model.table,t,o,n.updateOnConflict??true?"update":"ignore",l);let d=()=>{let p=this.astParser.parse([a]);return {sql:p.sql,bindings:p.bindings}},m=()=>{let p=this.astParser.parse([a]);return {sql:nt(this.sqlDataSource,p.sql),bindings:p.bindings}},c=()=>{let{sql:p,bindings:h}=m();return tt(p,h)};return new G(d,m,c,async()=>{let p=r.map(O=>{let{columns:D,values:Q}=this.interpreterUtils.prepareColumns(Object.keys(O),Object.values(O),"insert",this.sqlType);return Object.fromEntries(D.map((V,$)=>[V,Q[$]]))});if(this.sqlType==="mssql")return this.executeMssqlMerge(p,t,o,n,r);let h=!n.returning||n.returning.length===0,f=!h&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?n.returning:void 0,{sql:T,bindings:N}=this.astParser.parse([new ee(new U(this.model.table),p,void 0,true),new Se(this.model.table,t,o,n.updateOnConflict??true?"update":"ignore",f)]),w=await J(T,N,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:r}});if(h)return [];if(this.sqlType==="postgres"||this.sqlType==="cockroachdb"){if(w.length<r.length&&!(n.updateOnConflict??true)){let Q=t[0],V=r.map(Y=>Y[Q]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(Q,V).many()}return pe(w,this.model,n.returning)||[]}let R=t[0],_=r.map(O=>O[R]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(R,_).many()})}async executeMssqlMerge(t,e,r,n,o){if(!t.length)return [];let i=Object.keys(t[0]),a=this.interpreterUtils.formatStringColumn("mssql",this.model.table),l=O=>this.interpreterUtils.formatStringColumn("mssql",O),u=[],d=t.map(O=>`select ${i.map(Q=>(u.push(O[Q]),`@${u.length}`)).join(", ")}`),m=i.map(l).join(", "),c=d.join(" union all "),p=e.map(O=>`target.${l(O)} = source.${l(O)}`).join(" and "),h=r.filter(O=>!e.includes(O)).map(O=>`target.${l(O)} = source.${l(O)}`).join(", "),f=i.map(l).join(", "),T=i.map(O=>`source.${l(O)}`).join(", "),N=n.returning&&n.returning.length?n.returning.map(O=>`inserted.${l(O)}${this.interpreterUtils.resolveColumnAlias("mssql",O)}`).join(", "):i.map(O=>`inserted.${l(O)}${this.interpreterUtils.resolveColumnAlias("mssql",O)}`).join(", "),R=(n.updateOnConflict??true)&&h?`when matched then update set ${h}`:"",_=`merge into ${a} as target using (${c}) as source (${m}) on ${p} ${R} when not matched then insert (${f}) values (${T}) output ${N};`,E=await J(_,u,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});if(E.length===0&&!(n.updateOnConflict??true)){let O=e[0],D=o.map(V=>V[O]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(O,D).many()}return E}async updateRecord(t,e,r){let n=new Set(this.model.getColumns().map(N=>N.columnName)),o=Object.keys(e).filter(N=>n.has(N)),i=o.map(N=>e[N]),{columns:a,values:l}=this.interpreterUtils.prepareColumns(o,i,"update",this.sqlType),{primaryKey:u}=this.model;if(!u)throw new q(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let d=a.indexOf(u);d!==-1&&(a.splice(d,1),l.splice(d,1));let m=r?.returning??[],c=m.length>0&&!this.interpreterUtils.hasComputedColumn(m)&&this.interpreterUtils.shouldFetchNatively(this.sqlType,"update"),{sql:p,bindings:h}=this.astParser.parse([new $e(new U(this.model.table),a,l),new x(u,"and",false,"=",t),...c?[new St(m)]:[]]),f=await J(p,h,this.sqlDataSource,this.sqlType,c?"rows":"affectedRows",c?{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}:void 0);if(!m.length)return;if(c){if(!f.length)throw new q(this.model.name+"::updateRecord","ROW_NOT_FOUND");return pe([f[0]],this.model,m)}let T=await this.findOneByPrimaryKey(t,r?.returning);if(!T)throw new q(this.model.name+"::updateRecord","ROW_NOT_FOUND");return T}async deleteRecord(t){if(!this.model.primaryKey)throw new q(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new x(this.model.primaryKey,"and",false,"=",t),{sql:r,bindings:n}=this.astParser.parse([new wt(new U(this.model.table)),e]);await J(r,n,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new Xe(this.model,this.sqlDataSource);return this.replicationMode&&t.setReplicationMode(this.replicationMode),t}async handleMysqlInsert(t,e,r,n){if(!this.model.primaryKey){if(r==="one"){let a=e.length?e[0]:null;return a?pe([a],this.model):null}return pe(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(d=>d[this.model.primaryKey]),l=a.map(d=>`'${d}'`).join(","),u=await this.query().select(...n??["*"]).whereIn(this.model.primaryKey,a).orderByRaw(`FIELD(${this.model.primaryKey}, ${l})`).many();return r==="one"?u.length?u[0]:null:u}let o=Array.from({length:t.affectedRows},(a,l)=>l+t.insertId),i=await this.query().select(...n||["*"]).whereIn(this.model.primaryKey,o).many();return r==="one"?i.length?i[0]:null:i}handleWhereCondition(t,e,r=false){if(e)for(let[n,o]of Object.entries(e))n==="$and"&&Array.isArray(o)?t[r?"orWhere":"where"](a=>{for(let l of o)this.handleWhereCondition(a,l,false);}):n==="$or"&&Array.isArray(o)?t[r?"orWhere":"where"](a=>{let l=true;for(let u of o)this.handleWhereCondition(a,u,!l),l=false;}):this.applyFieldCondition(t,n,o,r);}applyFieldCondition(t,e,r,n=false){if(r==null||typeof r!="object"){r===null?n?t.orWhereNull(e):t.whereNull(e):n?t.orWhere(e,"=",r):t.where(e,"=",r);return}let o=r,i=o.op,a=o.value;switch(i){case "$eq":a===null?n?t.orWhereNull(e):t.whereNull(e):n?t.orWhere(e,"=",a):t.where(e,"=",a);break;case "$ne":a===null?n?t.orWhereNotNull(e):t.whereNotNull(e):n?t.orWhere(e,"!=",a):t.where(e,"!=",a);break;case "$gt":n?t.orWhere(e,">",a):t.where(e,">",a);break;case "$gte":n?t.orWhere(e,">=",a):t.where(e,">=",a);break;case "$lt":n?t.orWhere(e,"<",a):t.where(e,"<",a);break;case "$lte":n?t.orWhere(e,"<=",a):t.where(e,"<=",a);break;case "$between":{let[l,u]=a;n?t.orWhereBetween(e,l,u):t.whereBetween(e,l,u);break}case "$not between":{let[l,u]=a;n?t.orWhereNotBetween(e,l,u):t.whereNotBetween(e,l,u);break}case "$regexp":n?t.orWhereRegexp(e,a):t.whereRegexp(e,a);break;case "$not regexp":n?t.orWhereNotRegexp(e,a):t.whereNotRegexp(e,a);break;case "$is null":n?t.orWhereNull(e):t.whereNull(e);break;case "$is not null":n?t.orWhereNotNull(e):t.whereNotNull(e);break;case "$like":n?t.orWhereLike(e,a):t.whereLike(e,a);break;case "$not like":n?t.orWhereNotLike(e,a):t.whereNotLike(e,a);break;case "$ilike":n?t.orWhereILike(e,a):t.whereILike(e,a);break;case "$not ilike":n?t.orWhereNotILike(e,a):t.whereNotILike(e,a);break;case "$in":n?t.orWhereIn(e,a):t.whereIn(e,a);break;case "$nin":n?t.orWhereNotIn(e,a):t.whereNotIn(e,a);break;default:n?t.orWhere(e,"=",r):t.where(e,"=",r);}}};var uf=(s,t)=>({table:s,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??Tt()});qt();var ye=class{constructor(t){this.options=t;}static async createDriver(t){throw new q("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};se();var Lt=class Lt extends ye{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new Lt(this.mongoClient);let e=await import('mongodb').catch(()=>{throw new L("mongodb")});if(this.mongoClient=e.default??e,!this.mongoClient)throw new L("mongodb");return new Lt(this.mongoClient)}};Lt.mongoClient=null;var dn=Lt;se();var jt=class jt extends ye{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new jt(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new L("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new L("mssql");return new jt(this.mssqlClient)}};jt.mssqlClient=null;var cn=jt;se();var Wt=class Wt extends ye{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new Wt(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new L("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new L("mysql2");return new Wt(this.mysqlClient)}};Wt.mysqlClient=null;var mn=Wt;se();var Ft=class Ft extends ye{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new Ft(this.pgClient);let e=await import('pg').catch(()=>{throw new L("pg")});if("default"in e&&(e.default,this.pgClient=e.default??e),!this.pgClient)throw new L("pg");return new Ft(this.pgClient)}};Ft.pgClient=null;var pn=Ft;se();var Ut=class Ut extends ye{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new Ut(this.sqlite3Client);let e=await import('sqlite3').catch(()=>{throw new L("sqlite3")});if(this.sqlite3Client=e.default??e,!this.sqlite3Client)throw new L("sqlite3");return new Ut(this.sqlite3Client)}};Ut.sqlite3Client=null;var fn=Ut;var ue=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await mn.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await pn.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await fn.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await dn.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await cn.createDriver(),this.mssqlDriver;default:throw new q(`DriverFactory::getDriver Driver ${t} not supported`,"DRIVER_NOT_FOUND")}}static getExistingDriver(t){switch(t){case "mysql":case "mariadb":return this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver;case "sqlite":return this.sqliteDriver;case "mongo":return this.mongodbDriver;case "mssql":return this.mssqlDriver;default:return null}}};ue.mysqlDriver=null,ue.pgDriver=null,ue.sqliteDriver=null,ue.mssqlDriver=null,ue.mongodbDriver=null;qt();se();var yn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=new r.Pool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.connect()}releaseConnection(t){t?.release();}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION"),e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=0,o=t.replace(/\?/g,()=>`$${++n}`);return (r.connection??this.pool).query(o,e)}extract(t,e){return e==="rows"?t.rows:e==="raw"?t:t.rowCount}async stream(t,e,r,n){let o=r.connection,i=!o,a=o??await this.pool.connect(),l=await import('pg-query-stream').catch(()=>{throw new L("pg-query-stream")}),u=new PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),d=0,m=t.replace(/\?/g,()=>`$${++d}`),c=new l.default(m,e,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),p=a.query(c),h=0,f=false,T=false,N=w=>{if(i)try{a.release(w);}catch{}};return p.on("data",w=>{if(n.onData){h++,Promise.resolve(n.onData(u,w)).then(()=>{h--,f&&h===0&&!T&&(N(),u.end());}).catch(R=>{T=true,N(R),u.destroy(R);});return}u.write(w);}),p.on("end",()=>{f=true,h===0&&!T&&(N(),u.end());}),p.on("error",w=>{T=true,N(w),u.destroy(w);}),u}};var hn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=r.createPool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.getConnection()}releaseConnection(t){t?.release();}async beginTransaction(t,e){e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await t.beginTransaction();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){return (r.connection??this.pool).query(t,e)}extract(t,e){let r=t;return e==="affectedRows"?r[0]?.affectedRows??0:e==="raw"?t:r[0]}async stream(t,e,r,n){let o=this.pool,i=r.connection??await o.getConnection(),a=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),u=i.connection.query(t,e).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),d=0,m=false,c=false,p=()=>{try{i.release();}catch{}};return u.on("data",h=>{if(n.onData){d++,Promise.resolve(n.onData(a,h)).then(()=>{d--,m&&d===0&&!c&&(p(),a.end());}).catch(f=>{c=true,p(),a.destroy(f);});return}a.write(h);}),u.on("end",()=>{m=true,d===0&&!c&&(p(),a.end());}),u.on("error",h=>{c=true,p(),a.destroy(h);}),a.on("close",()=>{p();}),a}};var gn=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=new r.Database(String(e.database??":memory:"),e.driverOptions?.mode??void 0,n=>{if(n)throw new q("SqliteDataSource::createSqlPool","CONNECTION_NOT_ESTABLISHED")});}createPool(){}async closePool(){await new Promise((t,e)=>{this.pool.close(r=>{r&&e(r),t();});});}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){return await this.promisify(t,e,r)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.pool;return new _l(o,t,e,{onData:n.onData})}promisify(t,e,r){let n=r.sqlLiteOptions??{},o=n.mode||"fetch",i=n.customConnection??r.connection??this.pool;if(["begin","begin transaction","commit","rollback"].includes(t.trim().toLowerCase()))return new Promise((u,d)=>{i.run(t,e,function(m){m&&d(m),u(this.changes);});});if(o==="fetch")return new Promise((u,d)=>{i.all(t,e,(m,c)=>{m&&d(m),u(c||[]);});});if(!n?.typeofModel)return new Promise((u,d)=>{i.run(t,e,function(m){m?d(new Error(m.message)):u(this.changes);});});if(o==="insertOne"||o==="insertMany"){let u=`${t} returning *`;return new Promise((d,m)=>{i.all(u,e,(c,p)=>{if(c)return m(c);d(p||[]);});})}return new Promise((u,d)=>{i.run(t,e,function(m){m?d(new Error(m.message)):u(this.changes);});})}},_l=class extends Readable{constructor(t,e,r=[],n){super({objectMode:true}),this.db=t,this.query=e,this.params=r,this.started=false,this.events=n;}_read(){this.started||(this.started=true,this.readRows());}readRows(){let t=0,e=false,r=false;this.db.each(this.query,this.params,(n,o)=>{if(n){r=true,this.emit("error",n);return}t++;let i=false,a,l={write:u=>{i=true,a=u;}};Promise.resolve(this.events.onData?.(l,o)).then(()=>{if(!r){if(i){this.push(a);return}this.push(o);}}).catch(u=>{r=true,this.emit("error",u);}).finally(()=>{t--,e&&t===0&&!r&&this.push(null);});},n=>{if(n){r=true,this.emit("error",n);return}e=true,t===0&&!r&&this.push(null);});}};se();var bn=class{constructor(t,e,r){this.dialect="mssql";this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;let n=e.driverOptions,{options:o,...i}=n??{};this.pool=new r.ConnectionPool({server:e.host??"localhost",port:e.port,database:e.database,user:e.username,password:e.password,...i,options:{trustServerCertificate:v.MSSQL_TRUST_SERVER_CERTIFICATE??void 0,...o,abortTransactionOnError:false,enableImplicitTransactions:false}});}async createPool(){await this.pool.connect();}async closePool(){await this.pool.close();}async reserveConnection(){return this.pool.transaction()}releaseConnection(){}async beginTransaction(t,e){if(e.isolationLevel){let r=await this.getMssqlTransactionLevel(e.isolationLevel);await t.begin(r);return}await t.begin();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){let n=this.pool,o=r.connection?r.connection.request():n.request();e.forEach((l,u)=>{o.input(`p${u}`,l);});let i=0,a=t.replace(/\?|@(\d+)/g,()=>`@p${i++}`);return o.query(a)}extract(t,e){return e==="affectedRows"?t.rowsAffected[0]:e==="raw"?t:t.recordset}async stream(t,e,r,n){let o=r.connection??this.pool,i=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),a=o.request();a.stream=true,e.forEach((p,h)=>{a.input(`p${h}`,p);});let l=0,u=t.replace(/\?|@(\d+)/g,()=>`@p${l++}`),d=0,m=false,c=false;return a.on("row",p=>{if(!c){if(n.onData){d++,Promise.resolve(n.onData(i,p)).then(()=>{d--,m&&d===0&&!c&&i.end();}).catch(h=>{c=true,i.destroy(h);});return}i.write(p);}}),a.on("error",p=>{c=true,i.destroy(p);}),a.on("done",()=>{m=true,d===0&&!c&&i.end();}),a.query(u),i}async getMssqlTransactionLevel(t){let e=await import('mssql').then(r=>r.default.ISOLATION_LEVEL).catch(r=>{throw g.error(r),new L("mssql")});switch(t){case "READ UNCOMMITTED":return e.READ_UNCOMMITTED;case "READ COMMITTED":return e.READ_COMMITTED;case "REPEATABLE READ":return e.REPEATABLE_READ;case "SERIALIZABLE":return e.SERIALIZABLE;default:throw new q("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${t}`)}}};var Th=()=>{fe({name:"pg",dialects:["postgres","cockroachdb"],create:async({dialect:s,input:t})=>{let e=(await ue.getDriver(s)).client;return new yn(s,t,e)}}),fe({name:"mysql2",dialects:["mysql","mariadb"],create:async({dialect:s,input:t})=>{let e=(await ue.getDriver(s)).client;return new hn(s,t,e)}}),fe({name:"sqlite3",dialects:["sqlite"],create:async({dialect:s,input:t})=>{let e=(await ue.getDriver(s)).client;return new gn(s,t,e)}}),fe({name:"mssql",dialects:["mssql"],create:async({dialect:s,input:t})=>{let e=(await ue.getDriver(s)).client;return new bn(s,t,e)}});};Th();var Rh=async s=>{if(s==="bun"){await(await Promise.resolve().then(()=>(gf(),hf))).registerBunDrivers();return}if(s==="web"){(await Promise.resolve().then(()=>($l(),Dl))).registerWebDrivers();return}if(s==="react-native"){await(await Promise.resolve().then(()=>($l(),Dl))).registerReactNativeDrivers();return}},qn=async(s,t)=>{let e=nr(t?.jsEnvironment);await Rh(e);let r=await cf(s,e,t?.driver,t);return await r.createPool(),r};var Jt=class Jt{constructor(){}static run(t,e){return Jt.storage.run(t,e)}static getTransaction(){return Jt.storage.getStore()}};Jt.storage=new AsyncLocalStorage;var Fe=Jt;var Ht=class s{constructor(t,e,r=false,n=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=ke(re().crypto.randomBytes(16)),this.isolationLevel=e,this.isNested=r,this.nestingDepth=n;}async nestedTransaction(t){let e=new s(this.sql,this.isolationLevel,true,this.nestingDepth+1);if(await e.transaction(),t)try{let r=await Fe.run(e,()=>t(e));return await e.commit(),r}catch(r){throw await e.rollback(),r}return e}async transaction(){if(this.getIsolationLevelQuery(),this.isNested){let r=this.getSavePointName();this.sql.type==="mssql"?await this.sql.rawQuery(`SAVE TRANSACTION ${r}`):await this.sql.rawQuery(`SAVEPOINT ${r}`),this.isActive=true;return}(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&it("BEGIN TRANSACTION",this.sql.logs);let t=this.sql.driverAdapter,e=this.sql.sqlConnection;if(!t||!e)throw new q("TRANSACTION::transaction","CONNECTION_NOT_ESTABLISHED");await t.beginTransaction(e,{isolationLevel:this.isolationLevel,rawQuery:(r,n)=>this.sql.rawQuery(r,n??[])}),this.isActive=true;}async commit(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new q("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "sqlite":await this.sql.rawQuery(`RELEASE SAVEPOINT ${e}`);break}this.isActive=false;return}try{let e=this.sql.driverAdapter,r=this.sql.sqlConnection;(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&it("COMMIT",this.sql.logs),e&&r&&await e.commitTransaction(r,{rawQuery:(n,o)=>this.sql.rawQuery(n,o??[])});}catch(e){throw g.error(e),e}finally{await this.releaseConnection(),this.isActive=false;}}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new q("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":await this.sql.rawQuery(`ROLLBACK TRANSACTION ${e}`);break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":await this.sql.rawQuery(`ROLLBACK TO SAVEPOINT ${e}`);break;case "sqlite":await this.sql.rawQuery(`ROLLBACK TO ${e}`);break;default:throw new q("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}this.isActive=false;return}try{let e=this.sql.driverAdapter,r=this.sql.sqlConnection;(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&it("ROLLBACK",this.sql.logs),e&&r&&await e.rollbackTransaction(r,{rawQuery:(n,o)=>this.sql.rawQuery(n,o??[])});}catch(e){throw g.error(e),e}finally{await this.releaseConnection(),this.isActive=false;}}async releaseConnection(){if(this.connectionReleased)return;let t=null;try{this.sql.driverAdapter?.releaseConnection(this.sql.sqlConnection);}catch(e){t=e,g.error(e);}this.sql.sqlConnection=null;try{await this.sql.disconnect();}catch(e){g.warn(`Transaction::releaseConnection - disconnect failed: ${e?.message??e}`);}if(this.connectionReleased=true,t)throw t}getIsolationLevelQuery(){if(!this.isolationLevel||this.sql.type==="mssql")return "";if(this.sql.type==="sqlite"&&this.isolationLevel!=="SERIALIZABLE")throw new q("TRANSACTION::getIsolationLevelQuery","SQLITE_ONLY_SUPPORTS_SERIALIZABLE_ISOLATION_LEVEL");if(this.sql.type==="mysql"||this.sql.type==="mariadb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="postgres"||this.sql.type==="cockroachdb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="sqlite")return "";throw new q("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}};var Pl=Symbol.for("hysteria.orm.SqlDataSource"),Nf,qf,Pe=class s extends(qf=$t,Nf=Pl,qf){constructor(e){super(e);this[Nf]=true;this.globalTransaction=null;this.globalTransactionLock=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.driverAdapter=null;this.id=re().crypto.randomUUID();this.logicalSourceId=re().crypto.randomUUID();this.cacheAdapter=new dr;this.migrationConfig={path:v.MIGRATION_PATH||"database/migrations",lock:true,transactional:true,lockTimeout:3e4};this.seederConfig={path:"database/seeders"};this.zodEngine=null;this.lazyLoad=false;this.connecting=null;this.sqlType=e?.type||this.type;let r=e;this.inputDetails={...e,type:this.sqlType,host:r?.host??this.host,port:r?.port??this.port,username:r?.username??this.username,password:r?.password??this.password,database:r?.database??this.database,logs:r?.logs??this.logs},this.inputDetails.connectionPolicies=e?.connectionPolicies||{retry:{maxRetries:0,delay:0}},this.inputDetails.queryFormatOptions=e?.queryFormatOptions||{language:_t(this.sqlType),keywordCase:"lower",dataTypeCase:"lower",functionCase:"lower"},this.cacheKeys=e?.cacheStrategy?.keys??{},this.cacheAdapter=e?.cacheStrategy?.cacheAdapter??this.cacheAdapter,this.adminJsOptions=e?.adminJs,e?.migrations&&(this.migrationConfig={path:e.migrations.path||this.migrationConfig.path,tsconfig:e.migrations.tsconfig,lock:e.migrations.lock??this.migrationConfig.lock,transactional:"transactional"in e.migrations?e.migrations.transactional??this.migrationConfig.transactional:this.migrationConfig.transactional}),e?.seeders&&(this.seederConfig={path:e.seeders.path||this.seederConfig.path,tsconfig:e.seeders.tsconfig}),this._models=e?.models||{},this.slaves=(e?.replication?.slaves||[]).map(n=>new s(n)),this.slaveAlgorithm=e?.replication?.slaveAlgorithm||"roundRobin",this.onSlaveServerFailure=e?.replication?.onSlaveServerFailure,this.lazyLoad=e?.lazyLoad??false,this.clsEnabled=e?.clsEnabled??true;}static isSqlDataSource(e){return typeof e=="object"&&e!==null&&Pl in e&&e[Pl]===true}get isClsEnabled(){return this.clsEnabled}getOnSlaveServerFailure(){return this.onSlaveServerFailure}addObserver(e){return this.observerChain||(this.observerChain=new kt([])),this.observerChain.add(e),this}static async useConnection(e,r){let n=new s(e);await n.connect();try{await r(n),n.isConnected&&await n.disconnect();}catch(o){throw n.isConnected&&await n.disconnect(),o}}async connect(){if(this.isConnected)throw new q("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");try{this.driverAdapter=await qn(this.sqlType,this.inputDetails),this.sqlPool=this.driverAdapter.pool??null,this.ownsPool=!0,this.slaves.length&&await Promise.all(this.slaves.map(async e=>{e.driverAdapter=await qn(e.sqlType,e.inputDetails),e.sqlPool=e.driverAdapter.pool??null,e.ownsPool=!0;}));}catch(e){this.sqlPool=null,this.ownsPool=false;for(let r of this.slaves)r.ownsPool&&(r.sqlPool=null,r.ownsPool=false);throw e}}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new q("SqlDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.connect().finally(()=>{this.connecting=null;})),await this.connecting;}}get isInGlobalTransaction(){return !!this.globalTransaction}get models(){let e=this;return new Proxy(this._models,{get(r,n){if(typeof n=="string"&&n in r)return e.from(r[n])}})}getSlave(){if(!this.slaves.length)return null;if(this.slaveAlgorithm==="random")return this.slaves[Math.floor(Math.random()*this.slaves.length)];let e=this.slaves[this.roundRobinIndex%this.slaves.length];return this.roundRobinIndex=(this.roundRobinIndex+1)%this.slaves.length,e}getTransactionBoundSqlDataSource(){if(this.globalTransaction?.isActive)return this.globalTransaction.sql;if(this.clsEnabled){let e=Fe.getTransaction();if(e?.isActive&&e.sql.logicalSourceId===this.logicalSourceId)return e.sql}return null}async useCache(e,r,...n){if(!this.cacheAdapter)throw new q("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new q("SqlDataSource::useCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);let i=o.length,a=typeof r=="number"&&i===n.length,l,u=[];a?(l=r,u=n):(l=void 0,u=r!==void 0?[r,...n]:n);let d=Ln(JSON.stringify(u)),m=d?`${e}:${d}`:e,c=await this.cacheAdapter.get(m);if(c!==void 0)return c;let p=await o(...u);return await this.cacheAdapter.set(m,p,l),p}async invalidCache(e,...r){if(!this.cacheAdapter)throw new q("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new q("SqlDataSource::invalidCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);if(n.length>0&&r.length===0){let l=e;await this.cacheAdapter.invalidate(l);return}let i=Ln(JSON.stringify(r)),a=i?`${e}:${i}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new q("SqlDataSource::invalidateAllCache","CACHE_ADAPTER_NOT_CONFIGURED");await this.cacheAdapter.invalidateAll(e);}async clone(e){let r=new s(this.inputDetails);return r.id=this.id,r.logicalSourceId=this.logicalSourceId,r.sqlType==="sqlite"||!!e?.shouldRecreatePool?(r.driverAdapter=await qn(r.sqlType,this.inputDetails),r.sqlPool=r.driverAdapter.pool,r.ownsPool=true):(r.driverAdapter=this.driverAdapter,r.sqlPool=this.sqlPool,r.ownsPool=false),r}getDbType(){return this.sqlType}from(e,r){let n=this.getTransactionBoundSqlDataSource()??this;if(typeof e=="string"){let o=new B(uf(e,r),n);return r?.alias&&o.table(e,r.alias),o}return new Xe(e,n)}schema(){if(!this.isConnected&&!this.lazyLoad)throw new q("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new It(this,this.getDbType())}async startGlobalTransaction(e){for(;this.globalTransactionLock;)await this.globalTransactionLock;if(this.globalTransaction?.isActive)throw new q("SqlDataSource::startGlobalTransaction","GLOBAL_TRANSACTION_ALREADY_STARTED");let r=()=>{};this.globalTransactionLock=new Promise(n=>{r=n;});try{let n=await this.clone();return n.sqlConnection=await n.getConnection(),this.globalTransaction=new Ht(n,e?.isolationLevel),await this.globalTransaction.transaction(),this.globalTransaction}finally{r(),this.globalTransactionLock=null;}}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new q("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");try{await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async rollbackGlobalTransaction(e){if(!this.globalTransaction){g.warn("SqlDataSource::rollbackGlobalTransaction - GLOBAL_TRANSACTION_NOT_STARTED");return}try{await this.globalTransaction.rollback({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async transaction(e,r){let n=typeof e=="function"?r:e;if(this.globalTransaction?.isActive)return typeof e=="function"?this.globalTransaction.nestedTransaction(e):this.globalTransaction.nestedTransaction();let o=this.clsEnabled?Fe.getTransaction():void 0;if(o?.isActive&&o.sql.logicalSourceId===this.logicalSourceId)return typeof e=="function"?o.nestedTransaction(e):o.nestedTransaction();let i=await this.clone();i.sqlConnection=await i.getConnection();let a=new Ht(i,n?.isolationLevel);if(await a.transaction(),typeof e=="function")try{let l=this.clsEnabled?await Fe.run(a,()=>e(a)):await e(a);return await a.commit({throwErrorOnInactiveTransaction:!1}),l}catch(l){throw await a.rollback({throwErrorOnInactiveTransaction:false}),l}return a}getModelManager(e){if(!this.isConnected&&!this.lazyLoad)throw new q("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");let r=this.getTransactionBoundSqlDataSource()??this;return new et(e,r)}getPool(){if(!this.sqlPool)throw this.lazyLoad?new q("SqlDataSource::getPool - call ensureConnected() or connect() first when using lazyLoad","CONNECTION_NOT_ESTABLISHED"):new q("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(){if(this.sqlConnection)return this.sqlConnection;await this.ensureConnected();let e=this.driverAdapter;if(!e)throw new q("SqlDataSource::getConnection","CONNECTION_NOT_ESTABLISHED");return e.reserveConnection()}async disconnect(){if(!this.isConnected){g.warn("Connection already closed or not established");return}if(!this.ownsPool){if(this.sqlConnection)try{this.driverAdapter?.releaseConnection(this.sqlConnection);}catch(e){g.warn(`SqlDataSource::disconnect - releasing borrowed connection failed: ${e?.message??e}`);}this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{g.warn("SqlDataSource::disconnect - Error while rolling back global transaction");}await this.cacheAdapter?.disconnect?.(),this.slaves.length&&await Promise.all(this.slaves.map(async e=>{try{await e.disconnect();}catch(r){g.warn(`SqlDataSource::disconnect - Error while closing slave connection: ${r.message}`);}})),g.warn("Closing connection"),await this.driverAdapter?.closePool(),this.sqlPool=null,this.driverAdapter=null,this.sqlConnection=null;}getConnectionDetails(){return {type:this.getDbType(),host:this.host,port:this.port,username:this.username,password:this.password,database:this.database,connectionPolicies:this.inputDetails.connectionPolicies,queryFormatOptions:this.inputDetails.queryFormatOptions,jsEnvironment:this.inputDetails.jsEnvironment,driver:this.inputDetails.driver}}async introspectSchema(){let e=this.getDbType(),r;e==="postgres"||e==="cockroachdb"?r=`
|
|
313
256
|
SELECT table_schema AS schema_name, table_name
|
|
314
257
|
FROM information_schema.tables
|
|
315
258
|
WHERE table_type = 'BASE TABLE'
|
|
@@ -335,57 +278,35 @@ ORDER BY ordinal_position`,bindings:[]}}},Wp=new $a;var Ia=class{toSql(t){let e=
|
|
|
335
278
|
WHERE table_type = 'BASE TABLE'
|
|
336
279
|
AND table_schema NOT IN ('information_schema', 'pg_catalog', 'mysql', 'sys', 'performance_schema')
|
|
337
280
|
ORDER BY table_schema, table_name;
|
|
338
|
-
`;try{let o=await this.rawQuery(r),n=this.extractRowsFromRawResult(o),s={dialect:e,tables:[]},a={};for(let l of n){let u=String(l.schema_name||l.SCHEMA_NAME||"public"),d=String(l.table_name||l.TABLE_NAME||l.name||""),c=`${u}.${d}`;!a[c]&&d&&(a[c]={name:d,columns:[]},s.tables.push(a[c]));}return [s]}catch(o){return g.warn(`Failed to introspect schema: ${o.message}`),[]}}async syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){g.warn("Syncing schema with SQLite is not supported, skipping...");return}let o=(await Ve.makeDiff(this)).getSqlStatements();if(!o.length){g.info("No new changes detected between database schema and models metadata");return}if(g.info(`Generated ${o.length} SQL statements to sync schema`),!e?.transactional){for(let n of o)await this.rawQuery(n);g.info(`Synced schema with ${o.length} SQL statements`);return}await this.transaction(async n=>{for(let s of o)await n.sql.rawQuery(s);}),g.info(`Synced schema with ${o.length} SQL statements`);}extractRowsFromRawResult(e){let r=this.getDbType();if(r==="mysql"||r==="mariadb"){if(Array.isArray(e)&&e.length>=1){let o=e[0];if(Array.isArray(o))return o;if(typeof o=="object"&&o!==null&&("insertId"in o||"affectedRows"in o))return []}return e}return r==="postgres"||r==="cockroachdb"?e&&typeof e=="object"&&"rows"in e?e.rows||[]:e:Array.isArray(e)?e:[]}async rawQuery(e,r=[],o){if(await this.ensureConnected(),(o?.replicationMode||"master")==="slave")return this.executeOnSlave(async a=>J(e,r,a,this.getDbType(),"raw"));let s=this.getTransactionBoundSqlDataSource()??this;return J(e,r,s,this.getDbType(),"raw")}rawStatement(e){return new $(e)}async getTableSchema(e){let[r,o,n,s,a]=await Promise.all([this.getTableInfo(e),this.getIndexInfo(e),this.getForeignKeyInfo(e),this.getPrimaryKeyInfo(e),this.getCheckConstraintInfo(e)]);return {columns:r,indexes:o,foreignKeys:n,primaryKey:s,checkConstraints:a}}getModelOpenApiSchema(){return $u(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new S("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await go(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new S("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await Du(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}loadZodEngine(e){return this.zodEngine=e,_e.zodEngine=e,this}isAdminJsEnabled(){return !!this.adminJsOptions?.enabled}async getTableInfo(e){let o=new N({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new mr(e)]).sql,n=[];try{let l=await this.rawQuery(o);n=this.extractRowsFromRawResult(l);}catch(l){if(et(this.getDbType(),l))return [];throw l}let s=this.getDbType();if(s==="sqlite")return n.map(l=>{let u=String(l.type||"").toLowerCase(),d=ve(s,u),c=new Set(["text","varchar","char"]);return {name:l.name,dataType:d,isNullable:l.notnull===0,defaultValue:l.dflt_value??null,withTimezone:null,stringMode:c.has(d)}});let a=n.map(l=>{let u=String(l.column_name||l.COLUMN_NAME||l.name||""),d=String(l.data_type||l.DATA_TYPE||l.type||"").toLowerCase(),c=ve(s,d),m=l.is_nullable!==void 0?l.is_nullable:l.IS_NULLABLE!==void 0?l.IS_NULLABLE:void 0,p=typeof m=="string"?m.toLowerCase()!=="no":typeof m=="boolean"?m:l.notnull!==void 0?l.notnull===0:true,f=l.column_default??l.COLUMN_DEFAULT??l.defaultValue??l.dflt_value??null,y=s==="mariadb"&&f==="NULL"?null:f,T=l.char_length!=null?Number(l.char_length):null,b=l.numeric_precision!=null?Number(l.numeric_precision):null,C=l.numeric_scale!=null?Number(l.numeric_scale):null,R=l.timezone!=null?!!l.timezone:/with time zone/.test(String(l.column_type||l.udt_name||d||"").toLowerCase()),_=null,D=String(l.column_type||l.COLUMN_TYPE||""),A=D.match(/^enum\((.+)\)$/i);A&&(_=A[1].split(",").map(W=>W.trim().replace(/^'|'$/g,"")));let M=D.toLowerCase(),v=M.includes(" unsigned"),H=M.includes(" zerofill"),B=new Set(["text","tinytext","mediumtext","longtext","varchar","char","nvarchar","nchar","ntext","character varying","character"]).has(c);return {name:u,dataType:c,isNullable:p,defaultValue:y,length:T,precision:b,scale:C,withTimezone:R,enumValues:_,unsigned:v,zerofill:H,stringMode:B}});if(s==="postgres"||s==="mssql"){let l=[];try{l=await this.getCheckConstraintInfo(e);}catch{}if(l.length>0)for(let u of a){let d=u.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c=l.find(m=>{let p=m.expression,f=new RegExp(`[\\["\\[]?${d}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),y=new RegExp(`[\\("\\[]?${d}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return f.test(p)||y.test(p)});if(c){let m=c.expression,p=m.match(/IN\s*\(([^)]+)\)/i);if(p)u.enumValues=p[1].split(",").map(f=>f.trim().replace(/^'|'$/g,""));else {let f=m.match(/ARRAY\[([^\]]+)\]/i);f&&(u.enumValues=f[1].split(",").map(y=>y.trim().replace(/::[a-z ]+$/i,"").replace(/^'|'$/g,"")));}}}}return a}async hasTable(e){let o=new N({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new pr(e)]).sql,n=this.getDbType(),s=[];try{let a=await this.rawQuery(o);s=this.extractRowsFromRawResult(a);}catch{return false}return n==="postgres"||n==="cockroachdb"?s.length>0&&s[0].exists===true:n==="mysql"||n==="mariadb"||n==="mssql"||n==="oracledb"?s.length>0&&parseInt(s[0].count)>0:n==="sqlite"?s.length>0:false}async hasColumn(e,r){let n=new N({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new fr(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(n);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"||s==="oracledb"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"?a.some(l=>l.name===r):false}async hasColumns(e,...r){if(!r.length)return true;for(let o of r)if(!await this.hasColumn(e,o))return false;return true}async hasIndex(e,r){let n=new N({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new yr(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(n);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"||s==="oracledb"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"?a.length>0:false}async hasPrimaryKey(e){let o=new N({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new hr(e)]).sql,n=this.getDbType(),s=[];try{let a=await this.rawQuery(o);s=this.extractRowsFromRawResult(a);}catch{return false}return n==="postgres"||n==="cockroachdb"?s.length>0&&s[0].exists===true:n==="mysql"||n==="mariadb"||n==="mssql"||n==="oracledb"?s.length>0&&parseInt(s[0].count)>0:n==="sqlite"?s.some(a=>a.pk>0):false}async hasUnique(e,r){let o=Array.isArray(r)?r:[r];try{return (await this.getIndexInfo(e)).some(s=>{let a=s.unique??s.isUnique??s.Non_unique,l=a===!0||a==="true"||a==="1"||a===0,u=Array.isArray(s.columns)?s.columns:[s.column_name];return l&&u.length===o.length&&u.every((d,c)=>d===o[c])})}catch{return false}}async hasForeignKey(e,r){try{let n=(await this.getForeignKeyInfo(e)).flatMap(a=>a.columns||a.column||[a.from]);return r.every(a=>n.includes(a))&&n.length>=r.length}catch{return false}}async hasCheckConstraint(e,r){let n=new N({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new gr(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(n);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"||s==="oracledb"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"&&a.length>0&&a[0].sql?a[0].sql.includes("CHECK")&&a[0].sql.includes(r):false}async getTables(){let r=new N({databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new br]).sql,o=[];try{let s=await this.rawQuery(r);o=this.extractRowsFromRawResult(s);}catch{return []}let n=o[0]?.table_name||"name";return o.map(s=>s[n]||s.name)}async getColumnListing(e){let o=new N({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Tr(e)]).sql,n=[];try{let s=await this.rawQuery(o);n=this.extractRowsFromRawResult(s);}catch{return []}return n.map(s=>s.name??s.column_name)}async getIndexInfo(e){let o=new N({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new dr(e)]).sql,n=this.getDbType(),s=[];try{let l=await this.rawQuery(o);s=this.extractRowsFromRawResult(l);}catch(l){if(et(this.getDbType(),l))return [];throw l}if(n==="mysql"||n==="mariadb"){let l=new Map;for(let u of s){let d=u.Key_name,c=u.Non_unique===0,m=l.get(d)||{name:d,columns:[],isUnique:c};m.columns.push(u.Column_name),l.set(d,m);}return Array.from(l.values())}if(n==="postgres"||n==="cockroachdb"){let l=new Map;for(let u of s){let d=u.index_name,c=!!u.is_unique,m=l.get(d)||{name:d,columns:[],isUnique:c};m.columns.push(u.column_name),l.set(d,m);}return Array.from(l.values())}let a=[];for(let l of s){let u=l.name,d=!!l.unique,c=await this.rawQuery(`PRAGMA index_info(${u})`),p=this.extractRowsFromRawResult(c).map(f=>f.name);a.push({name:u,columns:p,isUnique:d});}return a}async getForeignKeyInfo(e){let o=new N({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new ur(e)]).sql,n=[];try{let l=await this.rawQuery(o);n=this.extractRowsFromRawResult(l);}catch(l){if(et(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let u of n){let d=Number(u.id),c=l.get(d)||{name:void 0,columns:[],referencedTable:String(u.table),referencedColumns:[],onDelete:u.on_delete??null,onUpdate:u.on_update??null};c.columns.push(String(u.from)),c.referencedColumns.push(String(u.to)),l.set(d,c);}return Array.from(l.values())}let a=new Map;for(let l of n){let u=String(l.name||""),d=u||`${l.referenced_table}_${l.column_name}`,c=a.get(d)||{name:u||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};c.columns.push(String(l.column_name)),c.referencedColumns.push(String(l.referenced_column)),a.set(d,c);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let o=new N({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new cr(e)]).sql,n=[];try{let l=await this.rawQuery(o);n=this.extractRowsFromRawResult(l);}catch(l){if(et(this.getDbType(),l))return;throw l}if(!n.length)return;let s=n.map(l=>String(l.column_name));return {name:n[0].name||void 0,columns:s}}async getCheckConstraintInfo(e){let o=new N({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new lr(e)]).sql,n=[];try{let a=await this.rawQuery(o);n=this.extractRowsFromRawResult(a);}catch(a){if(et(this.getDbType(),a))return [];throw a}let s=a=>this.getDbType()==="mariadb"&&/^json_valid\(/i.test(a);return n.filter(a=>!s(String(a.expression))).map(a=>({name:String(a.name),expression:String(a.expression)}))}async acquireLock(e="hysteria_lock",r=3e4){let o=this.getDbType();try{switch(o){case "postgres":case "cockroachdb":{let n=this.hashStringToLockId(e),a=(await this.rawQuery("SELECT pg_try_advisory_lock($1) as pg_try_advisory_lock",[n])).rows?.[0]?.pg_try_advisory_lock;return a===!0||a==="t"}case "mysql":case "mariadb":{let n=Math.floor(r/1e3);return (await this.rawQuery("SELECT GET_LOCK(?, ?) as lock_result",[e,n]))[0]?.[0]?.lock_result===1}case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_getapplock @Resource = @p0, @LockMode = 'Exclusive', @LockOwner = 'Session', @LockTimeout = @p1; SELECT @result as lock_result",[e,r])).recordset?.[0]?.lock_result??-999)>=0;case "oracledb":try{let n=this.hashStringToLockId(e);return await this.rawQuery(`BEGIN DBMS_LOCK.ALLOCATE_UNIQUE('${e}', '${n}'); END;`),(await this.rawQuery(`DECLARE
|
|
339
|
-
v_result NUMBER;
|
|
340
|
-
BEGIN
|
|
341
|
-
v_result := DBMS_LOCK.REQUEST(
|
|
342
|
-
lockhandle => ${n},
|
|
343
|
-
lockmode => DBMS_LOCK.X_MODE,
|
|
344
|
-
timeout => ${Math.floor(r/1e3)},
|
|
345
|
-
release_on_commit => FALSE
|
|
346
|
-
);
|
|
347
|
-
IF v_result IN (0, 4) THEN
|
|
348
|
-
:result := 1;
|
|
349
|
-
ELSE
|
|
350
|
-
:result := 0;
|
|
351
|
-
END IF;
|
|
352
|
-
END;`))?.outBinds?.result===1}catch(n){let s=n instanceof Error?n:new Error(String(n));return g.warn(`Oracle lock allocation may have failed: ${s.message}`),!1}case "sqlite":return g.info("SQLite uses automatic file-based locking, advisory locks not needed"),!0;default:return g.warn(`Advisory locks not implemented for database type: ${o}`),!0}}catch(n){let s=n instanceof Error?n:new Error(String(n));return g.error(`Failed to acquire lock: ${s.message||JSON.stringify(n)} (dbType: ${o}, lockKey: ${e}). Full error: ${JSON.stringify(n)}`),false}}async ping(){let e=this.getDbType(),r=Date.now();try{await this.ensureConnected();let o;switch(e){case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "mssql":case "oracledb":o="SELECT 1";break;case "sqlite":o="PRAGMA integrity_check";break;default:o="SELECT 1";}return await this.rawQuery(o),{ok:!0,latencyMs:Date.now()-r,dialect:e}}catch{return {ok:false,latencyMs:Date.now()-r,dialect:e}}}async isHealthy(){try{return (await this.ping()).ok}catch{return false}}async releaseLock(e="hysteria_lock"){let r=this.getDbType();try{switch(r){case "postgres":case "cockroachdb":{let o=this.hashStringToLockId(e),s=(await this.rawQuery("SELECT pg_advisory_unlock($1) as pg_advisory_unlock",[o])).rows?.[0]?.pg_advisory_unlock;return s===!0||s==="t"}case "mysql":case "mariadb":return (await this.rawQuery("SELECT RELEASE_LOCK(?) as release_result",[e]))[0]?.[0]?.release_result===1;case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_releaseapplock @Resource = @p0, @LockOwner = 'Session'; SELECT @result as release_result",[e])).recordset?.[0]?.release_result??-999)>=0;case "oracledb":try{let o=this.hashStringToLockId(e);return (await this.rawQuery(`DECLARE
|
|
353
|
-
v_result NUMBER;
|
|
354
|
-
BEGIN
|
|
355
|
-
v_result := DBMS_LOCK.RELEASE(${o});
|
|
356
|
-
IF v_result = 0 THEN
|
|
357
|
-
:result := 1;
|
|
358
|
-
ELSE
|
|
359
|
-
:result := 0;
|
|
360
|
-
END IF;
|
|
361
|
-
END;`))?.outBinds?.result===1}catch(o){let n=o instanceof Error?o:new Error(String(o));return g.warn(`Oracle lock release may have failed: ${n.message}`),!1}case "sqlite":return !0;default:return g.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(o){let n=o instanceof Error?o:new Error(String(o));return g.error(`Failed to release lock: ${n.message||JSON.stringify(o)} (dbType: ${r}, lockKey: ${e}). Full error: ${JSON.stringify(o)}`),false}}hashStringToLockId(e){let r=0;for(let o=0;o<e.length;o++){let n=e.charCodeAt(o);r=(r<<5)-r+n,r=r&r;}return Math.abs(r)}async executeOnSlave(e){let r=this.getSlave();if(!r)return e(this);try{return await e(r)}catch(o){let n=o instanceof Error?o:new Error(String(o));if(this.onSlaveServerFailure)return await this.onSlaveServerFailure(n,{host:r.host,port:r.port,username:r.username,password:r.password,database:r.database,type:r.sqlType}),e(this);throw n}}};var Ie=class{constructor(t){this.migrationTable="migrations";this.sql=t;}async upMigrations(t){for(let e of t){g.info(`Running migration ${e.migrationName}`),await e.up();let r=e.schema.queryStatements;for(let o of r)o&&await this.sql.rawQuery(o);await this.addMigrationToMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async downMigrations(t){t=t.reverse();for(let e of t){g.info(`Rolling back migration ${e.migrationName}`),await e.down();let r=e.schema.queryStatements;for(let o of r)o&&await this.sql.rawQuery(o);await this.deleteMigrationFromMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async addMigrationToMigrationTable(t){let e=new Date,r=this.sql.getDbType()==="oracledb"?e:e.toISOString().replace("T"," ").replace(/\.\d{3}Z$/,"");await this.sql.from(this.migrationTable).insert({name:t.migrationName,timestamp:r});}async deleteMigrationFromMigrationTable(t){await this.sql.from(this.migrationTable).where("name",t.migrationName).delete();}};async function Kt(i,t,e,r,o){let n=i.getDbType(),s=o&&n!=="mssql"&&n!=="oracledb",a=null;g.info("Rolling back migrations for database type: "+n);try{let l=await rr(n,i.getPool()),u=await or(n,e,r),d=l.map(p=>p.name),c=u.filter(p=>d.includes(p.migrationName));if(c.length===0){g.info("No pending migrations.");return}if(t){let p=c.findIndex(T=>T.migrationName===t);if(p===-1){g.error(`Rollback until migration not found: ${t}`);return}let f=c.slice(p);s&&(a=await i.transaction(),i=a.sql),await new Ie(i).downMigrations(f),s&&await a?.commit(),g.info("Migrations rolled back successfully");return}let m=new Ie(i);s&&(a=await i.transaction(),i=a.sql),await m.downMigrations(c),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}g.info("Migrations rolled back successfully");}var Lt=class{static async generate(t,e){if(e==="code"||!Array.isArray(t)&&"up"in t){let{up:n,down:s}=t;return `import { Migration } from "hysteria-orm";
|
|
281
|
+
`;try{let n=await this.rawQuery(r),o=this.extractRowsFromRawResult(n),i={dialect:e,tables:[]},a={};for(let l of o){let u=String(l.schema_name||l.SCHEMA_NAME||"public"),d=String(l.table_name||l.TABLE_NAME||l.name||""),m=`${u}.${d}`;!a[m]&&d&&(a[m]={name:d,columns:[]},i.tables.push(a[m]));}return [i]}catch(n){return g.warn(`Failed to introspect schema: ${n.message}`),[]}}async syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){g.warn("Syncing schema with SQLite is not supported, skipping...");return}let n=(await Ge.makeDiff(this)).getSqlStatements();if(!n.length){g.info("No new changes detected between database schema and models metadata");return}if(g.info(`Generated ${n.length} SQL statements to sync schema`),!e?.transactional){for(let o of n)await this.rawQuery(o);g.info(`Synced schema with ${n.length} SQL statements`);return}await this.transaction(async o=>{for(let i of n)await o.sql.rawQuery(i);}),g.info(`Synced schema with ${n.length} SQL statements`);}extractRowsFromRawResult(e){let r=this.getDbType();if(r==="mysql"||r==="mariadb"){if(Array.isArray(e)&&e.length>=1){let n=e[0];if(Array.isArray(n))return n;if(typeof n=="object"&&n!==null&&("insertId"in n||"affectedRows"in n))return []}return e}return r==="postgres"||r==="cockroachdb"?e&&typeof e=="object"&&"rows"in e?e.rows||[]:e:Array.isArray(e)?e:[]}async rawQuery(e,r=[],n){if(await this.ensureConnected(),(n?.replicationMode||"master")==="slave")return this.executeOnSlave(async a=>J(e,r,a,this.getDbType(),"raw"));let i=this.getTransactionBoundSqlDataSource()??this;return J(e,r,i,this.getDbType(),"raw")}rawStatement(e){return new A(e)}async getTableSchema(e){let[r,n,o,i,a]=await Promise.all([this.getTableInfo(e),this.getIndexInfo(e),this.getForeignKeyInfo(e),this.getPrimaryKeyInfo(e),this.getCheckConstraintInfo(e)]);return {columns:r,indexes:n,foreignKeys:o,primaryKey:i,checkConstraints:a}}getModelOpenApiSchema(){return uu(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new q("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await Kn(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new q("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await lu(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}loadZodEngine(e){return this.zodEngine=e,_e.zodEngine=e,this}isAdminJsEnabled(){return !!this.adminJsOptions?.enabled}async getTableInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new gr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(rt(this.getDbType(),l))return [];throw l}let i=this.getDbType();if(i==="sqlite")return o.map(l=>{let u=String(l.type||"").toLowerCase(),d=Le(i,u),m=new Set(["text","varchar","char"]);return {name:l.name,dataType:d,isNullable:l.notnull===0,defaultValue:l.dflt_value??null,withTimezone:null,stringMode:m.has(d)}});let a=o.map(l=>{let u=String(l.column_name||l.COLUMN_NAME||l.name||""),d=String(l.data_type||l.DATA_TYPE||l.type||"").toLowerCase(),m=Le(i,d),c=l.is_nullable!==void 0?l.is_nullable:l.IS_NULLABLE!==void 0?l.IS_NULLABLE:void 0,p=typeof c=="string"?c.toLowerCase()!=="no":typeof c=="boolean"?c:l.notnull!==void 0?l.notnull===0:true,h=l.column_default??l.COLUMN_DEFAULT??l.defaultValue??l.dflt_value??null,f=i==="mariadb"&&h==="NULL"?null:h,T=l.char_length!=null?Number(l.char_length):null,N=l.numeric_precision!=null?Number(l.numeric_precision):null,w=l.numeric_scale!=null?Number(l.numeric_scale):null,R=l.timezone!=null?!!l.timezone:/with time zone/.test(String(l.column_type||l.udt_name||d||"").toLowerCase()),_=null,E=String(l.column_type||l.COLUMN_TYPE||""),O=E.match(/^enum\((.+)\)$/i);O&&(_=O[1].split(",").map(ve=>ve.trim().replace(/^'|'$/g,"")));let D=E.toLowerCase(),Q=D.includes(" unsigned"),V=D.includes(" zerofill"),Y=new Set(["text","tinytext","mediumtext","longtext","varchar","char","nvarchar","nchar","ntext","character varying","character"]).has(m);return {name:u,dataType:m,isNullable:p,defaultValue:f,length:T,precision:N,scale:w,withTimezone:R,enumValues:_,unsigned:Q,zerofill:V,stringMode:Y}});if(i==="postgres"||i==="mssql"){let l=[];try{l=await this.getCheckConstraintInfo(e);}catch{}if(l.length>0)for(let u of a){let d=u.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),m=l.find(c=>{let p=c.expression,h=new RegExp(`[\\["\\[]?${d}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),f=new RegExp(`[\\("\\[]?${d}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return h.test(p)||f.test(p)});if(m){let c=m.expression,p=c.match(/IN\s*\(([^)]+)\)/i);if(p)u.enumValues=p[1].split(",").map(h=>h.trim().replace(/^'|'$/g,""));else {let h=c.match(/ARRAY\[([^\]]+)\]/i);h&&(u.enumValues=h[1].split(",").map(f=>f.trim().replace(/::[a-z ]+$/i,"").replace(/^'|'$/g,"")));}}}}return a}async hasTable(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new br(e)]).sql,o=this.getDbType(),i=[];try{let a=await this.rawQuery(n);i=this.extractRowsFromRawResult(a);}catch{return false}return o==="postgres"||o==="cockroachdb"?i.length>0&&i[0].exists===true:o==="mysql"||o==="mariadb"||o==="mssql"?i.length>0&&parseInt(i[0].count)>0:o==="sqlite"?i.length>0:false}async hasColumn(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Tr(e,r)]).sql,i=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return i==="postgres"||i==="cockroachdb"?a.length>0&&a[0].exists===true:i==="mysql"||i==="mariadb"||i==="mssql"?a.length>0&&parseInt(a[0].count)>0:i==="sqlite"?a.some(l=>l.name===r):false}async hasColumns(e,...r){if(!r.length)return true;for(let n of r)if(!await this.hasColumn(e,n))return false;return true}async hasIndex(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new wr(e,r)]).sql,i=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return i==="postgres"||i==="cockroachdb"?a.length>0&&a[0].exists===true:i==="mysql"||i==="mariadb"||i==="mssql"?a.length>0&&parseInt(a[0].count)>0:i==="sqlite"?a.length>0:false}async hasPrimaryKey(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Sr(e)]).sql,o=this.getDbType(),i=[];try{let a=await this.rawQuery(n);i=this.extractRowsFromRawResult(a);}catch{return false}return o==="postgres"||o==="cockroachdb"?i.length>0&&i[0].exists===true:o==="mysql"||o==="mariadb"||o==="mssql"?i.length>0&&parseInt(i[0].count)>0:o==="sqlite"?i.some(a=>a.pk>0):false}async hasUnique(e,r){let n=Array.isArray(r)?r:[r];try{return (await this.getIndexInfo(e)).some(i=>{let a=i.unique??i.isUnique??i.Non_unique,l=a===!0||a==="true"||a==="1"||a===0,u=Array.isArray(i.columns)?i.columns:[i.column_name];return l&&u.length===n.length&&u.every((d,m)=>d===n[m])})}catch{return false}}async hasForeignKey(e,r){try{let o=(await this.getForeignKeyInfo(e)).flatMap(a=>a.columns||a.column||[a.from]);return r.every(a=>o.includes(a))&&o.length>=r.length}catch{return false}}async hasCheckConstraint(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Nr(e,r)]).sql,i=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return i==="postgres"||i==="cockroachdb"?a.length>0&&a[0].exists===true:i==="mysql"||i==="mariadb"||i==="mssql"?a.length>0&&parseInt(a[0].count)>0:i==="sqlite"&&a.length>0&&a[0].sql?a[0].sql.includes("CHECK")&&a[0].sql.includes(r):false}async getTables(){let r=new b({databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new qr]).sql,n=[];try{let i=await this.rawQuery(r);n=this.extractRowsFromRawResult(i);}catch{return []}let o=n[0]?.table_name||"name";return n.map(i=>i[o]||i.name)}async getColumnListing(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Cr(e)]).sql,o=[];try{let i=await this.rawQuery(n);o=this.extractRowsFromRawResult(i);}catch{return []}return o.map(i=>i.name??i.column_name)}async getIndexInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new yr(e)]).sql,o=this.getDbType(),i=[];try{let l=await this.rawQuery(n);i=this.extractRowsFromRawResult(l);}catch(l){if(rt(this.getDbType(),l))return [];throw l}if(o==="mysql"||o==="mariadb"){let l=new Map;for(let u of i){let d=u.Key_name,m=u.Non_unique===0,c=l.get(d)||{name:d,columns:[],isUnique:m};c.columns.push(u.Column_name),l.set(d,c);}return Array.from(l.values())}if(o==="postgres"||o==="cockroachdb"){let l=new Map;for(let u of i){let d=u.index_name,m=!!u.is_unique,c=l.get(d)||{name:d,columns:[],isUnique:m};c.columns.push(u.column_name),l.set(d,c);}return Array.from(l.values())}let a=[];for(let l of i){let u=l.name,d=!!l.unique,m=await this.rawQuery(`PRAGMA index_info(${u})`),p=this.extractRowsFromRawResult(m).map(h=>h.name);a.push({name:u,columns:p,isUnique:d});}return a}async getForeignKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new fr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(rt(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let u of o){let d=Number(u.id),m=l.get(d)||{name:void 0,columns:[],referencedTable:String(u.table),referencedColumns:[],onDelete:u.on_delete??null,onUpdate:u.on_update??null};m.columns.push(String(u.from)),m.referencedColumns.push(String(u.to)),l.set(d,m);}return Array.from(l.values())}let a=new Map;for(let l of o){let u=String(l.name||""),d=u||`${l.referenced_table}_${l.column_name}`,m=a.get(d)||{name:u||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};m.columns.push(String(l.column_name)),m.referencedColumns.push(String(l.referenced_column)),a.set(d,m);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new hr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(rt(this.getDbType(),l))return;throw l}if(!o.length)return;let i=o.map(l=>String(l.column_name));return {name:o[0].name||void 0,columns:i}}async getCheckConstraintInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new pr(e)]).sql,o=[];try{let a=await this.rawQuery(n);o=this.extractRowsFromRawResult(a);}catch(a){if(rt(this.getDbType(),a))return [];throw a}let i=a=>this.getDbType()==="mariadb"&&/^json_valid\(/i.test(a);return o.filter(a=>!i(String(a.expression))).map(a=>({name:String(a.name),expression:String(a.expression)}))}async acquireLock(e="hysteria_lock",r=3e4){let n=this.getDbType();try{switch(n){case "postgres":case "cockroachdb":{let o=this.hashStringToLockId(e),a=(await this.rawQuery("SELECT pg_try_advisory_lock($1) as pg_try_advisory_lock",[o])).rows?.[0]?.pg_try_advisory_lock;return a===!0||a==="t"}case "mysql":case "mariadb":{let o=Math.floor(r/1e3);return (await this.rawQuery("SELECT GET_LOCK(?, ?) as lock_result",[e,o]))[0]?.[0]?.lock_result===1}case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_getapplock @Resource = @p0, @LockMode = 'Exclusive', @LockOwner = 'Session', @LockTimeout = @p1; SELECT @result as lock_result",[e,r])).recordset?.[0]?.lock_result??-999)>=0;case "sqlite":return g.info("SQLite uses automatic file-based locking, advisory locks not needed"),!0;default:return g.warn(`Advisory locks not implemented for database type: ${n}`),!0}}catch(o){let i=o instanceof Error?o:new Error(String(o));return g.error(`Failed to acquire lock: ${i.message||JSON.stringify(o)} (dbType: ${n}, lockKey: ${e}). Full error: ${JSON.stringify(o)}`),false}}async ping(){let e=this.getDbType(),r=Date.now();try{await this.ensureConnected();let n;switch(e){case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "mssql":n="SELECT 1";break;case "sqlite":n="PRAGMA integrity_check";break;default:n="SELECT 1";}return await this.rawQuery(n),{ok:!0,latencyMs:Date.now()-r,dialect:e}}catch{return {ok:false,latencyMs:Date.now()-r,dialect:e}}}async isHealthy(){try{return (await this.ping()).ok}catch{return false}}async releaseLock(e="hysteria_lock"){let r=this.getDbType();try{switch(r){case "postgres":case "cockroachdb":{let n=this.hashStringToLockId(e),i=(await this.rawQuery("SELECT pg_advisory_unlock($1) as pg_advisory_unlock",[n])).rows?.[0]?.pg_advisory_unlock;return i===!0||i==="t"}case "mysql":case "mariadb":return (await this.rawQuery("SELECT RELEASE_LOCK(?) as release_result",[e]))[0]?.[0]?.release_result===1;case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_releaseapplock @Resource = @p0, @LockOwner = 'Session'; SELECT @result as release_result",[e])).recordset?.[0]?.release_result??-999)>=0;case "sqlite":return !0;default:return g.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(n){let o=n instanceof Error?n:new Error(String(n));return g.error(`Failed to release lock: ${o.message||JSON.stringify(n)} (dbType: ${r}, lockKey: ${e}). Full error: ${JSON.stringify(n)}`),false}}hashStringToLockId(e){let r=0;for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);r=(r<<5)-r+o,r=r&r;}return Math.abs(r)}async executeOnSlave(e){let r=this.getSlave();if(!r)return e(this);try{return await e(r)}catch(n){let o=n instanceof Error?n:new Error(String(n));if(this.onSlaveServerFailure)return await this.onSlaveServerFailure(o,{host:r.host,port:r.port,username:r.username,password:r.password,database:r.database,type:r.sqlType}),e(this);throw o}}};var Be=class{constructor(t){this.migrationTable="migrations";this.sql=t;}async upMigrations(t){for(let e of t){g.info(`Running migration ${e.migrationName}`),await e.up();let r=e.schema.queryStatements;for(let n of r)n&&await this.sql.rawQuery(n);await this.addMigrationToMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async downMigrations(t){t=t.reverse();for(let e of t){g.info(`Rolling back migration ${e.migrationName}`),await e.down();let r=e.schema.queryStatements;for(let n of r)n&&await this.sql.rawQuery(n);await this.deleteMigrationFromMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async addMigrationToMigrationTable(t){let r=new Date().toISOString().replace("T"," ").replace(/\.\d{3}Z$/,"");await this.sql.from(this.migrationTable).insert({name:t.migrationName,timestamp:r});}async deleteMigrationFromMigrationTable(t){await this.sql.from(this.migrationTable).where("name",t.migrationName).delete();}};async function zt(s,t,e,r,n){let o=s.getDbType(),i=n&&o!=="mssql",a=null;g.info("Rolling back migrations for database type: "+o);try{let l=await ar(o,s),u=await lr(o,e,r),d=l.map(p=>p.name),m=u.filter(p=>d.includes(p.migrationName));if(m.length===0){g.info("No pending migrations.");return}if(t){let p=m.findIndex(T=>T.migrationName===t);if(p===-1){g.error(`Rollback until migration not found: ${t}`);return}let h=m.slice(p);i&&(a=await s.transaction(),s=a.sql),await new Be(s).downMigrations(h),i&&await a?.commit(),g.info("Migrations rolled back successfully");return}i&&(a=await s.transaction(),s=a.sql),await new Be(s).downMigrations(m),i&&await a?.commit();}catch(l){throw i&&await a?.rollback(),l}g.info("Migrations rolled back successfully");}var Gt=class{static async generate(t,e){if(e==="code"||!Array.isArray(t)&&"up"in t){let{up:o,down:i}=t;return `import { Migration } from "hysteria-orm";
|
|
362
282
|
|
|
363
283
|
export default class extends Migration {
|
|
364
284
|
async up() {
|
|
365
|
-
${
|
|
285
|
+
${o.map(l=>` ${l}`).join(`
|
|
366
286
|
`)}
|
|
367
287
|
}
|
|
368
288
|
|
|
369
289
|
async down() {
|
|
370
|
-
${
|
|
290
|
+
${i.map(l=>` ${l}`).join(`
|
|
371
291
|
`)}
|
|
372
292
|
}
|
|
373
293
|
}`}return `import { Migration } from "hysteria-orm";
|
|
374
294
|
|
|
375
295
|
export default class extends Migration {
|
|
376
296
|
async up() {
|
|
377
|
-
${t.map(
|
|
297
|
+
${t.map(o=>` this.schema.rawQuery('${o.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}');`).join(`
|
|
378
298
|
`)}
|
|
379
299
|
}
|
|
380
300
|
|
|
381
301
|
async down() {}
|
|
382
|
-
}`}};var
|
|
383
|
-
import { ${
|
|
302
|
+
}`}};var Cn=class{static initTemplate(t){let e=this.getDefaultPort(t),r=t==="sqlite"?"database.db":"database",n=t==="mongodb"?"mongo":t==="redis"?"redis":"SqlDataSource";return t==="mongodb"||t==="redis"?this.handleNoSqlConnection(t,n==="SqlDataSource"?"sql":n):`
|
|
303
|
+
import { ${n} } from "hysteria-orm";
|
|
384
304
|
|
|
385
|
-
const db = new ${
|
|
305
|
+
const db = new ${n}({
|
|
386
306
|
type: "${t}",
|
|
387
307
|
database: "${r}",${t==="sqlite"?`
|
|
388
|
-
logs
|
|
308
|
+
// query logs are synchronous by default \u2014 enable only when debugging
|
|
309
|
+
logs: false,
|
|
389
310
|
migrations: {
|
|
390
311
|
path: "database/migrations",
|
|
391
312
|
},`:`
|
|
@@ -393,7 +314,8 @@ const db = new ${o}({
|
|
|
393
314
|
host: "localhost",
|
|
394
315
|
username: "root",
|
|
395
316
|
password: "root",
|
|
396
|
-
logs
|
|
317
|
+
// query logs are synchronous by default \u2014 enable only when debugging
|
|
318
|
+
logs: false,
|
|
397
319
|
migrations: {
|
|
398
320
|
path: "database/migrations",
|
|
399
321
|
},`}
|
|
@@ -419,7 +341,7 @@ export default db;`:""}static getNoSqlConnectionConfig(t){switch(t){case "mongod
|
|
|
419
341
|
password: "root",
|
|
420
342
|
username: "default",
|
|
421
343
|
db: 0,
|
|
422
|
-
}`;default:return ""}}static getDefaultPort(t){switch(t){case "mysql":return 3306;case "postgres":return 5432;case "mariadb":return 3306;case "cockroachdb":return 26257;case "mssql":return 1433;case "mongodb":return 27017;case "redis":return 6379;
|
|
344
|
+
}`;default:return ""}}static getDefaultPort(t){switch(t){case "mysql":return 3306;case "postgres":return 5432;case "mariadb":return 3306;case "cockroachdb":return 26257;case "mssql":return 1433;case "mongodb":return 27017;case "redis":return 6379;default:return 3306}}};async function Rn(s,t,e){let r=t.getDbType();g.info(`Running sql for ${r}`);let n=await t.rawQuery(s);if(g.info("Sql ran successfully"),e){let o=dt.dirname(e);oe.existsSync(o)||oe.mkdirSync(o,{recursive:true}),oe.writeFileSync(e,JSON.stringify(n,null,2)),g.info(`Query result saved to ${e}`);return}g.info(JSON.stringify(n,null,2)),await t.disconnect();}var Mn=class{static seederTemplate(){return `import { BaseSeeder } from "hysteria-orm";
|
|
423
345
|
|
|
424
346
|
export default class extends BaseSeeder {
|
|
425
347
|
/**
|
|
@@ -429,12 +351,12 @@ export default class extends BaseSeeder {
|
|
|
429
351
|
console.log('Seeder completed');
|
|
430
352
|
}
|
|
431
353
|
}
|
|
432
|
-
`}};var
|
|
433
|
-
`)}function
|
|
434
|
-
`)}var
|
|
435
|
-
Summary:`),g.info(` Tables processed: ${l.length}`),
|
|
436
|
-
${
|
|
437
|
-
(y/n): `;return new Promise(a=>{o.question(s,l=>{if(o.close(),l.toLowerCase()==="y"||l.toLowerCase()==="yes"){execSync(i,r),a(true);return}a(false);});})},te=Gy.devDependencies,eh=async(i,t,e)=>{let r=co.includes(e)?[`typescript@${te.typescript}`,`esbuild@${te.esbuild}`]:[],o="";switch(e){case "mariadb":case "mysql":o=`mysql2@${te.mysql2}`;break;case "cockroachdb":case "postgres":o=`pg@${te.pg}`,r.push(`@types/pg@${te["@types/pg"]}`);break;case "sqlite":o=`sqlite3@${te.sqlite3}`,r.push(`@types/sqlite3@${te["@types/sqlite3"]}`);break;case "mongo":o=`mongodb@${te.mongodb}`,r.push(`@types/mongodb@${te["@types/mongodb"]}`);break;case "redis":o=`ioredis@${te.ioredis}`,r.push(`@types/ioredis@${te["@types/ioredis"]}`);break;case "mssql":o=`mssql@${te.mssql}`,r.push(`@types/mssql@${te["@types/mssql"]}`);break;case "oracledb":o=`oracledb@${te.oracledb}`,r.push(`@types/oracledb@${te["@types/oracledb"]}`);break;default:throw new Error(`Invalid database type: ${e}`)}if(o){let s=await Xy(`${i} ${t} ${o}`,i,[o],{stdio:"inherit"});s&&g.info("Driver dependency installed successfully"),s||g.info("Driver dependency installation skipped");}let n=i==="deno"?"--dev":"-D";if(r.length){let s=await Xy(`${i} ${t} ${r.join(" ")} ${n}`,i,r,{stdio:"inherit"});s&&g.info("Dev dependencies installed successfully"),s||g.info("Dev dependencies installation skipped");}};var co=["sqlite","mysql","postgres","mariadb","cockroachdb","mssql"],mo=co.concat("mongodb","redis");async function Le(i,t){let{default:e}=await nt(st.resolve(process.cwd(),i));return e||(g.error(`The provided datasource file does not export a default export: ${i}`),process.exit(1)),De.isSqlDataSource(e)||(g.error(`The provided datasource file does not export a valid SqlDataSource instance: ${i}`),process.exit(1)),e.isConnected||await e.connect(),e}function lu(i,t,e,r){let o=typeof e=="boolean"?i??e:i??e?.enabled??true,n=typeof e=="object"?e?.timeout:r,s=t?parseInt(t,10):n??3e4,a=typeof e=="object"&&e.customValue!==void 0?typeof e.customValue=="function"?e.customValue():e.customValue:"hysteria_migration_lock";return {enabled:o,timeout:s,key:a}}var pe=new Command;pe.command("init",{isDefault:false}).option("-t, --type [type]",`Type of the database to connect to, available types: ${mo.join(", ")}`,void 0).description("Initialize the hysteria-orm with standard configuration, it will create a database if not exists and a migrations folder inside it if not exists, it will also create a index.ts file in the database folder").action(async i=>{let t=mo.join(", ");i.type||(g.error(`Database type is required (-t|--type), available types: ${t}`),process.exit(1)),mo.includes(i.type)||(g.error(`Invalid database type: ${i.type}, available types: ${mo.join(", ")}`),process.exit(1)),g.info("Initializing hysteria-orm with standard configuration"),g.info(`Database type: ${i.type||"not specified (will use env DB_TYPE)"}`);let[e,r]=Zy();g.info(`Package manager: ${e}`),g.info("Installing base dependencies"),await eh(e,r,i.type);let o=so.initTemplate(i.type);ne.existsSync("database")?g.info("database folder already exists, skipping"):ne.mkdirSync("database",{recursive:true}),ne.existsSync("database/index.ts")?g.info("database/index.ts file already exists, skipping"):ne.writeFileSync("database/index.ts",o),co.includes(i.type)&&!ne.existsSync("database/migrations")?ne.mkdirSync("database/migrations",{recursive:true}):g.info("database/migrations folder already exists or is not a sql database, skipping"),g.info("Initialization completed successfully");});pe.command("sql [sql]").alias("run:sql").option("-f, --file [path]","Path to the sql file",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-o, --out [query]","File path to save the query result",void 0).option("-t, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).description("Run a sql file or a sql query directly from the command line for the given connection defined in the env file").action(async(i,t)=>{g.info("Starting SQL execution"),t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=t?.file;!i&&!e&&(g.error("SQL query or file path is required"),process.exit(1)),i&&e&&(g.error("Cannot provide both sql query and file path"),process.exit(1));let r=await Le(t.datasource,t?.tsconfigPath);if(i){g.info("Executing SQL query directly from command line");try{await io(i,r,t?.out),g.info("SQL execution completed successfully"),process.exit(0);}catch(n){g.error(`SQL execution failed: ${n}`),process.exit(1);}}e||(g.error("No SQL statement or file provided"),process.exit(1)),g.info(`Reading SQL from file: ${e}`),e=st.resolve(process.cwd(),e),ne.existsSync(e)||(g.error(`File not found: ${e}`),process.exit(1));let o=ne.readFileSync(e,"utf-8");g.info(`SQL file loaded successfully (${o.length} characters)`);try{await io(o,r,t?.out),g.info("SQL file execution completed successfully"),process.exit(0);}catch(n){g.error(`SQL file execution failed: ${n}`),process.exit(1);}});pe.command("create:migration <name>").description("Create a new migration file, standard folder is migrations from the current directory you are now, you can change it in the env MIGRATION_PATH").option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-a, --alter","Generate a template for an alter table migration",false).option("-c, --create","Generate a template for a create table migration",false).option("-t, --table <table>","Specifies the target table name for the migration",false).action((i,t)=>{g.info(`Creating migration: ${i}`),g.info(`Migration options: javascript=${t.javascript}, alter=${t.alter}, create=${t.create}, table=${t.table||"not specified"}`),i||(g.error("Migration name is required"),process.exit(1)),t.alter&&t.create&&(g.error("Cannot use --alter and --create at the same time"),process.exit(1)),t.table&&!(t.create||t.alter)&&(g.error("Cannot use --table without --create or --alter"),process.exit(1));let e=t.alter?"alter":t.create?"create":"basic";g.info(`Migration mode: ${e}`),_u(i,t.javascript,e,t.table||i);});pe.command("migrate [runUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, only applies to postgres",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Run pending migrations, if runUntil is provided, it will run all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Le(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,o=t?.tsconfigPath||e.migrationConfig.tsconfig,n=t?.transactional??e.migrationConfig.transactional,s=lu(t?.lock,t?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(s.enabled){if(g.info("Acquiring migration lock"),a=await e.acquireLock(typeof s.key=="string"?s.key:String(s.key),s.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await Rt(e,i,r,o,n);}catch(l){throw console.error(l),l}finally{s.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof s.key=="string"?s.key:String(s.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});pe.command("rollback [rollbackUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Rollbacks every migration that has been run, if rollbackUntil is provided, it will rollback all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Le(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,o=t?.tsconfigPath||e.migrationConfig.tsconfig,n=t?.transactional??e.migrationConfig.transactional,s=lu(t?.lock,t?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(s.enabled){if(g.info("Acquiring migration lock"),a=await e.acquireLock(typeof s.key=="string"?s.key:String(s.key),s.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await Kt(e,i,r,o,n);}catch(l){throw console.error(l),l}finally{s.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof s.key=="string"?s.key:String(s.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});pe.command("refresh").option("-f, --force","Drop all tables in the database before running the migrations instead of running the down migrations",false).option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).option("-m, --migration-path [path]","Path to the migrations",void 0).description("Rollbacks every migration that has been run and then run the migrations").action(async i=>{let t=i?.force||false;i?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Le(i.datasource,i?.tsconfigPath),r=i?.migrationPath||e.migrationConfig.path,o=i?.tsconfigPath||e.migrationConfig.tsconfig,n=i?.transactional??e.migrationConfig.transactional,s=lu(i?.lock,i?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(s.enabled){if(g.info("Acquiring migration lock for refresh operation"),a=await e.acquireLock(typeof s.key=="string"?s.key:String(s.key),s.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}t?await yo(e,!1,n):await Kt(e,void 0,r,o,n),await Rt(e,void 0,r,o,n);}catch(l){console.error(l);}finally{s.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof s.key=="string"?s.key:String(s.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});pe.command("generate:migrations").description("Generate a migration file based on the database schema and the models metadata, supported only for postgres, mysql, mariadb and cockroachdb").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-f, --dry","Does not create a migration file but only outputs sql statements",false).option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-m, --migration-path [path]","Path to the migrations",void 0).option("-n, --name [name]","Name of the migration",void 0).option("-o, --output [mode]","Output mode: 'code' generates schema builder calls, 'raw' generates raw SQL (default: code)","code").action(async i=>{i?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1)),i?.name||(i.name="auto_generated_migration"),i.name=`${Date.now()}_${i.name}`;let t=await Le(i.datasource,i?.tsconfigPath),e=i?.migrationPath||t.migrationConfig.path;["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(g.error(`generate:migrations is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),process.exit(1));try{let o=await Ve.makeDiff(t);if((i.output==="raw"?"raw":"code")==="code"){let s=o.getCodeStatements();if(s.up.length||(g.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){console.log("// up()");for(let u of s.up)console.log(u);console.log(`
|
|
438
|
-
// down()`);for(let u of
|
|
439
|
-
export{
|
|
354
|
+
`}};var Oh=(s,t,e)=>{let r=e||"database/seeders",n=t?".js":".ts",i=`${Date.now()}_${s}${n}`;oe.existsSync(r)||(oe.mkdirSync(r,{recursive:true}),g.info(`Created seeders directory: ${r}`));let a=dt.join(r,i),l=Mn.seederTemplate();oe.writeFileSync(a,l),g.info(`Seeder created successfully: ${a}`);},Cf=Oh;var Ah=async(s,t,e)=>{let r=[];for(let n of t){let o=dt.resolve(process.cwd(),n);oe.existsSync(o)||(g.error(`Path not found: ${o}`),process.exit(1));let i=oe.statSync(o);if(i.isDirectory()){let a=oe.readdirSync(o).filter(l=>l.endsWith(".ts")||l.endsWith(".js")).sort();for(let l of a)r.push({file:l,folder:o});}else if(i.isFile()){let a=dt.basename(o),l=dt.dirname(o);a.endsWith(".ts")||a.endsWith(".js")?r.push({file:a,folder:l}):(g.error(`File must be a .ts or .js file: ${a}`),process.exit(1));}}if(!r.length){g.info("No seeders found");return}g.info(`Found ${r.length} seeder(s) to run`),s.isConnected||await s.connect();for(let{file:n,folder:o}of r)try{g.info(`Running seeder: ${n}`);let i=dt.resolve(o,n),a=await ut(i,e);if(!a.default){g.error(`Seeder ${n} does not export a default class`);continue}let l=new a.default(s);if(typeof l.run!="function"){g.error(`Seeder ${n} must have a run() method. Make sure it extends BaseSeeder from hysteria-orm`);continue}await l.run(),g.info(`\u2713 Completed seeder: ${n}`);}catch(i){throw g.error(`Failed to run seeder ${n}: ${i}`),i}g.info("All seeders completed successfully");},Rf=Ah;function K(s){return {_phantom:void 0,_apply:s}}function Mf(s){return K((t,e)=>{M.date(s??{},false)(t,e);})}Mf.string=function(t){return K((e,r)=>{M.date(t??{},true)(e,r);})};function _f(s){return K((t,e)=>{M.datetime(s??{},false)(t,e);})}_f.string=function(t){return K((e,r)=>{M.datetime(t??{},true)(e,r);})};function xf(s){return K((t,e)=>{M.timestamp(s??{},false)(t,e);})}xf.string=function(t){return K((e,r)=>{M.timestamp(t??{},true)(e,r);})};function Of(s){return K((t,e)=>{M.time(s??{},false)(t,e);})}Of.string=function(t){return K((e,r)=>{M.time(t??{},true)(e,r);})};se();var Af=Symbol("mongoProperties");function kl(){return (s,t)=>{let e=z.getMetadata(Af,s)||[];e.push(t),z.defineMetadata(Af,e,s);}}var Yt=class extends je{static get collection(){if(!this._collection)throw new Error(`Collection name not set for ${this.name}. Use defineCollection() to create collections.`);return this._collection}static beforeFetch(t){}static beforeInsert(t){return t}static beforeUpdate(t){}static beforeDelete(t){}static async afterFetch(t){return t}};Wl([kl()],Yt.prototype,"id");se();qt();se();function $h(s){return s.endsWith("ies")?s.slice(0,-3)+"y":s.endsWith("sses")||s.endsWith("shes")||s.endsWith("ches")||s.endsWith("xes")||s.endsWith("zes")?s.slice(0,-2):s.endsWith("s")&&!s.endsWith("ss")?s.slice(0,-1):s}var Ph=new Set(["table","primaryKey","softDeleteColumn","softDeleteValue","modelCaseConvention","databaseCaseConvention","getColumns","getColumnsByName","getColumnsByDatabaseName","getRelations","getIndexes","getUniques","getChecks","beforeFetch","afterFetch","beforeInsert","beforeInsertMany","beforeUpdate","beforeDelete","query","all","first","find","findOneOrFail","findOne","findBy","findOneBy","findOneByPrimaryKey","refresh","sync","insert","insertMany","updateRecord","firstOrInsert","upsert","upsertMany","deleteRecord","save","softDelete","truncate","sqlInstance","getTableInfo","getIndexInfo","getTableSchema","prototype","constructor"]);function $f(s,t){let e=$h(s);switch(t){case "pascal":return Vn(e);case "camel":return mr(e);case "snake":return cr(e);default:return e}}function Pf(s){return Ph.has(s)?{name:`${s}_`,wasSanitized:true}:{name:s,wasSanitized:false}}function vf(s,t){switch(t){case "snake":return `${cr(s)}.ts`;case "camel":return `${s}.ts`;default:return `${s}.ts`}}function If(s,t){let{dataType:e,isNullable:r,defaultValue:n,length:o,precision:i,scale:a,withTimezone:l,unsigned:u}=t,d={};if(r||(d.nullable=false),n!=null){let p=String(n);!p.includes("(")&&!p.includes("CURRENT_")&&(d.default=n);}o!=null&&(d.length=o),i!=null&&(d.precision=i),a!=null&&(d.scale=a),u&&(d.unsigned=true);let m=e.toLowerCase();m.includes("timestamp")&&l&&(d.withTimezone=true);let c="string";return m.includes("varchar")||m.includes("char")?c="string":m.includes("text")?c="text":m==="integer"||m==="int"||m==="int4"?c="integer":m==="bigint"||m==="int8"?c="bigInteger":m==="smallint"||m==="int2"?c="smallint":m==="boolean"||m==="bool"?c="boolean":m.includes("timestamp")?c="timestamp":m==="date"?c="date":m==="time"?c="time":m==="uuid"?c="uuid":m==="json"?c="json":m==="jsonb"?c="jsonb":m==="decimal"||m==="numeric"?c="decimal":m==="float"||m==="real"||m==="double"||m==="double precision"?c="float":m==="binary"||m==="bytea"?c="binary":m==="enum"&&(c="enum",t.enumValues&&(d.enumValues=t.enumValues)),s==="mysql"&&m.includes("tinyint")&&o===1&&(c="boolean"),{method:c,options:d}}function Ue(s){return JSON.stringify(s)}function Ef(s){return s==null?"null":typeof s=="string"?Ue(s):typeof s=="boolean"?s?"true":"false":typeof s=="number"?String(s):Array.isArray(s)?`[${s.map(Ef).join(", ")}]`:String(s)}function kf(s,t,e,r){let n=[],o=new Set(t.primaryKey?.columns||[]),i=new Map;for(let u of t.foreignKeys)for(let d=0;d<u.columns.length;d++){let m=u.columns[d],c=u.referencedColumns[d];i.has(m)||i.set(m,{referencedTable:u.referencedTable,referencedColumns:[c],onDelete:u.onDelete,onUpdate:u.onUpdate});}n.push('import { col, defineModel } from "hysteria-orm";'),n.push(""),n.push(`export const ${s} = defineModel(${Ue(s)}, {`),n.push(" columns: {");for(let u of t.columns){let m=Pf(u.name).name,c=o.has(u.name),{method:p,options:h}=If(e,u),f=[];for(let[R,_]of Object.entries(h))_!=null&&f.push(`${R}: ${Ef(_)}`);let T=f.length>0?`{ ${f.join(", ")} }`:"",N=T?`col.${p}(${T})`:`col.${p}()`,w=i.get(u.name);if(w){let R=w.referencedColumns.join(", "),_=`/** @fk references ${w.referencedTable}(${R})`;w.onDelete&&(_+=` \u2014 onDelete: ${w.onDelete}`),w.onUpdate&&(_+=` \u2014 onUpdate: ${w.onUpdate}`),_+=" */",n.push(` ${_}`);}c&&(n.push(" // Primary key column"),(p==="integer"||p==="bigInteger")&&n.push(" // TODO: may be auto-increment, verify manually")),n.push(` ${m}: ${N},`);}n.push(" },");let a=t.indexes.filter(u=>!u.isUnique);if(a.length>0){n.push(" indexes: [");for(let u of a)u.name?n.push(` { columns: [${u.columns.map(Ue).join(", ")}], name: ${Ue(u.name)} },`):n.push(` [${u.columns.map(Ue).join(", ")}],`);n.push(" ],");}let l=t.indexes.filter(u=>u.isUnique);if(l.length>0){n.push(" uniques: [");for(let u of l)u.name?n.push(` { columns: [${u.columns.map(Ue).join(", ")}], name: ${Ue(u.name)} },`):n.push(` [${u.columns.map(Ue).join(", ")}],`);n.push(" ],");}return n.push("});"),n.push(""),n.push(`export type ${s}Type = InstanceType<typeof ${s}>;`),n.push(""),n.join(`
|
|
355
|
+
`)}function Bf(s){let t=[];for(let e of s)t.push(`export * from "./${e}";`);return t.push(""),t.join(`
|
|
356
|
+
`)}var vh=["pg_","information_schema","mysql","sys","performance_schema","sqlite_"];function Ih(s){let t=s.toLowerCase();return vh.some(e=>t.startsWith(e))}async function Bl(s,t){let{outDir:e,naming:r,dry:n}=t;g.info("Starting database introspection");let o=s.getDbType();g.info(`Database dialect: ${o}`);let i=await s.introspectSchema();if(!i||i.length===0){g.warn("No tables found in database");return}let a=[];for(let d of i)for(let m of d.tables)Ih(m.name)||a.push(m.name);if(a.length===0){g.warn("No user tables found in database (system tables excluded)");return}g.info(`Found ${a.length} tables to process`);let l=[],u=[];for(let d of a){g.info(`Processing table: ${d}`);try{let m=await s.getTableSchema(d);if(m.columns.length===0){g.warn(`Table ${d} has no columns, skipping`);continue}let c=$f(d,r),p=vf(c,r),h=kf(d,m,o,{naming:r});l.push(c),n?(g.info(`[DRY RUN] Would generate: ${p}`),g.info("---"),g.info(h),g.info("---")):u.push({fileName:p,content:h});}catch(m){g.error(`Failed to process table ${d}: ${m}`);}}if(!n){oe.existsSync(e)||(oe.mkdirSync(e,{recursive:true}),g.info(`Created output directory: ${e}`));for(let{fileName:d,content:m}of u){let c=dt.join(e,d);oe.writeFileSync(c,m,"utf-8"),g.info(`Generated: ${c}`);}if(l.length>0){let d=Bf(l),m=dt.join(e,"index.ts");oe.writeFileSync(m,d,"utf-8"),g.info(`Generated: ${m}`);}}g.info(`
|
|
357
|
+
Summary:`),g.info(` Tables processed: ${l.length}`),n?g.info(" Mode: Dry run (no files written)"):(g.info(` Output directory: ${e}`),g.info(` Files generated: ${u.length+1}`));}var Kf={devDependencies:{"@types/ioredis":"^5.0.0","@types/mongodb":"^4.0.7","@types/mssql":"^9.1.11","@types/pg":"^8.20.0","@types/sqlite3":"^5.1.0",esbuild:"^0.28.0",ioredis:"^5.10.1",mongodb:"^7.1.1",mssql:"^12.2.1",mysql2:"^3.20.0",pg:"^8.20.0",sqlite3:"^6.0.1",typescript:"^6.0.2"}};var jf=()=>oe.existsSync(dt.join(process.cwd(),"yarn.lock"))?["yarn","add"]:oe.existsSync(dt.join(process.cwd(),"pnpm-lock.yaml"))?["pnpm","add"]:oe.existsSync(dt.join(process.cwd(),"package-lock.json"))?["npm","install"]:oe.existsSync(dt.join(process.cwd(),"bun.lockb"))?["bun","add"]:oe.existsSync(dt.join(process.cwd(),"deno.lock"))?["deno","add"]:["npm","install"],Lf=async(s,t,e,r)=>{let n=Bh.createInterface({input:process.stdin,output:process.stdout}),o=e.join(", "),i=`Do you want to install the following dependencies using ${t}?
|
|
358
|
+
${o}
|
|
359
|
+
(y/n): `;return new Promise(a=>{n.question(i,l=>{if(n.close(),l.toLowerCase()==="y"||l.toLowerCase()==="yes"){execSync(s,r),a(true);return}a(false);});})},de=Kf.devDependencies,Wf=async(s,t,e)=>{let r=On.includes(e)?[`typescript@${de.typescript}`,`esbuild@${de.esbuild}`]:[],n="";switch(e){case "mariadb":case "mysql":n=`mysql2@${de.mysql2}`;break;case "cockroachdb":case "postgres":n=`pg@${de.pg}`,r.push(`@types/pg@${de["@types/pg"]}`);break;case "sqlite":n=`sqlite3@${de.sqlite3}`,r.push(`@types/sqlite3@${de["@types/sqlite3"]}`);break;case "mongo":n=`mongodb@${de.mongodb}`,r.push(`@types/mongodb@${de["@types/mongodb"]}`);break;case "redis":n=`ioredis@${de.ioredis}`,r.push(`@types/ioredis@${de["@types/ioredis"]}`);break;case "mssql":n=`mssql@${de.mssql}`,r.push(`@types/mssql@${de["@types/mssql"]}`);break;default:throw new Error(`Invalid database type: ${e}`)}if(n){let i=await Lf(`${s} ${t} ${n}`,s,[n],{stdio:"inherit"});i&&g.info("Driver dependency installed successfully"),i||g.info("Driver dependency installation skipped");}let o=s==="deno"?"--dev":"-D";if(r.length){let i=await Lf(`${s} ${t} ${r.join(" ")} ${o}`,s,r,{stdio:"inherit"});i&&g.info("Dev dependencies installed successfully"),i||g.info("Dev dependencies installation skipped");}};var On=["sqlite","mysql","postgres","mariadb","cockroachdb","mssql"],An=On.concat("mongodb","redis");async function Ve(s,t){let{default:e}=await ut(dt.resolve(process.cwd(),s));return e||(g.error(`The provided datasource file does not export a default export: ${s}`),process.exit(1)),Pe.isSqlDataSource(e)||(g.error(`The provided datasource file does not export a valid SqlDataSource instance: ${s}`),process.exit(1)),e.isConnected||await e.connect(),e}function Ql(s,t,e,r){let n=typeof e=="boolean"?s??e:s??e?.enabled??true,o=typeof e=="object"?e?.timeout:r,i=t?parseInt(t,10):o??3e4,a=typeof e=="object"&&e.customValue!==void 0?typeof e.customValue=="function"?e.customValue():e.customValue:"hysteria_migration_lock";return {enabled:n,timeout:i,key:a}}var he=new Command;he.command("init",{isDefault:false}).option("-t, --type [type]",`Type of the database to connect to, available types: ${An.join(", ")}`,void 0).description("Initialize the hysteria-orm with standard configuration, it will create a database if not exists and a migrations folder inside it if not exists, it will also create a index.ts file in the database folder").action(async s=>{let t=An.join(", ");s.type||(g.error(`Database type is required (-t|--type), available types: ${t}`),process.exit(1)),An.includes(s.type)||(g.error(`Invalid database type: ${s.type}, available types: ${An.join(", ")}`),process.exit(1)),g.info("Initializing hysteria-orm with standard configuration"),g.info(`Database type: ${s.type||"not specified (will use env DB_TYPE)"}`);let[e,r]=jf();g.info(`Package manager: ${e}`),g.info("Installing base dependencies"),await Wf(e,r,s.type);let n=Cn.initTemplate(s.type);oe.existsSync("database")?g.info("database folder already exists, skipping"):oe.mkdirSync("database",{recursive:true}),oe.existsSync("database/index.ts")?g.info("database/index.ts file already exists, skipping"):oe.writeFileSync("database/index.ts",n),On.includes(s.type)&&!oe.existsSync("database/migrations")?oe.mkdirSync("database/migrations",{recursive:true}):g.info("database/migrations folder already exists or is not a sql database, skipping"),g.info("Initialization completed successfully");});he.command("sql [sql]").alias("run:sql").option("-f, --file [path]","Path to the sql file",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-o, --out [query]","File path to save the query result",void 0).option("-t, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).description("Run a sql file or a sql query directly from the command line for the given connection defined in the env file").action(async(s,t)=>{g.info("Starting SQL execution"),t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=t?.file;!s&&!e&&(g.error("SQL query or file path is required"),process.exit(1)),s&&e&&(g.error("Cannot provide both sql query and file path"),process.exit(1));let r=await Ve(t.datasource,t?.tsconfigPath);if(s){g.info("Executing SQL query directly from command line");try{await Rn(s,r,t?.out),g.info("SQL execution completed successfully"),process.exit(0);}catch(o){g.error(`SQL execution failed: ${o}`),process.exit(1);}}e||(g.error("No SQL statement or file provided"),process.exit(1)),g.info(`Reading SQL from file: ${e}`),e=dt.resolve(process.cwd(),e),oe.existsSync(e)||(g.error(`File not found: ${e}`),process.exit(1));let n=oe.readFileSync(e,"utf-8");g.info(`SQL file loaded successfully (${n.length} characters)`);try{await Rn(n,r,t?.out),g.info("SQL file execution completed successfully"),process.exit(0);}catch(o){g.error(`SQL file execution failed: ${o}`),process.exit(1);}});he.command("create:migration <name>").description("Create a new migration file, standard folder is migrations from the current directory you are now, you can change it in the env MIGRATION_PATH").option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-a, --alter","Generate a template for an alter table migration",false).option("-c, --create","Generate a template for a create table migration",false).option("-t, --table <table>","Specifies the target table name for the migration",false).action((s,t)=>{g.info(`Creating migration: ${s}`),g.info(`Migration options: javascript=${t.javascript}, alter=${t.alter}, create=${t.create}, table=${t.table||"not specified"}`),s||(g.error("Migration name is required"),process.exit(1)),t.alter&&t.create&&(g.error("Cannot use --alter and --create at the same time"),process.exit(1)),t.table&&!(t.create||t.alter)&&(g.error("Cannot use --table without --create or --alter"),process.exit(1));let e=t.alter?"alter":t.create?"create":"basic";g.info(`Migration mode: ${e}`),nu(s,t.javascript,e,t.table||s);});he.command("migrate [runUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, only applies to postgres",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Run pending migrations, if runUntil is provided, it will run all migrations until the provided migration name").action(async(s,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ve(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,n=t?.tsconfigPath||e.migrationConfig.tsconfig,o=t?.transactional??e.migrationConfig.transactional,i=Ql(t?.lock,t?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(i.enabled){if(g.info("Acquiring migration lock"),a=await e.acquireLock(typeof i.key=="string"?i.key:String(i.key),i.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await At(e,s,r,n,o);}catch(l){throw console.error(l),l}finally{i.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof i.key=="string"?i.key:String(i.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});he.command("rollback [rollbackUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Rollbacks every migration that has been run, if rollbackUntil is provided, it will rollback all migrations until the provided migration name").action(async(s,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ve(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,n=t?.tsconfigPath||e.migrationConfig.tsconfig,o=t?.transactional??e.migrationConfig.transactional,i=Ql(t?.lock,t?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(i.enabled){if(g.info("Acquiring migration lock"),a=await e.acquireLock(typeof i.key=="string"?i.key:String(i.key),i.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await zt(e,s,r,n,o);}catch(l){throw console.error(l),l}finally{i.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof i.key=="string"?i.key:String(i.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});he.command("refresh").option("-f, --force","Drop all tables in the database before running the migrations instead of running the down migrations",false).option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).option("-m, --migration-path [path]","Path to the migrations",void 0).description("Rollbacks every migration that has been run and then run the migrations").action(async s=>{let t=s?.force||false;s?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ve(s.datasource,s?.tsconfigPath),r=s?.migrationPath||e.migrationConfig.path,n=s?.tsconfigPath||e.migrationConfig.tsconfig,o=s?.transactional??e.migrationConfig.transactional,i=Ql(s?.lock,s?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(i.enabled){if(g.info("Acquiring migration lock for refresh operation"),a=await e.acquireLock(typeof i.key=="string"?i.key:String(i.key),i.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}t?await vn(e,!1,o):await zt(e,void 0,r,n,o),await At(e,void 0,r,n,o);}catch(l){console.error(l);}finally{i.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof i.key=="string"?i.key:String(i.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});he.command("generate:migrations").description("Generate a migration file based on the database schema and the models metadata, supported only for postgres, mysql, mariadb and cockroachdb").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-f, --dry","Does not create a migration file but only outputs sql statements",false).option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-m, --migration-path [path]","Path to the migrations",void 0).option("-n, --name [name]","Name of the migration",void 0).option("-o, --output [mode]","Output mode: 'code' generates schema builder calls, 'raw' generates raw SQL (default: code)","code").action(async s=>{s?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1)),s?.name||(s.name="auto_generated_migration"),s.name=`${Date.now()}_${s.name}`;let t=await Ve(s.datasource,s?.tsconfigPath),e=s?.migrationPath||t.migrationConfig.path;["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(g.error(`generate:migrations is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),process.exit(1));try{let n=await Ge.makeDiff(t);if((s.output==="raw"?"raw":"code")==="code"){let i=n.getCodeStatements();if(i.up.length||(g.info("No new changes detected between database schema and models metadata"),process.exit(0)),s.dry){console.log("// up()");for(let u of i.up)console.log(u);console.log(`
|
|
360
|
+
// down()`);for(let u of i.down)console.log(u);process.exit(0);}oe.existsSync(e)||oe.mkdirSync(e,{recursive:!0});let a=await Gt.generate(i,"code"),l=s?.javascript?".js":".ts";oe.writeFileSync(`${e}/${s?.name}${l}`,a),g.info(`Migration file created successfully: ${s?.name}${l}`);}else {let i=n.getSqlStatements();if(i.length||(g.info("No new changes detected between database schema and models metadata"),process.exit(0)),s.dry){for(let u of i)console.log(u);process.exit(0);}oe.existsSync(e)||oe.mkdirSync(e,{recursive:!0});let a=await Gt.generate(i,"raw"),l=s?.javascript?".js":".ts";oe.writeFileSync(`${e}/${s?.name}${l}`,a),g.info(`Migration file created successfully: ${s?.name}${l}`);}await t.disconnect(),process.exit(0);}catch(n){console.error(n),await t.disconnect(),process.exit(1);}});he.command("sync").description("Sync the database schema with the models metadata by computing a diff and applying the SQL statements directly, supported only for postgres, mysql, mariadb and cockroachdb").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-f, --dry","Does not apply changes but only outputs the SQL statements that would be executed",false).option("-t, --transactional","Runs all the sync statements in a single transaction",false).action(async s=>{s?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let t=await Ve(s.datasource,s?.tsconfigPath);["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(g.error(`sync is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),await t.disconnect(),process.exit(1));try{let n=(await Ge.makeDiff(t)).getSqlStatements();if(n.length||(g.info("No new changes detected between database schema and models metadata"),await t.disconnect(),process.exit(0)),s.dry){g.info(`${n.length} SQL statement(s) would be executed:`);for(let o of n)console.log(o);await t.disconnect(),process.exit(0);}await t.syncSchema({transactional:s?.transactional??!1}),g.info("Schema sync completed successfully"),await t.disconnect(),process.exit(0);}catch(r){console.error(r),await t.disconnect(),process.exit(1);}});he.command("create:seeder <name>").description("Create a new seeder file").option("-j, --javascript","Generate a javascript seeder file instead of a default typescript one",false).option("-s, --seeder-path [path]","Path to the seeders",void 0).action((s,t)=>{g.info(`Creating seeder: ${s}`),g.info(`Seeder options: javascript=${t.javascript}`),s||(g.error("Seeder name is required"),process.exit(1)),Cf(s,t.javascript,t.seederPath);});he.command("seed").description("Run database seeders from folder or specific files").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-s, --seeder-path [path]","Path to seeder folder or file (can be specified multiple times or comma-separated)",(s,t=[])=>[...t,s]).action(async s=>{g.info("Starting seeder execution"),s?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let t=await Ve(s.datasource,s?.tsconfigPath),e;s?.seederPath&&s.seederPath.length>0?e=s.seederPath.flatMap(n=>n.split(",").map(o=>o.trim())):e=[t.seederConfig.path];let r=s?.tsconfigPath||t.seederConfig.tsconfig;try{await Rf(t,e,r),await t.disconnect(),g.info("Seeding completed successfully"),process.exit(0);}catch(n){console.error(n),await t.disconnect(),process.exit(1);}});he.command("db:pull").description("Generate TypeScript model files from database schema introspection").option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-o, --out [path]","Output directory for generated models","./database/models").option("--naming [convention]","Naming convention for model names (camel, snake, pascal)","camel").option("--dry","Preview generated code without writing files",false).option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).action(async s=>{s?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let t=["camel","snake","pascal"],e=s?.naming||"camel";t.includes(e)||(g.error(`Invalid naming convention: ${e}. Must be one of: ${t.join(", ")}`),process.exit(1));let r=await Ve(s.datasource,s?.tsconfig);try{await Bl(r,{outDir:s?.out||"./database/models",naming:e,dry:s?.dry||!1}),await r.disconnect(),process.exit(0);}catch(n){console.error(n),await r.disconnect(),process.exit(1);}});he.parse(process.argv);
|
|
361
|
+
export{On as sqlDatabaseTypes};//# sourceMappingURL=cli.js.map
|
|
440
362
|
//# sourceMappingURL=cli.js.map
|