hysteria-orm 10.9.4 → 10.9.6

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import {Command}from'commander';import pe from'fs';import ze from'path';import ol from'fs/promises';import {format}from'sql-formatter';import {highlight}from'sql-highlight';import {createRequire}from'module';import {pathToFileURL}from'url';import Te from'crypto';import Ee from'dayjs';import ff from'dayjs/plugin/customParseFormat.js';import yf from'dayjs/plugin/timezone.js';import hf from'dayjs/plugin/utc.js';import {PassThrough,Readable}from'stream';import {execSync}from'child_process';import py from'readline';var Ga=i=>{throw TypeError(i)};var vp=(i,t,e)=>t.has(i)||Ga("Cannot "+e);var Za=(i,t,e)=>t.has(i)?Ga("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);var Xa=(i,t,e)=>(vp(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;}};var ee=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 B=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};var dt=class dt extends ee{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new dt(this.mongoClient);let e=await import('mongodb').catch(()=>{throw new B("mongodb")});if(this.mongoClient=e.default??e,!this.mongoClient)throw new B("mongodb");return new dt(this.mongoClient)}};dt.mongoClient=null;var Pt=dt;var ut=class ut extends ee{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new ut(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new B("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new B("mssql");return new ut(this.mssqlClient)}};ut.mssqlClient=null;var $t=ut;var mt=class mt extends ee{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new mt(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new B("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new B("mysql2");return new mt(this.mysqlClient)}};mt.mysqlClient=null;var Dt=mt;var ct=class ct extends ee{constructor(e,r){super(r);this.type="oracledb";this.client=e;}static async createDriver(){if(this.oracledbClient)return new ct(this.oracledbClient);let e=await import('oracledb').catch(()=>{throw new B("oracledb")});if(this.oracledbClient=e.default??e,!this.oracledbClient)throw new B("oracledb");return new ct(this.oracledbClient)}};ct.oracledbClient=null;var It=ct;var pt=class pt extends ee{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new pt(this.pgClient);let e=await import('pg').catch(()=>{throw new B("pg")});if(this.pgClient=e.default??e,!this.pgClient)throw new B("pg");return new pt(this.pgClient)}};pt.pgClient=null;var Ot=pt;var ft=class ft extends ee{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new ft(this.sqlite3Client);let e=await import('sqlite3').catch(()=>{throw new B("sqlite3")});if(this.sqlite3Client=e.default??e,!this.sqlite3Client)throw new B("sqlite3");return new ft(this.sqlite3Client)}};ft.sqlite3Client=null;var Et=ft;var ye=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await Dt.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await Ot.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await Et.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await Pt.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await $t.createDriver(),this.mssqlDriver;case "oracledb":return this.oracledbDriver=await It.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}}};ye.mysqlDriver=null,ye.pgDriver=null,ye.sqliteDriver=null,ye.mssqlDriver=null,ye.oracledbDriver=null,ye.mongodbDriver=null;var E={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},kp=()=>{try{pe.readFileSync(".env","utf8").split(`
3
- `).forEach(e=>{let[r,o]=e.split("="),n=r.trim(),s=o.trim();switch(n){case "DB_TYPE":E.DB_TYPE||(E.DB_TYPE=s);break;case "DB_HOST":E.DB_HOST||(E.DB_HOST=s);break;case "DB_PORT":E.DB_PORT||(E.DB_PORT=s);break;case "DB_USER":E.DB_USER||(E.DB_USER=s);break;case "DB_PASSWORD":E.DB_PASSWORD||(E.DB_PASSWORD=s);break;case "DB_DATABASE":E.DB_DATABASE||(E.DB_DATABASE=s);break;case "MIGRATION_PATH":E.MIGRATION_PATH||(E.MIGRATION_PATH=s||"database/migrations");break;case "REDIS_HOST":E.REDIS_HOST||(E.REDIS_HOST=s);break;case "REDIS_PORT":E.REDIS_PORT||(E.REDIS_PORT=s);break;case "REDIS_USERNAME":E.REDIS_USERNAME||(E.REDIS_USERNAME=s);break;case "REDIS_PASSWORD":E.REDIS_PASSWORD||(E.REDIS_PASSWORD=s);break;case "REDIS_DATABASE":E.REDIS_DATABASE||(E.REDIS_DATABASE=s);break;case "MONGO_URL":E.MONGO_URL||(E.MONGO_URL=s);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":E.MSSQL_TRUST_SERVER_CERTIFICATE||(E.MSSQL_TRUST_SERVER_CERTIFICATE=s==="true");break}});}catch{}finally{return E}},I=kp();var Bp=async i=>(await ye.getDriver(i)).client,Ue=async(i,t)=>{let e=await Bp(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 d=e,u=t,p=u?.database;return new d.Database(p,u?.driverOptions?.mode??void 0,P=>{if(P)throw new S("SqliteDataSource::createSqlPool","CONNECTION_NOT_ESTABLISHED")});case "mssql":let c=e,h=t,{options:f,...g}=h.driverOptions??{},N=new c.ConnectionPool({server:h.host??"localhost",port:h.port,database:h.database,user:h.username,password:h.password,...g,options:{trustServerCertificate:I.MSSQL_TRUST_SERVER_CERTIFICATE??void 0,...f,abortTransactionOnError:false,enableImplicitTransactions:false}});return await N.connect(),N;case "oracledb":let q=e,R=t,_=`${R.host}/${R.database}`;return await q.createPool({user:R.username,password:R.password,connectString:_,...R.driverOptions});default:throw new S("SqlConnectionUtils::createSqlPool",`UNSUPPORTED_DATABASE_TYPE_${i}`)}};var yt=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"}},vt=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)},Fe=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,vt(t[r]));for(let r=0;r<t.length;r++){let o=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(o,vt(t[r]));}for(let r=0;r<t.length;r++){let o=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(o,vt(t[r]));}for(let r=0;r<t.length;r++){let o=new RegExp(`:${r+1}(?!\\d)`,"g");e=e.replace(o,vt(t[r]));}return e},je=(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,Ve=(i,t)=>{let e=i.getDbType(),r;try{r=format(t,{...i.inputDetails.queryFormatOptions,language:yt(e)});}catch{try{r=format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var tl={info:0,warn:1,error:2};function Qt(i){return i?i===true?{level:"info",logQueries:true}:{level:i.level??"info",logQueries:i.logQueries??true,customLogger:i.customLogger}:null}function Wp(i,t="info"){let e=Qt(i);if(!e)return false;let r=e.level??"info";return tl[t]>=tl[r]}function Up(i){let t=Qt(i);return t?t.logQueries??true:false}var Je={info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",reset:"\x1B[0m"};function Fp(){let i=new Date,t=e=>e.toString().padStart(2,"0");return `${i.getFullYear()}-${t(i.getMonth()+1)}-${t(i.getDate())} ${t(i.getHours())}:${t(i.getMinutes())}:${t(i.getSeconds())}`}function Lr(i,t){let e=Fp(),r=i.toUpperCase();return i==="error"?`${Je.error}[${r}] ${e}
2
+ import {Command}from'commander';import ye from'fs';import ze from'path';import sl from'fs/promises';import {format}from'sql-formatter';import {highlight}from'sql-highlight';import {createRequire}from'module';import {pathToFileURL}from'url';import _e from'crypto';import {PassThrough,Readable}from'stream';import Be from'dayjs';import $f from'dayjs/plugin/customParseFormat.js';import Df from'dayjs/plugin/timezone.js';import If from'dayjs/plugin/utc.js';import {execSync}from'child_process';import gy from'readline';var Za=i=>{throw TypeError(i)};var Kp=(i,t,e)=>t.has(i)||Za("Cannot "+e);var Xa=(i,t,e)=>t.has(i)?Za("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);var el=(i,t,e)=>(Kp(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;}};var ee=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 B=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};var ut=class ut extends ee{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new ut(this.mongoClient);let e=await import('mongodb').catch(()=>{throw new B("mongodb")});if(this.mongoClient=e.default??e,!this.mongoClient)throw new B("mongodb");return new ut(this.mongoClient)}};ut.mongoClient=null;var $t=ut;var mt=class mt extends ee{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new mt(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new B("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new B("mssql");return new mt(this.mssqlClient)}};mt.mssqlClient=null;var Dt=mt;var ct=class ct extends ee{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new ct(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new B("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new B("mysql2");return new ct(this.mysqlClient)}};ct.mysqlClient=null;var It=ct;var pt=class pt extends ee{constructor(e,r){super(r);this.type="oracledb";this.client=e;}static async createDriver(){if(this.oracledbClient)return new pt(this.oracledbClient);let e=await import('oracledb').catch(()=>{throw new B("oracledb")});if(this.oracledbClient=e.default??e,!this.oracledbClient)throw new B("oracledb");return new pt(this.oracledbClient)}};pt.oracledbClient=null;var Ot=pt;var ft=class ft extends ee{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 B("pg")});if("default"in e&&(e.default,this.pgClient=e.default??e),!this.pgClient)throw new B("pg");return new ft(this.pgClient)}};ft.pgClient=null;var Et=ft;var yt=class yt extends ee{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new yt(this.sqlite3Client);let e=await import('sqlite3').catch(()=>{throw new B("sqlite3")});if(this.sqlite3Client=e.default??e,!this.sqlite3Client)throw new B("sqlite3");return new yt(this.sqlite3Client)}};yt.sqlite3Client=null;var vt=yt;var ge=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await It.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await Et.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await vt.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await $t.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await Dt.createDriver(),this.mssqlDriver;case "oracledb":return this.oracledbDriver=await Ot.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}}};ge.mysqlDriver=null,ge.pgDriver=null,ge.sqliteDriver=null,ge.mssqlDriver=null,ge.oracledbDriver=null,ge.mongodbDriver=null;var O={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},Wp=()=>{if(!ye.existsSync(".env"))return O;try{ye.readFileSync(".env","utf8").split(`
3
+ `).forEach(e=>{let[r,o]=e.split("="),n=r.trim(),s=o.trim();switch(n){case "DB_TYPE":O.DB_TYPE||(O.DB_TYPE=s);break;case "DB_HOST":O.DB_HOST||(O.DB_HOST=s);break;case "DB_PORT":O.DB_PORT||(O.DB_PORT=s);break;case "DB_USER":O.DB_USER||(O.DB_USER=s);break;case "DB_PASSWORD":O.DB_PASSWORD||(O.DB_PASSWORD=s);break;case "DB_DATABASE":O.DB_DATABASE||(O.DB_DATABASE=s);break;case "MIGRATION_PATH":O.MIGRATION_PATH||(O.MIGRATION_PATH=s||"database/migrations");break;case "REDIS_HOST":O.REDIS_HOST||(O.REDIS_HOST=s);break;case "REDIS_PORT":O.REDIS_PORT||(O.REDIS_PORT=s);break;case "REDIS_USERNAME":O.REDIS_USERNAME||(O.REDIS_USERNAME=s);break;case "REDIS_PASSWORD":O.REDIS_PASSWORD||(O.REDIS_PASSWORD=s);break;case "REDIS_DATABASE":O.REDIS_DATABASE||(O.REDIS_DATABASE=s);break;case "MONGO_URL":O.MONGO_URL||(O.MONGO_URL=s);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":O.MSSQL_TRUST_SERVER_CERTIFICATE||(O.MSSQL_TRUST_SERVER_CERTIFICATE=s==="true");break}});}catch{}finally{return O}},I=Wp();var Lp=async i=>(await ge.getDriver(i)).client,Ue=async(i,t)=>{let e=await Lp(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 d=e,u=t,p=u?.database;return new d.Database(p,u?.driverOptions?.mode??void 0,P=>{if(P)throw new S("SqliteDataSource::createSqlPool","CONNECTION_NOT_ESTABLISHED")});case "mssql":let c=e,h=t,{options:f,...g}=h.driverOptions??{},N=new c.ConnectionPool({server:h.host??"localhost",port:h.port,database:h.database,user:h.username,password:h.password,...g,options:{trustServerCertificate:I.MSSQL_TRUST_SERVER_CERTIFICATE??void 0,...f,abortTransactionOnError:false,enableImplicitTransactions:false}});return await N.connect(),N;case "oracledb":let q=e,R=t,M=`${R.host}/${R.database}`;return await q.createPool({user:R.username,password:R.password,connectString:M,...R.driverOptions});default:throw new S("SqlConnectionUtils::createSqlPool",`UNSUPPORTED_DATABASE_TYPE_${i}`)}};var ht=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"}},Qt=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)},Fe=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,Qt(t[r]));for(let r=0;r<t.length;r++){let o=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(o,Qt(t[r]));}for(let r=0;r<t.length;r++){let o=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(o,Qt(t[r]));}for(let r=0;r<t.length;r++){let o=new RegExp(`:${r+1}(?!\\d)`,"g");e=e.replace(o,Qt(t[r]));}return e},je=(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,Ve=(i,t)=>{let e=i.getDbType(),r;try{r=format(t,{...i.inputDetails.queryFormatOptions,language:ht(e)});}catch{try{r=format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var ol={info:0,warn:1,error:2};function kt(i){return i?i===true?{level:"info",logQueries:true}:{level:i.level??"info",logQueries:i.logQueries??true,customLogger:i.customLogger}:null}function jp(i,t="info"){let e=kt(i);if(!e)return false;let r=e.level??"info";return ol[t]>=ol[r]}function Vp(i){let t=kt(i);return t?t.logQueries??true:false}var Je={info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",reset:"\x1B[0m"};function Jp(){let i=new Date,t=e=>e.toString().padStart(2,"0");return `${i.getFullYear()}-${t(i.getMonth()+1)}-${t(i.getDate())} ${t(i.getHours())}:${t(i.getMinutes())}:${t(i.getSeconds())}`}function Lr(i,t){let e=Jp(),r=i.toUpperCase();return i==="error"?`${Je.error}[${r}] ${e}
4
4
  ${t}${Je.reset}
5
5
  `:i==="warn"?`${Je.warn}[${r}] ${e}
6
6
  ${t}${Je.reset}
@@ -8,7 +8,7 @@ ${t}${Je.reset}
8
8
  ${t}${Je.reset}
9
9
  `:`[${r}] ${e}
10
10
  ${t}
11
- `}var He=class{static setCustomLogger(t){this.loggerInstance=t;}static info(t){this.loggerInstance.info(t);}static error(t){if(t instanceof Error){this.loggerInstance.error(String(t));return}this.loggerInstance.error(t);}static warn(t){this.loggerInstance.warn(t);}};He.loggerInstance={info(t){console.log(Lr("info",t));},error(t){console.error(Lr("error",t));},warn(t){console.warn(Lr("warn",t));}};function jp(i){return i.map(t=>typeof t=="object"?JSON.stringify(t):typeof t=="string"?`'${t}'`:typeof t=="number"?t:typeof t=="boolean"?t?"true":"false":t).join(", ")}function te(i,t,e,r,o){if(!Up(t))return;let n=i;if(r||o)try{n=format(i,{...r,language:r?.language??(o?yt(o):void 0)});}catch{n=i;}let a=`${highlight(n,{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"}})} [${jp(e||[])}]`;He.loggerInstance.info(a);}function rl(i,t,e=false){Wp(e,t)&&He.loggerInstance[t](i);}var b=He;var Wr=class{parseGetAllTables(t,e,r){switch(t){case "mysql":case "mariadb":return r[0].map(n=>n[`Tables_in_${e}`]);case "cockroachdb":case "postgres":return r.rows.map(n=>n.table_name);case "mssql":return r.recordset.map(n=>n.TABLE_NAME);case "oracledb":return (r.rows||[]).map(n=>Array.isArray(n)?n[0]:n?.TABLE_NAME).filter(n=>typeof n=="string"&&n.length>0);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
11
+ `}var He=class{static setCustomLogger(t){this.loggerInstance=t;}static info(t){this.loggerInstance.info(t);}static error(t){if(t instanceof Error){this.loggerInstance.error(String(t));return}this.loggerInstance.error(t);}static warn(t){this.loggerInstance.warn(t);}};He.loggerInstance={info(t){console.log(Lr("info",t));},error(t){console.error(Lr("error",t));},warn(t){console.warn(Lr("warn",t));}};function Hp(i){return i.map(t=>typeof t=="object"?JSON.stringify(t):typeof t=="string"?`'${t}'`:typeof t=="number"?t:typeof t=="boolean"?t?"true":"false":t).join(", ")}function te(i,t,e,r,o){if(!Vp(t))return;let n=i;if(r||o)try{n=format(i,{...r,language:r?.language??(o?ht(o):void 0)});}catch{n=i;}let a=`${highlight(n,{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"}})} [${Hp(e||[])}]`;He.loggerInstance.info(a);}function nl(i,t,e=false){jp(e,t)&&He.loggerInstance[t](i);}var b=He;var Ur=class{parseGetAllTables(t,e,r){switch(t){case "mysql":case "mariadb":return r[0].map(n=>n[`Tables_in_${e}`]);case "cockroachdb":case "postgres":return r.rows.map(n=>n.table_name);case "mssql":return r.recordset.map(n=>n.TABLE_NAME);case "oracledb":return (r.rows||[]).map(n=>Array.isArray(n)?n[0]:n?.TABLE_NAME).filter(n=>typeof n=="string"&&n.length>0);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
12
12
  FROM information_schema.tables
13
13
  WHERE table_catalog = '${e}'
14
14
  AND table_schema = 'public'
@@ -122,7 +122,7 @@ CREATE TABLE [migrations] (
122
122
  "id" NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
123
123
  "name" VARCHAR2(255) NOT NULL,
124
124
  "timestamp" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
125
- )`}},Y=new Wr;async function Ur(i,t=true,e){let r=i.getDbType(),o=i.database;r||(b.error("DB_TYPE is not set could not drop all tables"),process.exit(1)),o||(b.error("DB_DATABASE is not set could not drop all tables"),process.exit(1)),b.info("Dropping all tables for database type: "+r);let n=null,s=e&&r==="postgres";try{if(r==="sqlite"){await i.disconnect(),await ol.rm(o,{recursive:!0,force:!0}),b.info("Sqlite database dropped successfully"),await ol.writeFile(o,""),b.info("Sqlite database recreated successfully");let p=i.getConnectionDetails();i.sqlPool=await Ue(i.getDbType(),p),b.info("All tables dropped successfully");return}let a=Y.getAllTablesTemplate(r,o),l=await i.rawQuery(a),d=Y.parseGetAllTables(r,o,l);if(!d.length){b.info("No tables to drop");return}let u=Y.dropAllTablesTemplate(r,d);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(`
125
+ )`}},Y=new Ur;async function Fr(i,t=true,e){let r=i.getDbType(),o=i.database;r||(b.error("DB_TYPE is not set could not drop all tables"),process.exit(1)),o||(b.error("DB_DATABASE is not set could not drop all tables"),process.exit(1)),b.info("Dropping all tables for database type: "+r);let n=null,s=e&&r==="postgres";try{if(r==="sqlite"){await i.disconnect(),await sl.rm(o,{recursive:!0,force:!0}),b.info("Sqlite database dropped successfully"),await sl.writeFile(o,""),b.info("Sqlite database recreated successfully");let p=i.getConnectionDetails();i.sqlPool=await Ue(i.getDbType(),p),b.info("All tables dropped successfully");return}let a=Y.getAllTablesTemplate(r,o),l=await i.rawQuery(a),d=Y.parseGetAllTables(r,o,l);if(!d.length){b.info("No tables to drop");return}let u=Y.dropAllTablesTemplate(r,d);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(`
126
126
  SELECT
127
127
  OBJECT_NAME(parent_object_id) AS table_name,
128
128
  name AS constraint_name
@@ -131,13 +131,13 @@ CREATE TABLE [migrations] (
131
131
  SELECT constraint_name, table_name
132
132
  FROM user_constraints
133
133
  WHERE constraint_type = 'R'
134
- `);for(let m of p.rows||[])await i.rawQuery(`ALTER TABLE "${m.TABLE_NAME}" DROP CONSTRAINT "${m.CONSTRAINT_NAME}"`);for(let m of d)await i.rawQuery(`DROP TABLE "${m}" CASCADE CONSTRAINTS PURGE`);}else await i.rawQuery(u);(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 1;"),s&&await n?.commit(),b.info("All tables dropped successfully");}catch(a){throw s&&await n?.rollback(),b.error(a),a}finally{t&&await i.disconnect();}}var Vp=()=>{let i=I.MIGRATION_PATH,t=ze.resolve(process.cwd(),i);return pe.existsSync(t)||pe.mkdirSync(t,{recursive:true}),t},sl=(i,t=false,e="basic",r="table")=>{let o=Vp(),n=new Date().getTime(),s=t?`${n}_${i}.js`:`${n}_${i}.ts`,a=ze.join(o,s),l;switch(e){case "alter":l=Y.alterMigrationTemplate(t,r);break;case "create":l=Y.createMigrationTemplate(t,r);break;default:l=Y.basicMigrationTemplate(t);break}pe.writeFileSync(a,l),b.info(`Migration created successfully at '${a}'.`),process.exit(0);};async function Yp(i){try{return import(pathToFileURL(i).href)}catch{let e=createRequire(import.meta.url)(i);return {default:e.default||e,...e}}}async function zp(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 pe.promises.unlink(r).catch(()=>{});}}async function Ye(i,t){let e=ze.isAbsolute(i)?i:ze.resolve(process.cwd(),i);return e.endsWith(".ts")?zp(e):Yp(e)}var Xp=async(i,t)=>{if(i.endsWith(".ts"))return Ye(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 Bt(i,t){switch(i){case "mariadb":case "mysql":let e=t;return await e.query(Y.migrationTableTemplateMysql()),(await e.query(Y.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":let o=t;return await o.query(Y.migrationTableTemplatePg()),(await o.query(Y.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await ll(Y.migrationTableTemplateSQLite(),[],t),await ll(Y.selectAllFromMigrationsTemplate(),[],t)||[];case "mssql":let s=t;return await s.request().query(Y.migrationTableTemplateMssql()),(await s.request().query(Y.selectAllFromMigrationsTemplate())).recordset;case "oracledb":let d=await t.getConnection();try{try{await d.execute(Y.migrationTableTemplateOracle());}catch(p){if(p.errorNum!==955)throw p}return ((await d.execute('SELECT * FROM "migrations"')).rows||[]).map(p=>({id:p[0],name:p[1],timestamp:p[2]}))}finally{await d.close();}default:throw new S("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function Kt(i,t,e){let r=tf(t),o=[];for(let{name:n,fullPath:s}of r){let a=await ef(s),l=new a(i||I.DB_TYPE);l.migrationName=n,o.push(l);}return o}async function ef(i,t){let e=await Xp(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 tf(i){let t=process.cwd(),e=i||I.MIGRATION_PATH||"database/migrations",r=/[*?{}\[\]]/.test(e);if(!r){let s=ze.isAbsolute(e)?e:ze.resolve(t,e);if(!pe.existsSync(s))return pe.mkdirSync(s,{recursive:true}),[]}let o=r?e:ze.join(e,"**/*.{ts,js}"),n=ze.isAbsolute(o)?o:ze.resolve(t,o);try{return pe.globSync(n).filter(a=>pe.statSync(a).isFile()).sort().map(a=>({name:ze.basename(a),fullPath:a}))}catch{return []}}async function ll(i,t,e){return new Promise((r,o)=>{e.all(i,t,(n,s)=>{n&&o(n),r(s);});})}async function ht(i,t,e,r,o){let n=i.getDbType(),s=o&&n!=="mssql"&&n!=="oracledb",a=null;b.info("Running migrations for database type: "+n);try{let l=await Bt(n,i.getPool()),u=(await Kt(n,e,r)).filter(m=>!l.map(c=>c.name).includes(m.migrationName));if(!u.length){b.info("No pending migrations.");return}if(t){let m=u.findIndex(f=>f.migrationName===t);if(m===-1){console.error(`Migration ${t} not found.`);return}let c=u.slice(0,m+1);s&&(a=await i.transaction(),i=a.sql),await new Ce(i).upMigrations(c),s&&await a?.commit(),b.info("Migrations ran successfully");return}let p=new Ce(i);s&&(a=await i.transaction(),i=a.sql),await p.upMigrations(u),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}b.info("Migrations ran successfully");}var Lt={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 ul=null;function Oe(i,t){return t.getModelManager(i)}function dl(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(p=>p.columnName===n||p.databaseName===n);if(!l)continue;let d=typeof l.type=="string"?l.type:"string",u=Lt[d]||"string";if(u==="string"||u==="textarea"){i.whereLike(n,`%${a}%`);continue}if(u==="boolean"){i.where(n,a==="true"||a===true);continue}if(u==="date"||u==="datetime"){if(typeof a=="object"&&a!==null){let p=a;p.from&&i.where(n,">=",p.from),p.to&&i.where(n,"<=",p.to);continue}i.where(n,a);continue}i.where(n,a);}}function gt(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 rf(){let i=await import('adminjs').catch(()=>{throw new B("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(n){super(n),this._model=n,this._db=ul;}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=Lt[a]||"string";return new r({path:s.columnName,type:l,isId:s.isPrimary,isSortable:true})})}property(n){let a=this._model.getColumns().find(u=>u.columnName===n||u.databaseName===n);if(!a)return null;let l=typeof a.type=="string"?a.type:"string",d=Lt[l]||"string";return new r({path:a.columnName,type:d,isId:a.isPrimary,isSortable:true})}async count(n){let a=Oe(this._model,this._db).query();return dl(a,n,this._model),a.getCount()}async find(n,s={}){let l=Oe(this._model,this._db).query();return dl(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(u=>new e(gt(u,this._model),this))}async findOne(n){if(!this._model.primaryKey)return null;let l=await Oe(this._model,this._db).findOneByPrimaryKey(n);return l?new e(gt(l,this._model),this):null}async findMany(n){let s=this._model.primaryKey;return s?(await Oe(this._model,this._db).query().whereIn(s,n).many()).map(d=>new e(gt(d,this._model),this)):[]}async create(n){let a=await Oe(this._model,this._db).insert(n,{returning:["*"]});return gt(a,this._model)}async update(n,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=Oe(this._model,this._db);if(!await l.findOneByPrimaryKey(n))throw new Error("Record not found");let u=await l.updateRecord(n,s,{returning:["*"]});return gt(u,this._model)}async delete(n){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=Oe(this._model,this._db);await a.findOneByPrimaryKey(n)&&await a.deleteRecord(n);}}}async function of(){let i=await import('adminjs').catch(()=>{throw new B("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function nf(){let i=await import('adminjs').catch(()=>{throw new B("adminjs")}),t=await rf(),e=await of();i.default.registerAdapter({Database:e,Resource:t});}async function jr(i,t){ul=i;let e=await import('adminjs').catch(()=>{throw new B("adminjs")});await nf();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,d]of Object.entries(t.pages))d.component&&(a[l]=d);Object.keys(a).length>0&&(n.pages=a);}return {admin:new e.default(n)}}async function ml(i,t){let{admin:e}=await jr(i,t),r;try{r=await import('@adminjs/express');}catch{throw new B("@adminjs/express")}let o=r.buildRouter(e);return {admin:e,router:o}}var Ge=new Map,_e=new Map,Wt=class{async get(t){return Ge.get(t)}async set(t,e,r){let o=_e.get(t);if(o&&(clearTimeout(o),_e.delete(t)),Ge.set(t,e),r){let n=setTimeout(()=>{Ge.delete(t),_e.delete(t);},r);_e.set(t,n);}}async invalidate(t){let e=_e.get(t);e&&(clearTimeout(e),_e.delete(t)),Ge.delete(t);}async invalidateAll(t){let e=Ge.keys();for(let r of e)if(r.startsWith(t)){let o=_e.get(r);o&&(clearTimeout(o),_e.delete(r)),Ge.delete(r);}}};var Ut=class{constructor(t){switch(this.type=t?.type||I.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
135
- Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}let e=Qt(this.logs);e?.customLogger&&b.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||I.DB_DATABASE||":memory:",this.logs=t?.logs||I.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||I.MONGO_URL,this.logs=t?.logs||I.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=1433);}handleOracleDBSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=1521);}};var sf=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},af=i=>i.openApi?.required??false,lf=i=>{let t=i.getColumns(),e={};for(let r of t)r.hidden||(e[r.columnName]=sf(r));return e},df=i=>{let t=i.getColumns(),e=[];for(let r of t)af(r)&&e.push(r.columnName);return e||[]},uf=i=>{let t=lf(i),e=df(i);return {type:"object",properties:t,required:e.length?e:[]}};var cl=i=>i.map(t=>({...uf(t),modelName:t.table,$id:t.table}));var Vr=(i,t)=>{let e=Te.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var Jr=class{toSql(t){let e=t,r=new T(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:[]}}},pl=new Jr;var Hr=class{toSql(t){let e=t,r=new T(this.model,"mssql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},fl=new Hr;var Yr=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`[${o}]`).join(", ")})`,bindings:[]}}},yl=new Yr;var zr=class{toSql(t){let e=t,r=new T(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 d=e.options.default;d===null?d="null":typeof d=="string"&&(d==="NULL"?d="null":d==="TRUE"||d==="FALSE"?d=d==="TRUE"?"1":"0":d=`'${d}'`),l+=`, add constraint DF_${e.column} default ${d} for [${e.column}]`;}return e.options.unique!==void 0&&e.options.unique&&(l+=`, add constraint UQ_${e.column} unique ([${e.column}])`),{sql:l,bindings:[]}}},hl=new zr;var w=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var Ze=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 cf(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 pf(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function V(i,t){return t==="preserve"?i:t==="snake"?cf(i):t==="camel"?pf(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}Ee.extend(hf);Ee.extend(yf);Ee.extend(ff);var Xe=(i=new Date)=>Ee(i).utc().format("YYYY-MM-DD HH:mm:ss");var z=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);}}};z.store=new WeakMap;function Xr(i){return i.replace(/^[`"]|[`"]$/g,"")}function eo(i,t,e){if(!i.includes(".")){let n=Xr(i);return `${t}.${n}`}let[r,o]=i.split(".");return r=Xr(r),o=Xr(o),r!==e?i:o==="*"?`${t}.*`:`${t}.${o}`}function C(i){return typeof i=="function"?i():i}var F=(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]=F(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]=F(o,t);}return e};var et=class{};et.modelCaseConvention="camel",et.databaseCaseConvention="snake";var Me=class extends et{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 ql(this)}constructor(t){if(super(),t)for(let e in t)Object.assign(this,{[e]:t[e]});}static getColumns(){return Ft(this)}static getRelations(){return wl(this)}static getIndexes(){return Cl(this)}static getUniques(){return _l(this)}static getChecks(){return Ml(this)}};Me.softDeleteColumn="deletedAt",Me.softDeleteValue=Xe();var he=class{constructor(t,e){this.model=Me;this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var jt=class extends he{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var Vt=class extends he{constructor(e,r,o){super(e,r);this.type="hasMany";this.foreignKey=o,this.type="hasMany";}};var Jt=class extends he{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var Ht=class extends he{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 Cf(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 Yt=Symbol("columns"),tt=Symbol("primaryKey"),to=Symbol("relations"),Rl=Symbol("indexes"),xl=Symbol("uniques"),Al=Symbol("checks"),ro=i=>`${Cf(i)}_id`,oo=(i,t)=>`idx_${i}_${t}`,le=(i,t)=>`uq_${i}_${t}`,G=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,xe=(i,t)=>`pk_${i}_${t}`;function Ft(i){try{return z.getMetadata(Yt,i.prototype)||[]}catch{return []}}function wl(i){return z.getMetadata(to,i.prototype)||[]}function Pl(i){return (z.getMetadata(to,i.prototype)||[]).map(e=>{let{type:r,model:o,columnName:n,foreignKey:s}=e,a=C(s),l=o();switch(r){case "belongsTo":return new jt(l,n,a);case "hasOne":return new Jt(l,n,a);case "hasMany":return new Vt(l,n,a);case "manyToMany":if(!e.manyToManyOptions)throw new S("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let d=o();return new Ht(d,n,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:C(e.manyToManyOptions.throughModel),leftForeignKey:C(e.manyToManyOptions.leftForeignKey),rightForeignKey:C(e.manyToManyOptions.rightForeignKey)});default:throw new S("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function ql(i){return z.getMetadata(tt,i)||z.getMetadata(tt,i.prototype)}function Cl(i){return z.getMetadata(Rl,i.prototype)||[]}function _l(i){return z.getMetadata(xl,i.prototype)||[]}function Ml(i){return z.getMetadata(Al,i.prototype)||[]}var Jf=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},y=class{constructor(t){this.model=t;let e=Ft(t);this.modelColumnsMap=new Map(e.map(r=>[r.columnName,r]));}formatStringColumn(t,e){if(e==="*")return "*";if(e.includes(".")){let[n,s]=e.split(".");if(s==="*")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}`)}let a=this.modelColumnsMap.get(s)?.databaseName??V(s,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${n}\`.\`${a}\``;case "postgres":case "cockroachdb":case "sqlite":case "oracledb":return `"${n}"."${a}"`;case "mssql":return `[${n}].[${a}]`;default:throw new Error(`Unsupported database type: ${t}`)}}let o=this.modelColumnsMap.get(e)?.databaseName??V(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":case "oracledb":return `"${o}"`;case "mssql":return `[${o}]`;default:throw new Error(`Unsupported database type: ${t}`)}}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 s=0;s<t.length;s++){let a=t[s],l=e[s];a!=="*"&&(o.push(a),n.push(l));}await Promise.all(o.map(async(s,a)=>{let l=o[a],d=n[a],u=this.modelColumnsMap.get(l),p=d;u?r==="insert"&&u.prepare?p=await u.prepare(d):r==="update"&&(p=await u.prepare?.(d)??d):Jf(d)&&(p=JSON.stringify(d)),n[a]=p;}));for(let s of this.modelColumnsMap.keys())if(!o.includes(s)){let a=this.modelColumnsMap.get(s);if(!a||r==="insert"&&s===this.model.primaryKey&&!a.prepare)continue;if(r==="insert"&&a.prepare||a.autoUpdate){o.push(s);let l=a.prepare?await a.prepare(void 0):void 0;n.push(l??void 0);}}return {columns:o,values:n}}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new T(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}};var no=class{toSql(t){let e=t,o=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 Ze){let u=e.children[0];return {sql:`EXEC sp_rename '${e.table}', '${u.newName}'`,bindings:[]}}let n=new T(this.model,"mssql"),s=[],a=[];for(let u of e.children){let{sql:p,bindings:m}=n.parse([u]);s.push(p.trim()),a.push(...m);}let l=s.join(", ");return {sql:`${o} ${l}`,bindings:a}}},$l=new no;var so=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},Dl=new so;var io=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},Il=new io;var ao=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},Ol=new ao;var lo=class{toSql(t){let e=t;return b.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] null`,bindings:[]}}},El=new lo;var uo=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},vl=new uo;var mo=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},Ql=new mo;var co=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},kl=new co;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 po=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:[]}}},Bl=new po;var fo=class{toSql(t){let e=t;return b.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] not null`,bindings:[]}}},Kl=new fo;var yo=class{toSql(t){return {sql:"",bindings:[]}}},Ll=new yo;var ho=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("mssql",C(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:[]}}},Wl=new ho;var go=class{toSql(t){return {sql:"",bindings:[]}}},Ul=new go;var bo=class{toSql(t){let e=t,r=new y(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",C(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",C(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(d=>r.formatStringColumn("mssql",C(d))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("mssql",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("mssql",C(d))).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:[]}}},Fl=new bo;var To=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new T(this.model,"mssql"),s=[],a=[];for(let h of e.children){let{sql:f,bindings:g}=n.parse([h]);if(h.folder==="constraint"){let N=s.pop()??"",q=f;if(/not null/i.test(q)||/null/i.test(q)||/default/i.test(q)){let R=`${N} ${q}`.trim();R=R.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(R),a.push(...g);continue}s.push(N),s.push(q),a.push(...g);continue}s.push(f),a.push(...g);}for(let h of e.namedConstraints){let{sql:f,bindings:g}=n.parse([h]);s.push(f),a.push(...g);}let l=s.join(", "),d=[];e.dataCompression&&d.push(`DATA_COMPRESSION = ${e.dataCompression}`);let u=e.onFilegroup?` ON [${e.onFilegroup}]`:"",p=e.textImageOn?` TEXTIMAGE_ON [${e.textImageOn}]`:"",m=d.length>0?` WITH (${d.join(", ")})`:"";return {sql:`${o} (${l})${m}${u}${p}`,bindings:a}}},jl=new To;var No=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode.table=="string")return {sql:e.fromNode.table,bindings:[]};let r=new y(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:[]}}},Vl=new No;var So=class{toSql(t){return {sql:"",bindings:[]}}},Jl=new So;var wo=class{toSql(t){return b.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},Hl=new wo;var qo=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Yl=new qo;var Co=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},zl=new Co;var _o=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],n=new T(this.model,"mssql").parse(r),s=e.alias&&e.alias.length?` as [${e.alias}]`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Gl=new _o;var Mo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},Zl=new Mo;var Ro=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 y(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 y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Xl=new Ro;var xo=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mssql",e.table),n=e.columns.map(a=>`[${a}]`).join(", ");return {sql:`${e.unique?"unique ":""}[${e.indexName}] on ${o} (${n})`,bindings:[]}}},ed=new xo;var Ao=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},td=new Ao;var Po=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(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=[],d=[],u=e.currParamIndex;for(let m of e.records){let c=s.map(f=>m[f]),h=[];for(let f of c)f instanceof $?h.push(f.rawValue):(l.push(f),h.push(`@${u++}`));d.push(`(${h.join(", ")})`);}let p=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(c=>`inserted.${r.formatStringColumn("mssql",c)}`).join(", ");p=p.replace(") values",`) output ${m} values`);}else {let m=this.getOutputColumns(s,r);p=p.replace(") values",`) output ${m} values`);}return {sql:p,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(", ")}},rd=new Po;var $o=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(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),d=`${r.formatStringTable("mssql",e.table)} on ${s} ${e.on?.operator} ${a}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new T(this.model,"mssql");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let h=c.sql.replace(/^where\s+/i,"");d+=` and ${h}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},od=new $o;var Do=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},nd=new Do;var Io=class{toSql(t){return {sql:"",bindings:[]}}},sd=new Io;var Oo=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},id=new Oo;var Eo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:(b.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:[]})}},ad=new Eo;var vo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("mssql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},ld=new vo;var Qo=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},dd=new Qo;var ko=class{toSql(t){return {sql:`SELECT
134
+ `);for(let m of p.rows||[])await i.rawQuery(`ALTER TABLE "${m.TABLE_NAME}" DROP CONSTRAINT "${m.CONSTRAINT_NAME}"`);for(let m of d)await i.rawQuery(`DROP TABLE "${m}" CASCADE CONSTRAINTS PURGE`);}else await i.rawQuery(u);(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 1;"),s&&await n?.commit(),b.info("All tables dropped successfully");}catch(a){throw s&&await n?.rollback(),b.error(a),a}finally{t&&await i.disconnect();}}var Yp=()=>{let i=I.MIGRATION_PATH,t=ze.resolve(process.cwd(),i);return ye.existsSync(t)||ye.mkdirSync(t,{recursive:true}),t},al=(i,t=false,e="basic",r="table")=>{let o=Yp(),n=new Date().getTime(),s=t?`${n}_${i}.js`:`${n}_${i}.ts`,a=ze.join(o,s),l;switch(e){case "alter":l=Y.alterMigrationTemplate(t,r);break;case "create":l=Y.createMigrationTemplate(t,r);break;default:l=Y.basicMigrationTemplate(t);break}ye.writeFileSync(a,l),b.info(`Migration created successfully at '${a}'.`),process.exit(0);};async function Zp(i){try{return import(pathToFileURL(i).href)}catch{let e=createRequire(import.meta.url)(i);return {default:e.default||e,...e}}}async function Xp(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 ye.promises.unlink(r).catch(()=>{});}}async function Ye(i,t){let e=ze.isAbsolute(i)?i:ze.resolve(process.cwd(),i);return e.endsWith(".ts")?Xp(e):Zp(e)}var rf=async(i,t)=>{if(i.endsWith(".ts"))return Ye(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 Kt(i,t){switch(i){case "mariadb":case "mysql":let e=t;return await e.query(Y.migrationTableTemplateMysql()),(await e.query(Y.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":let o=t;return await o.query(Y.migrationTableTemplatePg()),(await o.query(Y.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await ul(Y.migrationTableTemplateSQLite(),[],t),await ul(Y.selectAllFromMigrationsTemplate(),[],t)||[];case "mssql":let s=t;return await s.request().query(Y.migrationTableTemplateMssql()),(await s.request().query(Y.selectAllFromMigrationsTemplate())).recordset;case "oracledb":let d=await t.getConnection();try{try{await d.execute(Y.migrationTableTemplateOracle());}catch(p){if(p.errorNum!==955)throw p}return ((await d.execute('SELECT * FROM "migrations"')).rows||[]).map(p=>({id:p[0],name:p[1],timestamp:p[2]}))}finally{await d.close();}default:throw new S("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function Wt(i,t,e){let r=nf(t),o=[];for(let{name:n,fullPath:s}of r){let a=await of(s),l=new a(i||I.DB_TYPE);l.migrationName=n,o.push(l);}return o}async function of(i,t){let e=await rf(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 nf(i){let t=process.cwd(),e=i||I.MIGRATION_PATH||"database/migrations",r=/[*?{}\[\]]/.test(e);if(!r){let s=ze.isAbsolute(e)?e:ze.resolve(t,e);if(!ye.existsSync(s))return ye.mkdirSync(s,{recursive:true}),[]}let o=r?e:ze.join(e,"**/*.{ts,js}"),n=ze.isAbsolute(o)?o:ze.resolve(t,o);try{return ye.globSync(n).filter(a=>ye.statSync(a).isFile()).sort().map(a=>({name:ze.basename(a),fullPath:a}))}catch{return []}}async function ul(i,t,e){return new Promise((r,o)=>{e.all(i,t,(n,s)=>{n&&o(n),r(s);});})}async function gt(i,t,e,r,o){let n=i.getDbType(),s=o&&n!=="mssql"&&n!=="oracledb",a=null;b.info("Running migrations for database type: "+n);try{let l=await Kt(n,i.getPool()),u=(await Wt(n,e,r)).filter(m=>!l.map(c=>c.name).includes(m.migrationName));if(!u.length){b.info("No pending migrations.");return}if(t){let m=u.findIndex(f=>f.migrationName===t);if(m===-1){console.error(`Migration ${t} not found.`);return}let c=u.slice(0,m+1);s&&(a=await i.transaction(),i=a.sql),await new Re(i).upMigrations(c),s&&await a?.commit(),b.info("Migrations ran successfully");return}let p=new Re(i);s&&(a=await i.transaction(),i=a.sql),await p.upMigrations(u),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}b.info("Migrations ran successfully");}var Lt={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 cl=null;function Oe(i,t){return t.getModelManager(i)}function ml(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(p=>p.columnName===n||p.databaseName===n);if(!l)continue;let d=typeof l.type=="string"?l.type:"string",u=Lt[d]||"string";if(u==="string"||u==="textarea"){i.whereLike(n,`%${a}%`);continue}if(u==="boolean"){i.where(n,a==="true"||a===true);continue}if(u==="date"||u==="datetime"){if(typeof a=="object"&&a!==null){let p=a;p.from&&i.where(n,">=",p.from),p.to&&i.where(n,"<=",p.to);continue}i.where(n,a);continue}i.where(n,a);}}function bt(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 sf(){let i=await import('adminjs').catch(()=>{throw new B("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(n){super(n),this._model=n,this._db=cl;}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=Lt[a]||"string";return new r({path:s.columnName,type:l,isId:s.isPrimary,isSortable:true})})}property(n){let a=this._model.getColumns().find(u=>u.columnName===n||u.databaseName===n);if(!a)return null;let l=typeof a.type=="string"?a.type:"string",d=Lt[l]||"string";return new r({path:a.columnName,type:d,isId:a.isPrimary,isSortable:true})}async count(n){let a=Oe(this._model,this._db).query();return ml(a,n,this._model),a.getCount()}async find(n,s={}){let l=Oe(this._model,this._db).query();return ml(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(u=>new e(bt(u,this._model),this))}async findOne(n){if(!this._model.primaryKey)return null;let l=await Oe(this._model,this._db).findOneByPrimaryKey(n);return l?new e(bt(l,this._model),this):null}async findMany(n){let s=this._model.primaryKey;return s?(await Oe(this._model,this._db).query().whereIn(s,n).many()).map(d=>new e(bt(d,this._model),this)):[]}async create(n){let a=await Oe(this._model,this._db).insert(n,{returning:["*"]});return bt(a,this._model)}async update(n,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=Oe(this._model,this._db);if(!await l.findOneByPrimaryKey(n))throw new Error("Record not found");let u=await l.updateRecord(n,s,{returning:["*"]});return bt(u,this._model)}async delete(n){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=Oe(this._model,this._db);await a.findOneByPrimaryKey(n)&&await a.deleteRecord(n);}}}async function af(){let i=await import('adminjs').catch(()=>{throw new B("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function lf(){let i=await import('adminjs').catch(()=>{throw new B("adminjs")}),t=await sf(),e=await af();i.default.registerAdapter({Database:e,Resource:t});}async function Vr(i,t){cl=i;let e=await import('adminjs').catch(()=>{throw new B("adminjs")});await lf();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,d]of Object.entries(t.pages))d.component&&(a[l]=d);Object.keys(a).length>0&&(n.pages=a);}return {admin:new e.default(n)}}async function pl(i,t){let{admin:e}=await Vr(i,t),r;try{r=await import('@adminjs/express');}catch{throw new B("@adminjs/express")}let o=r.buildRouter(e);return {admin:e,router:o}}var Ge=new Map,xe=new Map,Ut=class{async get(t){return Ge.get(t)}async set(t,e,r){let o=xe.get(t);if(o&&(clearTimeout(o),xe.delete(t)),Ge.set(t,e),r){let n=setTimeout(()=>{Ge.delete(t),xe.delete(t);},r);xe.set(t,n);}}async invalidate(t){let e=xe.get(t);e&&(clearTimeout(e),xe.delete(t)),Ge.delete(t);}async invalidateAll(t){let e=Ge.keys();for(let r of e)if(r.startsWith(t)){let o=xe.get(r);o&&(clearTimeout(o),xe.delete(r)),Ge.delete(r);}}};var Ft=class{constructor(t){switch(this.type=t?.type||I.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
135
+ Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}let e=kt(this.logs);e?.customLogger&&b.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||I.DB_DATABASE||":memory:",this.logs=t?.logs||I.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||I.MONGO_URL,this.logs=t?.logs||I.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=1433);}handleOracleDBSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=1521);}};var df=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},uf=i=>i.openApi?.required??false,mf=i=>{let t=i.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=df(r));return e},cf=i=>{let t=i.getColumns(),e=[];for(let r of t)uf(r)&&e.push(r.columnName);return e||[]},pf=i=>{let t=mf(i),e=cf(i);return {type:"object",properties:t,required:e.length?e:[]}};var fl=i=>i.map(t=>({...pf(t),modelName:t.table,$id:t.table}));var Jr=(i,t)=>{let e=_e.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var Hr=class{toSql(t){let e=t,r=new T(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:[]}}},yl=new Hr;var Yr=class{toSql(t){let e=t,r=new T(this.model,"mssql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},hl=new Yr;var zr=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`[${o}]`).join(", ")})`,bindings:[]}}},gl=new zr;var Gr=class{toSql(t){let e=t,r=new T(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 d=e.options.default;d===null?d="null":typeof d=="string"&&(d==="NULL"?d="null":d==="TRUE"||d==="FALSE"?d=d==="TRUE"?"1":"0":d=`'${d}'`),l+=`, add constraint DF_${e.column} default ${d} for [${e.column}]`;}return e.options.unique!==void 0&&e.options.unique&&(l+=`, add constraint UQ_${e.column} unique ([${e.column}])`),{sql:l,bindings:[]}}},bl=new Gr;var w=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var Ze=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 yf(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 hf(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function V(i,t){return t==="preserve"?i:t==="snake"?yf(i):t==="camel"?hf(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}var gf=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},y=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 "*";if(e.includes(".")){let[n,s]=e.split(".");if(s==="*")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}`)}let a=this.modelColumnsMap.get(s)?.databaseName??V(s,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${n}\`.\`${a}\``;case "postgres":case "cockroachdb":case "sqlite":case "oracledb":return `"${n}"."${a}"`;case "mssql":return `[${n}].[${a}]`;default:throw new Error(`Unsupported database type: ${t}`)}}let o=this.modelColumnsMap.get(e)?.databaseName??V(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":case "oracledb":return `"${o}"`;case "mssql":return `[${o}]`;default:throw new Error(`Unsupported database type: ${t}`)}}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 u=0;u<t.length;u++){let p=t[u],m=e[u];p!=="*"&&(o.push(p),n.push(m));}let s=new Set(o),a=null;for(let u=0;u<o.length;u++){let p=o[u],m=n[u],c=this.modelColumnsMap.get(p);if(c){if(c.prepare){let h=r==="insert"?c.prepare(m):c.prepare(m)??m;h!==null&&typeof h?.then=="function"?(a||(a=[]),a.push({index:u,promise:h})):n[u]=h;}}else gf(m)&&(n[u]=JSON.stringify(m));}if(a){let u=await Promise.all(a.map(p=>p.promise));for(let p=0;p<a.length;p++)n[a[p].index]=u[p];}let l=this.model.primaryKey,d=r==="insert"?this.autoInsertColumns:this.autoUpdateColumns;for(let u of d){let p=u.columnName;if(s.has(p)||r==="insert"&&p===l&&!u.prepare)continue;o.push(p);let m=u.prepare?await u.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 T(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}};var Zr=class{toSql(t){let e=t,o=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 Ze){let u=e.children[0];return {sql:`EXEC sp_rename '${e.table}', '${u.newName}'`,bindings:[]}}let n=new T(this.model,"mssql"),s=[],a=[];for(let u of e.children){let{sql:p,bindings:m}=n.parse([u]);s.push(p.trim()),a.push(...m);}let l=s.join(", ");return {sql:`${o} ${l}`,bindings:a}}},Tl=new Zr;var Xr=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},Nl=new Xr;var eo=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},Sl=new eo;var to=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},wl=new to;var ro=class{toSql(t){let e=t;return b.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] null`,bindings:[]}}},ql=new ro;var oo=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},Cl=new oo;var no=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},_l=new no;var so=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},Ml=new so;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 io=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:[]}}},Rl=new io;var ao=class{toSql(t){let e=t;return b.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] not null`,bindings:[]}}},xl=new ao;var lo=class{toSql(t){return {sql:"",bindings:[]}}},Al=new lo;function uo(i){return i.replace(/^[`"]|[`"]$/g,"")}function mo(i,t,e){if(!i.includes(".")){let n=uo(i);return `${t}.${n}`}let[r,o]=i.split(".");return r=uo(r),o=uo(o),r!==e?i:o==="*"?`${t}.*`:`${t}.${o}`}function C(i){return typeof i=="function"?i():i}var K=(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]=K(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]=K(o,t);}return e};var co=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("mssql",C(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:[]}}},Pl=new co;var po=class{toSql(t){return {sql:"",bindings:[]}}},$l=new po;var fo=class{toSql(t){let e=t,r=new y(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",C(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",C(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(d=>r.formatStringColumn("mssql",C(d))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("mssql",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("mssql",C(d))).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:[]}}},Dl=new fo;var yo=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new T(this.model,"mssql"),s=[],a=[];for(let h of e.children){let{sql:f,bindings:g}=n.parse([h]);if(h.folder==="constraint"){let N=s.pop()??"",q=f;if(/not null/i.test(q)||/null/i.test(q)||/default/i.test(q)){let R=`${N} ${q}`.trim();R=R.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(R),a.push(...g);continue}s.push(N),s.push(q),a.push(...g);continue}s.push(f),a.push(...g);}for(let h of e.namedConstraints){let{sql:f,bindings:g}=n.parse([h]);s.push(f),a.push(...g);}let l=s.join(", "),d=[];e.dataCompression&&d.push(`DATA_COMPRESSION = ${e.dataCompression}`);let u=e.onFilegroup?` ON [${e.onFilegroup}]`:"",p=e.textImageOn?` TEXTIMAGE_ON [${e.textImageOn}]`:"",m=d.length>0?` WITH (${d.join(", ")})`:"";return {sql:`${o} (${l})${m}${u}${p}`,bindings:a}}},Il=new yo;var ho=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode.table=="string")return {sql:e.fromNode.table,bindings:[]};let r=new y(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:[]}}},Ol=new ho;var go=class{toSql(t){return {sql:"",bindings:[]}}},El=new go;var bo=class{toSql(t){return b.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},vl=new bo;var To=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Ql=new To;var No=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},kl=new No;var So=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],n=new T(this.model,"mssql").parse(r),s=e.alias&&e.alias.length?` as [${e.alias}]`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Bl=new So;var wo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},Kl=new wo;var qo=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 y(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 y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Wl=new qo;var Co=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mssql",e.table),n=e.columns.map(a=>`[${a}]`).join(", ");return {sql:`${e.unique?"unique ":""}[${e.indexName}] on ${o} (${n})`,bindings:[]}}},Ll=new Co;var _o=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},Ul=new _o;var Mo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(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=[],d=[],u=e.currParamIndex;for(let m of e.records){let c=s.map(f=>m[f]),h=[];for(let f of c)f instanceof $?h.push(f.rawValue):(l.push(f),h.push(`@${u++}`));d.push(`(${h.join(", ")})`);}let p=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(c=>`inserted.${r.formatStringColumn("mssql",c)}`).join(", ");p=p.replace(") values",`) output ${m} values`);}else {let m=this.getOutputColumns(s,r);p=p.replace(") values",`) output ${m} values`);}return {sql:p,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(", ")}},Fl=new Mo;var Ro=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(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),d=`${r.formatStringTable("mssql",e.table)} on ${s} ${e.on?.operator} ${a}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new T(this.model,"mssql");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let h=c.sql.replace(/^where\s+/i,"");d+=` and ${h}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},jl=new Ro;var xo=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},Vl=new xo;var Ao=class{toSql(t){return {sql:"",bindings:[]}}},Jl=new Ao;var Po=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},Hl=new Po;var $o=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:(b.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:[]})}},Yl=new $o;var Do=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("mssql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},zl=new Do;var Io=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Gl=new Io;var Oo=class{toSql(t){return {sql:`SELECT
136
136
  cc.name AS name,
137
137
  cc.definition AS expression
138
138
  FROM sys.check_constraints cc
139
139
  JOIN sys.tables t ON cc.parent_object_id = t.object_id
140
- WHERE t.name = '${t.table}'`,bindings:[]}}},ud=new ko;var Bo=class{toSql(t){return {sql:`SELECT
140
+ WHERE t.name = '${t.table}'`,bindings:[]}}},Zl=new Oo;var Eo=class{toSql(t){return {sql:`SELECT
141
141
  fk.name as name,
142
142
  c.name as column_name,
143
143
  rt.name as referenced_table,
@@ -149,7 +149,7 @@ INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_i
149
149
  INNER JOIN sys.columns c ON fkc.parent_object_id = c.object_id AND fkc.parent_column_id = c.column_id
150
150
  INNER JOIN sys.tables rt ON fkc.referenced_object_id = rt.object_id
151
151
  INNER JOIN sys.columns rc ON fkc.referenced_object_id = rc.object_id AND fkc.referenced_column_id = rc.column_id
152
- WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},md=new Bo;var Ko=class{toSql(t){return {sql:`SELECT
152
+ WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},Xl=new Eo;var vo=class{toSql(t){return {sql:`SELECT
153
153
  i.name as index_name,
154
154
  c.name as column_name,
155
155
  i.is_unique as is_unique
@@ -158,7 +158,7 @@ INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = i
158
158
  INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
159
159
  WHERE i.object_id = OBJECT_ID('${t.table}')
160
160
  AND i.is_primary_key = 0
161
- AND i.type > 0`,bindings:[]}}},cd=new Ko;var Lo=class{toSql(t){return {sql:`SELECT
161
+ AND i.type > 0`,bindings:[]}}},ed=new vo;var Qo=class{toSql(t){return {sql:`SELECT
162
162
  tc.CONSTRAINT_NAME as name,
163
163
  kcu.COLUMN_NAME as column_name
164
164
  FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
@@ -166,7 +166,7 @@ JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
166
166
  ON tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
167
167
  WHERE tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
168
168
  AND tc.TABLE_NAME = '${t.table}'
169
- ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},pd=new Lo;var Wo=class{toSql(t){return {sql:`SELECT
169
+ ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},td=new Qo;var ko=class{toSql(t){return {sql:`SELECT
170
170
  c.COLUMN_NAME as column_name,
171
171
  c.DATA_TYPE as data_type,
172
172
  c.IS_NULLABLE as is_nullable,
@@ -176,7 +176,7 @@ ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},pd=new Lo;var Wo=class{toSql(t){re
176
176
  c.NUMERIC_SCALE as numeric_scale
177
177
  FROM INFORMATION_SCHEMA.COLUMNS c
178
178
  WHERE c.TABLE_NAME = '${t.table}'
179
- ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},fd=new Wo;var Uo=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 y(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 T(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 T(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 y(this.model).formatStringColumn("mssql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new T(this.model,"mssql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},yd=new Uo;var ie=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 Fo=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),o=ie.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}},hd=new Fo;var jo=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:[]}}},gd=new jo;var Vo=class{toSql(t){let e=t,r=new T(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}}},bd=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),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((d,u)=>{let p=e.currParamIndex+u-n,m=e.values[u];return m instanceof $?(n++,`${r.formatStringColumn("mssql",d)} = ${m.rawValue}`):(s.push(m),`${r.formatStringColumn("mssql",d)} = @${p}`)}).join(", "),l=`${o} set ${a}`;if(e.returning&&e.returning.length){let d=e.returning.map(u=>`inserted.${r.formatStringColumn("mssql",u)}`).join(", ");l+=` output ${d}`;}return {sql:l,bindings:s}}},Td=new Jo;var Ho=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.value,o=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 u=`@${o} AND @${o+1}`,p=`${a} between ${u}`;return e.isNegated&&(p=`not (${p})`),{sql:p.trim(),bindings:r}}let l=r.map((u,p)=>`@${o+p}`).join(", "),d=`${a} ${e.operator} (${l})`;return e.isNegated&&(d=`not (${d})`),{sql:d.trim(),bindings:r}}let n=new y(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 y(this.model).formatStringColumn("mssql",t):t}},Nd=new Ho;var Yo=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new T(this.model,"mssql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},Sd=new Yo;var zo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new y(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}}},wd=new zo;var Go=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 T(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 T(this.model,"mssql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},qd=new Go;var Zo=class{toSql(t){let e=t,r=new T(this.model,"mssql"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex);return e.clause==="materialized"&&b.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored."),{sql:`[${e.alias}] as (${n.sql})`,bindings:n.bindings}}},Cd=new Zo;var Xo=class{toSql(t){let e=t,r=new T(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:[]}}},_d=new Xo;var en=class{toSql(t){let e=t,r=new T(this.model,"mysql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},Md=new en;var tn=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`\`${o}\``).join(", ")})`,bindings:[]}}},Rd=new tn;var rn=class{toSql(t){let e=t,r=new T(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?"":" 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:[]}}},xd=new rn;var on=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new T(this.model,"mysql"),s=[],a=[];for(let m of e.children){let{sql:c,bindings:h}=n.parse([m]);if(m.file==="add_column")s.push(c);else if(m.file==="add_constraint"||m.folder==="constraint"){let f=s[s.length-1]??"",g=/^\s*add\s+column\b/i.test(f),N=/^\s*add\s+constraint\b/i.test(c);if(g&&!N){let q=c.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${f} ${q}`;}else {let q=/^\s*add\b/i.test(c)?c:`add ${c}`;s.push(q);}}else m.file==="set_default"||m.file==="drop_default"||m.file==="set_not_null"||m.file,s.push(c);a.push(...h);}let l=s.join(", "),d=e.ifExists?"if exists ":"";return {sql:/^\s*drop\s+index\b/i.test(l)?l:`${d}${o} ${l}`,bindings:a}}},Ad=new on;var nn=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},Pd=new nn;var sn=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},$d=new sn;var an=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},Dd=new an;var ln=class{toSql(t){return {sql:"",bindings:[]}}},Id=new ln;var dn=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Od=new dn;var un=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},Ed=new un;var mn=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},vd=new mn;var cn=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:[]}}},Qd=new cn;var pn=class{toSql(t){return {sql:"",bindings:[]}}},kd=new pn;var fn=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:[]}}},Bd=new fn;var yn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("mysql",C(e.column)),n=e.dataType.toLowerCase(),s,a=false,l=false;if(n==="char"){let d=e.length??1;s=`${o} char(${d})`;}else if(n==="varchar"){let d=e.length??255;s=`${o} varchar(${d})`;}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 d=e.precision??10,u=e.scale??0;s=`${o} decimal(${d}, ${u})`;}else if(n==="numeric"){a=true;let d=e.precision??10,u=e.scale??0;s=`${o} numeric(${d}, ${u})`;}else if(n==="date")s=`${o} date`;else if(n==="time"){let d=typeof e.precision=="number"?`(${e.precision})`:"";s=`${o} time${d}`.trimEnd();}else if(n==="datetime"){let d=typeof e.precision=="number"?`(${e.precision})`:"";s=`${o} datetime${d}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${d}`),e.autoUpdate&&(s+=` on update current_timestamp${d}`);}else if(n==="timestamp"){let d=typeof e.precision=="number"?`(${e.precision})`:"";s=`${o} timestamp${d}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${d}`),e.autoUpdate&&(s+=` on update current_timestamp${d}`);}else if(n==="year")s=`${o} year`;else if(n==="boolean")s=`${o} boolean`;else if(n==="varbinary"){let d=e.length??255;s=`${o} varbinary(${d})`;}else if(n==="binary"){let d=e.length??255;s=`${o} binary(${d})`;}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 d=e.enumValues.map(u=>`'${u}'`).join(", ");s=`${o} enum(${d})`;}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 d=e.length?`(${e.length})`:"";s=`${o} ${n}${d}`;}return a&&(e.zerofill?s+=" ZEROFILL":e.unsigned&&(s+=" UNSIGNED"),l&&(s+=" AUTO_INCREMENT")),e.collate&&(s+=` COLLATE ${e.collate}`),{sql:s,bindings:[]}}},Kd=new yn;var hn=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Ld=new hn;var gn=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){let o=(e.columns??[]).map(s=>r.formatStringColumn("mysql",C(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",C(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(d=>r.formatStringColumn("mysql",C(d))).join(", "),n=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("mysql",C(d))).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:[]}}},Wd=new gn;var bn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new T(this.model,"mysql"),s=[],a=[];for(let c of e.children){let{sql:h,bindings:f}=n.parse([c]);if(c.folder==="constraint"){let g=s.pop()??"",N=h;if(/not null/i.test(N)||/null/i.test(N)||/default/i.test(N)){let q=`${g} ${N}`.trim();q=q.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(q),a.push(...f);continue}s.push(g),s.push(N),a.push(...f);continue}s.push(h),a.push(...f);}for(let c of e.namedConstraints){let{sql:h,bindings:f}=n.parse([c]);s.push(h),a.push(...f);}let l=s.join(", "),d=e.ifNotExists?"if not exists ":"",u=[];e.engine&&u.push(`ENGINE=${e.engine}`),e.charset&&u.push(`CHARSET=${e.charset}`),e.collate&&u.push(`COLLATE=${e.collate}`);let p=u.length>0?` ${u.join(" ")}`:"";return {sql:`${d}${o} (${l})${p}`,bindings:a}}},Ud=new bn;var Tn=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:[]}}},Fd=new Tn;var Nn=class{toSql(t){return {sql:"distinct",bindings:[]}}},jd=new Nn;var Sn=class{toSql(t){return b.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},Vd=new Sn;var wn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Jd=new wn;var qn=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Hd=new qn;var Cn=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],n=new T(this.model,"mysql").parse(r),s=e.alias&&e.alias.length?` as \`${e.alias}\``:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Yd=new Cn;var _n=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},zd=new _n;var Mn=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 y(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 y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Gd=new Mn;var Rn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table),n=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${o} (${n})`,bindings:[]}}},Zd=new Rn;var xn=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:[]}}},Xd=new xn;var An=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(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(p=>r.formatStringColumn("mysql",p)).join(", "),l=[],d=[];for(let p of e.records){let m=s.map(h=>p[h]),c=[];for(let h of m)h instanceof $?c.push(h.rawValue):(l.push(h),c.push("?"));d.push(`(${c.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},eu=new An;var Pn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(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),d=`${r.formatStringTable("mysql",e.table)} on ${s} ${e.on?.operator} ${a}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new T(this.model,"mysql");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let h=c.sql.replace(/^where\s+/i,"");d+=` and ${h}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},tu=new Pn;var $n=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},ru=new $n;var Hf={for_update:"for update",for_share:"lock in share mode"},Dn=class{toSql(t){let e=t,r=Hf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},ou=new Dn;var In=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},nu=new In;var On=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 n=e.conflictColumns?.[0]||"id",s=r.formatStringColumn("mysql",`${e.table}.${n}`);return {sql:`AS new ON DUPLICATE KEY UPDATE ${s} = ${s}`,bindings:[]}}return {sql:`AS new ON DUPLICATE KEY UPDATE ${e.columnsToUpdate.map(n=>`${r.formatStringColumn("mysql",n)} = new.${r.formatStringColumn("mysql",n)}`).join(", ")}`,bindings:[]}}},su=new On;var En=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("mysql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},iu=new En;var vn=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},au=new vn;var Qn=class{toSql(t){return {sql:`SELECT
179
+ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},rd=new ko;var Bo=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 y(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 T(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 T(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 y(this.model).formatStringColumn("mssql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new T(this.model,"mssql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},od=new Bo;var ie=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 Ko=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),o=ie.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}},nd=new Ko;var Wo=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:[]}}},sd=new Wo;var Lo=class{toSql(t){let e=t,r=new T(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}}},id=new Lo;var Uo=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),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((d,u)=>{let p=e.currParamIndex+u-n,m=e.values[u];return m instanceof $?(n++,`${r.formatStringColumn("mssql",d)} = ${m.rawValue}`):(s.push(m),`${r.formatStringColumn("mssql",d)} = @${p}`)}).join(", "),l=`${o} set ${a}`;if(e.returning&&e.returning.length){let d=e.returning.map(u=>`inserted.${r.formatStringColumn("mssql",u)}`).join(", ");l+=` output ${d}`;}return {sql:l,bindings:s}}},ad=new Uo;var Fo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.value,o=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 u=`@${o} AND @${o+1}`,p=`${a} between ${u}`;return e.isNegated&&(p=`not (${p})`),{sql:p.trim(),bindings:r}}let l=r.map((u,p)=>`@${o+p}`).join(", "),d=`${a} ${e.operator} (${l})`;return e.isNegated&&(d=`not (${d})`),{sql:d.trim(),bindings:r}}let n=new y(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 y(this.model).formatStringColumn("mssql",t):t}},ld=new Fo;var jo=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new T(this.model,"mssql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},dd=new jo;var Vo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new y(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}}},ud=new Vo;var Jo=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 T(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 T(this.model,"mssql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},md=new Jo;var Ho=class{toSql(t){let e=t,r=new T(this.model,"mssql"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex);return e.clause==="materialized"&&b.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored."),{sql:`[${e.alias}] as (${n.sql})`,bindings:n.bindings}}},cd=new Ho;var Yo=class{toSql(t){let e=t,r=new T(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:[]}}},pd=new Yo;var zo=class{toSql(t){let e=t,r=new T(this.model,"mysql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},fd=new zo;var Go=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`\`${o}\``).join(", ")})`,bindings:[]}}},yd=new Go;var Zo=class{toSql(t){let e=t,r=new T(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?"":" 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:[]}}},hd=new Zo;var Xo=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new T(this.model,"mysql"),s=[],a=[];for(let m of e.children){let{sql:c,bindings:h}=n.parse([m]);if(m.file==="add_column")s.push(c);else if(m.file==="add_constraint"||m.folder==="constraint"){let f=s[s.length-1]??"",g=/^\s*add\s+column\b/i.test(f),N=/^\s*add\s+constraint\b/i.test(c);if(g&&!N){let q=c.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${f} ${q}`;}else {let q=/^\s*add\b/i.test(c)?c:`add ${c}`;s.push(q);}}else m.file==="set_default"||m.file==="drop_default"||m.file==="set_not_null"||m.file,s.push(c);a.push(...h);}let l=s.join(", "),d=e.ifExists?"if exists ":"";return {sql:/^\s*drop\s+index\b/i.test(l)?l:`${d}${o} ${l}`,bindings:a}}},gd=new Xo;var en=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},bd=new en;var tn=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},Td=new tn;var rn=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},Nd=new rn;var on=class{toSql(t){return {sql:"",bindings:[]}}},Sd=new on;var nn=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},wd=new nn;var sn=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},qd=new sn;var an=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},Cd=new an;var ln=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:[]}}},_d=new ln;var dn=class{toSql(t){return {sql:"",bindings:[]}}},Md=new dn;var un=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:[]}}},Rd=new un;var mn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("mysql",C(e.column)),n=e.dataType.toLowerCase(),s,a=false,l=false;if(n==="char"){let d=e.length??1;s=`${o} char(${d})`;}else if(n==="varchar"){let d=e.length??255;s=`${o} varchar(${d})`;}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 d=e.precision??10,u=e.scale??0;s=`${o} decimal(${d}, ${u})`;}else if(n==="numeric"){a=true;let d=e.precision??10,u=e.scale??0;s=`${o} numeric(${d}, ${u})`;}else if(n==="date")s=`${o} date`;else if(n==="time"){let d=typeof e.precision=="number"?`(${e.precision})`:"";s=`${o} time${d}`.trimEnd();}else if(n==="datetime"){let d=typeof e.precision=="number"?`(${e.precision})`:"";s=`${o} datetime${d}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${d}`),e.autoUpdate&&(s+=` on update current_timestamp${d}`);}else if(n==="timestamp"){let d=typeof e.precision=="number"?`(${e.precision})`:"";s=`${o} timestamp${d}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${d}`),e.autoUpdate&&(s+=` on update current_timestamp${d}`);}else if(n==="year")s=`${o} year`;else if(n==="boolean")s=`${o} boolean`;else if(n==="varbinary"){let d=e.length??255;s=`${o} varbinary(${d})`;}else if(n==="binary"){let d=e.length??255;s=`${o} binary(${d})`;}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 d=e.enumValues.map(u=>`'${u}'`).join(", ");s=`${o} enum(${d})`;}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 d=e.length?`(${e.length})`:"";s=`${o} ${n}${d}`;}return a&&(e.zerofill?s+=" ZEROFILL":e.unsigned&&(s+=" UNSIGNED"),l&&(s+=" AUTO_INCREMENT")),e.collate&&(s+=` COLLATE ${e.collate}`),{sql:s,bindings:[]}}},xd=new mn;var cn=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Ad=new cn;var pn=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){let o=(e.columns??[]).map(s=>r.formatStringColumn("mysql",C(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",C(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(d=>r.formatStringColumn("mysql",C(d))).join(", "),n=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("mysql",C(d))).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:[]}}},Pd=new pn;var fn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new T(this.model,"mysql"),s=[],a=[];for(let c of e.children){let{sql:h,bindings:f}=n.parse([c]);if(c.folder==="constraint"){let g=s.pop()??"",N=h;if(/not null/i.test(N)||/null/i.test(N)||/default/i.test(N)){let q=`${g} ${N}`.trim();q=q.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(q),a.push(...f);continue}s.push(g),s.push(N),a.push(...f);continue}s.push(h),a.push(...f);}for(let c of e.namedConstraints){let{sql:h,bindings:f}=n.parse([c]);s.push(h),a.push(...f);}let l=s.join(", "),d=e.ifNotExists?"if not exists ":"",u=[];e.engine&&u.push(`ENGINE=${e.engine}`),e.charset&&u.push(`CHARSET=${e.charset}`),e.collate&&u.push(`COLLATE=${e.collate}`);let p=u.length>0?` ${u.join(" ")}`:"";return {sql:`${d}${o} (${l})${p}`,bindings:a}}},$d=new fn;var yn=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:[]}}},Dd=new yn;var hn=class{toSql(t){return {sql:"distinct",bindings:[]}}},Id=new hn;var gn=class{toSql(t){return b.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},Od=new gn;var bn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Ed=new bn;var Tn=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},vd=new Tn;var Nn=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],n=new T(this.model,"mysql").parse(r),s=e.alias&&e.alias.length?` as \`${e.alias}\``:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Qd=new Nn;var Sn=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},kd=new Sn;var wn=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 y(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 y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Bd=new wn;var qn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("mysql",e.table),n=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${o} (${n})`,bindings:[]}}},Kd=new qn;var Cn=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:[]}}},Wd=new Cn;var _n=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(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(p=>r.formatStringColumn("mysql",p)).join(", "),l=[],d=[];for(let p of e.records){let m=s.map(h=>p[h]),c=[];for(let h of m)h instanceof $?c.push(h.rawValue):(l.push(h),c.push("?"));d.push(`(${c.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},Ld=new _n;var Mn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(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),d=`${r.formatStringTable("mysql",e.table)} on ${s} ${e.on?.operator} ${a}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new T(this.model,"mysql");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let h=c.sql.replace(/^where\s+/i,"");d+=` and ${h}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},Ud=new Mn;var Rn=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Fd=new Rn;var bf={for_update:"for update",for_share:"lock in share mode"},xn=class{toSql(t){let e=t,r=bf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},jd=new xn;var An=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Vd=new An;var Pn=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 n=e.conflictColumns?.[0]||"id",s=r.formatStringColumn("mysql",`${e.table}.${n}`);return {sql:`AS new ON DUPLICATE KEY UPDATE ${s} = ${s}`,bindings:[]}}return {sql:`AS new ON DUPLICATE KEY UPDATE ${e.columnsToUpdate.map(n=>`${r.formatStringColumn("mysql",n)} = new.${r.formatStringColumn("mysql",n)}`).join(", ")}`,bindings:[]}}},Jd=new Pn;var $n=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("mysql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Hd=new $n;var Dn=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Yd=new Dn;var In=class{toSql(t){return {sql:`SELECT
180
180
  cc.CONSTRAINT_NAME AS name,
181
181
  cc.CHECK_CLAUSE AS expression
182
182
  FROM information_schema.CHECK_CONSTRAINTS cc
@@ -185,7 +185,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},fd=new Wo;var Uo=class{toSql(t){let
185
185
  AND cc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
186
186
  WHERE tc.TABLE_SCHEMA = DATABASE()
187
187
  AND tc.TABLE_NAME = '${t.table}'
188
- AND tc.CONSTRAINT_TYPE = 'CHECK'`,bindings:[]}}},lu=new Qn;var kn=class{toSql(t){return {sql:`SELECT
188
+ AND tc.CONSTRAINT_TYPE = 'CHECK'`,bindings:[]}}},zd=new In;var On=class{toSql(t){return {sql:`SELECT
189
189
  k.CONSTRAINT_NAME AS name,
190
190
  k.COLUMN_NAME AS column_name,
191
191
  k.REFERENCED_TABLE_NAME AS referenced_table,
@@ -196,18 +196,18 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},fd=new Wo;var Uo=class{toSql(t){let
196
196
  JOIN information_schema.REFERENTIAL_CONSTRAINTS r
197
197
  ON k.CONSTRAINT_NAME = r.CONSTRAINT_NAME AND k.CONSTRAINT_SCHEMA = r.CONSTRAINT_SCHEMA
198
198
  WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.REFERENCED_TABLE_NAME IS NOT NULL
199
- ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},du=new kn;var Bn=class{toSql(t){return {sql:`SHOW INDEX FROM \`${t.table}\``,bindings:[]}}},uu=new Bn;var Kn=class{toSql(t){return {sql:`SELECT
199
+ ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},Gd=new On;var En=class{toSql(t){return {sql:`SHOW INDEX FROM \`${t.table}\``,bindings:[]}}},Zd=new En;var vn=class{toSql(t){return {sql:`SELECT
200
200
  CONSTRAINT_NAME AS name,
201
201
  COLUMN_NAME AS column_name
202
202
  FROM information_schema.KEY_COLUMN_USAGE k
203
203
  WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.CONSTRAINT_NAME = 'PRIMARY'
204
- ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},mu=new Kn;var Ln=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:[]}}},cu=new Ln;var Wn=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 y(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 T(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 T(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 y(this.model).formatStringColumn("mysql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new T(this.model,"mysql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},pu=new Wn;var Un=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),o=ie.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}},fu=new Un;var Fn=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:[]}}},yu=new Fn;var jn=class{toSql(t){let e=t,r=new T(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}}},hu=new jn;var Vn=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),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 d=e.values[l];return d instanceof $?`${r.formatStringColumn("mysql",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("mysql",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},gu=new Vn;var Jn=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 y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(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 y(this.model).formatStringColumn("mysql",t):t}},bu=new Jn;var Hn=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new T(this.model,"mysql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},Tu=new Hn;var Yn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new y(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}}},Nu=new Yn;var zn=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 T(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 T(this.model,"mysql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},Su=new zn;var Gn=class{toSql(t){let e=t,r=new T(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}}},wu=new Gn;var Zn=class{toSql(t){let e=t,r=new T(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:[]}}},qu=new Zn;var Xn=class{toSql(t){let e=t,r=new T(this.model,"oracledb"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},Cu=new Xn;var es=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},_u=new es;var ts=class{toSql(t){let e=t,r=new T(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:[]}}},Mu=new ts;var rs=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("oracledb",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new T(this.model,"oracledb"),s=[],a=[];for(let u of e.children){let{sql:p,bindings:m}=n.parse([u]);s.push(p.trim()),a.push(...m);}let l=s.join(", ");return {sql:`${o} ${l}`,bindings:a}}},Ru=new rs;var os=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},xu=new os;var ns=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},Au=new ns;var ss=class{toSql(t){return {sql:`modify "${t.column}" default null`,bindings:[]}}},Pu=new ss;var is=class{toSql(t){return {sql:`modify "${t.column}" null`,bindings:[]}}},$u=new is;var as=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Du=new as;var ls=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Iu=new ls;var ds=class{toSql(t){return {sql:`rename to "${t.newName}"`,bindings:[]}}},Ou=new ds;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:[]}}},Eu=new us;var ms=class{toSql(t){return {sql:`modify "${t.column}" not null`,bindings:[]}}},vu=new ms;var cs=class{toSql(t){return {sql:"",bindings:[]}}},Qu=new cs;var ps=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("oracledb",C(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})`:"",d=`${o} timestamp${l}${a}`.trimEnd();return e.autoCreate&&(d+=" default current_timestamp"),{sql:d,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:[]}}},ku=new ps;var fs=class{toSql(t){return {sql:"",bindings:[]}}},Bu=new fs;var ys=class{toSql(t){let e=t,r=new y(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",C(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",C(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(d=>r.formatStringColumn("oracledb",C(d))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("oracledb",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("oracledb",C(d))).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:[]}}},Ku=new ys;var hs=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("oracledb",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new T(this.model,"oracledb"),s=[],a=[];for(let m of e.children){let{sql:c,bindings:h}=n.parse([m]);if(m.folder==="constraint"){let f=s.pop()??"",g=c;if(/not null/i.test(g)||/null/i.test(g)||/default/i.test(g)){let N=`${f} ${g}`.trim();N=N.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(N),a.push(...h);continue}s.push(f),s.push(g),a.push(...h);continue}s.push(c),a.push(...h);}for(let m of e.namedConstraints){let{sql:c,bindings:h}=n.parse([m]);s.push(c),a.push(...h);}let l=s.join(", "),d=[];if(e.oracleTablespace&&d.push(`TABLESPACE ${e.oracleTablespace}`),e.oracleCompress?d.push("COMPRESS"):e.oracleCompressFor&&d.push(`COMPRESS FOR ${e.oracleCompressFor}`),e.oracleStorage){let m=Object.entries(e.oracleStorage).map(([c,h])=>`${c.toUpperCase()} ${h}`).join(" ");m&&d.push(`STORAGE (${m})`);}e.oracleLogging===false?d.push("NOLOGGING"):e.oracleLogging===true&&d.push("LOGGING"),e.oracleCache===false?d.push("NOCACHE"):e.oracleCache===true&&d.push("CACHE"),e.oracleInMemory&&d.push("INMEMORY");let u=d.length>0?` ${d.join(" ")}`:"";return {sql:`${o} (${l})${u}`,bindings:a}}},Lu=new hs;var gs=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("oracledb",e.fromNode),bindings:[]}}},Wu=new gs;var bs=class{toSql(t){return {sql:"",bindings:[]}}},Uu=new bs;var Ts=class{toSql(t){return {sql:`(${t.columns.map(o=>new y(this.model).formatStringColumn("oracledb",o)).join(", ")})`,bindings:[]}}},Fu=new Ts;var Ns=class{toSql(t){let e=t;return {sql:`${new y(this.model).formatStringTable("oracledb",e.table)} cascade constraints`,bindings:[]}}},ju=new Ns;var Ss=class{toSql(t){return {sql:`-- Oracle does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Vu=new Ss;var ws=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("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 T(this.model,"oracledb").parse(r),s=e.alias&&e.alias.length?` "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Ju=new ws;var qs=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("oracledb",e.column),bindings:[]}}},Hu=new qs;var Cs=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 y(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 y(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Yu=new Cs;var _s=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("oracledb",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},zu=new _s;var Ms=class{toSql(t){return {sql:`"${t.indexName}"`,bindings:[]}}},Gu=new Ms;var Rs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(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=[],d=[],u=e.currParamIndex;for(let m of e.records){let c=s.map(f=>m[f]),h=[];for(let f of c)f instanceof $?h.push(f.rawValue):(l.push(f),h.push(`:${u++}`));d.push(`(${h.join(", ")})`);}let p;if(e.records.length===1)p=`${o} (${a}) values ${d[0]}`;else {e.keyword="insert",u=e.currParamIndex;let m=[];for(let c of e.records){let h=s.map(g=>c[g]),f=[];for(let g of h)g instanceof $?f.push(g.rawValue):f.push(`:${u++}`);m.push(`into ${o} (${a}) values (${f.join(", ")})`);}p=`all ${m.join(" ")} select * from dual`;}return {sql:p,bindings:l}}},Zu=new Rs;var xs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(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),d=`${r.formatStringTable("oracledb",e.table)} on ${s} ${e.on?.operator} ${a}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new T(this.model,"oracledb");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let h=c.sql.replace(/^where\s+/i,"");d+=` and ${h}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},Xu=new xs;var As=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.limit]}}},em=new As;var Yf={for_update:"for update",for_share:"for update",for_no_key_update:"for update",for_key_share:"for update"},Ps=class{toSql(t){let e=t,r=Yf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},tm=new Ps;var $s=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.offset]}}},rm=new $s;var Ds=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(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:[]}}},om=new Ds;var Is=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("oracledb",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},nm=new Is;var Os=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},sm=new Os;var Es=class{toSql(t){return {sql:`SELECT
204
+ ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},Xd=new vn;var Qn=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:[]}}},eu=new Qn;var kn=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 y(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 T(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 T(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 y(this.model).formatStringColumn("mysql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new T(this.model,"mysql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},tu=new kn;var Bn=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),o=ie.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}},ru=new Bn;var Kn=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:[]}}},ou=new Kn;var Wn=class{toSql(t){let e=t,r=new T(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}}},nu=new Wn;var Ln=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),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 d=e.values[l];return d instanceof $?`${r.formatStringColumn("mysql",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("mysql",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},su=new Ln;var Un=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 y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(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 y(this.model).formatStringColumn("mysql",t):t}},iu=new Un;var Fn=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new T(this.model,"mysql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},au=new Fn;var jn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new y(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}}},lu=new jn;var Vn=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 T(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 T(this.model,"mysql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},du=new Vn;var Jn=class{toSql(t){let e=t,r=new T(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}}},uu=new Jn;var Hn=class{toSql(t){let e=t,r=new T(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:[]}}},mu=new Hn;var Yn=class{toSql(t){let e=t,r=new T(this.model,"oracledb"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},cu=new Yn;var zn=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},pu=new zn;var Gn=class{toSql(t){let e=t,r=new T(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:[]}}},fu=new Gn;var Zn=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("oracledb",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new T(this.model,"oracledb"),s=[],a=[];for(let u of e.children){let{sql:p,bindings:m}=n.parse([u]);s.push(p.trim()),a.push(...m);}let l=s.join(", ");return {sql:`${o} ${l}`,bindings:a}}},yu=new Zn;var Xn=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},hu=new Xn;var es=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},gu=new es;var ts=class{toSql(t){return {sql:`modify "${t.column}" default null`,bindings:[]}}},bu=new ts;var rs=class{toSql(t){return {sql:`modify "${t.column}" null`,bindings:[]}}},Tu=new rs;var os=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Nu=new os;var ns=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Su=new ns;var ss=class{toSql(t){return {sql:`rename to "${t.newName}"`,bindings:[]}}},wu=new ss;var is=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:[]}}},qu=new is;var as=class{toSql(t){return {sql:`modify "${t.column}" not null`,bindings:[]}}},Cu=new as;var ls=class{toSql(t){return {sql:"",bindings:[]}}},_u=new ls;var ds=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("oracledb",C(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})`:"",d=`${o} timestamp${l}${a}`.trimEnd();return e.autoCreate&&(d+=" default current_timestamp"),{sql:d,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:[]}}},Mu=new ds;var us=class{toSql(t){return {sql:"",bindings:[]}}},Ru=new us;var ms=class{toSql(t){let e=t,r=new y(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",C(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",C(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(d=>r.formatStringColumn("oracledb",C(d))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("oracledb",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("oracledb",C(d))).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:[]}}},xu=new ms;var cs=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("oracledb",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new T(this.model,"oracledb"),s=[],a=[];for(let m of e.children){let{sql:c,bindings:h}=n.parse([m]);if(m.folder==="constraint"){let f=s.pop()??"",g=c;if(/not null/i.test(g)||/null/i.test(g)||/default/i.test(g)){let N=`${f} ${g}`.trim();N=N.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(N),a.push(...h);continue}s.push(f),s.push(g),a.push(...h);continue}s.push(c),a.push(...h);}for(let m of e.namedConstraints){let{sql:c,bindings:h}=n.parse([m]);s.push(c),a.push(...h);}let l=s.join(", "),d=[];if(e.oracleTablespace&&d.push(`TABLESPACE ${e.oracleTablespace}`),e.oracleCompress?d.push("COMPRESS"):e.oracleCompressFor&&d.push(`COMPRESS FOR ${e.oracleCompressFor}`),e.oracleStorage){let m=Object.entries(e.oracleStorage).map(([c,h])=>`${c.toUpperCase()} ${h}`).join(" ");m&&d.push(`STORAGE (${m})`);}e.oracleLogging===false?d.push("NOLOGGING"):e.oracleLogging===true&&d.push("LOGGING"),e.oracleCache===false?d.push("NOCACHE"):e.oracleCache===true&&d.push("CACHE"),e.oracleInMemory&&d.push("INMEMORY");let u=d.length>0?` ${d.join(" ")}`:"";return {sql:`${o} (${l})${u}`,bindings:a}}},Au=new cs;var ps=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("oracledb",e.fromNode),bindings:[]}}},Pu=new ps;var fs=class{toSql(t){return {sql:"",bindings:[]}}},$u=new fs;var ys=class{toSql(t){return {sql:`(${t.columns.map(o=>new y(this.model).formatStringColumn("oracledb",o)).join(", ")})`,bindings:[]}}},Du=new ys;var hs=class{toSql(t){let e=t;return {sql:`${new y(this.model).formatStringTable("oracledb",e.table)} cascade constraints`,bindings:[]}}},Iu=new hs;var gs=class{toSql(t){return {sql:`-- Oracle does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Ou=new gs;var bs=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("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 T(this.model,"oracledb").parse(r),s=e.alias&&e.alias.length?` "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Eu=new bs;var Ts=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("oracledb",e.column),bindings:[]}}},vu=new Ts;var Ns=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 y(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 y(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Qu=new Ns;var Ss=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("oracledb",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},ku=new Ss;var ws=class{toSql(t){return {sql:`"${t.indexName}"`,bindings:[]}}},Bu=new ws;var qs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(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=[],d=[],u=e.currParamIndex;for(let m of e.records){let c=s.map(f=>m[f]),h=[];for(let f of c)f instanceof $?h.push(f.rawValue):(l.push(f),h.push(`:${u++}`));d.push(`(${h.join(", ")})`);}let p;if(e.records.length===1)p=`${o} (${a}) values ${d[0]}`;else {e.keyword="insert",u=e.currParamIndex;let m=[];for(let c of e.records){let h=s.map(g=>c[g]),f=[];for(let g of h)g instanceof $?f.push(g.rawValue):f.push(`:${u++}`);m.push(`into ${o} (${a}) values (${f.join(", ")})`);}p=`all ${m.join(" ")} select * from dual`;}return {sql:p,bindings:l}}},Ku=new qs;var Cs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(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),d=`${r.formatStringTable("oracledb",e.table)} on ${s} ${e.on?.operator} ${a}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new T(this.model,"oracledb");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let h=c.sql.replace(/^where\s+/i,"");d+=` and ${h}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},Wu=new Cs;var _s=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.limit]}}},Lu=new _s;var Tf={for_update:"for update",for_share:"for update",for_no_key_update:"for update",for_key_share:"for update"},Ms=class{toSql(t){let e=t,r=Tf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},Uu=new Ms;var Rs=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.offset]}}},Fu=new Rs;var xs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(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:[]}}},ju=new xs;var As=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("oracledb",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Vu=new As;var Ps=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Ju=new Ps;var $s=class{toSql(t){return {sql:`SELECT
205
205
  constraint_name AS name,
206
206
  search_condition AS expression
207
207
  FROM user_constraints
208
208
  WHERE table_name = '${t.table.toUpperCase()}'
209
209
  AND constraint_type = 'C'
210
- AND constraint_name NOT LIKE 'SYS_%'`,bindings:[]}}},im=new Es;var vs=class{toSql(t){return {sql:`SELECT
210
+ AND constraint_name NOT LIKE 'SYS_%'`,bindings:[]}}},Hu=new $s;var Ds=class{toSql(t){return {sql:`SELECT
211
211
  c.constraint_name as name,
212
212
  cc.column_name as column_name,
213
213
  rc.table_name as referenced_table,
@@ -219,7 +219,7 @@ JOIN user_constraints rc ON c.r_constraint_name = rc.constraint_name
219
219
  JOIN user_cons_columns rcc ON rc.constraint_name = rcc.constraint_name AND cc.position = rcc.position
220
220
  WHERE c.constraint_type = 'R'
221
221
  AND c.table_name = '${t.table.toUpperCase()}'
222
- ORDER BY cc.position`,bindings:[]}}},am=new vs;var Qs=class{toSql(t){return {sql:`SELECT
222
+ ORDER BY cc.position`,bindings:[]}}},Yu=new Ds;var Is=class{toSql(t){return {sql:`SELECT
223
223
  i.index_name as index_name,
224
224
  ic.column_name as column_name,
225
225
  CASE WHEN i.uniqueness = 'UNIQUE' THEN 1 ELSE 0 END as is_unique
@@ -232,14 +232,14 @@ WHERE i.table_name = '${t.table.toUpperCase()}'
232
232
  WHERE c.constraint_type = 'P'
233
233
  AND c.index_name = i.index_name
234
234
  )
235
- ORDER BY i.index_name, ic.column_position`,bindings:[]}}},lm=new Qs;var ks=class{toSql(t){return {sql:`SELECT
235
+ ORDER BY i.index_name, ic.column_position`,bindings:[]}}},zu=new Is;var Os=class{toSql(t){return {sql:`SELECT
236
236
  c.constraint_name as name,
237
237
  cc.column_name as column_name
238
238
  FROM user_constraints c
239
239
  JOIN user_cons_columns cc ON c.constraint_name = cc.constraint_name
240
240
  WHERE c.constraint_type = 'P'
241
241
  AND c.table_name = '${t.table.toUpperCase()}'
242
- ORDER BY cc.position`,bindings:[]}}},dm=new ks;var Bs=class{toSql(t){return {sql:`SELECT
242
+ ORDER BY cc.position`,bindings:[]}}},Gu=new Os;var Es=class{toSql(t){return {sql:`SELECT
243
243
  column_name,
244
244
  data_type,
245
245
  CASE WHEN nullable = 'Y' THEN 'YES' ELSE 'NO' END as is_nullable,
@@ -249,7 +249,7 @@ ORDER BY cc.position`,bindings:[]}}},dm=new ks;var Bs=class{toSql(t){return {sql
249
249
  data_scale as numeric_scale
250
250
  FROM user_tab_columns
251
251
  WHERE table_name = '${t.table.toUpperCase()}'
252
- ORDER BY column_id`,bindings:[]}}},um=new Bs;var Ks=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 y(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 T(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 T(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 y(this.model).formatStringColumn("oracledb",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new T(this.model,"oracledb").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},mm=new Ks;var Ls=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("oracledb",e.column),o=ie.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}},cm=new Ls;var Ws=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("oracledb",e.fromNode),bindings:[]}}},pm=new Ws;var Us=class{toSql(t){let e=t,r=new T(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}}},fm=new Us;var Fs=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),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,d)=>{let u=e.values[d];return u instanceof $?`${r.formatStringColumn("oracledb",l)} = ${u.rawValue}`:(s.push(u),`${r.formatStringColumn("oracledb",l)} = :${n++}`)}).join(", ");return {sql:`${o} set ${a}`,bindings:s}}},ym=new Fs;var js=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,o="",n=[];if(this.isRawNode(e.value)){let s=this.formatRawIdentifierIfPossible(e.value.rawValue);o=`${new y(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 y(this.model).formatStringColumn("oracledb",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`:${r+l}`).join(", ");o=`${new y(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new y(this.model).formatStringColumn("oracledb",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new y(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 y(this.model).formatStringColumn("oracledb",t):t}},hm=new js;var Vs=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new T(this.model,"oracledb"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},gm=new Vs;var Js=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new y(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}}},bm=new Js;var Hs=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 T(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 T(this.model,"oracledb"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},Tm=new Hs;var Ys=class{toSql(t){let e=t,r=new T(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}}},Nm=new Ys;var zs=class{toSql(t){let e=t,r=new T(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:[]}}},Sm=new zs;var Gs=class{toSql(t){let e=t,r=new T(this.model,"postgres"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},wm=new Gs;var Zs=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},qm=new Zs;var Xs=class{toSql(t){let e=t,r=new T(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:[]}}},Cm=new Xs;var ei=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new T(this.model,"postgres"),s=[],a=[];for(let p of e.children){let{sql:m,bindings:c}=n.parse([p]);s.push(m.trim()),a.push(...c);}let l=s.join(", ");return {sql:`${e.ifExists?"if exists ":""}${o} ${l}`,bindings:a}}},_m=new ei;var ti=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Mm=new ti;var ri=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},Rm=new ri;var oi=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},xm=new oi;var ni=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Am=new ni;var si=class{toSql(t){return {sql:"",bindings:[]}}},Pm=new si;var ii=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},$m=new ii;var ai=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Dm=new ai;var li=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:[]}}},Im=new li;var di=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Om=new di;var ui=class{toSql(t){return {sql:"",bindings:[]}}},Em=new ui;var mi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("postgres",C(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})`:"",d=`${o} timestamp${l}${a}`.trimEnd();return e.autoCreate&&(d+=" default current_timestamp"),{sql:d,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:[]}}},vm=new mi;var ci=class{toSql(t){return {sql:"",bindings:[]}}},Qm=new ci;var pi=class{toSql(t){let e=t,r=new y(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",C(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",C(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(d=>r.formatStringColumn("postgres",C(d))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("postgres",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("postgres",C(d))).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:[]}}},km=new pi;var fi=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new T(this.model,"postgres"),s=[],a=[];for(let N of e.children){let{sql:q,bindings:R}=n.parse([N]);if(N.folder==="constraint"){let _=s.pop()??"",x=q;if(/not null/i.test(x)||/null/i.test(x)||/default/i.test(x)){let P=`${_} ${x}`.trim();P=P.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(P),a.push(...R);continue}s.push(_),s.push(x),a.push(...R);continue}s.push(q),a.push(...R);}for(let N of e.namedConstraints){let{sql:q,bindings:R}=n.parse([N]);s.push(q),a.push(...R);}let l=s.join(", "),d=e.ifNotExists?"if not exists ":"",u=[];e.temporary&&u.push("TEMPORARY"),e.unlogged&&u.push("UNLOGGED");let p=[];if(e.postgresWith){let N=Object.entries(e.postgresWith).map(([q,R])=>`${q}=${R}`).join(", ");N&&p.push(`WITH (${N})`);}let m=e.tablespace?`TABLESPACE ${e.tablespace}`:"",c=u.length>0?`${u.join(" ")} `:"",h=p.length>0?` ${p.join(" ")}`:"",f=m?` ${m}`:"";return {sql:`${d}${c}${o} (${l})${h}${f}`,bindings:a}}},Bm=new fi;var yi=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode.table=="string")return {sql:e.fromNode.table,bindings:[]};let r=new y(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:[]}}},Km=new yi;var hi=class{toSql(t){return {sql:"",bindings:[]}}},Lm=new hi;var gi=class{toSql(t){return {sql:`(${t.columns.map(o=>new y(this.model).formatStringColumn("postgres",o)).join(", ")})`,bindings:[]}}},Wm=new gi;var bi=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Um=new bi;var Ti=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},Fm=new Ti;var Ni=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],n=new T(this.model,"postgres").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},jm=new Ni;var Si=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},Vm=new Si;var wi=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 y(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 y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Jm=new wi;var qi=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},Hm=new qi;var Ci=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},Ym=new Ci;var _i=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(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=[],d=[],u=e.currParamIndex;for(let m of e.records){let c=s.map(f=>m[f]),h=[];for(let f=0;f<s.length;f++){let g=c[f];g instanceof $?h.push(g.rawValue):(l.push(g),h.push(`$${u++}${this.formatTypeCast(g)}`));}d.push(`(${h.join(", ")})`);}let p=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(c=>r.formatStringColumn("postgres",c)).join(", ");p+=` returning ${m}`;}else p+=" returning *";return {sql:p,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}},zm=new _i;var Mi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(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),d=`${r.formatStringTable("postgres",e.table)} on ${s} ${e.on?.operator} ${a}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new T(this.model,"postgres");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let h=c.sql.replace(/^where\s+/i,"");d+=` and ${h}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},Gm=new Mi;var Ri=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},Zm=new Ri;var zf={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},xi=class{toSql(t){let e=t,r=zf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},Xm=new xi;var Ai=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},ec=new Ai;var Pi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.conflictColumns.map(a=>r.formatStringColumn("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(d=>r.formatStringColumn("postgres",d)).join(", ");a+=` returning ${l}`;}return {sql:a,bindings:[]}}let n=e.columnsToUpdate.map(a=>`${r.formatStringColumn("postgres",a)} = excluded.${r.formatStringColumn("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:[]}}},tc=new Pi;var $i=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("postgres",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},rc=new $i;var Di=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},oc=new Di;var Ii=class{toSql(t){return {sql:`SELECT
252
+ ORDER BY column_id`,bindings:[]}}},Zu=new Es;var vs=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 y(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 T(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 T(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 y(this.model).formatStringColumn("oracledb",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new T(this.model,"oracledb").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},Xu=new vs;var Qs=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("oracledb",e.column),o=ie.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}},em=new Qs;var ks=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("oracledb",e.fromNode),bindings:[]}}},tm=new ks;var Bs=class{toSql(t){let e=t,r=new T(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}}},rm=new Bs;var Ks=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),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,d)=>{let u=e.values[d];return u instanceof $?`${r.formatStringColumn("oracledb",l)} = ${u.rawValue}`:(s.push(u),`${r.formatStringColumn("oracledb",l)} = :${n++}`)}).join(", ");return {sql:`${o} set ${a}`,bindings:s}}},om=new Ks;var Ws=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,o="",n=[];if(this.isRawNode(e.value)){let s=this.formatRawIdentifierIfPossible(e.value.rawValue);o=`${new y(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 y(this.model).formatStringColumn("oracledb",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`:${r+l}`).join(", ");o=`${new y(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new y(this.model).formatStringColumn("oracledb",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new y(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 y(this.model).formatStringColumn("oracledb",t):t}},nm=new Ws;var Ls=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new T(this.model,"oracledb"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},sm=new Ls;var Us=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new y(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}}},im=new Us;var Fs=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 T(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 T(this.model,"oracledb"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},am=new Fs;var js=class{toSql(t){let e=t,r=new T(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}}},lm=new js;var Vs=class{toSql(t){let e=t,r=new T(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:[]}}},dm=new Vs;var Js=class{toSql(t){let e=t,r=new T(this.model,"postgres"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},um=new Js;var Hs=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},mm=new Hs;var Ys=class{toSql(t){let e=t,r=new T(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:[]}}},cm=new Ys;var zs=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new T(this.model,"postgres"),s=[],a=[];for(let p of e.children){let{sql:m,bindings:c}=n.parse([p]);s.push(m.trim()),a.push(...c);}let l=s.join(", ");return {sql:`${e.ifExists?"if exists ":""}${o} ${l}`,bindings:a}}},pm=new zs;var Gs=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},fm=new Gs;var Zs=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},ym=new Zs;var Xs=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},hm=new Xs;var ei=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},gm=new ei;var ti=class{toSql(t){return {sql:"",bindings:[]}}},bm=new ti;var ri=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Tm=new ri;var oi=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Nm=new oi;var ni=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:[]}}},Sm=new ni;var si=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},wm=new si;var ii=class{toSql(t){return {sql:"",bindings:[]}}},qm=new ii;var ai=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("postgres",C(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})`:"",d=`${o} timestamp${l}${a}`.trimEnd();return e.autoCreate&&(d+=" default current_timestamp"),{sql:d,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:[]}}},Cm=new ai;var li=class{toSql(t){return {sql:"",bindings:[]}}},_m=new li;var di=class{toSql(t){let e=t,r=new y(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",C(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",C(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(d=>r.formatStringColumn("postgres",C(d))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("postgres",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("postgres",C(d))).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:[]}}},Mm=new di;var ui=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new T(this.model,"postgres"),s=[],a=[];for(let N of e.children){let{sql:q,bindings:R}=n.parse([N]);if(N.folder==="constraint"){let M=s.pop()??"",x=q;if(/not null/i.test(x)||/null/i.test(x)||/default/i.test(x)){let P=`${M} ${x}`.trim();P=P.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(P),a.push(...R);continue}s.push(M),s.push(x),a.push(...R);continue}s.push(q),a.push(...R);}for(let N of e.namedConstraints){let{sql:q,bindings:R}=n.parse([N]);s.push(q),a.push(...R);}let l=s.join(", "),d=e.ifNotExists?"if not exists ":"",u=[];e.temporary&&u.push("TEMPORARY"),e.unlogged&&u.push("UNLOGGED");let p=[];if(e.postgresWith){let N=Object.entries(e.postgresWith).map(([q,R])=>`${q}=${R}`).join(", ");N&&p.push(`WITH (${N})`);}let m=e.tablespace?`TABLESPACE ${e.tablespace}`:"",c=u.length>0?`${u.join(" ")} `:"",h=p.length>0?` ${p.join(" ")}`:"",f=m?` ${m}`:"";return {sql:`${d}${c}${o} (${l})${h}${f}`,bindings:a}}},Rm=new ui;var mi=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode.table=="string")return {sql:e.fromNode.table,bindings:[]};let r=new y(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:[]}}},xm=new mi;var ci=class{toSql(t){return {sql:"",bindings:[]}}},Am=new ci;var pi=class{toSql(t){return {sql:`(${t.columns.map(o=>new y(this.model).formatStringColumn("postgres",o)).join(", ")})`,bindings:[]}}},Pm=new pi;var fi=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},$m=new fi;var yi=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},Dm=new yi;var hi=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],n=new T(this.model,"postgres").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Im=new hi;var gi=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},Om=new gi;var bi=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 y(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 y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Em=new bi;var Ti=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("postgres",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},vm=new Ti;var Ni=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},Qm=new Ni;var Si=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(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=[],d=[],u=e.currParamIndex;for(let m of e.records){let c=s.map(f=>m[f]),h=[];for(let f=0;f<s.length;f++){let g=c[f];g instanceof $?h.push(g.rawValue):(l.push(g),h.push(`$${u++}${this.formatTypeCast(g)}`));}d.push(`(${h.join(", ")})`);}let p=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(c=>r.formatStringColumn("postgres",c)).join(", ");p+=` returning ${m}`;}else p+=" returning *";return {sql:p,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}},km=new Si;var wi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(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),d=`${r.formatStringTable("postgres",e.table)} on ${s} ${e.on?.operator} ${a}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new T(this.model,"postgres");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let h=c.sql.replace(/^where\s+/i,"");d+=` and ${h}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},Bm=new wi;var qi=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},Km=new qi;var Nf={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},Ci=class{toSql(t){let e=t,r=Nf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},Wm=new Ci;var _i=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},Lm=new _i;var Mi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.conflictColumns.map(a=>r.formatStringColumn("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(d=>r.formatStringColumn("postgres",d)).join(", ");a+=` returning ${l}`;}return {sql:a,bindings:[]}}let n=e.columnsToUpdate.map(a=>`${r.formatStringColumn("postgres",a)} = excluded.${r.formatStringColumn("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:[]}}},Um=new Mi;var Ri=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("postgres",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Fm=new Ri;var xi=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},jm=new xi;var Ai=class{toSql(t){return {sql:`SELECT
253
253
  con.conname AS name,
254
254
  pg_get_constraintdef(con.oid) AS expression
255
255
  FROM pg_constraint con
@@ -257,7 +257,7 @@ ORDER BY column_id`,bindings:[]}}},um=new Bs;var Ks=class{toSql(t){let e=t;if(e.
257
257
  JOIN pg_namespace nsp ON nsp.oid = rel.relnamespace
258
258
  WHERE con.contype = 'c'
259
259
  AND rel.relname = '${t.table}'
260
- AND nsp.nspname = current_schema()`,bindings:[]}}},nc=new Ii;var Oi=class{toSql(t){return {sql:`SELECT
260
+ AND nsp.nspname = current_schema()`,bindings:[]}}},Vm=new Ai;var Pi=class{toSql(t){return {sql:`SELECT
261
261
  tc.constraint_name as name,
262
262
  kcu.column_name as column_name,
263
263
  ccu.table_name as referenced_table,
@@ -272,7 +272,7 @@ ORDER BY column_id`,bindings:[]}}},um=new Bs;var Ks=class{toSql(t){let e=t;if(e.
272
272
  JOIN information_schema.referential_constraints rc
273
273
  ON rc.constraint_name = tc.constraint_name AND rc.constraint_schema = tc.table_schema
274
274
  WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
275
- ORDER BY kcu.ordinal_position`,bindings:[]}}},sc=new Oi;var Ei=class{toSql(t){return {sql:`SELECT
275
+ ORDER BY kcu.ordinal_position`,bindings:[]}}},Jm=new Pi;var $i=class{toSql(t){return {sql:`SELECT
276
276
  i.relname as index_name,
277
277
  a.attname as column_name,
278
278
  ix.indisunique as is_unique
@@ -291,14 +291,14 @@ ORDER BY column_id`,bindings:[]}}},um=new Bs;var Ks=class{toSql(t){let e=t;if(e.
291
291
  AND t.relname = '${t.table}'
292
292
  AND t.relnamespace = n.oid
293
293
  AND n.nspname = current_schema()
294
- AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},ic=new Ei;var vi=class{toSql(t){return {sql:`SELECT
294
+ AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},Hm=new $i;var Di=class{toSql(t){return {sql:`SELECT
295
295
  tc.constraint_name as name,
296
296
  kcu.column_name as column_name
297
297
  FROM information_schema.table_constraints tc
298
298
  JOIN information_schema.key_column_usage kcu
299
299
  ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
300
300
  WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
301
- ORDER BY kcu.ordinal_position`,bindings:[]}}},ac=new vi;var Qi=class{toSql(t){return {sql:`SELECT column_name,
301
+ ORDER BY kcu.ordinal_position`,bindings:[]}}},Ym=new Di;var Ii=class{toSql(t){return {sql:`SELECT column_name,
302
302
  data_type,
303
303
  is_nullable,
304
304
  column_default,
@@ -308,13 +308,13 @@ ORDER BY column_id`,bindings:[]}}},um=new Bs;var Ks=class{toSql(t){let e=t;if(e.
308
308
  FROM information_schema.columns
309
309
  WHERE table_schema = current_schema()
310
310
  AND table_name = '${t.table}'
311
- ORDER BY ordinal_position`,bindings:[]}}},lc=new Qi;var ki=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 y(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 T(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 T(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 y(this.model).formatStringColumn("postgres",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new T(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]:" ",d=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(d))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=n.slice(a),d=0;for(let u of l)u==="("&&d++,u===")"&&d--;if(d>0)return e}return `as "${r}"`})}},dc=new ki;var Bi=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),o=ie.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}},uc=new Bi;var Ki=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:[]}}},mc=new Ki;var Li=class{toSql(t){let e=t,r=new T(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}}},cc=new Li;var Wi=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),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((d,u)=>{let p=e.currParamIndex+u-n,m=e.values[u];return m instanceof $?(n++,`${r.formatStringColumn("postgres",d)} = ${m.rawValue}`):(s.push(m),`${r.formatStringColumn("postgres",d)} = $${p}${this.formatTypeCast(m)}`)}).join(", "),l=`${o} set ${a}`;if(e.returning&&e.returning.length){let d=e.returning.map(u=>r.formatStringColumn("postgres",u)).join(", ");l+=` returning ${d}`;}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}},pc=new Wi;var Ui=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,o="",n=[];if(this.isRawNode(e.value)){let s=this.formatRawIdentifierIfPossible(e.value.rawValue);o=`${new y(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 y(this.model).formatStringColumn("postgres",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new y(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 y(this.model).formatStringColumn("postgres",t):t}},fc=new Ui;var Fi=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new T(this.model,"postgres"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},yc=new Fi;var ji=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new y(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}}},hc=new ji;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 T(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 T(this.model,"postgres"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},gc=new Vi;var Ji=class{toSql(t){let e=t,r=new T(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}}},bc=new Ji;var Hi=class{toSql(t){let e=t,r=new T(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:[]}}},Tc=new Hi;var Yi=class{toSql(t){return {sql:"",bindings:[]}}},Nc=new Yi;var zi=class{toSql(t){return {sql:"",bindings:[]}}},Sc=new zi;var Gi=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new T(this.model,"sqlite"),s=[],a=[],l=false;for(let m of e.children){let{sql:c,bindings:h}=n.parse([m]);if(!(!c||!c.trim())){if(m.file==="add_column")s.push(c),l=true;else if(m.file==="add_constraint"&&l){let f=s.pop()??"",g=c.replace(/^\s*add\s+/i,"").trimStart();s.push(`${f} ${g}`);}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(c),l=false;}a.push(...h);}}let d=s.join(", "),u=e.ifExists?"if exists ":"";return d.trim()?{sql:`${u}${o} ${d}`,bindings:a}:{sql:"",bindings:[]}}},wc=new Gi;var Zi=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},qc=new Zi;var Xi=class{toSql(t){return {sql:"",bindings:[]}}},Cc=new Xi;var ea=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},_c=new ea;var ta=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Mc=new ta;var ra=class{toSql(t){return {sql:"",bindings:[]}}},Rc=new ra;var oa=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},xc=new oa;var na=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Ac=new na;var sa=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:[]}}},Pc=new sa;var ia=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},$c=new ia;var aa=class{toSql(t){return {sql:"",bindings:[]}}},Dc=new aa;var la=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("sqlite",C(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:[]}}},Ic=new la;var da=class{toSql(t){return {sql:"",bindings:[]}}},Oc=new da;var ua=class{toSql(t){let e=t,r=new y(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",C(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(d=>r.formatStringColumn("sqlite",C(d))).join(", "),s=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(d=>r.formatStringColumn("sqlite",C(d))).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:[]}}},Ec=new ua;var ma=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new T(this.model,"sqlite"),s=[],a=[];for(let f of e.children){let{sql:g,bindings:N}=n.parse([f]);if(f.folder==="constraint"){let q=s.pop()??"",R=g;if(/not null/i.test(R)||/null/i.test(R)||/default/i.test(R)||/primary key/i.test(R)){let _=`${q} ${R}`.trim();_=_.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(_),a.push(...N);continue}s.push(q),s.push(R),a.push(...N);continue}s.push(g),a.push(...N);}for(let f of e.namedConstraints){let{sql:g,bindings:N}=n.parse([f]);s.push(g),a.push(...N);}let l=s.join(", "),d=e.ifNotExists?"if not exists ":"",u=[];e.sqliteTemporary&&u.push("TEMPORARY");let p=u.length>0?`${u.join(" ")} `:"",m=e.withoutRowId?" WITHOUT ROWID":"",c=e.strict?" STRICT":"";return {sql:`${d}${p}${o} (${l})${m}${c}`,bindings:a}}},vc=new ma;var ca=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:[]}}},Qc=new ca;var pa=class{toSql(t){return {sql:"distinct",bindings:[]}}},kc=new pa;var fa=class{toSql(t){return b.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},Bc=new fa;var ya=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Kc=new ya;var ha=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},Lc=new ha;var ga=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],n=new T(this.model,"sqlite").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Wc=new ga;var ba=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},Uc=new ba;var Ta=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 y(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 y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Fc=new Ta;var Na=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},jc=new Na;var Sa=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},Vc=new Sa;var wa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(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(p=>r.formatStringColumn("sqlite",p)).join(", "),l=[],d=[];for(let p of e.records){let m=s.map(h=>p[h]),c=[];for(let h of m)h instanceof $?c.push(h.rawValue):(l.push(h),c.push("?"));d.push(`(${c.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},Jc=new wa;var qa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(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),d=`${r.formatStringTable("sqlite",e.table)} on ${s} ${e.on?.operator} ${a}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new T(this.model,"sqlite");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let h=c.sql.replace(/^where\s+/i,"");d+=` and ${h}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},Hc=new qa;var Ca=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Yc=new Ca;var _a=class{toSql(t){return {sql:"",bindings:[]}}},zc=new _a;var Ma=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Gc=new Ma;var Ra=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.conflictColumns.map(s=>r.formatStringColumn("sqlite",s)).join(", ");if(e.mode==="ignore")return {sql:`ON CONFLICT (${o}) DO NOTHING`,bindings:[]};let n=e.columnsToUpdate.map(s=>`${r.formatStringColumn("sqlite",s)} = EXCLUDED.${r.formatStringColumn("sqlite",s)}`).join(", ");return {sql:`ON CONFLICT (${o}) DO UPDATE SET ${n}`,bindings:[]}}},Zc=new Ra;var xa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("sqlite",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Xc=new xa;var Aa=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},ep=new Aa;var Pa=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},tp=new Pa;var $a=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},rp=new $a;var Da=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},op=new Da;var Ia=class{toSql(t){return {sql:`SELECT
311
+ ORDER BY ordinal_position`,bindings:[]}}},zm=new Ii;var Oi=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 y(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 T(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 T(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 y(this.model).formatStringColumn("postgres",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new T(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]:" ",d=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(d))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=n.slice(a),d=0;for(let u of l)u==="("&&d++,u===")"&&d--;if(d>0)return e}return `as "${r}"`})}},Gm=new Oi;var Ei=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),o=ie.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}},Zm=new Ei;var vi=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:[]}}},Xm=new vi;var Qi=class{toSql(t){let e=t,r=new T(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}}},ec=new Qi;var ki=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),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((d,u)=>{let p=e.currParamIndex+u-n,m=e.values[u];return m instanceof $?(n++,`${r.formatStringColumn("postgres",d)} = ${m.rawValue}`):(s.push(m),`${r.formatStringColumn("postgres",d)} = $${p}${this.formatTypeCast(m)}`)}).join(", "),l=`${o} set ${a}`;if(e.returning&&e.returning.length){let d=e.returning.map(u=>r.formatStringColumn("postgres",u)).join(", ");l+=` returning ${d}`;}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}},tc=new ki;var Bi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,o="",n=[];if(this.isRawNode(e.value)){let s=this.formatRawIdentifierIfPossible(e.value.rawValue);o=`${new y(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 y(this.model).formatStringColumn("postgres",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new y(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 y(this.model).formatStringColumn("postgres",t):t}},rc=new Bi;var Ki=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new T(this.model,"postgres"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},oc=new Ki;var Wi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new y(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}}},nc=new Wi;var Li=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 T(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 T(this.model,"postgres"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},sc=new Li;var Ui=class{toSql(t){let e=t,r=new T(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}}},ic=new Ui;var Fi=class{toSql(t){let e=t,r=new T(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:[]}}},ac=new Fi;var ji=class{toSql(t){return {sql:"",bindings:[]}}},lc=new ji;var Vi=class{toSql(t){return {sql:"",bindings:[]}}},dc=new Vi;var Ji=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new T(this.model,"sqlite"),s=[],a=[],l=false;for(let m of e.children){let{sql:c,bindings:h}=n.parse([m]);if(!(!c||!c.trim())){if(m.file==="add_column")s.push(c),l=true;else if(m.file==="add_constraint"&&l){let f=s.pop()??"",g=c.replace(/^\s*add\s+/i,"").trimStart();s.push(`${f} ${g}`);}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(c),l=false;}a.push(...h);}}let d=s.join(", "),u=e.ifExists?"if exists ":"";return d.trim()?{sql:`${u}${o} ${d}`,bindings:a}:{sql:"",bindings:[]}}},uc=new Ji;var Hi=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},mc=new Hi;var Yi=class{toSql(t){return {sql:"",bindings:[]}}},cc=new Yi;var zi=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},pc=new zi;var Gi=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},fc=new Gi;var Zi=class{toSql(t){return {sql:"",bindings:[]}}},yc=new Zi;var Xi=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},hc=new Xi;var ea=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},gc=new ea;var ta=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:[]}}},bc=new ta;var ra=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Tc=new ra;var oa=class{toSql(t){return {sql:"",bindings:[]}}},Nc=new oa;var na=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new y(this.model).formatStringColumn("sqlite",C(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:[]}}},Sc=new na;var sa=class{toSql(t){return {sql:"",bindings:[]}}},wc=new sa;var ia=class{toSql(t){let e=t,r=new y(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",C(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(d=>r.formatStringColumn("sqlite",C(d))).join(", "),s=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(d=>r.formatStringColumn("sqlite",C(d))).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:[]}}},qc=new ia;var aa=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new T(this.model,"sqlite"),s=[],a=[];for(let f of e.children){let{sql:g,bindings:N}=n.parse([f]);if(f.folder==="constraint"){let q=s.pop()??"",R=g;if(/not null/i.test(R)||/null/i.test(R)||/default/i.test(R)||/primary key/i.test(R)){let M=`${q} ${R}`.trim();M=M.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(M),a.push(...N);continue}s.push(q),s.push(R),a.push(...N);continue}s.push(g),a.push(...N);}for(let f of e.namedConstraints){let{sql:g,bindings:N}=n.parse([f]);s.push(g),a.push(...N);}let l=s.join(", "),d=e.ifNotExists?"if not exists ":"",u=[];e.sqliteTemporary&&u.push("TEMPORARY");let p=u.length>0?`${u.join(" ")} `:"",m=e.withoutRowId?" WITHOUT ROWID":"",c=e.strict?" STRICT":"";return {sql:`${d}${p}${o} (${l})${m}${c}`,bindings:a}}},Cc=new aa;var la=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:[]}}},_c=new la;var da=class{toSql(t){return {sql:"distinct",bindings:[]}}},Mc=new da;var ua=class{toSql(t){return b.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},Rc=new ua;var ma=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},xc=new ma;var ca=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},Ac=new ca;var pa=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],n=new T(this.model,"sqlite").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Pc=new pa;var fa=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},$c=new fa;var ya=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 y(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 y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Dc=new ya;var ha=class{toSql(t){let e=t,o=new y(this.model).formatStringTable("sqlite",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},Ic=new ha;var ga=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},Oc=new ga;var ba=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(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(p=>r.formatStringColumn("sqlite",p)).join(", "),l=[],d=[];for(let p of e.records){let m=s.map(h=>p[h]),c=[];for(let h of m)h instanceof $?c.push(h.rawValue):(l.push(h),c.push("?"));d.push(`(${c.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},Ec=new ba;var Ta=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(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),d=`${r.formatStringTable("sqlite",e.table)} on ${s} ${e.on?.operator} ${a}`,u=[];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new T(this.model,"sqlite");for(let m of e.additionalConditions){let c=p.parse([m]);if(c.sql){let h=c.sql.replace(/^where\s+/i,"");d+=` and ${h}`,u.push(...c.bindings);}}}return {sql:d,bindings:u}}},vc=new Ta;var Na=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Qc=new Na;var Sa=class{toSql(t){return {sql:"",bindings:[]}}},kc=new Sa;var wa=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Bc=new wa;var qa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),o=e.conflictColumns.map(s=>r.formatStringColumn("sqlite",s)).join(", ");if(e.mode==="ignore")return {sql:`ON CONFLICT (${o}) DO NOTHING`,bindings:[]};let n=e.columnsToUpdate.map(s=>`${r.formatStringColumn("sqlite",s)} = EXCLUDED.${r.formatStringColumn("sqlite",s)}`).join(", ");return {sql:`ON CONFLICT (${o}) DO UPDATE SET ${n}`,bindings:[]}}},Kc=new qa;var Ca=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("sqlite",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Wc=new Ca;var _a=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Lc=new _a;var Ma=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},Uc=new Ma;var Ra=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},Fc=new Ra;var xa=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},jc=new xa;var Aa=class{toSql(t){return {sql:`SELECT
312
312
  'PRIMARY' as name,
313
313
  name as column_name
314
314
  FROM pragma_table_info('${t.table}')
315
315
  WHERE pk > 0
316
- ORDER BY pk`,bindings:[]}}},np=new Ia;var Oa=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},sp=new Oa;var Ea=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 y(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 T(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 T(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 y(this.model).formatStringColumn("sqlite",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new T(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]:" ",d=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(d))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=n.slice(a),d=0;for(let u of l)u==="("&&d++,u===")"&&d--;if(d>0)return e}return `as "${r}"`})}},ip=new Ea;var va=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),o=ie.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}},ap=new va;var Qa=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:[]}}},lp=new Qa;var ka=class{toSql(t){let e=t,r=new T(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}}},dp=new ka;var Ba=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),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 d=e.values[l];return d instanceof $?`${r.formatStringColumn("sqlite",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("sqlite",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},up=new Ba;var Ka=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 y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(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 y(this.model).formatStringColumn("sqlite",t):t}},mp=new Ka;var La=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new T(this.model,"sqlite"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},cp=new La;var Wa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new y(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}}},pp=new Wa;var Ua=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 T(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 T(this.model,"sqlite"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},fp=new Ua;var Fa=class{toSql(t){let e=t,r=new T(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}}},yp=new Fa;var hp={mssql:{alter_table:{add_column:pl,add_constraint:fl,add_primary_key:yl,alter_column_type:hl,alter_table:$l,drop_column:Dl,drop_constraint:Il,drop_default:Ol,drop_not_null:El,drop_primary_key:vl,rename_column:Ql,rename_table:kl,set_default:Bl,set_not_null:Kl,set_table_options:Ll},column:{column_type:Wl},constraint:{after:Ul,constraint:Fl},create_table:{create_table:jl},delete:{delete:Vl},distinct:{distinct:Jl,distinct_on:Hl},drop_table:{drop_table:Yl},extension:{create_extension:zl},from:{from:Gl},group_by:{group_by:Zl},having:{having:Xl},index_op:{create_index:ed,drop_index:td},insert:{insert:rd},join:{join:od},limit:{limit:nd},lock:{lock:sd},offset:{offset:id},on_duplicate:{on_duplicate:ad},order_by:{order_by:ld},raw:{raw:dd},schema:{check_constraint_info:ud,foreign_key_info:md,index_info:cd,primary_key_info:pd,table_info:fd},select:{select:yd,select_json:hd},truncate:{truncate:gd},union:{union:bd},update:{update:Td},where:{where:Nd,where_group:Sd,where_json:wd,where_subquery:qd},with:{with:Cd}},mysql:{alter_table:{add_column:_d,add_constraint:Md,add_primary_key:Rd,alter_column_type:xd,alter_table:Ad,drop_column:Pd,drop_constraint:$d,drop_default:Dd,drop_not_null:Id,drop_primary_key:Od,rename_column:Ed,rename_table:vd,set_default:Qd,set_not_null:kd,set_table_options:Bd},column:{column_type:Kd},constraint:{after:Ld,constraint:Wd},create_table:{create_table:Ud},delete:{delete:Fd},distinct:{distinct:jd,distinct_on:Vd},drop_table:{drop_table:Jd},extension:{create_extension:Hd},from:{from:Yd},group_by:{group_by:zd},having:{having:Gd},index_op:{create_index:Zd,drop_index:Xd},insert:{insert:eu},join:{join:tu},limit:{limit:ru},lock:{lock:ou},offset:{offset:nu},on_duplicate:{on_duplicate:su},order_by:{order_by:iu},raw:{raw:au},schema:{check_constraint_info:lu,foreign_key_info:du,index_info:uu,primary_key_info:mu,table_info:cu},select:{select:pu,select_json:fu},truncate:{truncate:yu},union:{union:hu},update:{update:gu},where:{where:bu,where_group:Tu,where_json:Nu,where_subquery:Su},with:{with:wu}},oracledb:{alter_table:{add_column:qu,add_constraint:Cu,add_primary_key:_u,alter_column_type:Mu,alter_table:Ru,drop_column:xu,drop_constraint:Au,drop_default:Pu,drop_not_null:$u,drop_primary_key:Du,rename_column:Iu,rename_table:Ou,set_default:Eu,set_not_null:vu,set_table_options:Qu},column:{column_type:ku},constraint:{after:Bu,constraint:Ku},create_table:{create_table:Lu},delete:{delete:Wu},distinct:{distinct:Uu,distinct_on:Fu},drop_table:{drop_table:ju},extension:{create_extension:Vu},from:{from:Ju},group_by:{group_by:Hu},having:{having:Yu},index_op:{create_index:zu,drop_index:Gu},insert:{insert:Zu},join:{join:Xu},limit:{limit:em},lock:{lock:tm},offset:{offset:rm},on_duplicate:{on_duplicate:om},order_by:{order_by:nm},raw:{raw:sm},schema:{check_constraint_info:im,foreign_key_info:am,index_info:lm,primary_key_info:dm,table_info:um},select:{select:mm,select_json:cm},truncate:{truncate:pm},union:{union:fm},update:{update:ym},where:{where:hm,where_group:gm,where_json:bm,where_subquery:Tm},with:{with:Nm}},postgres:{alter_table:{add_column:Sm,add_constraint:wm,add_primary_key:qm,alter_column_type:Cm,alter_table:_m,drop_column:Mm,drop_constraint:Rm,drop_default:xm,drop_not_null:Am,drop_primary_key:Pm,rename_column:$m,rename_table:Dm,set_default:Im,set_not_null:Om,set_table_options:Em},column:{column_type:vm},constraint:{after:Qm,constraint:km},create_table:{create_table:Bm},delete:{delete:Km},distinct:{distinct:Lm,distinct_on:Wm},drop_table:{drop_table:Um},extension:{create_extension:Fm},from:{from:jm},group_by:{group_by:Vm},having:{having:Jm},index_op:{create_index:Hm,drop_index:Ym},insert:{insert:zm},join:{join:Gm},limit:{limit:Zm},lock:{lock:Xm},offset:{offset:ec},on_duplicate:{on_duplicate:tc},order_by:{order_by:rc},raw:{raw:oc},schema:{check_constraint_info:nc,foreign_key_info:sc,index_info:ic,primary_key_info:ac,table_info:lc},select:{select:dc,select_json:uc},transaction:{},truncate:{truncate:mc},union:{union:cc},update:{update:pc},where:{where:fc,where_group:yc,where_json:hc,where_subquery:gc},with:{with:bc}},sqlite:{alter_table:{add_column:Tc,add_constraint:Nc,alter_column_type:Sc,alter_table:wc,drop_column:qc,drop_constraint:Cc,drop_default:_c,drop_not_null:Mc,drop_primary_key:Rc,rename_column:xc,rename_table:Ac,set_default:Pc,set_not_null:$c,set_table_options:Dc},column:{column_type:Ic},constraint:{after:Oc,constraint:Ec},create_table:{create_table:vc},delete:{delete:Qc},distinct:{distinct:kc,distinct_on:Bc},drop_table:{drop_table:Kc},extension:{create_extension:Lc},from:{from:Wc},group_by:{group_by:Uc},having:{having:Fc},index_op:{create_index:jc,drop_index:Vc},insert:{insert:Jc},join:{join:Hc},limit:{limit:Yc},lock:{lock:zc},offset:{offset:Gc},on_duplicate:{on_duplicate:Zc},order_by:{order_by:Xc},raw:{raw:ep},schema:{check_constraint_info:tp,foreign_key_info:rp,index_info:op,primary_key_info:np,table_info:sp},select:{select:ip,select_json:ap},transaction:{},truncate:{truncate:lp},union:{union:dp},update:{update:up},where:{where:mp,where_group:cp,where_json:pp,where_subquery:fp},with:{with:yp}}};var T=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"),d=l.some(_=>_.folder==="offset"),u=l.some(_=>_.folder==="order_by"),p=l.find(_=>_.folder==="limit"),m=l.find(_=>_.folder==="offset"),c=this.dbType==="mssql"&&p&&!d&&!u,h=this.dbType==="mssql"&&!c&&(p||m),f=this.dbType==="oracledb"&&(p||m),g=[],N=[],q=null;c&&p&&N.push(p.limit);for(let _=0;_<l.length;_++){let x=l[_];if(c&&x.folder==="limit"||h&&(x.folder==="limit"||x.folder==="offset")||f&&(x.folder==="limit"||x.folder==="offset"))continue;x.currParamIndex=e+N.length;let P=hp[this.mapCommonDbType(this.dbType)][x.folder][x.file];if(!P)throw new Error(`Interpreter not found for ${this.dbType} ${x.keyword}`);P.model=this.model;let M=P.toSql(x);if(!M.sql||!M.sql.trim().length)continue;let O=l[_+1],D=!O||O.keyword!==x.keyword?"":O.chainsWith;if(x.folder==="lock"||x.folder==="on_duplicate"||x.folder==="schema"){g.push(`${M.sql}${D}`),N.push(...M.bindings),q=x.keyword;continue}if(q!==x.keyword||x.canKeywordBeSeenMultipleTimes){if(r)g.push(`${M.sql}${D}`);else {let J=x.keyword;if(x.folder==="with"&&this.dbType!=="mssql"){let Z=_,be=false;for(;Z<l.length&&l[Z].keyword===x.keyword;){let qe=l[Z];if(qe.folder==="with"&&qe.clause==="recursive"){be=true;break}Z++;}be&&(J=`${J} recursive`);}if(J==="select"){let Z=c?`top (@${e}) `:"";if(o){let be=Array.isArray(o.columns)?o.columns.join(", "):"";g.push(`select ${Z}distinct on (${be}) ${M.sql}${D}`);}else n?g.push(`select ${Z}distinct ${M.sql}${D}`):g.push(`select ${Z}${M.sql}${D}`);}else J==="from"&&a?g.push(`${J} ${M.sql}${a}${D}`):g.push(`${J} ${M.sql}${D}`);}q=x.keyword;}else g.push(`${M.sql}${D}`);N.push(...M.bindings);}if(h){u||g.push("order by (select null)");let _=m?.offset??0;N.push(_);let P=`offset @${e+N.length-1} rows`;if(p){N.push(p.limit);let M=e+N.length-1;P+=` fetch next @${M} rows only`;}g.push(P);}if(f){u||g.push("order by null");let _=m?.offset??0;N.push(_);let P=`offset :${e+N.length-1} rows`;if(p){N.push(p.limit);let M=e+N.length-1;P+=` fetch next :${M} rows only`;}g.push(P);}return {sql:g.join(" "),bindings:N}}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 zt=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var Gt=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var Zt=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var Xt=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var er=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var tr=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var de=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var rt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var rr=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 ue=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 or=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var me=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var Tt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var nr=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var ot=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var sr=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 ir=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 ar=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var ve=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 W=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 lr=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 dr=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 ur=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 mr=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 cr=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 nt=class extends w{constructor(e,r=false){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e;}};var Q=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 Nt=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 Qe=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 st=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 Ae=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var pr=class extends w{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var fr=class extends Ae{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=xe(this.tableName,C(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new W("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new W("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??e})),this)}foreignKey(t,e){let[r,o]=t.split("."),n=o.split(","),s=e?.constraintName??G(this.tableName??"",C(this.columnNode.column),n[0]);return this.context==="alter_table"?(this.nodes.push(new W("foreign_key",{columns:[C(this.columnNode.column)],references:{table:r,columns:n},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this):(this.namedConstraints.push(new W("foreign_key",{columns:[C(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 W("not_null",{columns:[C(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new W("null",{columns:[C(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 W("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new W("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??le(this.tableName??"",C(this.columnNode.column))})),this):(this.namedConstraints.push(new W("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName||le(this.tableName??"",C(this.columnNode.column))})),this)}check(t,e){let r=C(this.columnNode.column),o=e?.constraintName??`chk_${this.tableName}_${r}`.substring(0,63);return this.context==="alter_table"?(this.nodes.push(new W("check",{columns:[r],checkExpression:t,constraintName:o})),this):(this.namedConstraints.push(new W("check",{columns:[r],checkExpression:t,constraintName:o})),this)}after(t){return this.sqlType!=="mysql"?this:(this.nodes.push(new pr(t)),this)}collate(t){return this.columnNode.collate=t,this}handleSqliteAutoIncrement(t){return this.nodes.push(new W("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this}};var ke=class extends Ae{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 fr(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new $(e)}char(e,r=1){let o=new Q(e,"char",{length:r});return this.build(o)}varchar(e,r=255){let o=new Q(e,"varchar",{length:r});return this.build(o)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let o=new Q(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 Q(e,"uuid");return this.build(r)}ulid(e){let r=new Q(e,"ulid");return this.build(r)}integer(e,r=255){let o=new Q(e,"integer",{length:r});return this.build(o)}tinyint(e,r=255){let o=new Q(e,"tinyint",{length:r});return this.build(o)}smallint(e,r=255){let o=new Q(e,"smallint",{length:r});return this.build(o)}mediumint(e,r=255){let o=new Q(e,"mediumint",{length:r});return this.build(o)}biginteger(e,r=255){let o=new Q(e,"bigint",{length:r});return this.build(o)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let o=new Q(e,"float",{precision:r});return this.build(o)}double(e,r=10){let o=new Q(e,"double",{precision:r});return this.build(o)}real(e,r=10){let o=new Q(e,"real",{precision:r});return this.build(o)}decimal(e,r=10,o=2){let n=new Q(e,"decimal",{precision:r,scale:o});return this.build(n)}numeric(e,r=10,o=2){let n=new Q(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 Q(e,"date",{precision:r});return this.build(o)}time(e,r){let o=new Q(e,"time",{precision:r});return this.build(o)}year(e){let r=new Q(e,"year");return this.build(r)}datetime(e,r){let o=new Q(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 Q(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(o)}boolean(e){let r=new Q(e,"boolean");return this.build(r)}binary(e){let r=new Q(e,"binary");return this.build(r)}varbinary(e,r=255){let o=new Q(e,"varbinary",{length:r});return this.build(o)}blob(e){let r=new Q(e,"blob");return this.build(r)}tinyblob(e){let r=new Q(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new Q(e,"mediumblob");return this.build(r)}longblob(e){let r=new Q(e,"longblob");return this.build(r)}json(e){let r=new Q(e,"json");return this.build(r)}jsonb(e){let r=new Q(e,"jsonb");return this.build(r)}enum(e,r){let o=new Q(e,"enum",{enumValues:r});return this.build(o)}custom(e,r,o){let n=new Q(e,r,{length:o});return this.build(n)}rawColumn(e){let r=new Q(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new Q(e,"geometry");return this.build(r)}point(e){let r=new Q(e,"point");return this.build(r)}linestring(e){let r=new Q(e,"linestring");return this.build(r)}polygon(e){let r=new Q(e,"polygon");return this.build(r)}multiPoint(e){let r=new Q(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var yr=class extends Ae{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new $(t)}addColumn(t){let e=[],r=new ke(this.sqlType,e,this.table,"alter_table"),o=t(r);if(!e.length)return;let n=r.getNamedConstraints(),s=e.filter(p=>p.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(p=>{let m=p;return m.constraintType==="not_null"||m.constraintType==="null"||m.constraintType==="default"}),d=new tr(a);d.inlineConstraints=l,this.nodes.push(d),o.getNodes().filter(p=>{let m=p;return m.constraintType==="unique"||m.constraintType==="foreign_key"||m.constraintType==="primary_key"}).forEach(p=>{this.nodes.push(new de(p));});}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 ke(this.sqlType,e,this.table,"alter_table"),o=t(r);if(!e.length)return;let n=e.filter(c=>c.folder==="column");if(n.length!==1)throw new Error("alterColumn callback must define exactly one column");let s=n[0],a=C(s.column),l=o.getNodes().find(c=>c.constraintType==="null"),u=o.getNodes().find(c=>c.constraintType==="not_null")||l,p=o.getNodes().find(c=>c.constraintType==="default"),m={};u&&(m.nullable=u.constraintType==="null"),p&&(p.defaultValue===void 0||p.defaultValue===null||p.defaultValue==="NULL"?m.dropDefault=true:m.default=p.defaultValue),s.collate&&(this.sqlType==="mysql"||this.sqlType==="mariadb")&&(m.collate=s.collate),this.nodes.push(new rr(C(a),s,m)),u&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(u.constraintType==="not_null"?this.nodes.push(new ar(C(a))):u.constraintType==="null"&&this.nodes.push(new nr(C(a)))),p&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(p.defaultValue===void 0||p.defaultValue===null||p.defaultValue==="NULL"?this.nodes.push(new Tt(C(a))):this.nodes.push(new ir(C(a),p.defaultValue))),o.getNodes().forEach(c=>{let h=c;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 or(t));}renameColumn(t,e){this.nodes.push(new sr(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 Tt(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 rt([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 de(new W(...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 de(new W("foreign_key",{columns:[t],references:{table:e,columns:[r]},constraintName:o?.constraintName??G(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 de(new W("unique",{columns:[t],constraintName:e?.constraintName??le(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=G(this.table,t,e);this.nodes.push(new me(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??le(this.table,t);this.nodes.push(new me(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 me(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 ot(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 ve(t)):r?this.nodes.push(new ve(t)):o?this.nodes.push(new ve(t)):n&&this.nodes.push(new ve(t)),this)}};var ge=class{constructor(t){if(this.sqlType=t||I.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(!pe.existsSync(t))throw new S("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=ze.basename(t),r=ze.extname(e);if(r!==".sql"&&r!==".txt")throw new S("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let n=pe.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 ke(this.sqlType,[],t);e(o);let n=o.getNodes(),s=new T({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a={...r,...this.sqlType==="mysql"||this.sqlType==="mariadb"?o.getMysqlOptions()||{}:{}},l=new lr(t,n,o.getNamedConstraints(),r?.ifNotExists,a),d=s.parse([l]).sql,u=d.startsWith("create table")?d:`create table ${d}`;this.rawQuery(u),this.generateAutoUpdateTriggers(t,n);}alterTable(t,e){let r=[],o=new yr(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 d=new ue(t,s),u=n.parse([d]).sql;if(!u||!u.trim())return;let p=u.startsWith("alter table")?u:`alter table ${u}`;this.rawQuery(p),s=[];};for(let d of r)d.file==="add_constraint"&&s.length&&s[0].file==="add_column"||a(),s.push(d);a();let l=r.filter(d=>d.file==="add_column").map(d=>d.column);this.generateAutoUpdateTriggers(t,l);}dropTable(t,e=false){let r=new dr(t,e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}renameTable(t,e){let r=new ue(t,[new Ze(e)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}truncateTable(t){let e=new nt(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||oo(t,e.join("_")),n=new mr(t,e,o),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([n]).sql);}dropIndex(t,e){let r=new cr(t,e),o=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}addPrimaryKey(t,e){let r=new rt(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??le(t,o.join("_")),s=new W("unique",{columns:o,constraintName:n}),a=new ue(t,[new de(s)]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropForeignKey(t,e,r){let o=G(t,e,r),n=new me(o),s=new ue(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)?le(t,e.join("_")):le(t,e),n=r?.constraintName??o,s=new me(n),a=new ue(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new ot,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new W(...e),o=new ue(t,[new de(r)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([o]).sql);}dropConstraint(t,e){let r=new me(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 W("check",{checkExpression:e,constraintName:o}),s=new ue(t,[new de(n)]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropCheck(t,e){if(this.sqlType==="mysql"||this.sqlType==="mariadb"){this.rawQuery(`ALTER TABLE \`${t}\` DROP CHECK \`${e}\``);return}let r=new me(e),o=new ue(t,[r]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([o]).sql);}createExtension(t,e=true){let r=new ur(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=>C(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 T(t,this.sqlType)}};var gr,Tp,hr=class{constructor(t,e){Za(this,gr);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new ge(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=Xa(this,gr,Tp).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(`;
317
- `)}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"}};gr=new WeakSet,Tp=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 br=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 d=l.getRelations();for(let u of d)u.type==="belongsTo"&&u.model().table===n.table&&a.push(`fk.${l.table}.${u.constraintName}`);}r.set(s,a);}for(let n of t.columnsToDrop||[]){let s=`column.${n.table}.${n.column}`,a=[],l=this.models.find(d=>d.table===n.table);if(l){let d=l.getColumns().find(u=>u.databaseName===n.column);if(d){d.isPrimary&&a.push(`pk.${n.table}`);let u=l.getRelations();for(let p of u)p.columnName===d.columnName&&a.push(`fk.${n.table}.${p.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 d of l)s(d);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("."),d=t.relationsToDrop?.find(u=>u.table===a&&u.relation.name===l);d&&r.push({type:"DROP_FOREIGN_KEY",phase:"DESTRUCTIVE_OPERATIONS",table:a,constraint:l,data:d,dependencies:e.foreignKeys.get(s)||[],sqlStatements:this.generateDropForeignKeySql(d)});}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 d of l)d.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)}):d.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(d=>d.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 Nr=class Nr{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new br(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 d=r(l);return d?!(s.has(d)&&(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 ge(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(d=>d.table===o.table)?.getColumns().find(d=>d.columnName===o.columns[0])?.primaryKeyConstraintName||xe(o.table,o.columns[0]),l=this.sql.schema().alterTable(o.table,d=>{let u=a||xe(o.table,o.columns[0]);d.addConstraint("primary_key",{columns:[o.columns[0]],constraintName:u});}).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(u=>u.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 ge(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 ge(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=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 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,G(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=C(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}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"&&Nr.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||xe(t,r.columnName)}),r.unsigned&&s.unsigned(),r.zerofill&&s.zerofill(),r.constraints?.default!==void 0&&s.default(r.constraints.default),r.constraints?.nullable===false?s.notNullable():r.constraints?.nullable===true&&s.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),t.column.constraints?.nullable===false?n.notNullable():t.column.constraints?.nullable===true&&n.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),t.modelColumn.constraints?.nullable===false?s.notNullable():t.modelColumn.constraints?.nullable===true&&s.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 ge(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=C(t.relation.manyToManyOptions.throughModel),r=C(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=C(r);if(t.relation.type==="belongsTo"){let m=t.relation.model(),c=m.primaryKey,f=m.getColumns().find(g=>g.columnName===c);if(f)n=f.databaseName;else {let g=m?.databaseCaseConvention||"preserve";n=V(c,g);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.model();if(typeof n=="string"&&n){let c=m.getColumns(),h=c.find(f=>f.columnName===n);if(h)n=h.databaseName;else {let f=m.primaryKey||"id",g=c.find(N=>N.columnName===f);if(g)n=g.databaseName;else {let N=m?.databaseCaseConvention||"preserve";n=V(n||f,N);}}}else {let c=m.primaryKey||"id",f=m.getColumns().find(g=>g.columnName===c);if(f)n=f.databaseName;else {let g=m?.databaseCaseConvention||"preserve";n=V(c,g);}}}let s=this.models.find(m=>m.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,d=a.find(m=>m.columnName===l);if(d)l=d.databaseName;else {let m=s?.databaseCaseConvention||"preserve";l=V(l,m);}if(t.relation.type==="belongsTo"){let m=a.find(c=>c.columnName===t.relation.foreignKey);if(m)l=m.databaseName;else {let c=s?.databaseCaseConvention||"preserve";l=V(t.relation.foreignKey,c);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.manyToManyOptions.leftForeignKey,c=C(m),h=a.find(f=>f.columnName===c);if(h)l=h.databaseName;else {let f=s?.databaseCaseConvention||"preserve";l=V(c,f);}}let u=t.relation.onDelete?.toLowerCase(),p=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,m=>{let c=o||G(t.table,l,e);m.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[n]},constraintName:c,onDelete:u,onUpdate:p});}).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," "))}))}};Nr.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 Tr=Nr;function Xf(i){return i.replace(/\s+/g," ").trim()}function ey(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function Pe(i,t){let e=Xf(t.toLowerCase()),r=ey(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":{if(r.endsWith("text")||r==="text")return "text";switch(r){case "int":case "integer":case "increment":return "integer";case "tinyint":return "boolean";case "smallint":return "smallint";case "mediumint":return "mediumint";case "bigint":case "bigincrement":return "bigint";case "float":return "float";case "double":case "double precision":return "double";case "real":return "double";case "decimal":case "numeric":return "numeric";case "string":case "varchar":case "character varying":return "varchar";case "char":case "character":return "char";case "uuid":return "varchar";case "ulid":return "varchar";case "date":return "date";case "datetime":return "datetime";case "timestamp":return "timestamp";case "time":return "time";case "year":return "year";case "jsonb":return "json";case "json":return "json";case "enum":return "enum";case "binary":return "binary";case "varbinary":return "varbinary";case "tinyblob":return "tinyblob";case "mediumblob":return "mediumblob";case "longblob":return "longblob";case "blob":return "blob";case "boolean":case "bool":return "boolean";default:return r}}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 Be=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(f=>f?.type!==void 0&&f?.type!==null),indexes:r.getIndexes(),relations:r.getRelations()};if(!o.columns.length){e.data.tablesToAdd.push({table:r.table,columns:n.columns});for(let N of n.indexes)o.indexes.map(q=>q.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 g=r.getChecks?.()||[];for(let N of g)e.data.checksToAdd.push({table:r.table,name:N.name,expression:N.expression});for(let N of n.relations){if(N.type!=="belongsTo")continue;let q=C(N.constraintName);o.foreignKeys.find(_=>_.name===q)||e.data.relationsToAdd.push({table:r.table,relation:N,onDelete:N.onDelete,onUpdate:N.onUpdate});}return}for(let f of n.columns)o.columns.some(N=>N.name===f.databaseName||N.name===f.columnName)||e.data.columnsToAdd.push({table:r.table,column:f});let s=r.getColumns();for(let f of o.columns)s.some(N=>N.databaseName===f.name||N.columnName===f.name)||e.data.columnsToDrop.push({table:r.table,column:f.name});for(let f of n.indexes)o.indexes.map(g=>g.name).includes(f.name)||e.data.indexesToAdd.push({table:r.table,index:f.name});let a=r.getUniques?.()||[];for(let f of a)o.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=o.foreignKeys.map(f=>f.name);for(let f of o.indexes)f.isUnique||l.includes(f.name)||n.indexes.map(N=>N.name).includes(f.name)||e.data.indexesToDrop.push({table:r.table,index:f.name});for(let f of o.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 d=r.getChecks?.()||[];for(let f of d)o.checkConstraints.some(N=>N.name===f.name)||e.data.checksToAdd.push({table:r.table,name:f.name,expression:f.expression});let u=new Set(d.map(f=>f.name)),p=n.columns.filter(f=>Array.isArray(f.type)),m=new Set(p.map(f=>f.databaseName||f.columnName));for(let f of o.checkConstraints)if(!u.has(f.name)){let g=[...m].find(N=>new RegExp(`[\\["\\[]?${N.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i").test(f.expression));if(g){let N=p.find(R=>(R.databaseName||R.columnName)===g),q=o.columns.find(R=>R.name===g);if(N&&q?.enumValues&&Array.isArray(N.type)){let R=[...N.type].sort(),_=[...q.enumValues].sort();if(!(R.length===_.length&&R.every((P,M)=>P===_[M]))){e.data.checksToDrop.push({table:r.table,name:f.name});let P=e.sql.getDbType(),M=P==="mssql"?"[":'"',O=P==="mssql"?"]":'"',X=N.type.map(D=>`'${D.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:f.name,expression:`${M}${g}${O} IN (${X})`});}}}else e.data.checksToDrop.push({table:r.table,name:f.name});}for(let f of n.columns){let g=o.columns.find(R=>R.name===f.databaseName||R.name===f.columnName);if(!g)continue;let N=!e.areColumnsEqual(g,f,o.indexes),q=e.getDefaultChange({table:r.table,dbColumns:g,modelColumn:f});(N||q)&&e.data.columnsToModify.push({table:r.table,dbColumns:g,modelColumn:f});}for(let f of n.relations){if(f.type!=="belongsTo"&&f.type!=="manyToMany")continue;if(f.type==="manyToMany"&&f.manyToManyOptions){let q=C(f.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:q,relation:{type:"belongsTo",model:()=>r,columnName:C(f.manyToManyOptions.leftForeignKey),foreignKey:f.manyToManyOptions.leftForeignKey,constraintName:f.constraintName?C(f.constraintName):G(q,C(f.manyToManyOptions.leftForeignKey||ro(r.table)),r.table),onDelete:f.onDelete,onUpdate:f.onUpdate},onDelete:f.onDelete,onUpdate:f.onUpdate});continue}let g=C(f.constraintName);if(g&&o.foreignKeys.some(q=>q.name===g))continue;o.foreignKeys.find(q=>e.relationMatchesDbRelation(r,f,q))||e.data.relationsToAdd.push({table:r.table,relation:f,onDelete:f.onDelete,onUpdate:f.onUpdate});}let c=new Set(n.relations.filter(f=>f.type==="belongsTo").map(f=>{let g=C(f.foreignKey)||f.columnName,q=r.getColumns().find(R=>R.columnName===g)?.databaseName||g;return C(f.constraintName)||G(r.table,q,f.model().table)}));for(let f of o.foreignKeys){if(f.name&&c.has(f.name))continue;n.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 n.relations){if(f.type!=="belongsTo"&&f.type!=="manyToMany")continue;let g=o.foreignKeys.find(N=>e.relationMatchesDbRelation(r,f,N));g&&!e.areRelationsEqual(g,f)&&e.data.relationsToModify.push({table:r.table,dbRelation:g,modelRelation:f,onDelete:f.onDelete,onUpdate:f.onUpdate});}let h=r.primaryKey;if(h&&!o.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[h]}),o.primaryKey&&!h&&e.data.primaryKeysToDrop.push({table:r.table,columns:o.primaryKey.columns,name:o.primaryKey.name}),h&&o.primaryKey){let f=r.getColumns().find(g=>g.columnName===h);f&&!e.arePrimaryKeysEqual(o.primaryKey,f)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:o.primaryKey,modelPrimaryKey:h});}})),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})}getSqlStatementsByPhase(){let t=new Tr(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=Pe(n,t.dataType),a=typeof e.type=="string"?Pe(n,e.type):void 0;if(a&&o&&(o=s===a),Array.isArray(e.type)&&(n==="mysql"||n==="mariadb")){let d=[...e.type].sort(),u=t.enumValues?[...t.enumValues].sort():null;u&&o&&(o=d.length===u.length&&d.every((p,m)=>p===u[m]));}e.length!=null&&t.length!=null&&o&&(o=t.length===e.length);let l=a==="real"||a==="double"||a==="float";if(e.precision!=null&&t.precision!=null&&((n==="postgres"||n==="cockroachdb")&&l||o&&(o=t.precision===e.precision)),e.scale!=null&&t.scale!=null&&((n==="postgres"||n==="cockroachdb")&&l||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,u=t.isNullable;o=o&&d===u;}if(n==="mysql"||n==="mariadb"){if(e.unsigned!==void 0||t.unsigned!==void 0){let d=e.unsigned??false,u=t.unsigned??false;o&&(o=d===u);}if(e.zerofill!==void 0||t.zerofill!==void 0){let d=e.zerofill??false,u=t.zerofill??false;o&&(o=d===u);}}return o}areRelationsEqual(t,e){let r=C(e.constraintName),o=r?t.name===r:true;if(e.type==="belongsTo"){let d=e.model(),u=d.primaryKey||"id",p=d.getColumns().find(h=>h.columnName===u),m=d.table,c=p?.databaseName||u;o=o&&t.referencedTable===m&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===c;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let d=C(e.manyToManyOptions.throughModel);o=o&&t.referencedTable===d;}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 f=n.model();f&&f.table&&(o=f);}catch{}}if(!o)return false;let s=e.type==="belongsTo"?o.table:e.type==="manyToMany"&&e.manyToManyOptions?C(e.manyToManyOptions.throughModel):void 0;if(s&&r.referencedTable!==s)return false;let a=C(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),u=(n.type||"belongsTo")==="belongsTo"?C(n.foreignKey):n.columnName,p=l.find(f=>f.columnName===u);p&&(u=p.databaseName);let m=o.primaryKey||"id",h=o.getColumns().find(f=>f.columnName===m)?.databaseName||m;return r.columns.length===1&&r.columns[0]===u&&r.referencedColumns.length===1&&r.referencedColumns[0]===h}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=Pe(e,t.dbColumns.dataType),o=typeof t.modelColumn.type=="string"?Pe(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",d=typeof t.dbColumns.defaultValue=="string"&&t.dbColumns.defaultValue.includes("nextval(");if(s&&!a)return "set";if(!s&&a)return l&&d?false:"drop";if(s&&a){let u=String(t.dbColumns.defaultValue),p=String(t.modelColumn.constraints?.default),m=this.normalizeDefaultValue(e,r,u),c=this.normalizeDefaultValue(e,o||r,p);return m!==c?"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=C(o.manyToManyOptions.throughModel);if(t.has(n))continue;t.add(n);let s=this.models.find(D=>D.table===o?.manyToManyOptions?.primaryModel),a=o.model();if(!s||!a)continue;let l=s.primaryKey||"id",d=a.primaryKey||"id",u=s.getColumns().find(D=>D.columnName===l),p=a.getColumns().find(D=>D.columnName===d);if(!u||!p)continue;let m=C(o.manyToManyOptions.leftForeignKey)||l,c=C(o.manyToManyOptions.rightForeignKey)||d,h=await this.sql.getTableSchema(n);if(!h.columns.length){this.data.tablesToAdd.push({table:n,columns:[this.clonePkAsColumn(u,m),this.clonePkAsColumn(p,c)]}),this.pushM2mFkRelations({throughTable:n,leftModel:s,rightModel:a,leftFkName:m,rightFkName:c,onDelete:o.onDelete,onUpdate:o.onUpdate,constraintName:void 0});continue}let f=this.clonePkAsColumn(u,m),g=this.clonePkAsColumn(p,c),N=h.columns.find(D=>D.name===m),q=h.columns.find(D=>D.name===c),R=N?this.areColumnsEqual(N,f,h.indexes):false,_=q?this.areColumnsEqual(q,g,h.indexes):false;for(let D of h.foreignKeys){let J=D.referencedTable===s.table,Z=D.referencedTable===a.table;if(!J&&!Z)continue;let be=J?m:c,qe=D.columns[0];qe&&qe!==be&&(this.data.relationsToDrop.push({table:n,relation:D}),qe!==m&&qe!==c&&this.data.columnsToDrop.push({table:n,column:qe}));}let x={};R||(x[f.databaseName]=f),_||(x[g.databaseName]=x[g.databaseName]||g);for(let D of Object.keys(x))this.data.columnsToAdd.push({table:n,column:x[D]});let P=this.buildBelongsToRelation(n,()=>s,m,l,void 0,o.onDelete,o.onUpdate),M=this.buildBelongsToRelation(n,o.model,c,d,void 0,o.onDelete,o.onUpdate),O=h.foreignKeys.find(D=>D.referencedTable===s.table&&D.columns.length===1&&D.columns[0]===m),X=h.foreignKeys.find(D=>D.referencedTable===a.table&&D.columns.length===1&&D.columns[0]===c);if(!O){let D=h.foreignKeys.find(J=>J.referencedTable===s.table);D&&this.data.relationsToDrop.push({table:n,relation:D}),this.data.relationsToAdd.push(P);}if(!X){let D=h.foreignKeys.find(J=>J.referencedTable===a.table);D&&this.data.relationsToDrop.push({table:n,relation:D}),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,u=o.getColumns().find(m=>m.columnName===l)?.databaseName||l,p=C(a.constraintName)||G(o.table,u,a.model().table);s.add(p);}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(f=>f.table===o.table),a=s?.getColumns()||[],l=o.relation.columnName;o.relation.type==="belongsTo"?l=a.find(g=>g.columnName===o.relation.foreignKey)?.databaseName||o.relation.foreignKey:l=a.find(g=>g.columnName===l)?.databaseName||l;let d=o.table,u=o.relation.foreignKey;if(o.relation.type==="belongsTo"){let f=o.relation.model();d=f.table;let g=f.primaryKey||"id";u=f.getColumns().find(q=>q.columnName===g)?.databaseName||g;}let p=new Set([l,o.relation.columnName].filter(Boolean)),m=n.foreignKeys.some(f=>{if(f.columns.length!==1||f.referencedColumns.length!==1)return false;let g=p.has(f.columns[0]),N=f.referencedTable===d,q=f.referencedColumns[0]===u;return g&&N&&q}),c=C(o.relation.constraintName)||G(o.table,l,d),h=e.get(o.table)||new Set;if(m||c&&h.has(c))return null;if(o.relation.type==="manyToMany"&&o.relation.manyToManyOptions){let f=C(o.relation.manyToManyOptions.throughModel),g=C(o.relation.manyToManyOptions.leftForeignKey),N=C(o.relation.manyToManyOptions.rightForeignKey),q=o.table===f&&o.relation.columnName===g&&o.relation.model().table===s?.table,R=o.table===f&&o.relation.columnName===N&&o.relation.model().table!==s?.table,_=await this.sql.getTableSchema(f),x=_.foreignKeys.some(M=>M.columns.length===1&&M.columns[0]===g&&M.referencedTable===(s?.table||"")),P=_.foreignKeys.some(M=>M.columns.length===1&&M.columns[0]===N&&M.referencedTable===o.relation.model().table);if(q&&x||R&&P)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(d=>d.table===o.table);if(!n)return o;let s=n.getRelations(),a=n.getColumns();return s.some(d=>{if(d.type!=="belongsTo")return false;let p=a.find(g=>g.columnName===d.foreignKey)?.databaseName||d.foreignKey,m=d.model(),c=m.primaryKey||"id",f=m.getColumns().find(g=>g.columnName===c)?.databaseName||c;return o.relation.columns.length===1&&o.relation.columns[0]===p&&o.relation.referencedTable===m.table&&o.relation.referencedColumns.length===1&&o.relation.referencedColumns[0]===f})?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?C(n):G(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 it=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 L=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 j=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 ce=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 Ne=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 A=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 $e=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 ne=class extends A{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 Se=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 Sp;Sp=Symbol.toStringTag;var H=class{constructor(t,e,r,o){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=o;this[Sp]="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 ty=async(i,t,e,r,o=[],n=false)=>{let s=Object.create(t.prototype),a=new Set(e.filter(u=>u.hidden).map(u=>u.columnName)),l=new Map(e.map(u=>[u.databaseName,u])),d=o.length?new Set(o):null;if(await Promise.all(Object.keys(i).map(async u=>{let p=i[u],m=l.get(u)?.columnName??u,c=r.has(m),h=a.has(m),f=n?true:d?d.has(m):true;if(c){if(h||!f)return;if(p===null){s[m]=null;return}let g=r.get(m);if(g&&g.serialize){s[m]=await g.serialize(p);return}s[m]=p;return}(!n||d&&d.has(m))&&(s[m]=p);})),d)for(let u of d)u in s||(s[u]=null);return s},we=async(i,t,e=[])=>{if(!i.length)return null;let r=t.getColumns(),o=new Map(r.map(l=>[l.columnName,l])),n=e.some(l=>l.includes("*")),s=[];for(let l of e){if(l.toLowerCase().includes(" as ")){let m=l.match(/\s+as\s+(.+)$/i);m&&s.push(m[1].trim());continue}let u=l;if(u.includes(".")&&(u=u.split(".").pop()),u==="*")continue;let p=o.get(u)?.columnName??u;s.push(p);}e=s;let a=await Promise.all(i.map(async l=>await ty(l,t,r,o,e,n)));return a.length===1?a[0]:a};var ry=/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/,oy=/^\d{4}-\d{2}-\d{2}$/,ja=i=>typeof i!="string"?i:ry.test(i)?new Date(i.replace(" ","T")+"Z"):oy.test(i)?new Date(i+"T00:00:00Z"):i,ny=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);}}),wp=async i=>{let t={};for(let e in i){let r=i[e];r&&typeof r=="object"&&r.constructor?.name==="Lob"?t[e]=await ny(r):t[e]=r;}return t};var Sr=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:d=>{s=true,a=d;}};Promise.resolve(this.events.onData?.(l,n)).then(()=>{if(!r){if(s){this.push(a);return}this.push(n);}}).catch(d=>{r=true,this.emit("error",d);}).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);});}},qp=(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((d,u)=>{n.run(i,t,function(p){p&&u(p),d(this.changes);});});if(r.mode==="fetch")return new Promise((d,u)=>{n.all(i,t,(p,m)=>{p&&u(p),(!m||!m.length)&&d([]),d(m);});});let s=r?.typeofModel;if(!s)return new Promise((d,u)=>{n.run(i,t,function(p){p?u(new Error(p.message)):d(this.changes);});});let a=s.primaryKey,l=s.table;if(r.mode==="insertOne"||r.mode==="insertMany"){if(r.mode==="insertOne")return new Promise((p,m)=>{n.run(i,t,function(c){if(c)return m(c);let h=r.models&&Array.isArray(r.models)&&r.models.length?r.models[0]:null;if(!a){p([h]);return}let f=h?.[a]||this.lastID;if(!f)return m(new S("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let g=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(g,[f],(N,q)=>{if(N)return m(N);p([q]);});});});if(!Array.isArray(r.models))throw new S("SqlRunnerUtils::massiveInsert models should be an array, report to the maintainers.","DEVELOPMENT_ERROR");let d=r.models;if(!a)return new Promise((p,m)=>{n.run(i,t,function(c){if(c)return m(c);p(d);});});let u=[];return new Promise(async(p,m)=>{try{let c=d.map(async h=>{let f=new y(s),{columns:g,values:N}=await f.prepareColumns(Object.keys(h),Object.values(h),"insert"),q=Object.fromEntries(g.map((P,M)=>[P,N[M]])),R=new T(s,e.getDbType()),{sql:_,bindings:x}=R.parse([new j(new L(s.table),[q])]);return new Promise((P,M)=>{n.run(_,x,function(O){if(O)return M(O);let X=h[a]||this.lastID;if(!X)return M(new S("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let D=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(D,[X],(J,Z)=>{if(J)return M(J);P(Z);});});})});u=await Promise.all(c),p(u);}catch(c){m(c);}})}return new Promise((d,u)=>{n.run(i,t,function(p){p?u(new Error(p.message)):d(this.changes);});})};var U=async(i,t,e,r,o="rows",n)=>{switch(n?.shouldNotLog||te(i,e.logs,t,e.inputDetails.queryFormatOptions,r),r){case "mysql":case "mariadb":let s=e.sqlConnection??e.getPool(),a=await St(()=>s.query(i,t),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?a[0].affectedRows:o==="raw"?a:a[0];case "postgres":case "cockroachdb":let l=e.sqlConnection??e.getPool(),d=0,u=i.replace(/\?/g,()=>`$${++d}`),p=await St(()=>l.query(u,t),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="rows"?p.rows:o==="raw"?p:p.rowCount;case "sqlite":let m=await St(()=>qp(i,t,e,{typeofModel:n?.sqlLiteOptions?.typeofModel,mode:n?.sqlLiteOptions?.mode||"fetch",models:n?.sqlLiteOptions?.models}),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="raw"?Array.isArray(m)?m:[m]:m;case "mssql":let c=e.getPool(),h=e.sqlConnection?e.sqlConnection.request():c.request();t.forEach((x,P)=>{h.input(`p${P}`,x);});let f=0,g=i.replace(/\?|@(\d+)/g,()=>`@p${f++}`),N=await St(()=>h.query(g),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?N.rowsAffected[0]:o==="raw"?N:N.recordset;case "oracledb":let q=4002,R=null,_=!!e.sqlConnection;try{R=e.sqlConnection?e.sqlConnection:await e.getConnection();let x=t.map(ja),P=0,M=i.replace(/\?/g,()=>`:${++P}`),O=await St(()=>R.execute(M,x,{outFormat:q,autoCommit:!_}),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?O.rowsAffected:o==="raw"?O:await Promise.all(O.rows?.map(async D=>{let J=await wp(D),Z={};for(let be in J)Z[be.toLowerCase()]=J[be];return Z})??[])}finally{R&&!_&&await R.close();}default:throw new S("ExecSql",`UNSUPPORTED_DATABASE_TYPE_${r}`)}},qr=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}),u=a.connection.query(i,t).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),p=0,m=false,c=false,h=()=>{try{a.release();}catch{}};return u.on("data",f=>{if(o.onData){p++,Promise.resolve(o.onData(l,f)).then(()=>{p--,m&&p===0&&!c&&(h(),l.end());}).catch(g=>{c=true,h(),l.destroy(g);});return}l.write(f);}),u.on("end",()=>{m=true,p===0&&!c&&(h(),l.end());}),u.on("error",f=>{c=true,h(),l.destroy(f);}),l.on("close",()=>{h();}),l}case "cockroachdb":case "postgres":{let s=e.getPool(),a=e.sqlConnection??await s.connect(),l=await import('pg-query-stream').catch(()=>{throw new B("pg-query-stream")}),d=new PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),u=0,p=i.replace(/\?/g,()=>`$${++u}`),m=new l.default(p,t,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),c=a.query(m),h=0,f=false,g=false,N=q=>{try{a.release(q);}catch{}};return c.on("data",q=>{if(o.onData){h++,Promise.resolve(o.onData(d,q)).then(()=>{h--,f&&h===0&&!g&&(N(),d.end());}).catch(R=>{g=true,N(R),d.destroy(R);});return}d.write(q);}),c.on("end",()=>{f=true,h===0&&!g&&(N(),d.end());}),c.on("error",q=>{g=true,N(q),d.destroy(q);}),d}case "sqlite":{let s=e.sqlConnection??e.getPool();return new Sr(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((h,f)=>{l.input(`p${f}`,h);});let d=0,u=i.replace(/\?|@(\d+)/g,()=>`@p${d++}`),p=0,m=false,c=false;return l.on("row",h=>{if(!c){if(o.onData){p++,Promise.resolve(o.onData(a,h)).then(()=>{p--,m&&p===0&&!c&&a.end();}).catch(f=>{c=true,a.destroy(f);});return}a.write(h);}}),l.on("error",h=>{c=true,a.destroy(h);}),l.on("done",()=>{m=true,p===0&&!c&&a.end();}),l.query(u),a}case "oracledb":{let s=e.getPool(),a=e.sqlConnection??await s.getConnection(),l=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),d=4002,u=0,p=i.replace(/\?/g,()=>`:${++u}`),m=t.map(ja),c=a.queryStream(p,m,{outFormat:d}),h=0,f=false,g=false,N=async()=>{try{await a.close();}catch{}};return c.on("data",q=>{if(g)return;let R={};for(let _ in q)R[_.toLowerCase()]=q[_];if(o.onData){h++,Promise.resolve(o.onData(l,R)).then(()=>{h--,f&&h===0&&!g&&(N(),l.end());}).catch(_=>{g=true,N(),l.destroy(_);});return}l.write(R);}),c.on("end",()=>{f=true,h===0&&!g&&(N(),l.end());}),c.on("error",q=>{g=true,N(),l.destroy(q);}),l}default:throw new S("ExecSqlStreaming",`UNSUPPORTED_DATABASE_TYPE_${n}`)}};async function St(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++,rl(`Retrying sql in ${n}ms (attempt ${r}/${o})`,"info",e),await new Promise(l=>setTimeout(l,n)),s();throw a}}return s()}var K=(i,t="millis",e=3)=>async(...r)=>{let o=performance.now(),n=await i(...r),s=performance.now()-o;return [(t==="millis"?s:s/1e3).toFixed(e),n]};var wt=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=Pl(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 Cr(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}}function Cp(i,t){return {perPage:i,total:t,firstPage:1,isEmpty:t===0}}var at=i=>typeof i=="number"?i:parseFloat(i);var ae=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 Ke=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 _r=class extends w{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var Mr=class extends w{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var De=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 se=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 qt=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 Rr=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 Ct=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 Ar=class{constructor(t,e){this.model=t,this.sqlDataSource=e,this.groupByNodes=[],this.orderByNodes=[],this.limitNode=null,this.offsetNode=null,this.logs=this.sqlDataSource.logs;let r=this.model?.getColumns;this.modelColumns=typeof r=="function"?r.call(this.model):[],this.modelColumnsMap=new Map(this.modelColumns.map(o=>[o.columnName,o]));}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 Ct(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new Ct(t,"asc",true)),this}limit(t){return typeof t!="number"&&b.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new Rr(t),this}offset(t){return typeof t!="number"&&b.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new xr(t),this}};var Le=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 A(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 A(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 A(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 A(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 A(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 A(t,"and",false,"between",[e,r])),this}orWhereBetween(t,e,r){return this.whereNodes.push(new A(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 A(t,"and",true,"between",[e,r])),this}orWhereNotBetween(t,e,r){return this.whereNodes.push(new A(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 A(t,"and",false,"in",e)),this):(this.whereNodes.push(new A("false","and",true,"=",[],true)),this)}orWhereIn(t,e){return e.length?(this.whereNodes.push(new A(t,"or",false,"in",e)),this):(this.whereNodes.push(new A("false","or",true,"=",[],true)),this)}whereNotIn(t,e){return this.andWhereNotIn(t,e)}andWhereNotIn(t,e){return e.length?(this.whereNodes.push(new A(t,"and",true,"in",e)),this):(this.whereNodes.push(new A("true","and",true,"=",[],true)),this)}orWhereNotIn(t,e){return e.length?(this.whereNodes.push(new A(t,"or",true,"in",e)),this):(this.whereNodes.push(new A("true","or",true,"=",[],true)),this)}whereNull(t){return this.andWhereNull(t)}andWhereNull(t){return this.whereNodes.push(new A(t,"and",false,"is null",void 0)),this}orWhereNull(t){return this.whereNodes.push(new A(t,"or",false,"is null",void 0)),this}whereNotNull(t){return this.andWhereNotNull(t)}andWhereNotNull(t){return this.whereNodes.push(new A(t,"and",false,"is not null",void 0)),this}orWhereNotNull(t){return this.whereNodes.push(new A(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 A(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 A(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 A(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 A(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 $e(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 $e(r,"or")),this}whereRaw(t,e){return this.andWhereRaw(t,e)}andWhereRaw(t,e){return this.whereNodes.push(new A(t,"and",true,"=",e??[],true)),this}orWhereRaw(t,e){return this.whereNodes.push(new A(t,"or",true,"=",e??[],true)),this}};var Pr=class extends Ar{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new se(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new se(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new se(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new se(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new se(t,"","","cross",{operator:"="},true)),this}naturalJoinRaw(t){return this.joinNodes.push(new se(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 d;if(l){let u=new Le(this.sqlDataSource);l(u),d=u.getConditions();}return this.joinNodes.push(new se(typeof t=="string"?t:t.table,e,s,"inner",{operator:a||"="},false,d)),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 d;if(l){let u=new Le(this.sqlDataSource);l(u),d=u.getConditions();}return this.joinNodes.push(new se(typeof t=="string"?t:t.table,e,s,"left",{operator:a||"="},false,d)),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 d;if(l){let u=new Le(this.sqlDataSource);l(u),d=u.getConditions();}return this.joinNodes.push(new se(typeof t=="string"?t:t.table,e,s,"right",{operator:a||"="},false,d)),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 d;if(l){let u=new Le(this.sqlDataSource);l(u),d=u.getConditions();}return this.joinNodes.push(new se(typeof t=="string"?t:t.table,e,s,"full",{operator:a||"="},false,d)),this}};var $r=class extends Pr{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.dbType=r.getDbType(),this.fromNode=new L(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return e.forEach(r=>{if(Array.isArray(r)){let[s,a]=r;this.modelSelectedColumns.push(a);let l=V(s,this.model.databaseCaseConvention);this.selectNodes.push(new ae(l,a));return}let o=r;this.modelSelectedColumns.push(o);let n=V(o,this.model.databaseCaseConvention);this.selectNodes.push(new ae(n));}),this}selectRaw(e){return this.selectNodes.push(new ae(e,void 0,void 0,true)),this}selectFunc(e,r,o){let n=r==="*"?"*":V(r,this.model.databaseCaseConvention);return this.selectNodes.push(new ae(`${e.toLowerCase()}(${n}) as ${o}`,void 0,void 0,true)),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}clearFrom(){return this.fromNode=new L(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new L(e),this}distinct(){return this.distinctNode=new _r,this}distinctOn(...e){return this.distinctOnNode=new Mr(e),this}selectJson(e,r,o){return this.selectNodes.push(new De(e,r,o,"extract")),this}selectJsonText(e,r,o){return this.selectNodes.push(new De(e,r,o,"extract_text")),this}selectJsonArrayLength(e,r,o){return this.selectNodes.push(new De(e,r,o,"array_length")),this}selectJsonKeys(e,r,o){return this.selectNodes.push(new De(e,r,o,"object_keys")),this}selectJsonRaw(e,r){return this.selectNodes.push(new De(e,"",r,"raw",true)),this}};var Dr=class extends $r{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 k&&o===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof k||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 k&&o===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 k&&o===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 A(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 A(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 k&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 k&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 k&&o===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 A(e,"and",false,"between",[r,o])),this}orWhereBetween(e,r,o){return this.whereNodes.push(new A(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 A(e,"and",true,"between",[r,o])),this}orWhereNotBetween(e,r,o){return this.whereNodes.push(new A(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 A(e,"and",false,"in",r)),this):(this.whereNodes.push(new A("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new A(e,"or",false,"in",r)),this):(this.whereNodes.push(new A("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 A(e,"and",true,"in",r)),this):(this.whereNodes.push(new A("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new A(e,"or",true,"in",r)),this):(this.whereNodes.push(new A("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new A(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new A(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new A(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new A(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 A(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 A(e,"or",false,o?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new A(e,"and",true,o?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new A(e,"and",true,o?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new A(e,"or",true,o?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Se("","exists",r.extractQueryNodes(),"and")),this}orWhereExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Se("","exists",r.extractQueryNodes(),"or")),this}whereNotExists(e){return this.andWhereNotExists(e)}andWhereNotExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Se("","not exists",r.extractQueryNodes(),"and")),this}orWhereNotExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Se("","not exists",r.extractQueryNodes(),"or")),this}whereRaw(e,r=[]){return this.andWhereRaw(e,r)}andWhereRaw(e,r=[]){return this.whereNodes.push(new A(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new A(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 Ke(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 Ke(e,"or",false,n,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Ke(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Ke(e,"or",false,"=",[],true)),this}buildSubQuery(e){if(e instanceof k)return e;let r=new k(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 Se(e,r,n.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,o){let n=this.buildSubQuery(o);return this.whereNodes.push(new Se(e,r,n.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new k(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new $e(r.whereNodes,"and");return this.whereNodes.push(o),this}orWhereGroup(e){let r=new k(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new $e(r.whereNodes,"or");return this.whereNodes.push(o),this}};var Ir=class extends Dr{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new ne(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new ne(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new ne(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new ne(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new ne(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new ne(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new ne(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new ne(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new ne(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new ne(t,"or",false,"raw",e)),this}};var k=class i extends Ir{constructor(e,r){super(e,r);this.isNestedCondition=false;this.insertNode=null;this.onDuplicateNode=null;this.updateNode=null;this.deleteNode=null;this.truncateNode=null;this.replicationMode=null;this.performance={many:this.manyWithPerformance.bind(this),one:this.oneWithPerformance.bind(this),oneOrFail:this.oneOrFailWithPerformance.bind(this),paginate:this.paginateWithPerformance.bind(this),paginateWithCursor:this.paginateWithCursorWithPerformance.bind(this),exists:this.existsWithPerformance.bind(this),truncate:this.truncateWithPerformance.bind(this),delete:this.deleteWithPerformance.bind(this),insert:this.insertWithPerformance.bind(this),insertMany:this.insertManyWithPerformance.bind(this),update:this.updateWithPerformance.bind(this),softDelete:this.softDeleteWithPerformance.bind(this),pluck:this.pluckWithPerformance.bind(this)};this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.astParser=new T(this.model,this.dbType),this.interpreterUtils=new y(this.model);}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 ae(a.extractQueryNodes(),o)),this}return this.selectNodes.push(new ae(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=>U(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 qr(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,o){let n=this.clone();this.orderByNodes.length||this.orderBy(r.discriminator,r.orderBy||"asc"),o&&this.where(o.key,r.operator||">",o.value),this.limit(e);let[s,a]=await this.executePaginateQueries(()=>this.many(),()=>n.getCount()),l=s[s.length-1],d=l?l[r.discriminator]:null;return [{paginationMetadata:Cp(e,a),data:s},{key:r.discriminator,value:d}]}lockForUpdate(e={}){return this.lockQueryNodes.push(new Nt("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new Nt("for_share",e.skipLocked,e.noWait)),this}union(e){if(typeof e=="string")return this.unionNodes.push(new Qe(e)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Qe(o)),this}unionAll(e){if(typeof e=="string")return this.unionNodes.push(new Qe(e,true)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Qe(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.clearForFunctions(),this.selectRaw(`count(${e}) as total`);let r=await this.one();return r?at(r.total):0}async getMax(e){this.clearForFunctions(),this.selectRaw(`max(${e}) as total`);let r=await this.one();return r?at(r.total):0}async getMin(e){this.clearForFunctions(),this.selectRaw(`min(${e}) as total`);let r=await this.one();return r?at(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectRaw(`avg(${e}) as total`);let r=await this.one();return r?at(r.total):0}async getSum(e){this.clearForFunctions(),this.selectRaw(`sum(${e}) as total`);let r=await this.one();return r?at(r.total):0}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&b.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:Cr(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 L(a,r),this}return this.fromNode=new L(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 st("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 st("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 st("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 j(this.fromNode,[o],r,n),new H(()=>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((c,h)=>[c,a[h]]));this.insertNode=new j(this.fromNode,[l],r,n);let{sql:d,bindings:u}=this.astParser.parse([this.insertNode]),p=await this.getSqlDataSource("write"),m=await U(d,u,p,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=>Object.fromEntries(Object.keys(s).map(a=>[a,s[a]]))),n=!r||r.length===0;return this.insertNode=new j(this.fromNode,o,r,n),new H(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{if(!e.length)return n?void 0:[];let s=await Promise.all(e.map(async p=>{let{columns:m,values:c}=await this.interpreterUtils.prepareColumns(Object.keys(p),Object.values(p),"insert");return Object.fromEntries(m.map((h,f)=>[h,c[f]]))}));this.insertNode=new j(this.fromNode,s,r,n);let{sql:a,bindings:l}=this.astParser.parse([this.insertNode]),d=await this.getSqlDataSource("write"),u=await U(a,l,d,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:s}});if(!n)return u})}upsert(e,r,o={updateOnConflict:true}){let n=Object.keys(e),s=Object.keys(r),a=Object.fromEntries(Object.keys(e).map(l=>[l,e[l]]));return this.insertNode=new j(new L(this.model.table),[a],void 0,true),this.onDuplicateNode=new ce(this.model.table,s,n,o.updateOnConflict??true?"update":"ignore",o.returning),new H(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:d}=await this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert"),u=Object.fromEntries(l.map((f,g)=>[f,d[g]]));if(this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw([u],s,n,o,[e]);let{sql:p,bindings:m}=this.astParser.parse([new j(new L(this.model.table),[u],void 0,true),new ce(this.model.table,s,n,o.updateOnConflict??true?"update":"ignore",o.returning)]),c=await this.getSqlDataSource("write"),h=await U(p,m,c,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:[e]}});return Array.isArray(h)?h:[h]})}upsertMany(e,r,o,n={updateOnConflict:true}){let s=o.map(a=>Object.fromEntries(Object.keys(a).map(l=>[l,a[l]])));return this.insertNode=new j(new L(this.model.table),s,void 0,true),this.onDuplicateNode=new ce(this.model.table,e,r,n.updateOnConflict??true?"update":"ignore",n.returning),new H(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let a=[];if(await Promise.all(o.map(async m=>{let{columns:c,values:h}=await this.interpreterUtils.prepareColumns(Object.keys(m),Object.values(m),"insert"),f=Object.fromEntries(c.map((g,N)=>[g,h[N]]));a.push(f);})),this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw(a,e,r,n,o);let{sql:l,bindings:d}=this.astParser.parse([new j(new L(this.model.table),a,void 0,true),new ce(this.model.table,e,r,n.updateOnConflict??true?"update":"ignore",n.returning)]),u=await this.getSqlDataSource("write"),p=await U(l,d,u,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});return Array.isArray(p)?p:[p]})}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),d=O=>this.interpreterUtils.formatStringColumn("mssql",O),u=[],p=e.map(O=>`select ${a.map(D=>(u.push(O[D]),`@${u.length}`)).join(", ")}`),m=a.map(d).join(", "),c=p.join(" union all "),h=r.map(O=>`target.${d(O)} = source.${d(O)}`).join(" and "),f=o.filter(O=>!r.includes(O)).map(O=>`target.${d(O)} = source.${d(O)}`).join(", "),g=a.map(d).join(", "),N=a.map(O=>`source.${d(O)}`).join(", "),q=n.returning&&n.returning.length?n.returning.map(O=>`inserted.${d(O)}`).join(", "):a.map(O=>`inserted.${d(O)}`).join(", "),_=(n.updateOnConflict??true)&&f?`when matched then update set ${f}`:"",x=`merge into ${l} as target using (${c}) as source (${m}) on ${h} ${_} when not matched then insert (${g}) values (${N}) output ${q};`,P=await this.getSqlDataSource("write"),M=await U(x,u,P,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(M)?M:[M]}update(e,r){let o=Object.keys(e),n=Object.values(e);this.updateNode=new Ne(this.fromNode,o,n,false,r);let s=r&&r.length>0;return new H(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:a,values:l}=await this.interpreterUtils.prepareColumns(o,n,"update");this.updateNode=new Ne(this.fromNode,a,l,false,r);let{sql:d,bindings:u}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),p=await this.getSqlDataSource("write");return U(d,u,p,this.dbType,s?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:s?"fetch":"affectedRows"}})})}truncate(){return this.truncateNode=new nt(this.fromNode),new H(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:e,bindings:r}=this.astParser.parse([this.truncateNode]),o=await this.getSqlDataSource("write");await U(e,r,o,this.dbType,"rows");})}delete(e){this.deleteNode=new it(this.fromNode,false,e);let r=e&&e.length>0;return new H(()=>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 U(o,n,s,this.dbType,r?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:r?"fetch":"affectedRows"}})})}softDelete(e={}){let{column:r="deletedAt",value:o=Xe()}=e||{};return this.updateNode=new Ne(this.fromNode,[r],[o]),new H(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:n,values:s}=await this.interpreterUtils.prepareColumns([r],[o],"update");this.updateNode=new Ne(this.fromNode,n,s);let{sql:a,bindings:l}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),d=await this.getSqlDataSource("write");return U(a,l,d,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return Fe(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),o=Ve(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${o}`:o,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new ae("*")]);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=F(this.modelSelectedColumns),e.distinctNode=F(this.distinctNode),e.distinctOnNode=F(this.distinctOnNode),e.selectNodes=F(this.selectNodes),e.withQuery=F(this.withQuery),e.joinNodes=F(this.joinNodes),e.whereNodes=F(this.whereNodes),e.groupByNodes=F(this.groupByNodes),e.havingNodes=F(this.havingNodes),e.orderByNodes=F(this.orderByNodes),e.lockQueryNodes=F(this.lockQueryNodes),e.unionNodes=F(this.unionNodes),e.withNodes=F(this.withNodes),e.fromNode=F(this.fromNode),e.limitNode=F(this.limitNode),e.offsetNode=F(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 ae("*")]),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}async manyWithPerformance(e="millis"){let[r,o]=await K(this.many.bind(this),e)();return {data:o,time:Number(r)}}async oneWithPerformance(e="millis"){let[r,o]=await K(this.one.bind(this),e)();return {data:o,time:Number(r)}}async firstOrFailWithPerformance(e="millis"){return this.oneOrFailWithPerformance(e)}async paginateWithPerformance(e,r,o="millis"){let[n,s]=await K(this.paginate.bind(this,e,r),o)();return {data:s,time:Number(n)}}async paginateWithCursorWithPerformance(e,r,o,n="millis"){let[s,a]=await K(this.paginateWithCursor.bind(this,e,r,o),n)();return {data:a,time:Number(s)}}async oneOrFailWithPerformance(e="millis"){let[r,o]=await K(this.oneOrFail.bind(this),e)();return {data:o,time:Number(r)}}async existsWithPerformance(e="millis"){let[r,o]=await K(this.exists.bind(this),e)();return {data:o,time:Number(r)}}async pluckWithPerformance(e,r="millis"){let[o,n]=await K(this.pluck.bind(this,e),r)();return {data:n,time:Number(o)}}async updateWithPerformance(e,r="millis"){let[o,n]=await K(this.update.bind(this,e),r)();return {data:n,time:Number(o)}}async insertWithPerformance(e,r="millis"){let[o,n]=await K(this.insert.bind(this,e),r)();return {data:n,time:Number(o)}}async insertManyWithPerformance(e,r="millis"){let[o,n]=await K(this.insertMany.bind(this,e),r)();return {data:n,time:Number(o)}}async softDeleteWithPerformance(e={},r="millis"){let[o,n]=await K(this.softDelete.bind(this,e),r)();return {data:n,time:Number(o)}}async deleteWithPerformance(e="millis"){let[r,o]=await K(this.delete.bind(this),e)();return {data:o,time:Number(r)}}async truncateWithPerformance(e="millis"){let[r,o]=await K(this.truncate.bind(this),e)();return {data:o,time:Number(r)}}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}}};var lt=class i extends k{constructor(e,r){super(e,r);this.performance={many:this.manyWithPerformance.bind(this),one:this.oneWithPerformance.bind(this),oneOrFail:this.oneOrFailWithPerformance.bind(this),paginate:this.paginateWithPerformance.bind(this),exists:this.existsWithPerformance.bind(this),paginateWithCursor:this.paginateWithCursorWithPerformance.bind(this),truncate:this.truncateWithPerformance.bind(this),delete:this.deleteWithPerformance.bind(this),update:this.updateWithPerformance.bind(this),softDelete:this.softDeleteWithPerformance.bind(this),pluck:this.pluckWithPerformance.bind(this),insert:this.insertWithPerformance.bind(this),insertMany:this.insertManyWithPerformance.bind(this)};this.sqlModelManagerUtils=new wt(e,this.dbType,r),this.relationQueryBuilders=[],this.modelSelectedColumns=[],this.modelColumnsMap=new Map,this.modelColumnsDatabaseNames=new Map,this.model.getColumns().forEach(n=>{this.modelColumnsMap.set(n.databaseName,n),this.modelColumnsDatabaseNames.set(n.databaseName,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 we(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.processRelationsRecursively(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 qr(r,o,n,e,{onData:async(a,l)=>{let d=this.addAdditionalColumnsToModel(l),u=await we([d],this.model,this.modelSelectedColumns);u&&(e.ignoreHooks?.includes("afterFetch")||await this.model.afterFetch?.([u]),this.relationQueryBuilders.length&&await this.processRelationsRecursively([u]),a.write(u));}})}async paginateWithCursor(e,r,o){if(!r){if(!this.model.primaryKey)throw new S(this.model.name+"::paginateWithCursor","PRIMARY_KEY_NOT_FOUND");r={discriminator:this.model.primaryKey};}return super.paginateWithCursor(e,r,o)}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(d=>Array.isArray(d)?d[0]:d)}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;return new Ie(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=V(a.leftForeignKey,s.caseConvention||this.model.databaseCaseConvention),d=V(a.rightForeignKey,s.caseConvention||this.model.databaseCaseConvention),u=o.map((c,h)=>({[l]:r[this.model.primaryKey],[d]:c[a.model.primaryKey],...n?n(c,h):{}}));class p extends Me{static get table(){return a.throughModel}}p.databaseCaseConvention="preserve",p.modelCaseConvention="preserve",await new Ie(p,s.trx?s.trx.sql:this.sqlDataSource).insertMany(u);}truncate(){return super.truncate()}update(e,r={}){let o=r.returning,n=super.update(e,o);return new H(()=>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 H(()=>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 H(()=>o.unWrap(),()=>o.toSql(),()=>o.toQuery(),async()=>(e.ignoreBeforeDeleteHook||await this.model.beforeDelete?.(this),o))}async getCount(e="*",r={ignoreHooks:false}){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);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,d]=await this.executePaginateQueries(()=>s.many({ignoreHooks:a}),()=>n.getCount("*",{ignoreHooks:o.ignoreHooks}));return {paginationMetadata:Cr(e,r,d),data:l}}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof k)&&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){let o=this.sqlModelManagerUtils.getRelationFromModel(e),n=new i(o.model,this.sqlDataSource);return n.relation=o,r?.(n),this.relationQueryBuilders.push(n),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),d=new i(l.model,this.sqlDataSource);d.relation=l;let u=this.getRelatedModelsQueryForRelation(d,l,[]);return u.clearWhere(),u.clearSelect(),u.selectRaw("1"),a?.(u),this.applyHavingRelatedFilter(u,l,s,n),this.whereExists(u),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),d=new i(l.model,this.sqlDataSource);d.relation=l;let u=this.getRelatedModelsQueryForRelation(d,l,[]);return u.clearWhere(),u.clearSelect(),u.selectRaw("1"),a?.(u),this.applyHavingRelatedFilter(u,l,s,n),this.orWhereExists(u),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),d=new i(l.model,this.sqlDataSource);d.relation=l;let u=this.getRelatedModelsQueryForRelation(d,l,[]);return u.clearWhere(),u.clearSelect(),u.selectRaw("1"),a?.(u),this.applyHavingRelatedFilter(u,l,s,n),this.whereNotExists(u),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),d=new i(l.model,this.sqlDataSource);d.relation=l;let u=this.getRelatedModelsQueryForRelation(d,l,[]);return u.clearWhere(),u.clearSelect(),u.selectRaw("1"),a?.(u),this.applyHavingRelatedFilter(u,l,s,n),this.orWhereNotExists(u),this}clone(){let e=super.clone();return e.relationQueryBuilders=F(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);}));}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 c=m[e.foreignKey];c&&n.set(String(c),m);}),r.forEach(m=>{let c=m[this.model.primaryKey];if(!c){m[e.columnName]=null;return}let h=n.get(String(c));m[e.columnName]=h||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 c=m[e.model.primaryKey];c&&s.set(String(c),m);}),r.forEach(m=>{let c=m[e.foreignKey];if(!c){m[e.columnName]=null;return}let h=s.get(String(c));m[e.columnName]=h||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 c=m[e.foreignKey];if(!c)return;let h=String(c);a.has(h)||a.set(h,[]),a.get(h).push(m);}),r.forEach(m=>{let c=m[this.model.primaryKey];if(!c){m[e.columnName]=[];return}let h=a.get(String(c))||[];m[e.columnName]=h;});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,d=new Map,u=l.leftForeignKey,p=this.modelColumnsMap.get(u)||this.modelColumnsDatabaseNames.get(u)||V(u,this.model.modelCaseConvention);o.forEach(m=>{let c=m[p];if(c==null)return;let h=String(c);d.has(h)||d.set(h,[]),delete m[p],d.get(h).push(m);}),r.forEach(m=>{let c=m[this.model.primaryKey];if(!c){m[e.columnName]=[];return}let h=d.get(String(c))||[];m[e.columnName]=h;});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=Te.randomBytes(6).toString("hex"),d=`${r.model.table}_cte_${l}`,u=e.orderByNodes.map(M=>M.isRawValue?M.column:`${this.interpreterUtils.formatStringColumn(this.dbType,M.column)} ${M.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let p=e.with(d,M=>M.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${u}) as rn_${l}`).whereIn(r.foreignKey,n));s&&p.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&p.whereRaw(`rn_${l} > ${a}`);let m=e.modelSelectedColumns.map(M=>eo(M,d,e.model.table));return p.select(...m).table(d);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new S(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let c=r;if(!o.length)return e;let h=e.limitNode?.limit,f=e.offsetNode?.offset,g=e.modelSelectedColumns.length?e.modelSelectedColumns.map(M=>M.includes(".")?M:`${r.model.table}.${M}`):[`${r.model.table}.*`];if(!h&&!f)return e.select(...g).select([`${c.throughModel}.${c.leftForeignKey}`,c.leftForeignKey]).leftJoin(c.throughModel,`${c.relatedModel}.${c.model.primaryKey}`,`${c.throughModel}.${c.rightForeignKey}`).whereIn(`${c.throughModel}.${c.leftForeignKey}`,n);let N=Te.randomBytes(6).toString("hex"),q=`${r.model.table}_cte_${N}`,R=e.orderByNodes.map(M=>{if(M.isRawValue)return M.column;let O=M.column.includes(".")?M.column:`${r.model.table}.${M.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,O)} ${M.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let _=`${Te.randomBytes(6).toString("hex")}_left_foreign_key`,x=e.with(q,M=>M.select(...g).select([`${c.throughModel}.${c.leftForeignKey}`,_]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${c.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,c.leftForeignKey)} ORDER BY ${R}) as rn_${N}`).leftJoin(c.throughModel,`${c.relatedModel}.${c.model.primaryKey}`,`${c.throughModel}.${c.rightForeignKey}`).whereIn(`${c.throughModel}.${c.leftForeignKey}`,n));h&&x.whereRaw(`rn_${N} <= ${h+(f||0)}`),f&&x.whereRaw(`rn_${N} > ${f}`);let P=g.map(M=>eo(M,q,e.model.table));return x.select(...P).select([`${q}.${_}`,c.leftForeignKey]).table(q);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 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 S(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");let d=s.formatStringColumn(l,`${r.model.table}.${r.foreignKey}`),u=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${d} = ${u}`),o&&typeof n=="number"&&e.groupByRaw(d).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 d=s.formatStringColumn(l,`${r.model.table}.${r.model.primaryKey}`),u=a.formatStringColumn(l,`${this.model.table}.${r.foreignKey}`);e.whereRaw(`${d} = ${u}`),o&&typeof n=="number"&&e.groupByRaw(d).andHavingRaw(`count(*) ${o} ${n}`);return}case "manyToMany":{let d=r;if(!this.model.primaryKey||!r.model.primaryKey)throw new S(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");e.joinNodes?.some(c=>!c.isRawValue&&c.table===d.throughModel&&c.type==="left")||e.leftJoin(d.throughModel,`${d.relatedModel}.${r.model.primaryKey}`,`${d.throughModel}.${d.rightForeignKey}`);let p=a.formatStringColumn(l,`${d.throughModel}.${d.leftForeignKey}`),m=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${p} = ${m}`),o&&typeof n=="number"&&e.groupByRaw(p).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}async manyWithPerformance(e={},r="millis"){let[o,n]=await K(this.many.bind(this,e),r)();return {data:n,time:Number(o)}}async oneWithPerformance(e={},r="millis"){let[o,n]=await K(this.one.bind(this,e),r)();return {data:n,time:Number(o)}}async oneOrFailWithPerformance(e={},r="millis"){let[o,n]=await K(this.oneOrFail.bind(this,e),r)();return {data:n,time:Number(o)}}async paginateWithPerformance(e,r,o,n="millis"){let{ignoreHooks:s=false}=o||{},[a,l]=await K(this.paginate.bind(this,e,r,{ignoreHooks:s}),n)();return {data:{paginationMetadata:l.paginationMetadata,data:l.data},time:Number(a)}}async paginateWithCursorWithPerformance(e,r,o,n="millis"){let[s,a]=await K(this.paginateWithCursor.bind(this,e,r,o),n)();return {data:a,time:Number(s)}}async existsWithPerformance(e="millis"){let[r,o]=await K(this.exists.bind(this),e)();return {data:o,time:Number(r)}}async pluckWithPerformance(e,r="millis"){let[o,n]=await K(this.pluck.bind(this,e),r)();return {data:n,time:Number(o)}}async softDeleteWithPerformance(e={},r="millis"){let[o,n]=await K(this.softDelete.bind(this,e),r)();return {data:n,time:Number(o)}}async updateWithPerformance(e,r={},o="millis"){let[n,s]=await K(this.update.bind(this,e,r),o)();return {data:s,time:Number(n)}}async deleteWithPerformance(e="millis"){let[r,o]=await K(this.delete.bind(this),e)();return {data:o,time:Number(r)}}async truncateWithPerformance(e="millis"){let[r,o]=await K(this.truncate.bind(this),e)();return {data:o,time:Number(r)}}async insertWithPerformance(e,r="millis"){let[o,n]=await K(this.insert.bind(this,e),r)();return {data:n,time:Number(o)}}async insertManyWithPerformance(e,r="millis"){let[o,n]=await K(this.insertMany.bind(this,e),r)();return {data:n,time:Number(o)}}};function _p(){return {}}var Ie=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=_p(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new T(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,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=Object.fromEntries(Object.keys(t).map(d=>[d,t[d]])),o=!e.returning||e.returning.length===0,n=new j(new L(this.model.table),[r],e.returning,o),s=()=>{let d=this.astParser.parse([n]);return {sql:d.sql,bindings:d.bindings}},a=()=>{let d=this.astParser.parse([n]);return {sql:Ve(this.sqlDataSource,d.sql),bindings:d.bindings}},l=()=>{let{sql:d,bindings:u}=a();return Fe(d,u)};return new H(s,a,l,async()=>{e.ignoreHooks||await this.model.beforeInsert?.(t);let{columns:d,values:u}=await this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert"),p={};d.forEach((q,R)=>{let _=u[R];p[q]=_,t[q]??(t[q]=_);});let m=!e.returning||e.returning.length===0,{sql:c,bindings:h}=this.astParser.parse([new j(new L(this.model.table),[p],e.returning,m)]),f=await U(c,h,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(f,[t],"one",e.returning);let g=f[0];return g?(await this.model.afterFetch?.([g]),await we([g],this.model,e.returning)):t})}insertMany(t,e={}){let r=t.map(d=>Object.fromEntries(Object.keys(d).map(u=>[u,d[u]]))),o=!e.returning||e.returning.length===0,n=new j(new L(this.model.table),r,e.returning,o),s=()=>{let d=this.astParser.parse([n]);return {sql:d.sql,bindings:d.bindings}},a=()=>{let d=this.astParser.parse([n]);return {sql:Ve(this.sqlDataSource,d.sql),bindings:d.bindings}},l=()=>{let{sql:d,bindings:u}=a();return Fe(d,u)};return new H(s,a,l,async()=>{if(await this.model.beforeInsertMany?.(t),this.sqlType==="oracledb"){let g=this.model.primaryKey,N=Object.keys(t[0]||{});if(g&&!N.includes(g))return this.handleOracleIdentityInsert(t,e)}let d=[];for(let g of t){let{columns:N,values:q}=await this.interpreterUtils.prepareColumns(Object.keys(g),Object.values(g),"insert"),R={};N.forEach((_,x)=>{let P=q[x];R[_]=P,g[_]??(g[_]=P);}),d.push(R);}let u=!e.returning||e.returning.length===0,{sql:p,bindings:m}=this.astParser.parse([new j(new L(this.model.table),d,e.returning,u)]),c=await U(p,m,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(u)return [];if(this.sqlType==="mysql"||this.sqlType==="mariadb")return await this.handleMysqlInsert(c,t,"many",e.returning)||[];let h=c;return h.length?(await this.model.afterFetch?.(h),await we(h,this.model,e.returning)||[]):[]})}upsertMany(t,e,r,o={updateOnConflict:true}){let n=r.map(m=>Object.fromEntries(Object.keys(m).map(c=>[c,m[c]]))),s=new j(new L(this.model.table),n,void 0,true),a=o.returning?.length&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?o.returning:void 0;new ce(this.model.table,t,e,o.updateOnConflict??true?"update":"ignore",a);let d=()=>{let m=this.astParser.parse([s]);return {sql:m.sql,bindings:m.bindings}},u=()=>{let m=this.astParser.parse([s]);return {sql:Ve(this.sqlDataSource,m.sql),bindings:m.bindings}},p=()=>{let{sql:m,bindings:c}=u();return Fe(m,c)};return new H(d,u,p,async()=>{let m=[];if(await this.model.beforeInsertMany?.(r),await Promise.all(r.map(async x=>{let{columns:P,values:M}=await this.interpreterUtils.prepareColumns(Object.keys(x),Object.values(x),"insert"),O=Object.fromEntries(P.map((X,D)=>[X,M[D]]));m.push(O);})),this.sqlType==="mssql")return this.executeMssqlMerge(m,t,e,o,r);let c=!o.returning||o.returning.length===0,h=!c&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?o.returning:void 0,{sql:f,bindings:g}=this.astParser.parse([new j(new L(this.model.table),m,void 0,true),new ce(this.model.table,t,e,o.updateOnConflict??true?"update":"ignore",h)]),N=await U(f,g,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:r}});if(c)return [];if(this.sqlType==="postgres"||this.sqlType==="cockroachdb"){if(N.length<r.length&&!(o.updateOnConflict??true)){let M=t[0],O=r.map(D=>D[M]);return await this.query().select(...o.returning?.length?o.returning:["*"]).whereIn(M,O).many()}let x=N;return await this.model.afterFetch?.(x),await we(x,this.model,o.returning)||[]}let q=t[0],R=r.map(x=>x[q]);return await this.query().select(...o.returning?.length?o.returning:["*"]).whereIn(q,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=P=>this.interpreterUtils.formatStringColumn("mssql",P),d=[],u=t.map(P=>`select ${s.map(O=>(d.push(P[O]),`@${d.length}`)).join(", ")}`),p=s.map(l).join(", "),m=u.join(" union all "),c=e.map(P=>`target.${l(P)} = source.${l(P)}`).join(" and "),h=r.filter(P=>!e.includes(P)).map(P=>`target.${l(P)} = source.${l(P)}`).join(", "),f=s.map(l).join(", "),g=s.map(P=>`source.${l(P)}`).join(", "),N=o.returning&&o.returning.length?o.returning.map(P=>`inserted.${l(P)}`).join(", "):s.map(P=>`inserted.${l(P)}`).join(", "),R=(o.updateOnConflict??true)&&h?`when matched then update set ${h}`:"",_=`merge into ${a} as target using (${m}) as source (${p}) on ${c} ${R} when not matched then insert (${f}) values (${g}) output ${N};`,x=await U(_,d,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:n}});if(x.length===0&&!(o.updateOnConflict??true)){let P=e[0],M=n.map(X=>X[P]);return await this.query().select(...o.returning?.length?o.returning:["*"]).whereIn(P,M).many()}return x}async updateRecord(t,e,r){let o=new Set(this.model.getColumns().map(h=>h.columnName)),n=Object.keys(e).filter(h=>o.has(h)),s=n.map(h=>e[h]),{columns:a,values:l}=await this.interpreterUtils.prepareColumns(n,s,"update"),{primaryKey:d}=this.model;if(!d)throw new S(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let u=a.indexOf(d);u!==-1&&(a.splice(u,1),l.splice(u,1));let{sql:p,bindings:m}=this.astParser.parse([new Ne(new L(this.model.table),a,l),new A(d,"and",false,"=",t)]);if(await U(p,m,this.sqlDataSource,this.sqlType,"affectedRows"),!r?.returning||r.returning.length===0)return;let c=await this.findOneByPrimaryKey(t,r.returning);if(!c)throw new S(this.model.name+"::updateRecord","ROW_NOT_FOUND");return c}async deleteRecord(t){if(!this.model.primaryKey)throw new S(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new A(this.model.primaryKey,"and",false,"=",t),{sql:r,bindings:o}=this.astParser.parse([new it(new L(this.model.table)),e]);await U(r,o,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new lt(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 we([a],this.model):null}return await we(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(u=>u[this.model.primaryKey]),l=a.map(u=>`'${u}'`).join(","),d=await this.query().select(...o??["*"]).whereIn(this.model.primaryKey,a).orderByRaw(`FIELD(${this.model.primaryKey}, ${l})`).many();return r==="one"?d.length?d[0]:null:d}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((c,h)=>{let f=a[h];l[c]=f,n[c]??(n[c]=f);});let{sql:d,bindings:u}=this.astParser.parse([new j(new L(this.model.table),[l],e.returning)]);await U(d,u,this.sqlDataSource,this.sqlType,"rows");let p=this.query().select(...e.returning||["*"]);for(let[c,h]of Object.entries(l))h!=null&&c!==o&&p.where(c,"=",h);o&&p.orderBy(o,"desc");let m=await p.one({ignoreHooks:["beforeFetch"]});if(m){let c=m;o&&c[o]&&(n[o]=c[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 d of n)this.handleWhereCondition(a,d,!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,d]=a;o?t.orWhereBetween(e,l,d):t.whereBetween(e,l,d);break}case "$not between":{let[l,d]=a;o?t.orWhereNotBetween(e,l,d):t.whereNotBetween(e,l,d);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 Mp=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??Xe()});var _t=class i{constructor(t,e,r=false,o=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=Te.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 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),te("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;te("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");b.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}try{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=!1;return}switch(this.sql.type){case "mssql":te("COMMIT",this.sql.logs),await this.sql.sqlConnection.commit();break;case "mysql":case "mariadb":let e=this.sql.sqlConnection;te("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":te("COMMIT",this.sql.logs),await this.sql.sqlConnection.commit();break}}catch(e){throw b.error(e),e}await this.releaseConnection(),this.isActive=false;}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new S("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");b.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}try{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=!1;return}switch(this.sql.type){case "mssql":te("ROLLBACK",this.sql.logs),await this.sql.sqlConnection.rollback();break;case "mysql":case "mariadb":let e=this.sql.sqlConnection;te("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":te("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 b.error(e),e}await this.releaseConnection(),this.isActive=false;}async releaseConnection(){if(!this.connectionReleased){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(t){b.error(t);}await this.sql.disconnect(),this.sql.sqlConnection=null,this.connectionReleased=true;}}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 b.error(e),new B("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 Ja=Symbol.for("hysteria.orm.SqlDataSource"),Rp,xp,Mt=class i extends(xp=Ut,Rp=Ja,xp){constructor(e){super(e);this[Rp]=true;this.globalTransaction=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.cacheAdapter=new Wt;this.migrationConfig={path:I.MIGRATION_PATH||"database/migrations",lock:true,transactional:true,lockTimeout:3e4};this.seederConfig={path:"database/seeders"};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:yt(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;}static isSqlDataSource(e){return typeof e=="object"&&e!==null&&Ja in e&&e[Ja]===true}getOnSlaveServerFailure(){return this.onSlaveServerFailure}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");this.sqlPool=await Ue(this.sqlType,this.inputDetails),this.ownsPool=true,this.slaves.length&&await Promise.all(this.slaves.map(async e=>{e.sqlPool=await Ue(e.sqlType,e.inputDetails),e.ownsPool=true;}));}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}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}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,d=[];a?(l=r,d=o):(l=void 0,d=r!==void 0?[r,...o]:o);let u=Vr(JSON.stringify(d)),p=u?`${e}:${u}`:e,m=await this.cacheAdapter.get(p);if(m!==void 0)return m;let c=await n(...d);return await this.cacheAdapter.set(p,c,l),c}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=Vr(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.sqlType==="sqlite"||!!e?.shouldRecreatePool?(r.sqlPool=await Ue(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.isInGlobalTransaction&&this.globalTransaction?.isActive?this.globalTransaction.sql:this;if(typeof e=="string"){let n=new k(Mp(e,r),o);return r?.alias&&n.table(e,r.alias),n}return new lt(e,o)}schema(){if(!this.isConnected)throw new S("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new hr(this,this.getDbType())}async startGlobalTransaction(e){let r=await this.clone();return r.sqlConnection=await r.getConnection(),this.globalTransaction=new _t(r,e?.isolationLevel),await this.globalTransaction.transaction(),this.globalTransaction}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new S("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction}),this.globalTransaction=null;}async rollbackGlobalTransaction(e){if(!this.globalTransaction){b.warn("SqlDataSource::rollbackGlobalTransaction - GLOBAL_TRANSACTION_NOT_STARTED");return}await this.globalTransaction.rollback({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction}),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=await this.clone();n.sqlConnection=await n.getConnection();let s=new _t(n,o?.isolationLevel);if(await s.transaction(),typeof e=="function")try{let a=await e(s);return await s.commit({throwErrorOnInactiveTransaction:!1}),a}catch(a){throw await s.rollback({throwErrorOnInactiveTransaction:false}),a}return s}getModelManager(e){if(!this.isConnected)throw new S("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");return this.globalTransaction?.isActive?new Ie(e,this.globalTransaction.sql):new Ie(e,this)}getPool(){if(!this.sqlPool)throw new S("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(){if(this.sqlConnection)return this.sqlConnection;if(!this.sqlPool)throw new S("SqlDataSource::getConnection","CONNECTION_NOT_ESTABLISHED");switch(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){te("Connection already closed or not established",this.logs);return}if(!this.ownsPool){this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{b.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){b.warn(`SqlDataSource::disconnect - Error while closing slave connection: ${r.message}`);}})),te("Closing connection",this.logs),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 syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){b.warn("Syncing schema with SQLite is not supported, skipping...");return}let o=(await Be.makeDiff(this)).getSqlStatements();if(!o.length){b.info("No new changes detected between database schema and models metadata");return}if(b.info(`Generated ${o.length} SQL statements to sync schema`),!e?.transactional){for(let n of o)await this.rawQuery(n);b.info(`Synced schema with ${o.length} SQL statements`);return}await this.transaction(async n=>{for(let s of o)await n.sql.rawQuery(s);}),b.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(!this.isConnected)throw new S("SqlDataSource::rawQuery","CONNECTION_NOT_ESTABLISHED");return (o?.replicationMode||"master")==="slave"?this.executeOnSlave(async s=>U(e,r,s,this.getDbType(),"raw")):U(e,r,this,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)]),l=this.getDbType();if(l==="postgres"||l==="mssql")for(let d of r){let u=a.find(p=>{let m=p.expression;return new RegExp(`[\\["\\[]?${d.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(([^)]+)\\)`,"i").test(m)});if(u){let p=new RegExp("IN\\s*\\(([^)]+)\\)","i"),m=u.expression.match(p);m&&(d.enumValues=m[1].split(",").map(c=>c.trim().replace(/^'|'$/g,"")));}}return {columns:r,indexes:o,foreignKeys:n,primaryKey:s,checkConstraints:a}}getModelOpenApiSchema(){return cl(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 jr(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 ml(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}isAdminJsEnabled(){return !!this.adminJsOptions?.enabled}async getTableInfo(e){let o=new T({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new er(e)]).sql,n=[];try{let a=await this.rawQuery(o);n=this.extractRowsFromRawResult(a);}catch(a){if(je(this.getDbType(),a))return [];throw a}let s=this.getDbType();return s==="sqlite"?n.map(a=>{let l=String(a.type||"").toLowerCase(),d=Pe(s,l);return {name:a.name,dataType:d,isNullable:a.notnull===0,defaultValue:a.dflt_value??null,withTimezone:null}}):n.map(a=>{let l=String(a.column_name||a.COLUMN_NAME||a.name||""),d=String(a.data_type||a.DATA_TYPE||a.type||"").toLowerCase(),u=Pe(s,d),p=a.is_nullable!==void 0?a.is_nullable:a.IS_NULLABLE!==void 0?a.IS_NULLABLE:void 0,m=typeof p=="string"?p.toLowerCase()!=="no":typeof p=="boolean"?p:a.notnull!==void 0?a.notnull===0:true,c=a.column_default??a.COLUMN_DEFAULT??a.defaultValue??a.dflt_value??null,h=a.char_length!=null?Number(a.char_length):null,f=a.numeric_precision!=null?Number(a.numeric_precision):null,g=a.numeric_scale!=null?Number(a.numeric_scale):null,N=a.timezone!=null?!!a.timezone:/with time zone/.test(String(a.column_type||a.udt_name||d||"").toLowerCase()),q=null,R=String(a.column_type||a.COLUMN_TYPE||""),_=R.match(/^enum\((.+)\)$/i);_&&(q=_[1].split(",").map(O=>O.trim().replace(/^'|'$/g,"")));let x=R.toLowerCase(),P=x.includes(" unsigned"),M=x.includes(" zerofill");return {name:l,dataType:u,isNullable:m,defaultValue:c,length:h,precision:f,scale:g,withTimezone:N,enumValues:q,unsigned:P,zerofill:M}})}async getIndexInfo(e){let o=new T({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Zt(e)]).sql,n=this.getDbType(),s=[];try{let l=await this.rawQuery(o);s=this.extractRowsFromRawResult(l);}catch(l){if(je(this.getDbType(),l))return [];throw l}if(n==="mysql"||n==="mariadb"){let l=new Map;for(let d of s){let u=d.Key_name,p=d.Non_unique===0,m=l.get(u)||{name:u,columns:[],isUnique:p};m.columns.push(d.Column_name),l.set(u,m);}return Array.from(l.values())}if(n==="postgres"||n==="cockroachdb"){let l=new Map;for(let d of s){let u=d.index_name,p=!!d.is_unique,m=l.get(u)||{name:u,columns:[],isUnique:p};m.columns.push(d.column_name),l.set(u,m);}return Array.from(l.values())}let a=[];for(let l of s){let d=l.name,u=!!l.unique,p=await this.rawQuery(`PRAGMA index_info(${d})`),c=this.extractRowsFromRawResult(p).map(h=>h.name);a.push({name:d,columns:c,isUnique:u});}return a}async getForeignKeyInfo(e){let o=new T({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Gt(e)]).sql,n=[];try{let l=await this.rawQuery(o);n=this.extractRowsFromRawResult(l);}catch(l){if(je(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let d of n){let u=Number(d.id),p=l.get(u)||{name:void 0,columns:[],referencedTable:String(d.table),referencedColumns:[],onDelete:d.on_delete??null,onUpdate:d.on_update??null};p.columns.push(String(d.from)),p.referencedColumns.push(String(d.to)),l.set(u,p);}return Array.from(l.values())}let a=new Map;for(let l of n){let d=String(l.name||""),u=d||`${l.referenced_table}_${l.column_name}`,p=a.get(u)||{name:d||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};p.columns.push(String(l.column_name)),p.referencedColumns.push(String(l.referenced_column)),a.set(u,p);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let o=new T({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Xt(e)]).sql,n=[];try{let l=await this.rawQuery(o);n=this.extractRowsFromRawResult(l);}catch(l){if(je(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 T({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new zt(e)]).sql,n=[];try{let s=await this.rawQuery(o);n=this.extractRowsFromRawResult(s);}catch(s){if(je(this.getDbType(),s))return [];throw s}return n.map(s=>({name:String(s.name),expression:String(s.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
316
+ ORDER BY pk`,bindings:[]}}},Vc=new Aa;var Pa=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Jc=new Pa;var $a=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 y(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 T(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 T(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 y(this.model).formatStringColumn("sqlite",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new T(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]:" ",d=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(d))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=n.slice(a),d=0;for(let u of l)u==="("&&d++,u===")"&&d--;if(d>0)return e}return `as "${r}"`})}},Hc=new $a;var Da=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),o=ie.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}},Yc=new Da;var Ia=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:[]}}},zc=new Ia;var Oa=class{toSql(t){let e=t,r=new T(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}}},Gc=new Oa;var Ea=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),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 d=e.values[l];return d instanceof $?`${r.formatStringColumn("sqlite",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("sqlite",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},Zc=new Ea;var va=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 y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(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 y(this.model).formatStringColumn("sqlite",t):t}},Xc=new va;var Qa=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new T(this.model,"sqlite"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},ep=new Qa;var ka=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new y(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}}},tp=new ka;var Ba=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 T(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 T(this.model,"sqlite"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},rp=new Ba;var Ka=class{toSql(t){let e=t,r=new T(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}}},op=new Ka;var np={mssql:{alter_table:{add_column:yl,add_constraint:hl,add_primary_key:gl,alter_column_type:bl,alter_table:Tl,drop_column:Nl,drop_constraint:Sl,drop_default:wl,drop_not_null:ql,drop_primary_key:Cl,rename_column:_l,rename_table:Ml,set_default:Rl,set_not_null:xl,set_table_options:Al},column:{column_type:Pl},constraint:{after:$l,constraint:Dl},create_table:{create_table:Il},delete:{delete:Ol},distinct:{distinct:El,distinct_on:vl},drop_table:{drop_table:Ql},extension:{create_extension:kl},from:{from:Bl},group_by:{group_by:Kl},having:{having:Wl},index_op:{create_index:Ll,drop_index:Ul},insert:{insert:Fl},join:{join:jl},limit:{limit:Vl},lock:{lock:Jl},offset:{offset:Hl},on_duplicate:{on_duplicate:Yl},order_by:{order_by:zl},raw:{raw:Gl},schema:{check_constraint_info:Zl,foreign_key_info:Xl,index_info:ed,primary_key_info:td,table_info:rd},select:{select:od,select_json:nd},truncate:{truncate:sd},union:{union:id},update:{update:ad},where:{where:ld,where_group:dd,where_json:ud,where_subquery:md},with:{with:cd}},mysql:{alter_table:{add_column:pd,add_constraint:fd,add_primary_key:yd,alter_column_type:hd,alter_table:gd,drop_column:bd,drop_constraint:Td,drop_default:Nd,drop_not_null:Sd,drop_primary_key:wd,rename_column:qd,rename_table:Cd,set_default:_d,set_not_null:Md,set_table_options:Rd},column:{column_type:xd},constraint:{after:Ad,constraint:Pd},create_table:{create_table:$d},delete:{delete:Dd},distinct:{distinct:Id,distinct_on:Od},drop_table:{drop_table:Ed},extension:{create_extension:vd},from:{from:Qd},group_by:{group_by:kd},having:{having:Bd},index_op:{create_index:Kd,drop_index:Wd},insert:{insert:Ld},join:{join:Ud},limit:{limit:Fd},lock:{lock:jd},offset:{offset:Vd},on_duplicate:{on_duplicate:Jd},order_by:{order_by:Hd},raw:{raw:Yd},schema:{check_constraint_info:zd,foreign_key_info:Gd,index_info:Zd,primary_key_info:Xd,table_info:eu},select:{select:tu,select_json:ru},truncate:{truncate:ou},union:{union:nu},update:{update:su},where:{where:iu,where_group:au,where_json:lu,where_subquery:du},with:{with:uu}},oracledb:{alter_table:{add_column:mu,add_constraint:cu,add_primary_key:pu,alter_column_type:fu,alter_table:yu,drop_column:hu,drop_constraint:gu,drop_default:bu,drop_not_null:Tu,drop_primary_key:Nu,rename_column:Su,rename_table:wu,set_default:qu,set_not_null:Cu,set_table_options:_u},column:{column_type:Mu},constraint:{after:Ru,constraint:xu},create_table:{create_table:Au},delete:{delete:Pu},distinct:{distinct:$u,distinct_on:Du},drop_table:{drop_table:Iu},extension:{create_extension:Ou},from:{from:Eu},group_by:{group_by:vu},having:{having:Qu},index_op:{create_index:ku,drop_index:Bu},insert:{insert:Ku},join:{join:Wu},limit:{limit:Lu},lock:{lock:Uu},offset:{offset:Fu},on_duplicate:{on_duplicate:ju},order_by:{order_by:Vu},raw:{raw:Ju},schema:{check_constraint_info:Hu,foreign_key_info:Yu,index_info:zu,primary_key_info:Gu,table_info:Zu},select:{select:Xu,select_json:em},truncate:{truncate:tm},union:{union:rm},update:{update:om},where:{where:nm,where_group:sm,where_json:im,where_subquery:am},with:{with:lm}},postgres:{alter_table:{add_column:dm,add_constraint:um,add_primary_key:mm,alter_column_type:cm,alter_table:pm,drop_column:fm,drop_constraint:ym,drop_default:hm,drop_not_null:gm,drop_primary_key:bm,rename_column:Tm,rename_table:Nm,set_default:Sm,set_not_null:wm,set_table_options:qm},column:{column_type:Cm},constraint:{after:_m,constraint:Mm},create_table:{create_table:Rm},delete:{delete:xm},distinct:{distinct:Am,distinct_on:Pm},drop_table:{drop_table:$m},extension:{create_extension:Dm},from:{from:Im},group_by:{group_by:Om},having:{having:Em},index_op:{create_index:vm,drop_index:Qm},insert:{insert:km},join:{join:Bm},limit:{limit:Km},lock:{lock:Wm},offset:{offset:Lm},on_duplicate:{on_duplicate:Um},order_by:{order_by:Fm},raw:{raw:jm},schema:{check_constraint_info:Vm,foreign_key_info:Jm,index_info:Hm,primary_key_info:Ym,table_info:zm},select:{select:Gm,select_json:Zm},transaction:{},truncate:{truncate:Xm},union:{union:ec},update:{update:tc},where:{where:rc,where_group:oc,where_json:nc,where_subquery:sc},with:{with:ic}},sqlite:{alter_table:{add_column:ac,add_constraint:lc,alter_column_type:dc,alter_table:uc,drop_column:mc,drop_constraint:cc,drop_default:pc,drop_not_null:fc,drop_primary_key:yc,rename_column:hc,rename_table:gc,set_default:bc,set_not_null:Tc,set_table_options:Nc},column:{column_type:Sc},constraint:{after:wc,constraint:qc},create_table:{create_table:Cc},delete:{delete:_c},distinct:{distinct:Mc,distinct_on:Rc},drop_table:{drop_table:xc},extension:{create_extension:Ac},from:{from:Pc},group_by:{group_by:$c},having:{having:Dc},index_op:{create_index:Ic,drop_index:Oc},insert:{insert:Ec},join:{join:vc},limit:{limit:Qc},lock:{lock:kc},offset:{offset:Bc},on_duplicate:{on_duplicate:Kc},order_by:{order_by:Wc},raw:{raw:Lc},schema:{check_constraint_info:Uc,foreign_key_info:Fc,index_info:jc,primary_key_info:Vc,table_info:Jc},select:{select:Hc,select_json:Yc},transaction:{},truncate:{truncate:zc},union:{union:Gc},update:{update:Zc},where:{where:Xc,where_group:ep,where_json:tp,where_subquery:rp},with:{with:op}}};var T=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(M=>!!M&&M.folder==="distinctOn"),n=!o&&t.find(M=>!!M&&M.folder==="distinct"),s=this.dbType==="mssql"?t.find(M=>!!M&&M.folder==="lock")??null:null,a=s?this.getMssqlTableHints(s):"",l=t.filter(M=>M!==null&&M.folder!=="distinct"&&M.folder!=="distinctOn"),d=l.some(M=>M.folder==="offset"),u=l.some(M=>M.folder==="order_by"),p=l.find(M=>M.folder==="limit"),m=l.find(M=>M.folder==="offset"),c=this.dbType==="mssql"&&p&&!d&&!u,h=this.dbType==="mssql"&&!c&&(p||m),f=this.dbType==="oracledb"&&(p||m),g=[],N=[],q=null;c&&p&&N.push(p.limit);for(let M=0;M<l.length;M++){let x=l[M];if(c&&x.folder==="limit"||h&&(x.folder==="limit"||x.folder==="offset")||f&&(x.folder==="limit"||x.folder==="offset"))continue;x.currParamIndex=e+N.length;let P=np[this.mapCommonDbType(this.dbType)][x.folder][x.file];if(!P)throw new Error(`Interpreter not found for ${this.dbType} ${x.keyword}`);P.model=this.model;let _=P.toSql(x);if(!_.sql||!_.sql.trim().length)continue;let E=l[M+1],D=!E||E.keyword!==x.keyword?"":E.chainsWith;if(x.folder==="lock"||x.folder==="on_duplicate"||x.folder==="schema"){g.push(`${_.sql}${D}`),N.push(..._.bindings),q=x.keyword;continue}if(q!==x.keyword||x.canKeywordBeSeenMultipleTimes){if(r)g.push(`${_.sql}${D}`);else {let J=x.keyword;if(x.folder==="with"&&this.dbType!=="mssql"){let Z=M,Se=false;for(;Z<l.length&&l[Z].keyword===x.keyword;){let Me=l[Z];if(Me.folder==="with"&&Me.clause==="recursive"){Se=true;break}Z++;}Se&&(J=`${J} recursive`);}if(J==="select"){let Z=c?`top (@${e}) `:"";if(o){let Se=Array.isArray(o.columns)?o.columns.join(", "):"";g.push(`select ${Z}distinct on (${Se}) ${_.sql}${D}`);}else n?g.push(`select ${Z}distinct ${_.sql}${D}`):g.push(`select ${Z}${_.sql}${D}`);}else J==="from"&&a?g.push(`${J} ${_.sql}${a}${D}`):g.push(`${J} ${_.sql}${D}`);}q=x.keyword;}else g.push(`${_.sql}${D}`);N.push(..._.bindings);}if(h){u||g.push("order by (select null)");let M=m?.offset??0;N.push(M);let P=`offset @${e+N.length-1} rows`;if(p){N.push(p.limit);let _=e+N.length-1;P+=` fetch next @${_} rows only`;}g.push(P);}if(f){u||g.push("order by null");let M=m?.offset??0;N.push(M);let P=`offset :${e+N.length-1} rows`;if(p){N.push(p.limit);let _=e+N.length-1;P+=` fetch next :${_} rows only`;}g.push(P);}return {sql:g.join(" "),bindings:N}}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 jt=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var Vt=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var Jt=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var Ht=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var Yt=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var zt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var de=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var Xe=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var Gt=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 ue=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 Zt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var me=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var Tt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var Xt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var et=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var er=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 tr=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 Ee=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 U=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 or=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 nr=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 sr=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 ir=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 ar=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 tt=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 Sf(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 lr=Symbol("columns"),rt=Symbol("primaryKey"),Wa=Symbol("relations"),sp=Symbol("indexes"),ip=Symbol("uniques"),ap=Symbol("checks"),La=i=>`${Sf(i)}_id`,Ua=(i,t)=>`idx_${i}_${t}`,ce=(i,t)=>`uq_${i}_${t}`,z=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,Ae=(i,t)=>`pk_${i}_${t}`;var Q=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 Nt=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 ve=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 ot=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 dr=class extends w{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var ur=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=Ae(this.tableName,C(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new U("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new U("primary_key",{columns:[C(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??"",C(this.columnNode.column),n[0]);return this.context==="alter_table"?(this.nodes.push(new U("foreign_key",{columns:[C(this.columnNode.column)],references:{table:r,columns:n},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this):(this.namedConstraints.push(new U("foreign_key",{columns:[C(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 U("not_null",{columns:[C(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new U("null",{columns:[C(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 U("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new U("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??ce(this.tableName??"",C(this.columnNode.column))})),this):(this.namedConstraints.push(new U("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName||ce(this.tableName??"",C(this.columnNode.column))})),this)}check(t,e){let r=C(this.columnNode.column),o=e?.constraintName??`chk_${this.tableName}_${r}`.substring(0,63);return this.context==="alter_table"?(this.nodes.push(new U("check",{columns:[r],checkExpression:t,constraintName:o})),this):(this.namedConstraints.push(new U("check",{columns:[r],checkExpression:t,constraintName:o})),this)}after(t){return this.sqlType!=="mysql"?this:(this.nodes.push(new dr(t)),this)}collate(t){return this.columnNode.collate=t,this}handleSqliteAutoIncrement(t){return this.nodes.push(new U("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this}};var Qe=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 ur(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new $(e)}char(e,r=1){let o=new Q(e,"char",{length:r});return this.build(o)}varchar(e,r=255){let o=new Q(e,"varchar",{length:r});return this.build(o)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let o=new Q(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 Q(e,"uuid");return this.build(r)}ulid(e){let r=new Q(e,"ulid");return this.build(r)}integer(e,r=255){let o=new Q(e,"integer",{length:r});return this.build(o)}tinyint(e,r=255){let o=new Q(e,"tinyint",{length:r});return this.build(o)}smallint(e,r=255){let o=new Q(e,"smallint",{length:r});return this.build(o)}mediumint(e,r=255){let o=new Q(e,"mediumint",{length:r});return this.build(o)}biginteger(e,r=255){let o=new Q(e,"bigint",{length:r});return this.build(o)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let o=new Q(e,"float",{precision:r});return this.build(o)}double(e,r=10){let o=new Q(e,"double",{precision:r});return this.build(o)}real(e,r=10){let o=new Q(e,"real",{precision:r});return this.build(o)}decimal(e,r=10,o=2){let n=new Q(e,"decimal",{precision:r,scale:o});return this.build(n)}numeric(e,r=10,o=2){let n=new Q(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 Q(e,"date",{precision:r});return this.build(o)}time(e,r){let o=new Q(e,"time",{precision:r});return this.build(o)}year(e){let r=new Q(e,"year");return this.build(r)}datetime(e,r){let o=new Q(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 Q(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(o)}boolean(e){let r=new Q(e,"boolean");return this.build(r)}binary(e){let r=new Q(e,"binary");return this.build(r)}varbinary(e,r=255){let o=new Q(e,"varbinary",{length:r});return this.build(o)}blob(e){let r=new Q(e,"blob");return this.build(r)}tinyblob(e){let r=new Q(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new Q(e,"mediumblob");return this.build(r)}longblob(e){let r=new Q(e,"longblob");return this.build(r)}json(e){let r=new Q(e,"json");return this.build(r)}jsonb(e){let r=new Q(e,"jsonb");return this.build(r)}enum(e,r){let o=new Q(e,"enum",{enumValues:r});return this.build(o)}custom(e,r,o){let n=new Q(e,r,{length:o});return this.build(n)}rawColumn(e){let r=new Q(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new Q(e,"geometry");return this.build(r)}point(e){let r=new Q(e,"point");return this.build(r)}linestring(e){let r=new Q(e,"linestring");return this.build(r)}polygon(e){let r=new Q(e,"polygon");return this.build(r)}multiPoint(e){let r=new Q(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var mr=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 Qe(this.sqlType,e,this.table,"alter_table"),o=t(r);if(!e.length)return;let n=r.getNamedConstraints(),s=e.filter(p=>p.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(p=>{let m=p;return m.constraintType==="not_null"||m.constraintType==="null"||m.constraintType==="default"}),d=new zt(a);d.inlineConstraints=l,this.nodes.push(d),o.getNodes().filter(p=>{let m=p;return m.constraintType==="unique"||m.constraintType==="foreign_key"||m.constraintType==="primary_key"}).forEach(p=>{this.nodes.push(new de(p));});}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 Qe(this.sqlType,e,this.table,"alter_table"),o=t(r);if(!e.length)return;let n=e.filter(c=>c.folder==="column");if(n.length!==1)throw new Error("alterColumn callback must define exactly one column");let s=n[0],a=C(s.column),l=o.getNodes().find(c=>c.constraintType==="null"),u=o.getNodes().find(c=>c.constraintType==="not_null")||l,p=o.getNodes().find(c=>c.constraintType==="default"),m={};u&&(m.nullable=u.constraintType==="null"),p&&(p.defaultValue===void 0||p.defaultValue===null||p.defaultValue==="NULL"?m.dropDefault=true:m.default=p.defaultValue),s.collate&&(this.sqlType==="mysql"||this.sqlType==="mariadb")&&(m.collate=s.collate),this.nodes.push(new Gt(C(a),s,m)),u&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(u.constraintType==="not_null"?this.nodes.push(new rr(C(a))):u.constraintType==="null"&&this.nodes.push(new Xt(C(a)))),p&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(p.defaultValue===void 0||p.defaultValue===null||p.defaultValue==="NULL"?this.nodes.push(new Tt(C(a))):this.nodes.push(new tr(C(a),p.defaultValue))),o.getNodes().forEach(c=>{let h=c;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 Zt(t));}renameColumn(t,e){this.nodes.push(new er(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 Tt(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 Xe([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 de(new U(...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 de(new U("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 de(new U("unique",{columns:[t],constraintName:e?.constraintName??ce(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 me(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??ce(this.table,t);this.nodes.push(new me(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 me(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 et(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 Ee(t)):r?this.nodes.push(new Ee(t)):o?this.nodes.push(new Ee(t)):n&&this.nodes.push(new Ee(t)),this)}};var be=class{constructor(t){if(this.sqlType=t||I.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(!ye.existsSync(t))throw new S("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=ze.basename(t),r=ze.extname(e);if(r!==".sql"&&r!==".txt")throw new S("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let n=ye.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 Qe(this.sqlType,[],t);e(o);let n=o.getNodes(),s=new T({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a={...r,...this.sqlType==="mysql"||this.sqlType==="mariadb"?o.getMysqlOptions()||{}:{}},l=new or(t,n,o.getNamedConstraints(),r?.ifNotExists,a),d=s.parse([l]).sql,u=d.startsWith("create table")?d:`create table ${d}`;this.rawQuery(u),this.generateAutoUpdateTriggers(t,n);}alterTable(t,e){let r=[],o=new mr(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 d=new ue(t,s),u=n.parse([d]).sql;if(!u||!u.trim())return;let p=u.startsWith("alter table")?u:`alter table ${u}`;this.rawQuery(p),s=[];};for(let d of r)d.file==="add_constraint"&&s.length&&s[0].file==="add_column"||a(),s.push(d);a();let l=r.filter(d=>d.file==="add_column").map(d=>d.column);this.generateAutoUpdateTriggers(t,l);}dropTable(t,e=false){let r=new nr(t,e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}renameTable(t,e){let r=new ue(t,[new Ze(e)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}truncateTable(t){let e=new tt(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||Ua(t,e.join("_")),n=new ir(t,e,o),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([n]).sql);}dropIndex(t,e){let r=new ar(t,e),o=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}addPrimaryKey(t,e){let r=new Xe(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??ce(t,o.join("_")),s=new U("unique",{columns:o,constraintName:n}),a=new ue(t,[new de(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 me(o),s=new ue(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)?ce(t,e.join("_")):ce(t,e),n=r?.constraintName??o,s=new me(n),a=new ue(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new et,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new U(...e),o=new ue(t,[new de(r)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([o]).sql);}dropConstraint(t,e){let r=new me(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 U("check",{checkExpression:e,constraintName:o}),s=new ue(t,[new de(n)]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropCheck(t,e){if(this.sqlType==="mysql"||this.sqlType==="mariadb"){this.rawQuery(`ALTER TABLE \`${t}\` DROP CHECK \`${e}\``);return}let r=new me(e),o=new ue(t,[r]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([o]).sql);}createExtension(t,e=true){let r=new sr(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=>C(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 T(t,this.sqlType)}};var pr,up,cr=class{constructor(t,e){Xa(this,pr);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new be(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=el(this,pr,up).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(`;
317
+ `)}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"}};pr=new WeakSet,up=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 Te=class{constructor(t,e){this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var fr=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 d=l.getRelations();for(let u of d)u.type==="belongsTo"&&u.model().table===n.table&&a.push(`fk.${l.table}.${u.constraintName}`);}r.set(s,a);}for(let n of t.columnsToDrop||[]){let s=`column.${n.table}.${n.column}`,a=[],l=this.models.find(d=>d.table===n.table);if(l){let d=l.getColumns().find(u=>u.databaseName===n.column);if(d){d.isPrimary&&a.push(`pk.${n.table}`);let u=l.getRelations();for(let p of u)p.columnName===d.columnName&&a.push(`fk.${n.table}.${p.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 d of l)s(d);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("."),d=t.relationsToDrop?.find(u=>u.table===a&&u.relation.name===l);d&&r.push({type:"DROP_FOREIGN_KEY",phase:"DESTRUCTIVE_OPERATIONS",table:a,constraint:l,data:d,dependencies:e.foreignKeys.get(s)||[],sqlStatements:this.generateDropForeignKeySql(d)});}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 d of l)d.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)}):d.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(d=>d.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 hr=class hr{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new fr(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 d=r(l);return d?!(s.has(d)&&(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 be(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(d=>d.table===o.table)?.getColumns().find(d=>d.columnName===o.columns[0])?.primaryKeyConstraintName||Ae(o.table,o.columns[0]),l=this.sql.schema().alterTable(o.table,d=>{let u=a||Ae(o.table,o.columns[0]);d.addConstraint("primary_key",{columns:[o.columns[0]],constraintName:u});}).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(u=>u.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 be(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 be(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=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 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=C(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}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"&&hr.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||Ae(t,r.columnName)}),r.unsigned&&s.unsigned(),r.zerofill&&s.zerofill(),r.constraints?.default!==void 0&&s.default(r.constraints.default),r.constraints?.nullable===false?s.notNullable():r.constraints?.nullable===true&&s.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),t.column.constraints?.nullable===false?n.notNullable():t.column.constraints?.nullable===true&&n.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),t.modelColumn.constraints?.nullable===false?s.notNullable():t.modelColumn.constraints?.nullable===true&&s.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 be(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=C(t.relation.manyToManyOptions.throughModel),r=C(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=C(r);if(t.relation.type==="belongsTo"){let m=t.relation.model(),c=m.primaryKey,f=m.getColumns().find(g=>g.columnName===c);if(f)n=f.databaseName;else {let g=m?.databaseCaseConvention||"preserve";n=V(c,g);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.model();if(typeof n=="string"&&n){let c=m.getColumns(),h=c.find(f=>f.columnName===n);if(h)n=h.databaseName;else {let f=m.primaryKey||"id",g=c.find(N=>N.columnName===f);if(g)n=g.databaseName;else {let N=m?.databaseCaseConvention||"preserve";n=V(n||f,N);}}}else {let c=m.primaryKey||"id",f=m.getColumns().find(g=>g.columnName===c);if(f)n=f.databaseName;else {let g=m?.databaseCaseConvention||"preserve";n=V(c,g);}}}let s=this.models.find(m=>m.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,d=a.find(m=>m.columnName===l);if(d)l=d.databaseName;else {let m=s?.databaseCaseConvention||"preserve";l=V(l,m);}if(t.relation.type==="belongsTo"){let m=a.find(c=>c.columnName===t.relation.foreignKey);if(m)l=m.databaseName;else {let c=s?.databaseCaseConvention||"preserve";l=V(t.relation.foreignKey,c);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.manyToManyOptions.leftForeignKey,c=C(m),h=a.find(f=>f.columnName===c);if(h)l=h.databaseName;else {let f=s?.databaseCaseConvention||"preserve";l=V(c,f);}}let u=t.relation.onDelete?.toLowerCase(),p=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,m=>{let c=o||z(t.table,l,e);m.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[n]},constraintName:c,onDelete:u,onUpdate:p});}).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," "))}))}};hr.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 yr=hr;function Cf(i){return i.replace(/\s+/g," ").trim()}function _f(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function $e(i,t){let e=Cf(t.toLowerCase()),r=_f(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":{if(r.endsWith("text")||r==="text")return "text";switch(r){case "int":case "integer":case "increment":return "integer";case "tinyint":return "boolean";case "smallint":return "smallint";case "mediumint":return "mediumint";case "bigint":case "bigincrement":return "bigint";case "float":return "float";case "double":case "double precision":return "double";case "real":return "double";case "decimal":case "numeric":return "numeric";case "string":case "varchar":case "character varying":return "varchar";case "char":case "character":return "char";case "uuid":return "varchar";case "ulid":return "varchar";case "date":return "date";case "datetime":return "datetime";case "timestamp":return "timestamp";case "time":return "time";case "year":return "year";case "jsonb":return "json";case "json":return "json";case "enum":return "enum";case "binary":return "binary";case "varbinary":return "varbinary";case "tinyblob":return "tinyblob";case "mediumblob":return "mediumblob";case "longblob":return "longblob";case "blob":return "blob";case "boolean":case "bool":return "boolean";default:return r}}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 ke=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(f=>f?.type!==void 0&&f?.type!==null),indexes:r.getIndexes(),relations:r.getRelations()};if(!o.columns.length){e.data.tablesToAdd.push({table:r.table,columns:n.columns});for(let N of n.indexes)o.indexes.map(q=>q.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 g=r.getChecks?.()||[];for(let N of g)e.data.checksToAdd.push({table:r.table,name:N.name,expression:N.expression});for(let N of n.relations){if(N.type!=="belongsTo")continue;let q=C(N.constraintName);o.foreignKeys.find(M=>M.name===q)||e.data.relationsToAdd.push({table:r.table,relation:N,onDelete:N.onDelete,onUpdate:N.onUpdate});}return}for(let f of n.columns)o.columns.some(N=>N.name===f.databaseName||N.name===f.columnName)||e.data.columnsToAdd.push({table:r.table,column:f});let s=r.getColumns();for(let f of o.columns)s.some(N=>N.databaseName===f.name||N.columnName===f.name)||e.data.columnsToDrop.push({table:r.table,column:f.name});for(let f of n.indexes)o.indexes.map(g=>g.name).includes(f.name)||e.data.indexesToAdd.push({table:r.table,index:f.name});let a=r.getUniques?.()||[];for(let f of a)o.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=o.foreignKeys.map(f=>f.name);for(let f of o.indexes)f.isUnique||l.includes(f.name)||n.indexes.map(N=>N.name).includes(f.name)||e.data.indexesToDrop.push({table:r.table,index:f.name});for(let f of o.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 d=r.getChecks?.()||[];for(let f of d)o.checkConstraints.some(N=>N.name===f.name)||e.data.checksToAdd.push({table:r.table,name:f.name,expression:f.expression});let u=new Set(d.map(f=>f.name)),p=n.columns.filter(f=>Array.isArray(f.type)),m=new Set(p.map(f=>f.databaseName||f.columnName));for(let f of o.checkConstraints)if(!u.has(f.name)){let g=[...m].find(N=>new RegExp(`[\\["\\[]?${N.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i").test(f.expression));if(g){let N=p.find(R=>(R.databaseName||R.columnName)===g),q=o.columns.find(R=>R.name===g);if(N&&q?.enumValues&&Array.isArray(N.type)){let R=[...N.type].sort(),M=[...q.enumValues].sort();if(!(R.length===M.length&&R.every((P,_)=>P===M[_]))){e.data.checksToDrop.push({table:r.table,name:f.name});let P=e.sql.getDbType(),_=P==="mssql"?"[":'"',E=P==="mssql"?"]":'"',X=N.type.map(D=>`'${D.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:f.name,expression:`${_}${g}${E} IN (${X})`});}}}else e.data.checksToDrop.push({table:r.table,name:f.name});}for(let f of n.columns){let g=o.columns.find(R=>R.name===f.databaseName||R.name===f.columnName);if(!g)continue;let N=!e.areColumnsEqual(g,f,o.indexes),q=e.getDefaultChange({table:r.table,dbColumns:g,modelColumn:f});(N||q)&&e.data.columnsToModify.push({table:r.table,dbColumns:g,modelColumn:f});}for(let f of n.relations){if(f.type!=="belongsTo"&&f.type!=="manyToMany")continue;if(f.type==="manyToMany"&&f.manyToManyOptions){let q=C(f.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:q,relation:{type:"belongsTo",model:()=>r,columnName:C(f.manyToManyOptions.leftForeignKey),foreignKey:f.manyToManyOptions.leftForeignKey,constraintName:f.constraintName?C(f.constraintName):z(q,C(f.manyToManyOptions.leftForeignKey||La(r.table)),r.table),onDelete:f.onDelete,onUpdate:f.onUpdate},onDelete:f.onDelete,onUpdate:f.onUpdate});continue}let g=C(f.constraintName);if(g&&o.foreignKeys.some(q=>q.name===g))continue;o.foreignKeys.find(q=>e.relationMatchesDbRelation(r,f,q))||e.data.relationsToAdd.push({table:r.table,relation:f,onDelete:f.onDelete,onUpdate:f.onUpdate});}let c=new Set(n.relations.filter(f=>f.type==="belongsTo").map(f=>{let g=C(f.foreignKey)||f.columnName,q=r.getColumns().find(R=>R.columnName===g)?.databaseName||g;return C(f.constraintName)||z(r.table,q,f.model().table)}));for(let f of o.foreignKeys){if(f.name&&c.has(f.name))continue;n.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 n.relations){if(f.type!=="belongsTo"&&f.type!=="manyToMany")continue;let g=o.foreignKeys.find(N=>e.relationMatchesDbRelation(r,f,N));g&&!e.areRelationsEqual(g,f)&&e.data.relationsToModify.push({table:r.table,dbRelation:g,modelRelation:f,onDelete:f.onDelete,onUpdate:f.onUpdate});}let h=r.primaryKey;if(h&&!o.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[h]}),o.primaryKey&&!h&&e.data.primaryKeysToDrop.push({table:r.table,columns:o.primaryKey.columns,name:o.primaryKey.name}),h&&o.primaryKey){let f=r.getColumns().find(g=>g.columnName===h);f&&!e.arePrimaryKeysEqual(o.primaryKey,f)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:o.primaryKey,modelPrimaryKey:h});}})),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})}getSqlStatementsByPhase(){let t=new yr(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=$e(n,t.dataType),a=typeof e.type=="string"?$e(n,e.type):void 0;if(a&&o&&(o=s===a),Array.isArray(e.type)&&(n==="mysql"||n==="mariadb")){let d=[...e.type].sort(),u=t.enumValues?[...t.enumValues].sort():null;u&&o&&(o=d.length===u.length&&d.every((p,m)=>p===u[m]));}e.length!=null&&t.length!=null&&o&&(o=t.length===e.length);let l=a==="real"||a==="double"||a==="float";if(e.precision!=null&&t.precision!=null&&((n==="postgres"||n==="cockroachdb")&&l||o&&(o=t.precision===e.precision)),e.scale!=null&&t.scale!=null&&((n==="postgres"||n==="cockroachdb")&&l||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,u=t.isNullable;o=o&&d===u;}if(n==="mysql"||n==="mariadb"){if(e.unsigned!==void 0||t.unsigned!==void 0){let d=e.unsigned??false,u=t.unsigned??false;o&&(o=d===u);}if(e.zerofill!==void 0||t.zerofill!==void 0){let d=e.zerofill??false,u=t.zerofill??false;o&&(o=d===u);}}return o}areRelationsEqual(t,e){let r=C(e.constraintName),o=r?t.name===r:true;if(e.type==="belongsTo"){let d=e.model(),u=d.primaryKey||"id",p=d.getColumns().find(h=>h.columnName===u),m=d.table,c=p?.databaseName||u;o=o&&t.referencedTable===m&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===c;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let d=C(e.manyToManyOptions.throughModel);o=o&&t.referencedTable===d;}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 f=n.model();f&&f.table&&(o=f);}catch{}}if(!o)return false;let s=e.type==="belongsTo"?o.table:e.type==="manyToMany"&&e.manyToManyOptions?C(e.manyToManyOptions.throughModel):void 0;if(s&&r.referencedTable!==s)return false;let a=C(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),u=(n.type||"belongsTo")==="belongsTo"?C(n.foreignKey):n.columnName,p=l.find(f=>f.columnName===u);p&&(u=p.databaseName);let m=o.primaryKey||"id",h=o.getColumns().find(f=>f.columnName===m)?.databaseName||m;return r.columns.length===1&&r.columns[0]===u&&r.referencedColumns.length===1&&r.referencedColumns[0]===h}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=$e(e,t.dbColumns.dataType),o=typeof t.modelColumn.type=="string"?$e(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",d=typeof t.dbColumns.defaultValue=="string"&&t.dbColumns.defaultValue.includes("nextval(");if(s&&!a)return "set";if(!s&&a)return l&&d?false:"drop";if(s&&a){let u=String(t.dbColumns.defaultValue),p=String(t.modelColumn.constraints?.default),m=this.normalizeDefaultValue(e,r,u),c=this.normalizeDefaultValue(e,o||r,p);return m!==c?"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=C(o.manyToManyOptions.throughModel);if(t.has(n))continue;t.add(n);let s=this.models.find(D=>D.table===o?.manyToManyOptions?.primaryModel),a=o.model();if(!s||!a)continue;let l=s.primaryKey||"id",d=a.primaryKey||"id",u=s.getColumns().find(D=>D.columnName===l),p=a.getColumns().find(D=>D.columnName===d);if(!u||!p)continue;let m=C(o.manyToManyOptions.leftForeignKey)||l,c=C(o.manyToManyOptions.rightForeignKey)||d,h=await this.sql.getTableSchema(n);if(!h.columns.length){this.data.tablesToAdd.push({table:n,columns:[this.clonePkAsColumn(u,m),this.clonePkAsColumn(p,c)]}),this.pushM2mFkRelations({throughTable:n,leftModel:s,rightModel:a,leftFkName:m,rightFkName:c,onDelete:o.onDelete,onUpdate:o.onUpdate,constraintName:void 0});continue}let f=this.clonePkAsColumn(u,m),g=this.clonePkAsColumn(p,c),N=h.columns.find(D=>D.name===m),q=h.columns.find(D=>D.name===c),R=N?this.areColumnsEqual(N,f,h.indexes):false,M=q?this.areColumnsEqual(q,g,h.indexes):false;for(let D of h.foreignKeys){let J=D.referencedTable===s.table,Z=D.referencedTable===a.table;if(!J&&!Z)continue;let Se=J?m:c,Me=D.columns[0];Me&&Me!==Se&&(this.data.relationsToDrop.push({table:n,relation:D}),Me!==m&&Me!==c&&this.data.columnsToDrop.push({table:n,column:Me}));}let x={};R||(x[f.databaseName]=f),M||(x[g.databaseName]=x[g.databaseName]||g);for(let D of Object.keys(x))this.data.columnsToAdd.push({table:n,column:x[D]});let P=this.buildBelongsToRelation(n,()=>s,m,l,void 0,o.onDelete,o.onUpdate),_=this.buildBelongsToRelation(n,o.model,c,d,void 0,o.onDelete,o.onUpdate),E=h.foreignKeys.find(D=>D.referencedTable===s.table&&D.columns.length===1&&D.columns[0]===m),X=h.foreignKeys.find(D=>D.referencedTable===a.table&&D.columns.length===1&&D.columns[0]===c);if(!E){let D=h.foreignKeys.find(J=>J.referencedTable===s.table);D&&this.data.relationsToDrop.push({table:n,relation:D}),this.data.relationsToAdd.push(P);}if(!X){let D=h.foreignKeys.find(J=>J.referencedTable===a.table);D&&this.data.relationsToDrop.push({table:n,relation:D}),this.data.relationsToAdd.push(_);}}}}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,u=o.getColumns().find(m=>m.columnName===l)?.databaseName||l,p=C(a.constraintName)||z(o.table,u,a.model().table);s.add(p);}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(f=>f.table===o.table),a=s?.getColumns()||[],l=o.relation.columnName;o.relation.type==="belongsTo"?l=a.find(g=>g.columnName===o.relation.foreignKey)?.databaseName||o.relation.foreignKey:l=a.find(g=>g.columnName===l)?.databaseName||l;let d=o.table,u=o.relation.foreignKey;if(o.relation.type==="belongsTo"){let f=o.relation.model();d=f.table;let g=f.primaryKey||"id";u=f.getColumns().find(q=>q.columnName===g)?.databaseName||g;}let p=new Set([l,o.relation.columnName].filter(Boolean)),m=n.foreignKeys.some(f=>{if(f.columns.length!==1||f.referencedColumns.length!==1)return false;let g=p.has(f.columns[0]),N=f.referencedTable===d,q=f.referencedColumns[0]===u;return g&&N&&q}),c=C(o.relation.constraintName)||z(o.table,l,d),h=e.get(o.table)||new Set;if(m||c&&h.has(c))return null;if(o.relation.type==="manyToMany"&&o.relation.manyToManyOptions){let f=C(o.relation.manyToManyOptions.throughModel),g=C(o.relation.manyToManyOptions.leftForeignKey),N=C(o.relation.manyToManyOptions.rightForeignKey),q=o.table===f&&o.relation.columnName===g&&o.relation.model().table===s?.table,R=o.table===f&&o.relation.columnName===N&&o.relation.model().table!==s?.table,M=await this.sql.getTableSchema(f),x=M.foreignKeys.some(_=>_.columns.length===1&&_.columns[0]===g&&_.referencedTable===(s?.table||"")),P=M.foreignKeys.some(_=>_.columns.length===1&&_.columns[0]===N&&_.referencedTable===o.relation.model().table);if(q&&x||R&&P)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(d=>d.table===o.table);if(!n)return o;let s=n.getRelations(),a=n.getColumns();return s.some(d=>{if(d.type!=="belongsTo")return false;let p=a.find(g=>g.columnName===d.foreignKey)?.databaseName||d.foreignKey,m=d.model(),c=m.primaryKey||"id",f=m.getColumns().find(g=>g.columnName===c)?.databaseName||c;return o.relation.columns.length===1&&o.relation.columns[0]===p&&o.relation.referencedTable===m.table&&o.relation.referencedColumns.length===1&&o.relation.referencedColumns[0]===f})?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?C(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 nt=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 L=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 j=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 pe=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 qe=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 A=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 Ne=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 oe=class extends A{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 fe=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 cp;cp=Symbol.toStringTag;var H=class{constructor(t,e,r,o){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=o;this[cp]="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 Mf=async(i,t,e,r,o,n=false)=>{let s=Object.create(t.prototype),a=null;for(let l of Object.keys(i)){let d=i[l],u=r.get(l)?.columnName??l,p=e.has(u),m=n?true:o?o.has(u):true;if(p){if(!m)continue;if(d===null){s[u]=null;continue}let c=e.get(u);if(c?.serialize){let h=c.serialize(d);h!==null&&typeof h?.then=="function"?(a||(a=[]),a.push({key:u,promise:h})):s[u]=h;continue}s[u]=d;continue}(!n||o&&o.has(u))&&(s[u]=d);}if(a){let l=await Promise.all(a.map(d=>d.promise));for(let d=0;d<a.length;d++)s[a[d].key]=l[d];}if(o)for(let l of o)l in s||(s[l]=null);return s},Ce=async(i,t,e=[])=>{if(!i.length)return null;let r=t.getColumnsByName(),o=t.getColumnsByDatabaseName(),n=e.some(d=>d.includes("*")),s=[];for(let d of e){if(d.toLowerCase().includes(" as ")){let c=d.match(/\s+as\s+(.+)$/i);c&&s.push(c[1].trim());continue}let p=d;if(p.includes(".")&&(p=p.split(".").pop()),p==="*")continue;let m=r.get(p)?.columnName??p;s.push(m);}let a=s.length?new Set(s):null,l=await Promise.all(i.map(d=>Mf(d,t,r,o,a,n)));return l.length===1?l[0]:l};var Rf=/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/,xf=/^\d{4}-\d{2}-\d{2}$/,Fa=i=>typeof i!="string"?i:Rf.test(i)?new Date(i.replace(" ","T")+"Z"):xf.test(i)?new Date(i+"T00:00:00Z"):i,Af=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);}}),pp=async i=>{let t={};for(let e in i){let r=i[e];r&&typeof r=="object"&&r.constructor?.name==="Lob"?t[e]=await Af(r):t[e]=r;}return t};var gr=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:d=>{s=true,a=d;}};Promise.resolve(this.events.onData?.(l,n)).then(()=>{if(!r){if(s){this.push(a);return}this.push(n);}}).catch(d=>{r=true,this.emit("error",d);}).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);});}},fp=(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((d,u)=>{n.run(i,t,function(p){p&&u(p),d(this.changes);});});if(r.mode==="fetch")return new Promise((d,u)=>{n.all(i,t,(p,m)=>{p&&u(p),(!m||!m.length)&&d([]),d(m);});});let s=r?.typeofModel;if(!s)return new Promise((d,u)=>{n.run(i,t,function(p){p?u(new Error(p.message)):d(this.changes);});});let a=s.primaryKey,l=s.table;if(r.mode==="insertOne"||r.mode==="insertMany"){if(r.mode==="insertOne")return new Promise((p,m)=>{n.run(i,t,function(c){if(c)return m(c);let h=r.models&&Array.isArray(r.models)&&r.models.length?r.models[0]:null;if(!a){p([h]);return}let f=h?.[a]||this.lastID;if(!f)return m(new S("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let g=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(g,[f],(N,q)=>{if(N)return m(N);p([q]);});});});if(!Array.isArray(r.models))throw new S("SqlRunnerUtils::massiveInsert models should be an array, report to the maintainers.","DEVELOPMENT_ERROR");let d=r.models;if(!a)return new Promise((p,m)=>{n.run(i,t,function(c){if(c)return m(c);p(d);});});let u=[];return new Promise(async(p,m)=>{try{let c=d.map(async h=>{let f=new y(s),{columns:g,values:N}=await f.prepareColumns(Object.keys(h),Object.values(h),"insert"),q=Object.fromEntries(g.map((P,_)=>[P,N[_]])),R=new T(s,e.getDbType()),{sql:M,bindings:x}=R.parse([new j(new L(s.table),[q])]);return new Promise((P,_)=>{n.run(M,x,function(E){if(E)return _(E);let X=h[a]||this.lastID;if(!X)return _(new S("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let D=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(D,[X],(J,Z)=>{if(J)return _(J);P(Z);});});})});u=await Promise.all(c),p(u);}catch(c){m(c);}})}return new Promise((d,u)=>{n.run(i,t,function(p){p?u(new Error(p.message)):d(this.changes);});})};var F=async(i,t,e,r,o="rows",n)=>{switch(n?.shouldNotLog||te(i,e.logs,t,e.inputDetails.queryFormatOptions,r),r){case "mysql":case "mariadb":let s=e.sqlConnection??e.getPool(),a=await St(()=>s.query(i,t),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?a[0].affectedRows:o==="raw"?a:a[0];case "postgres":case "cockroachdb":let l=e.sqlConnection??e.getPool(),d=0,u=i.replace(/\?/g,()=>`$${++d}`),p=await St(()=>l.query(u,t),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="rows"?p.rows:o==="raw"?p:p.rowCount;case "sqlite":let m=await St(()=>fp(i,t,e,{typeofModel:n?.sqlLiteOptions?.typeofModel,mode:n?.sqlLiteOptions?.mode||"fetch",models:n?.sqlLiteOptions?.models}),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="raw"?Array.isArray(m)?m:[m]:m;case "mssql":let c=e.getPool(),h=e.sqlConnection?e.sqlConnection.request():c.request();t.forEach((x,P)=>{h.input(`p${P}`,x);});let f=0,g=i.replace(/\?|@(\d+)/g,()=>`@p${f++}`),N=await St(()=>h.query(g),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?N.rowsAffected[0]:o==="raw"?N:N.recordset;case "oracledb":let q=4002,R=null,M=!!e.sqlConnection;try{R=e.sqlConnection?e.sqlConnection:await e.getConnection();let x=t.map(Fa),P=0,_=i.replace(/\?/g,()=>`:${++P}`),E=await St(()=>R.execute(_,x,{outFormat:q,autoCommit:!M}),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?E.rowsAffected:o==="raw"?E:await Promise.all(E.rows?.map(async D=>{let J=await pp(D),Z={};for(let Se in J)Z[Se.toLowerCase()]=J[Se];return Z})??[])}finally{R&&!M&&await R.close();}default:throw new S("ExecSql",`UNSUPPORTED_DATABASE_TYPE_${r}`)}},Tr=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}),u=a.connection.query(i,t).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),p=0,m=false,c=false,h=()=>{try{a.release();}catch{}};return u.on("data",f=>{if(o.onData){p++,Promise.resolve(o.onData(l,f)).then(()=>{p--,m&&p===0&&!c&&(h(),l.end());}).catch(g=>{c=true,h(),l.destroy(g);});return}l.write(f);}),u.on("end",()=>{m=true,p===0&&!c&&(h(),l.end());}),u.on("error",f=>{c=true,h(),l.destroy(f);}),l.on("close",()=>{h();}),l}case "cockroachdb":case "postgres":{let s=e.getPool(),a=e.sqlConnection??await s.connect(),l=await import('pg-query-stream').catch(()=>{throw new B("pg-query-stream")}),d=new PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),u=0,p=i.replace(/\?/g,()=>`$${++u}`),m=new l.default(p,t,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),c=a.query(m),h=0,f=false,g=false,N=q=>{try{a.release(q);}catch{}};return c.on("data",q=>{if(o.onData){h++,Promise.resolve(o.onData(d,q)).then(()=>{h--,f&&h===0&&!g&&(N(),d.end());}).catch(R=>{g=true,N(R),d.destroy(R);});return}d.write(q);}),c.on("end",()=>{f=true,h===0&&!g&&(N(),d.end());}),c.on("error",q=>{g=true,N(q),d.destroy(q);}),d}case "sqlite":{let s=e.sqlConnection??e.getPool();return new gr(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((h,f)=>{l.input(`p${f}`,h);});let d=0,u=i.replace(/\?|@(\d+)/g,()=>`@p${d++}`),p=0,m=false,c=false;return l.on("row",h=>{if(!c){if(o.onData){p++,Promise.resolve(o.onData(a,h)).then(()=>{p--,m&&p===0&&!c&&a.end();}).catch(f=>{c=true,a.destroy(f);});return}a.write(h);}}),l.on("error",h=>{c=true,a.destroy(h);}),l.on("done",()=>{m=true,p===0&&!c&&a.end();}),l.query(u),a}case "oracledb":{let s=e.getPool(),a=e.sqlConnection??await s.getConnection(),l=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),d=4002,u=0,p=i.replace(/\?/g,()=>`:${++u}`),m=t.map(Fa),c=a.queryStream(p,m,{outFormat:d}),h=0,f=false,g=false,N=async()=>{try{await a.close();}catch{}};return c.on("data",q=>{if(g)return;let R={};for(let M in q)R[M.toLowerCase()]=q[M];if(o.onData){h++,Promise.resolve(o.onData(l,R)).then(()=>{h--,f&&h===0&&!g&&(N(),l.end());}).catch(M=>{g=true,N(),l.destroy(M);});return}l.write(R);}),c.on("end",()=>{f=true,h===0&&!g&&(N(),l.end());}),c.on("error",q=>{g=true,N(),l.destroy(q);}),l}default:throw new S("ExecSqlStreaming",`UNSUPPORTED_DATABASE_TYPE_${n}`)}};async function St(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++,nl(`Retrying sql in ${n}ms (attempt ${r}/${o})`,"info",e),await new Promise(l=>setTimeout(l,n)),s();throw a}}return s()}var W=(i,t="millis",e=3)=>async(...r)=>{let o=performance.now(),n=await i(...r),s=performance.now()-o;return [(t==="millis"?s:s/1e3).toFixed(e),n]};var st=class{};st.modelCaseConvention="camel",st.databaseCaseConvention="snake";Be.extend(If);Be.extend(Df);Be.extend($f);var it=(i=new Date)=>Be(i).utc().format("YYYY-MM-DD HH:mm:ss");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 Nr=class extends Te{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var Sr=class extends Te{constructor(e,r,o){super(e,r);this.type="hasMany";this.foreignKey=o,this.type="hasMany";}};var wr=class extends Te{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var qr=class extends Te{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 Np(i){try{return G.getMetadata(lr,i.prototype)||[]}catch{return []}}function Sp(i){return G.getMetadata(Wa,i.prototype)||[]}function wp(i){return (G.getMetadata(Wa,i.prototype)||[]).map(e=>{let{type:r,model:o,columnName:n,foreignKey:s}=e,a=C(s),l=o();switch(r){case "belongsTo":return new Nr(l,n,a);case "hasOne":return new wr(l,n,a);case "hasMany":return new Sr(l,n,a);case "manyToMany":if(!e.manyToManyOptions)throw new S("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let d=o();return new qr(d,n,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:C(e.manyToManyOptions.throughModel),leftForeignKey:C(e.manyToManyOptions.leftForeignKey),rightForeignKey:C(e.manyToManyOptions.rightForeignKey)});default:throw new S("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function qp(i){return G.getMetadata(rt,i)||G.getMetadata(rt,i.prototype)}function Cp(i){return G.getMetadata(sp,i.prototype)||[]}function _p(i){return G.getMetadata(ip,i.prototype)||[]}function Mp(i){return G.getMetadata(ap,i.prototype)||[]}var ae=class{};ae.columns=new WeakMap,ae.byName=new WeakMap,ae.byDatabaseName=new WeakMap;var at=class extends st{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 qp(this)}constructor(t){if(super(),t)for(let e in t)Object.assign(this,{[e]:t[e]});}static getColumns(){let t=ae.columns.get(this);return t||(t=Np(this),ae.columns.set(this,t)),t}static getColumnsByName(){let t=ae.byName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.columnName,e])),ae.byName.set(this,t)),t}static getColumnsByDatabaseName(){let t=ae.byDatabaseName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.databaseName,e])),ae.byDatabaseName.set(this,t)),t}static getRelations(){return Sp(this)}static getIndexes(){return Cp(this)}static getUniques(){return _p(this)}static getChecks(){return Mp(this)}};at.softDeleteColumn="deletedAt",at.softDeleteValue=it();var qt=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=wp(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 Cr(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}}function Rp(i,t){return {perPage:i,total:t,firstPage:1,isEmpty:t===0}}var lt=i=>typeof i=="number"?i:parseFloat(i);var le=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 Ke=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 _r=class extends w{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var Mr=class extends w{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var De=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 se=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 Ct=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 Rr=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 _t=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 Pr=class Pr{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=Pr.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 Ct(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Ct(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new _t(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new _t(t,"asc",true)),this}limit(t){return typeof t!="number"&&b.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new Rr(t),this}offset(t){return typeof t!="number"&&b.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new xr(t),this}};Pr.EMPTY_MAP=new Map;var Ar=Pr;var We=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 A(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 A(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 A(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 A(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 A(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 A(t,"and",false,"between",[e,r])),this}orWhereBetween(t,e,r){return this.whereNodes.push(new A(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 A(t,"and",true,"between",[e,r])),this}orWhereNotBetween(t,e,r){return this.whereNodes.push(new A(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 A(t,"and",false,"in",e)),this):(this.whereNodes.push(new A("false","and",true,"=",[],true)),this)}orWhereIn(t,e){return e.length?(this.whereNodes.push(new A(t,"or",false,"in",e)),this):(this.whereNodes.push(new A("false","or",true,"=",[],true)),this)}whereNotIn(t,e){return this.andWhereNotIn(t,e)}andWhereNotIn(t,e){return e.length?(this.whereNodes.push(new A(t,"and",true,"in",e)),this):(this.whereNodes.push(new A("true","and",true,"=",[],true)),this)}orWhereNotIn(t,e){return e.length?(this.whereNodes.push(new A(t,"or",true,"in",e)),this):(this.whereNodes.push(new A("true","or",true,"=",[],true)),this)}whereNull(t){return this.andWhereNull(t)}andWhereNull(t){return this.whereNodes.push(new A(t,"and",false,"is null",void 0)),this}orWhereNull(t){return this.whereNodes.push(new A(t,"or",false,"is null",void 0)),this}whereNotNull(t){return this.andWhereNotNull(t)}andWhereNotNull(t){return this.whereNodes.push(new A(t,"and",false,"is not null",void 0)),this}orWhereNotNull(t){return this.whereNodes.push(new A(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 A(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 A(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 A(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 A(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 Ne(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 Ne(r,"or")),this}whereRaw(t,e){return this.andWhereRaw(t,e)}andWhereRaw(t,e){return this.whereNodes.push(new A(t,"and",true,"=",e??[],true)),this}orWhereRaw(t,e){return this.whereNodes.push(new A(t,"or",true,"=",e??[],true)),this}};var $r=class extends Ar{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new se(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new se(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new se(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new se(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new se(t,"","","cross",{operator:"="},true)),this}naturalJoinRaw(t){return this.joinNodes.push(new se(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 d;if(l){let u=new We(this.sqlDataSource);l(u),d=u.getConditions();}return this.joinNodes.push(new se(typeof t=="string"?t:t.table,e,s,"inner",{operator:a||"="},false,d)),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 d;if(l){let u=new We(this.sqlDataSource);l(u),d=u.getConditions();}return this.joinNodes.push(new se(typeof t=="string"?t:t.table,e,s,"left",{operator:a||"="},false,d)),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 d;if(l){let u=new We(this.sqlDataSource);l(u),d=u.getConditions();}return this.joinNodes.push(new se(typeof t=="string"?t:t.table,e,s,"right",{operator:a||"="},false,d)),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 d;if(l){let u=new We(this.sqlDataSource);l(u),d=u.getConditions();}return this.joinNodes.push(new se(typeof t=="string"?t:t.table,e,s,"full",{operator:a||"="},false,d)),this}};var Dr=class extends $r{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.dbType=r.getDbType(),this.fromNode=new L(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return e.forEach(r=>{if(Array.isArray(r)){let[s,a]=r;this.modelSelectedColumns.push(a);let l=V(s,this.model.databaseCaseConvention);this.selectNodes.push(new le(l,a));return}let o=r;this.modelSelectedColumns.push(o);let n=V(o,this.model.databaseCaseConvention);this.selectNodes.push(new le(n));}),this}selectRaw(e){return this.selectNodes.push(new le(e,void 0,void 0,true)),this}selectFunc(e,r,o){let n=r==="*"?"*":V(r,this.model.databaseCaseConvention);return this.selectNodes.push(new le(`${e.toLowerCase()}(${n}) as ${o}`,void 0,void 0,true)),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}clearFrom(){return this.fromNode=new L(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new L(e),this}distinct(){return this.distinctNode=new _r,this}distinctOn(...e){return this.distinctOnNode=new Mr(e),this}selectJson(e,r,o){return this.selectNodes.push(new De(e,r,o,"extract")),this}selectJsonText(e,r,o){return this.selectNodes.push(new De(e,r,o,"extract_text")),this}selectJsonArrayLength(e,r,o){return this.selectNodes.push(new De(e,r,o,"array_length")),this}selectJsonKeys(e,r,o){return this.selectNodes.push(new De(e,r,o,"object_keys")),this}selectJsonRaw(e,r){return this.selectNodes.push(new De(e,"",r,"raw",true)),this}};var Ir=class extends Dr{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 k&&o===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof k||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 k&&o===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 k&&o===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 A(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 A(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 k&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 k&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 k&&o===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof k||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof k)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new A(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 A(e,"and",false,"between",[r,o])),this}orWhereBetween(e,r,o){return this.whereNodes.push(new A(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 A(e,"and",true,"between",[r,o])),this}orWhereNotBetween(e,r,o){return this.whereNodes.push(new A(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 A(e,"and",false,"in",r)),this):(this.whereNodes.push(new A("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new A(e,"or",false,"in",r)),this):(this.whereNodes.push(new A("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 A(e,"and",true,"in",r)),this):(this.whereNodes.push(new A("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new A(e,"or",true,"in",r)),this):(this.whereNodes.push(new A("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new A(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new A(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new A(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new A(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 A(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 A(e,"or",false,o?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new A(e,"and",true,o?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new A(e,"and",true,o?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new A(e,"or",true,o?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new fe("","exists",r.extractQueryNodes(),"and")),this}orWhereExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new fe("","exists",r.extractQueryNodes(),"or")),this}whereNotExists(e){return this.andWhereNotExists(e)}andWhereNotExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new fe("","not exists",r.extractQueryNodes(),"and")),this}orWhereNotExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new fe("","not exists",r.extractQueryNodes(),"or")),this}whereRaw(e,r=[]){return this.andWhereRaw(e,r)}andWhereRaw(e,r=[]){return this.whereNodes.push(new A(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new A(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 Ke(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 Ke(e,"or",false,n,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Ke(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Ke(e,"or",false,"=",[],true)),this}buildSubQuery(e){if(e instanceof k)return e;let r=new k(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 fe(e,r,n.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,o){let n=this.buildSubQuery(o);return this.whereNodes.push(new fe(e,r,n.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new k(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new Ne(r.whereNodes,"and");return this.whereNodes.push(o),this}orWhereGroup(e){let r=new k(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new Ne(r.whereNodes,"or");return this.whereNodes.push(o),this}};var Or=class extends Ir{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new oe(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new oe(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new oe(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new oe(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new oe(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new oe(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new oe(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new oe(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new oe(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new oe(t,"or",false,"raw",e)),this}};var k=class i extends Or{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.performance={many:this.manyWithPerformance.bind(this),one:this.oneWithPerformance.bind(this),oneOrFail:this.oneOrFailWithPerformance.bind(this),paginate:this.paginateWithPerformance.bind(this),paginateWithCursor:this.paginateWithCursorWithPerformance.bind(this),exists:this.existsWithPerformance.bind(this),truncate:this.truncateWithPerformance.bind(this),delete:this.deleteWithPerformance.bind(this),insert:this.insertWithPerformance.bind(this),insertMany:this.insertManyWithPerformance.bind(this),update:this.updateWithPerformance.bind(this),softDelete:this.softDeleteWithPerformance.bind(this),pluck:this.pluckWithPerformance.bind(this)};this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.astParser=new T(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 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 le(a.extractQueryNodes(),o)),this}return this.selectNodes.push(new le(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=>F(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 Tr(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,o){let n=this.clone();this.orderByNodes.length||this.orderBy(r.discriminator,r.orderBy||"asc"),o&&this.where(o.key,r.operator||">",o.value),this.limit(e);let[s,a]=await this.executePaginateQueries(()=>this.many(),()=>n.getCount()),l=s[s.length-1],d=l?l[r.discriminator]:null;return [{paginationMetadata:Rp(e,a),data:s},{key:r.discriminator,value:d}]}lockForUpdate(e={}){return this.lockQueryNodes.push(new Nt("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new Nt("for_share",e.skipLocked,e.noWait)),this}union(e){if(typeof e=="string")return this.unionNodes.push(new ve(e)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new ve(o)),this}unionAll(e){if(typeof e=="string")return this.unionNodes.push(new ve(e,true)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new ve(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.clearForFunctions(),this.selectRaw(`count(${e}) as total`);let r=await this.one();return r?lt(r.total):0}async getMax(e){this.clearForFunctions(),this.selectRaw(`max(${e}) as total`);let r=await this.one();return r?lt(r.total):0}async getMin(e){this.clearForFunctions(),this.selectRaw(`min(${e}) as total`);let r=await this.one();return r?lt(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectRaw(`avg(${e}) as total`);let r=await this.one();return r?lt(r.total):0}async getSum(e){this.clearForFunctions(),this.selectRaw(`sum(${e}) as total`);let r=await this.one();return r?lt(r.total):0}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&b.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:Cr(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 L(a,r),this}return this.fromNode=new L(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 ot("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 ot("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 ot("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 j(this.fromNode,[o],r,n),new H(()=>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((c,h)=>[c,a[h]]));this.insertNode=new j(this.fromNode,[l],r,n);let{sql:d,bindings:u}=this.astParser.parse([this.insertNode]),p=await this.getSqlDataSource("write"),m=await F(d,u,p,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=>Object.fromEntries(Object.keys(s).map(a=>[a,s[a]]))),n=!r||r.length===0;return this.insertNode=new j(this.fromNode,o,r,n),new H(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{if(!e.length)return n?void 0:[];let s=await Promise.all(e.map(async p=>{let{columns:m,values:c}=await this.interpreterUtils.prepareColumns(Object.keys(p),Object.values(p),"insert");return Object.fromEntries(m.map((h,f)=>[h,c[f]]))}));this.insertNode=new j(this.fromNode,s,r,n);let{sql:a,bindings:l}=this.astParser.parse([this.insertNode]),d=await this.getSqlDataSource("write"),u=await F(a,l,d,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:s}});if(!n)return u})}upsert(e,r,o={updateOnConflict:true}){let n=Object.keys(e),s=Object.keys(r),a=Object.fromEntries(Object.keys(e).map(l=>[l,e[l]]));return this.insertNode=new j(new L(this.model.table),[a],void 0,true),this.onDuplicateNode=new pe(this.model.table,s,n,o.updateOnConflict??true?"update":"ignore",o.returning),new H(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:d}=await this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert"),u=Object.fromEntries(l.map((f,g)=>[f,d[g]]));if(this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw([u],s,n,o,[e]);let{sql:p,bindings:m}=this.astParser.parse([new j(new L(this.model.table),[u],void 0,true),new pe(this.model.table,s,n,o.updateOnConflict??true?"update":"ignore",o.returning)]),c=await this.getSqlDataSource("write"),h=await F(p,m,c,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:[e]}});return Array.isArray(h)?h:[h]})}upsertMany(e,r,o,n={updateOnConflict:true}){let s=o.map(a=>Object.fromEntries(Object.keys(a).map(l=>[l,a[l]])));return this.insertNode=new j(new L(this.model.table),s,void 0,true),this.onDuplicateNode=new pe(this.model.table,e,r,n.updateOnConflict??true?"update":"ignore",n.returning),new H(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let a=[];if(await Promise.all(o.map(async m=>{let{columns:c,values:h}=await this.interpreterUtils.prepareColumns(Object.keys(m),Object.values(m),"insert"),f=Object.fromEntries(c.map((g,N)=>[g,h[N]]));a.push(f);})),this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw(a,e,r,n,o);let{sql:l,bindings:d}=this.astParser.parse([new j(new L(this.model.table),a,void 0,true),new pe(this.model.table,e,r,n.updateOnConflict??true?"update":"ignore",n.returning)]),u=await this.getSqlDataSource("write"),p=await F(l,d,u,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});return Array.isArray(p)?p:[p]})}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),d=E=>this.interpreterUtils.formatStringColumn("mssql",E),u=[],p=e.map(E=>`select ${a.map(D=>(u.push(E[D]),`@${u.length}`)).join(", ")}`),m=a.map(d).join(", "),c=p.join(" union all "),h=r.map(E=>`target.${d(E)} = source.${d(E)}`).join(" and "),f=o.filter(E=>!r.includes(E)).map(E=>`target.${d(E)} = source.${d(E)}`).join(", "),g=a.map(d).join(", "),N=a.map(E=>`source.${d(E)}`).join(", "),q=n.returning&&n.returning.length?n.returning.map(E=>`inserted.${d(E)}`).join(", "):a.map(E=>`inserted.${d(E)}`).join(", "),M=(n.updateOnConflict??true)&&f?`when matched then update set ${f}`:"",x=`merge into ${l} as target using (${c}) as source (${m}) on ${h} ${M} when not matched then insert (${g}) values (${N}) output ${q};`,P=await this.getSqlDataSource("write"),_=await F(x,u,P,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(_)?_:[_]}update(e,r){let o=Object.keys(e),n=Object.values(e);this.updateNode=new qe(this.fromNode,o,n,false,r);let s=r&&r.length>0;return new H(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:a,values:l}=await this.interpreterUtils.prepareColumns(o,n,"update");this.updateNode=new qe(this.fromNode,a,l,false,r);let{sql:d,bindings:u}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),p=await this.getSqlDataSource("write");return F(d,u,p,this.dbType,s?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:s?"fetch":"affectedRows"}})})}truncate(){return this.truncateNode=new tt(this.fromNode),new H(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:e,bindings:r}=this.astParser.parse([this.truncateNode]),o=await this.getSqlDataSource("write");await F(e,r,o,this.dbType,"rows");})}delete(e){this.deleteNode=new nt(this.fromNode,false,e);let r=e&&e.length>0;return new H(()=>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 F(o,n,s,this.dbType,r?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:r?"fetch":"affectedRows"}})})}softDelete(e={}){let{column:r="deletedAt",value:o=it()}=e||{};return this.updateNode=new qe(this.fromNode,[r],[o]),new H(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:n,values:s}=await this.interpreterUtils.prepareColumns([r],[o],"update");this.updateNode=new qe(this.fromNode,n,s);let{sql:a,bindings:l}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),d=await this.getSqlDataSource("write");return F(a,l,d,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return Fe(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),o=Ve(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${o}`:o,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new le("*")]);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=K(this.modelSelectedColumns),e.distinctNode=K(this.distinctNode),e.distinctOnNode=K(this.distinctOnNode),e.selectNodes=K(this.selectNodes),e.withQuery=K(this.withQuery),e.joinNodes=K(this.joinNodes),e.whereNodes=K(this.whereNodes),e.groupByNodes=K(this.groupByNodes),e.havingNodes=K(this.havingNodes),e.orderByNodes=K(this.orderByNodes),e.lockQueryNodes=K(this.lockQueryNodes),e.unionNodes=K(this.unionNodes),e.withNodes=K(this.withNodes),e.fromNode=K(this.fromNode),e.limitNode=K(this.limitNode),e.offsetNode=K(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 le("*")]),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}async manyWithPerformance(e="millis"){let[r,o]=await W(this.many.bind(this),e)();return {data:o,time:Number(r)}}async oneWithPerformance(e="millis"){let[r,o]=await W(this.one.bind(this),e)();return {data:o,time:Number(r)}}async firstOrFailWithPerformance(e="millis"){return this.oneOrFailWithPerformance(e)}async paginateWithPerformance(e,r,o="millis"){let[n,s]=await W(this.paginate.bind(this,e,r),o)();return {data:s,time:Number(n)}}async paginateWithCursorWithPerformance(e,r,o,n="millis"){let[s,a]=await W(this.paginateWithCursor.bind(this,e,r,o),n)();return {data:a,time:Number(s)}}async oneOrFailWithPerformance(e="millis"){let[r,o]=await W(this.oneOrFail.bind(this),e)();return {data:o,time:Number(r)}}async existsWithPerformance(e="millis"){let[r,o]=await W(this.exists.bind(this),e)();return {data:o,time:Number(r)}}async pluckWithPerformance(e,r="millis"){let[o,n]=await W(this.pluck.bind(this,e),r)();return {data:n,time:Number(o)}}async updateWithPerformance(e,r="millis"){let[o,n]=await W(this.update.bind(this,e),r)();return {data:n,time:Number(o)}}async insertWithPerformance(e,r="millis"){let[o,n]=await W(this.insert.bind(this,e),r)();return {data:n,time:Number(o)}}async insertManyWithPerformance(e,r="millis"){let[o,n]=await W(this.insertMany.bind(this,e),r)();return {data:n,time:Number(o)}}async softDeleteWithPerformance(e={},r="millis"){let[o,n]=await W(this.softDelete.bind(this,e),r)();return {data:n,time:Number(o)}}async deleteWithPerformance(e="millis"){let[r,o]=await W(this.delete.bind(this),e)();return {data:o,time:Number(r)}}async truncateWithPerformance(e="millis"){let[r,o]=await W(this.truncate.bind(this),e)();return {data:o,time:Number(r)}}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 xp(i,t){return t.strategy&&t.strategy!=="auto"?t.strategy:dy(i)}function dy(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 dt=class i extends k{constructor(e,r){super(e,r);this.loadOptions={strategy:"auto"};this.performance={many:this.manyWithPerformance.bind(this),one:this.oneWithPerformance.bind(this),oneOrFail:this.oneOrFailWithPerformance.bind(this),paginate:this.paginateWithPerformance.bind(this),exists:this.existsWithPerformance.bind(this),paginateWithCursor:this.paginateWithCursorWithPerformance.bind(this),truncate:this.truncateWithPerformance.bind(this),delete:this.deleteWithPerformance.bind(this),update:this.updateWithPerformance.bind(this),softDelete:this.softDeleteWithPerformance.bind(this),pluck:this.pluckWithPerformance.bind(this),insert:this.insertWithPerformance.bind(this),insertMany:this.insertManyWithPerformance.bind(this)};this.sqlModelManagerUtils=new qt(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 Ce(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 Tr(r,o,n,e,{onData:async(a,l)=>{let d=this.addAdditionalColumnsToModel(l),u=await Ce([d],this.model,this.modelSelectedColumns);u&&(e.ignoreHooks?.includes("afterFetch")||await this.model.afterFetch?.([u]),this.relationQueryBuilders.length&&await this.processRelationsRecursively([u]),a.write(u));}})}async paginateWithCursor(e,r,o){if(!r){if(!this.model.primaryKey)throw new S(this.model.name+"::paginateWithCursor","PRIMARY_KEY_NOT_FOUND");r={discriminator:this.model.primaryKey};}return super.paginateWithCursor(e,r,o)}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(d=>Array.isArray(d)?d[0]:d)}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;return new Ie(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=V(a.leftForeignKey,s.caseConvention||this.model.databaseCaseConvention),d=V(a.rightForeignKey,s.caseConvention||this.model.databaseCaseConvention),u=o.map((c,h)=>({[l]:r[this.model.primaryKey],[d]:c[a.model.primaryKey],...n?n(c,h):{}}));class p extends at{static get table(){return a.throughModel}}p.databaseCaseConvention="preserve",p.modelCaseConvention="preserve",await new Ie(p,s.trx?s.trx.sql:this.sqlDataSource).insertMany(u);}truncate(){return super.truncate()}update(e,r={}){let o=r.returning,n=super.update(e,o);return new H(()=>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 H(()=>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 H(()=>o.unWrap(),()=>o.toSql(),()=>o.toQuery(),async()=>(e.ignoreBeforeDeleteHook||await this.model.beforeDelete?.(this),o))}async getCount(e="*",r={ignoreHooks:false}){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);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,d]=await this.executePaginateQueries(()=>s.many({ignoreHooks:a}),()=>n.getCount("*",{ignoreHooks:o.ignoreHooks}));return {paginationMetadata:Cr(e,r,d),data:l}}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof k)&&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),d=new i(l.model,this.sqlDataSource);d.relation=l;let u=this.getRelatedModelsQueryForRelation(d,l,[]);return u.clearWhere(),u.clearSelect(),u.selectRaw("1"),a?.(u),this.applyHavingRelatedFilter(u,l,s,n),this.whereExists(u),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),d=new i(l.model,this.sqlDataSource);d.relation=l;let u=this.getRelatedModelsQueryForRelation(d,l,[]);return u.clearWhere(),u.clearSelect(),u.selectRaw("1"),a?.(u),this.applyHavingRelatedFilter(u,l,s,n),this.orWhereExists(u),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),d=new i(l.model,this.sqlDataSource);d.relation=l;let u=this.getRelatedModelsQueryForRelation(d,l,[]);return u.clearWhere(),u.clearSelect(),u.selectRaw("1"),a?.(u),this.applyHavingRelatedFilter(u,l,s,n),this.whereNotExists(u),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),d=new i(l.model,this.sqlDataSource);d.relation=l;let u=this.getRelatedModelsQueryForRelation(d,l,[]);return u.clearWhere(),u.clearSelect(),u.selectRaw("1"),a?.(u),this.applyHavingRelatedFilter(u,l,s,n),this.orWhereNotExists(u),this}clone(){let e=super.clone();return e.relationQueryBuilders=K(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=xp({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(K(s));else for(let[s]of this.model.getColumnsByDatabaseName())n.selectRaw(`${this.model.table}.${s}`);for(let s of this.whereNodes){let a=K(s);this.qualifyWhereNodeColumns(a,this.model.table),n.whereNodes.push(a);}for(let s of this.groupByNodes)n.groupByNodes.push(K(s));for(let s of this.orderByNodes)n.orderByNodes.push(K(s));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(n.limitNode=K(this.limitNode)),this.offsetNode&&(n.offsetNode=K(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(K(s));for(let s of e.orderByNodes)n.orderByNodes.push(K(s));return n}selectRelationColumnsWithAlias(e,r,o,n){let s=r.columnName,a=r.model,l=a.getColumnsByName(),d=a.getColumnsByDatabaseName(),u=o.selectNodes.filter(m=>typeof m.column=="string"),p=u.some(m=>m.column==="*"||m.column.endsWith(".*"));if(u.length===0||p)for(let[m,c]of d)e.selectRaw(`${a.table}.${m} as ${s}${n}${c.columnName}`);else for(let m of u){let c=m.column,h=c.includes(".")?c.split(".").pop():c,f=d.get(h)||l.get(h),g=f?.databaseName??h,N=m.alias??f?.columnName??h;e.selectRaw(`${a.table}.${g} as ${s}${n}${N}`);}}mapJoinedResultsToModels(e,r,o,n){let{columnName:s,type:a}=o,l=o.model.getColumnsByName();if(a==="hasMany"||a==="manyToMany"){let d=new Map;e.forEach(u=>{let p=u[this.model.primaryKey];d.has(p)||d.set(p,[]);let m=this.extractRelationDataFromRow(u,s,n);m&&(this.serializeRelationData(m,l),d.get(p).push(m));}),r.forEach(u=>{let p=u[this.model.primaryKey];u[s]=d.get(p)||[];});}else {let d=new Map;e.forEach(u=>{let p=u[this.model.primaryKey];if(!d.has(p)){let m=this.extractRelationDataFromRow(u,s,n);m&&(this.serializeRelationData(m,l),d.set(p,m));}}),r.forEach(u=>{let p=u[this.model.primaryKey];u[s]=d.get(p)||null;});}}extractRelationDataFromRow(e,r,o){let n=`${r}${o}`,s={},a=false,l=false;for(let d of Object.keys(e))if(d.startsWith(n)){let u=d.substring(n.length);s[u]=e[d],a=true,e[d]!==null&&e[d]!==void 0&&(l=true);}return a&&l?s:null}qualifyWhereNodeColumns(e,r){if(e instanceof A)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof fe)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof Ne)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 c=m[e.foreignKey];c&&n.set(String(c),m);}),r.forEach(m=>{let c=m[this.model.primaryKey];if(!c){m[e.columnName]=null;return}let h=n.get(String(c));m[e.columnName]=h||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 c=m[e.model.primaryKey];c&&s.set(String(c),m);}),r.forEach(m=>{let c=m[e.foreignKey];if(!c){m[e.columnName]=null;return}let h=s.get(String(c));m[e.columnName]=h||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 c=m[e.foreignKey];if(!c)return;let h=String(c);a.has(h)||a.set(h,[]),a.get(h).push(m);}),r.forEach(m=>{let c=m[this.model.primaryKey];if(!c){m[e.columnName]=[];return}let h=a.get(String(c))||[];m[e.columnName]=h;});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,d=new Map,u=l.leftForeignKey,p=this.modelColumnsMap.get(u)||this.modelColumnsDatabaseNames.get(u)||V(u,this.model.modelCaseConvention);o.forEach(m=>{let c=m[p];if(c==null)return;let h=String(c);d.has(h)||d.set(h,[]),delete m[p],d.get(h).push(m);}),r.forEach(m=>{let c=m[this.model.primaryKey];if(!c){m[e.columnName]=[];return}let h=d.get(String(c))||[];m[e.columnName]=h;});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=_e.randomBytes(6).toString("hex"),d=`${r.model.table}_cte_${l}`,u=e.orderByNodes.map(_=>_.isRawValue?_.column:`${this.interpreterUtils.formatStringColumn(this.dbType,_.column)} ${_.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let p=e.with(d,_=>_.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${u}) as rn_${l}`).whereIn(r.foreignKey,n));s&&p.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&p.whereRaw(`rn_${l} > ${a}`);let m=e.modelSelectedColumns.map(_=>mo(_,d,e.model.table));return p.select(...m).table(d);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new S(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let c=r;if(!o.length)return e;let h=e.limitNode?.limit,f=e.offsetNode?.offset,g=e.modelSelectedColumns.length?e.modelSelectedColumns.map(_=>_.includes(".")?_:`${r.model.table}.${_}`):[`${r.model.table}.*`];if(!h&&!f)return e.select(...g).select([`${c.throughModel}.${c.leftForeignKey}`,c.leftForeignKey]).leftJoin(c.throughModel,`${c.relatedModel}.${c.model.primaryKey}`,`${c.throughModel}.${c.rightForeignKey}`).whereIn(`${c.throughModel}.${c.leftForeignKey}`,n);let N=_e.randomBytes(6).toString("hex"),q=`${r.model.table}_cte_${N}`,R=e.orderByNodes.map(_=>{if(_.isRawValue)return _.column;let E=_.column.includes(".")?_.column:`${r.model.table}.${_.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,E)} ${_.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let M=`${_e.randomBytes(6).toString("hex")}_left_foreign_key`,x=e.with(q,_=>_.select(...g).select([`${c.throughModel}.${c.leftForeignKey}`,M]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${c.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,c.leftForeignKey)} ORDER BY ${R}) as rn_${N}`).leftJoin(c.throughModel,`${c.relatedModel}.${c.model.primaryKey}`,`${c.throughModel}.${c.rightForeignKey}`).whereIn(`${c.throughModel}.${c.leftForeignKey}`,n));h&&x.whereRaw(`rn_${N} <= ${h+(f||0)}`),f&&x.whereRaw(`rn_${N} > ${f}`);let P=g.map(_=>mo(_,q,e.model.table));return x.select(...P).select([`${q}.${M}`,c.leftForeignKey]).table(q);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 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 S(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");let d=s.formatStringColumn(l,`${r.model.table}.${r.foreignKey}`),u=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${d} = ${u}`),o&&typeof n=="number"&&e.groupByRaw(d).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 d=s.formatStringColumn(l,`${r.model.table}.${r.model.primaryKey}`),u=a.formatStringColumn(l,`${this.model.table}.${r.foreignKey}`);e.whereRaw(`${d} = ${u}`),o&&typeof n=="number"&&e.groupByRaw(d).andHavingRaw(`count(*) ${o} ${n}`);return}case "manyToMany":{let d=r;if(!this.model.primaryKey||!r.model.primaryKey)throw new S(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");e.joinNodes?.some(c=>!c.isRawValue&&c.table===d.throughModel&&c.type==="left")||e.leftJoin(d.throughModel,`${d.relatedModel}.${r.model.primaryKey}`,`${d.throughModel}.${d.rightForeignKey}`);let p=a.formatStringColumn(l,`${d.throughModel}.${d.leftForeignKey}`),m=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${p} = ${m}`),o&&typeof n=="number"&&e.groupByRaw(p).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}async manyWithPerformance(e={},r="millis"){let[o,n]=await W(this.many.bind(this,e),r)();return {data:n,time:Number(o)}}async oneWithPerformance(e={},r="millis"){let[o,n]=await W(this.one.bind(this,e),r)();return {data:n,time:Number(o)}}async oneOrFailWithPerformance(e={},r="millis"){let[o,n]=await W(this.oneOrFail.bind(this,e),r)();return {data:n,time:Number(o)}}async paginateWithPerformance(e,r,o,n="millis"){let{ignoreHooks:s=false}=o||{},[a,l]=await W(this.paginate.bind(this,e,r,{ignoreHooks:s}),n)();return {data:{paginationMetadata:l.paginationMetadata,data:l.data},time:Number(a)}}async paginateWithCursorWithPerformance(e,r,o,n="millis"){let[s,a]=await W(this.paginateWithCursor.bind(this,e,r,o),n)();return {data:a,time:Number(s)}}async existsWithPerformance(e="millis"){let[r,o]=await W(this.exists.bind(this),e)();return {data:o,time:Number(r)}}async pluckWithPerformance(e,r="millis"){let[o,n]=await W(this.pluck.bind(this,e),r)();return {data:n,time:Number(o)}}async softDeleteWithPerformance(e={},r="millis"){let[o,n]=await W(this.softDelete.bind(this,e),r)();return {data:n,time:Number(o)}}async updateWithPerformance(e,r={},o="millis"){let[n,s]=await W(this.update.bind(this,e,r),o)();return {data:s,time:Number(n)}}async deleteWithPerformance(e="millis"){let[r,o]=await W(this.delete.bind(this),e)();return {data:o,time:Number(r)}}async truncateWithPerformance(e="millis"){let[r,o]=await W(this.truncate.bind(this),e)();return {data:o,time:Number(r)}}async insertWithPerformance(e,r="millis"){let[o,n]=await W(this.insert.bind(this,e),r)();return {data:n,time:Number(o)}}async insertManyWithPerformance(e,r="millis"){let[o,n]=await W(this.insertMany.bind(this,e),r)();return {data:n,time:Number(o)}}};function Ap(){return {}}var Ie=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=Ap(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new T(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,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=Object.fromEntries(Object.keys(t).map(d=>[d,t[d]])),o=!e.returning||e.returning.length===0,n=new j(new L(this.model.table),[r],e.returning,o),s=()=>{let d=this.astParser.parse([n]);return {sql:d.sql,bindings:d.bindings}},a=()=>{let d=this.astParser.parse([n]);return {sql:Ve(this.sqlDataSource,d.sql),bindings:d.bindings}},l=()=>{let{sql:d,bindings:u}=a();return Fe(d,u)};return new H(s,a,l,async()=>{e.ignoreHooks||await this.model.beforeInsert?.(t);let{columns:d,values:u}=await this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert"),p={};d.forEach((q,R)=>{let M=u[R];p[q]=M,t[q]??(t[q]=M);});let m=!e.returning||e.returning.length===0,{sql:c,bindings:h}=this.astParser.parse([new j(new L(this.model.table),[p],e.returning,m)]),f=await F(c,h,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(f,[t],"one",e.returning);let g=f[0];return g?(await this.model.afterFetch?.([g]),await Ce([g],this.model,e.returning)):t})}insertMany(t,e={}){let r=t.map(d=>Object.fromEntries(Object.keys(d).map(u=>[u,d[u]]))),o=!e.returning||e.returning.length===0,n=new j(new L(this.model.table),r,e.returning,o),s=()=>{let d=this.astParser.parse([n]);return {sql:d.sql,bindings:d.bindings}},a=()=>{let d=this.astParser.parse([n]);return {sql:Ve(this.sqlDataSource,d.sql),bindings:d.bindings}},l=()=>{let{sql:d,bindings:u}=a();return Fe(d,u)};return new H(s,a,l,async()=>{if(await this.model.beforeInsertMany?.(t),this.sqlType==="oracledb"){let g=this.model.primaryKey,N=Object.keys(t[0]||{});if(g&&!N.includes(g))return this.handleOracleIdentityInsert(t,e)}let d=new Array(t.length);await Promise.all(t.map(async(g,N)=>{let{columns:q,values:R}=await this.interpreterUtils.prepareColumns(Object.keys(g),Object.values(g),"insert"),M={};q.forEach((x,P)=>{let _=R[P];M[x]=_,g[x]??(g[x]=_);}),d[N]=M;}));let u=!e.returning||e.returning.length===0,{sql:p,bindings:m}=this.astParser.parse([new j(new L(this.model.table),d,e.returning,u)]),c=await F(p,m,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(u)return [];if(this.sqlType==="mysql"||this.sqlType==="mariadb")return await this.handleMysqlInsert(c,t,"many",e.returning)||[];let h=c;return h.length?(await this.model.afterFetch?.(h),await Ce(h,this.model,e.returning)||[]):[]})}upsertMany(t,e,r,o={updateOnConflict:true}){let n=r.map(m=>Object.fromEntries(Object.keys(m).map(c=>[c,m[c]]))),s=new j(new L(this.model.table),n,void 0,true),a=o.returning?.length&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?o.returning:void 0;new pe(this.model.table,t,e,o.updateOnConflict??true?"update":"ignore",a);let d=()=>{let m=this.astParser.parse([s]);return {sql:m.sql,bindings:m.bindings}},u=()=>{let m=this.astParser.parse([s]);return {sql:Ve(this.sqlDataSource,m.sql),bindings:m.bindings}},p=()=>{let{sql:m,bindings:c}=u();return Fe(m,c)};return new H(d,u,p,async()=>{let m=[];if(await this.model.beforeInsertMany?.(r),await Promise.all(r.map(async x=>{let{columns:P,values:_}=await this.interpreterUtils.prepareColumns(Object.keys(x),Object.values(x),"insert"),E=Object.fromEntries(P.map((X,D)=>[X,_[D]]));m.push(E);})),this.sqlType==="mssql")return this.executeMssqlMerge(m,t,e,o,r);let c=!o.returning||o.returning.length===0,h=!c&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?o.returning:void 0,{sql:f,bindings:g}=this.astParser.parse([new j(new L(this.model.table),m,void 0,true),new pe(this.model.table,t,e,o.updateOnConflict??true?"update":"ignore",h)]),N=await F(f,g,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:r}});if(c)return [];if(this.sqlType==="postgres"||this.sqlType==="cockroachdb"){if(N.length<r.length&&!(o.updateOnConflict??true)){let _=t[0],E=r.map(D=>D[_]);return await this.query().select(...o.returning?.length?o.returning:["*"]).whereIn(_,E).many()}let x=N;return await this.model.afterFetch?.(x),await Ce(x,this.model,o.returning)||[]}let q=t[0],R=r.map(x=>x[q]);return await this.query().select(...o.returning?.length?o.returning:["*"]).whereIn(q,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=P=>this.interpreterUtils.formatStringColumn("mssql",P),d=[],u=t.map(P=>`select ${s.map(E=>(d.push(P[E]),`@${d.length}`)).join(", ")}`),p=s.map(l).join(", "),m=u.join(" union all "),c=e.map(P=>`target.${l(P)} = source.${l(P)}`).join(" and "),h=r.filter(P=>!e.includes(P)).map(P=>`target.${l(P)} = source.${l(P)}`).join(", "),f=s.map(l).join(", "),g=s.map(P=>`source.${l(P)}`).join(", "),N=o.returning&&o.returning.length?o.returning.map(P=>`inserted.${l(P)}`).join(", "):s.map(P=>`inserted.${l(P)}`).join(", "),R=(o.updateOnConflict??true)&&h?`when matched then update set ${h}`:"",M=`merge into ${a} as target using (${m}) as source (${p}) on ${c} ${R} when not matched then insert (${f}) values (${g}) output ${N};`,x=await F(M,d,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:n}});if(x.length===0&&!(o.updateOnConflict??true)){let P=e[0],_=n.map(X=>X[P]);return await this.query().select(...o.returning?.length?o.returning:["*"]).whereIn(P,_).many()}return x}async updateRecord(t,e,r){let o=new Set(this.model.getColumns().map(h=>h.columnName)),n=Object.keys(e).filter(h=>o.has(h)),s=n.map(h=>e[h]),{columns:a,values:l}=await this.interpreterUtils.prepareColumns(n,s,"update"),{primaryKey:d}=this.model;if(!d)throw new S(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let u=a.indexOf(d);u!==-1&&(a.splice(u,1),l.splice(u,1));let{sql:p,bindings:m}=this.astParser.parse([new qe(new L(this.model.table),a,l),new A(d,"and",false,"=",t)]);if(await F(p,m,this.sqlDataSource,this.sqlType,"affectedRows"),!r?.returning||r.returning.length===0)return;let c=await this.findOneByPrimaryKey(t,r.returning);if(!c)throw new S(this.model.name+"::updateRecord","ROW_NOT_FOUND");return c}async deleteRecord(t){if(!this.model.primaryKey)throw new S(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new A(this.model.primaryKey,"and",false,"=",t),{sql:r,bindings:o}=this.astParser.parse([new nt(new L(this.model.table)),e]);await F(r,o,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new dt(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 Ce([a],this.model):null}return await Ce(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(u=>u[this.model.primaryKey]),l=a.map(u=>`'${u}'`).join(","),d=await this.query().select(...o??["*"]).whereIn(this.model.primaryKey,a).orderByRaw(`FIELD(${this.model.primaryKey}, ${l})`).many();return r==="one"?d.length?d[0]:null:d}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((c,h)=>{let f=a[h];l[c]=f,n[c]??(n[c]=f);});let{sql:d,bindings:u}=this.astParser.parse([new j(new L(this.model.table),[l],e.returning)]);await F(d,u,this.sqlDataSource,this.sqlType,"rows");let p=this.query().select(...e.returning||["*"]);for(let[c,h]of Object.entries(l))h!=null&&c!==o&&p.where(c,"=",h);o&&p.orderBy(o,"desc");let m=await p.one({ignoreHooks:["beforeFetch"]});if(m){let c=m;o&&c[o]&&(n[o]=c[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 d of n)this.handleWhereCondition(a,d,!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,d]=a;o?t.orWhereBetween(e,l,d):t.whereBetween(e,l,d);break}case "$not between":{let[l,d]=a;o?t.orWhereNotBetween(e,l,d):t.whereNotBetween(e,l,d);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 Pp=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??it()});var Mt=class i{constructor(t,e,r=false,o=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=_e.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 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),te("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;te("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");b.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}try{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=!1;return}switch(this.sql.type){case "mssql":te("COMMIT",this.sql.logs),await this.sql.sqlConnection.commit();break;case "mysql":case "mariadb":let e=this.sql.sqlConnection;te("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":te("COMMIT",this.sql.logs),await this.sql.sqlConnection.commit();break}}catch(e){throw b.error(e),e}await this.releaseConnection(),this.isActive=false;}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new S("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");b.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}try{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=!1;return}switch(this.sql.type){case "mssql":te("ROLLBACK",this.sql.logs),await this.sql.sqlConnection.rollback();break;case "mysql":case "mariadb":let e=this.sql.sqlConnection;te("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":te("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 b.error(e),e}await this.releaseConnection(),this.isActive=false;}async releaseConnection(){if(!this.connectionReleased){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(t){b.error(t);}await this.sql.disconnect(),this.sql.sqlConnection=null,this.connectionReleased=true;}}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 b.error(e),new B("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 Ha=Symbol.for("hysteria.orm.SqlDataSource"),$p,Dp,Rt=class i extends(Dp=Ft,$p=Ha,Dp){constructor(e){super(e);this[$p]=true;this.globalTransaction=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.cacheAdapter=new Ut;this.migrationConfig={path:I.MIGRATION_PATH||"database/migrations",lock:true,transactional:true,lockTimeout:3e4};this.seederConfig={path:"database/seeders"};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:ht(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;}static isSqlDataSource(e){return typeof e=="object"&&e!==null&&Ha in e&&e[Ha]===true}getOnSlaveServerFailure(){return this.onSlaveServerFailure}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");this.sqlPool=await Ue(this.sqlType,this.inputDetails),this.ownsPool=true,this.slaves.length&&await Promise.all(this.slaves.map(async e=>{e.sqlPool=await Ue(e.sqlType,e.inputDetails),e.ownsPool=true;}));}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}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}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,d=[];a?(l=r,d=o):(l=void 0,d=r!==void 0?[r,...o]:o);let u=Jr(JSON.stringify(d)),p=u?`${e}:${u}`:e,m=await this.cacheAdapter.get(p);if(m!==void 0)return m;let c=await n(...d);return await this.cacheAdapter.set(p,c,l),c}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=Jr(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.sqlType==="sqlite"||!!e?.shouldRecreatePool?(r.sqlPool=await Ue(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.isInGlobalTransaction&&this.globalTransaction?.isActive?this.globalTransaction.sql:this;if(typeof e=="string"){let n=new k(Pp(e,r),o);return r?.alias&&n.table(e,r.alias),n}return new dt(e,o)}schema(){if(!this.isConnected)throw new S("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new cr(this,this.getDbType())}async startGlobalTransaction(e){let r=await this.clone();return r.sqlConnection=await r.getConnection(),this.globalTransaction=new Mt(r,e?.isolationLevel),await this.globalTransaction.transaction(),this.globalTransaction}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new S("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction}),this.globalTransaction=null;}async rollbackGlobalTransaction(e){if(!this.globalTransaction){b.warn("SqlDataSource::rollbackGlobalTransaction - GLOBAL_TRANSACTION_NOT_STARTED");return}await this.globalTransaction.rollback({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction}),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=await this.clone();n.sqlConnection=await n.getConnection();let s=new Mt(n,o?.isolationLevel);if(await s.transaction(),typeof e=="function")try{let a=await e(s);return await s.commit({throwErrorOnInactiveTransaction:!1}),a}catch(a){throw await s.rollback({throwErrorOnInactiveTransaction:false}),a}return s}getModelManager(e){if(!this.isConnected)throw new S("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");return this.globalTransaction?.isActive?new Ie(e,this.globalTransaction.sql):new Ie(e,this)}getPool(){if(!this.sqlPool)throw new S("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(){if(this.sqlConnection)return this.sqlConnection;if(!this.sqlPool)throw new S("SqlDataSource::getConnection","CONNECTION_NOT_ESTABLISHED");switch(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){te("Connection already closed or not established",this.logs);return}if(!this.ownsPool){this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{b.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){b.warn(`SqlDataSource::disconnect - Error while closing slave connection: ${r.message}`);}})),te("Closing connection",this.logs),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 syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){b.warn("Syncing schema with SQLite is not supported, skipping...");return}let o=(await ke.makeDiff(this)).getSqlStatements();if(!o.length){b.info("No new changes detected between database schema and models metadata");return}if(b.info(`Generated ${o.length} SQL statements to sync schema`),!e?.transactional){for(let n of o)await this.rawQuery(n);b.info(`Synced schema with ${o.length} SQL statements`);return}await this.transaction(async n=>{for(let s of o)await n.sql.rawQuery(s);}),b.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(!this.isConnected)throw new S("SqlDataSource::rawQuery","CONNECTION_NOT_ESTABLISHED");return (o?.replicationMode||"master")==="slave"?this.executeOnSlave(async s=>F(e,r,s,this.getDbType(),"raw")):F(e,r,this,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)]),l=this.getDbType();if(l==="postgres"||l==="mssql")for(let d of r){let u=a.find(p=>{let m=p.expression;return new RegExp(`[\\["\\[]?${d.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(([^)]+)\\)`,"i").test(m)});if(u){let p=new RegExp("IN\\s*\\(([^)]+)\\)","i"),m=u.expression.match(p);m&&(d.enumValues=m[1].split(",").map(c=>c.trim().replace(/^'|'$/g,"")));}}return {columns:r,indexes:o,foreignKeys:n,primaryKey:s,checkConstraints:a}}getModelOpenApiSchema(){return fl(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 Vr(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 pl(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}isAdminJsEnabled(){return !!this.adminJsOptions?.enabled}async getTableInfo(e){let o=new T({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Yt(e)]).sql,n=[];try{let a=await this.rawQuery(o);n=this.extractRowsFromRawResult(a);}catch(a){if(je(this.getDbType(),a))return [];throw a}let s=this.getDbType();return s==="sqlite"?n.map(a=>{let l=String(a.type||"").toLowerCase(),d=$e(s,l);return {name:a.name,dataType:d,isNullable:a.notnull===0,defaultValue:a.dflt_value??null,withTimezone:null}}):n.map(a=>{let l=String(a.column_name||a.COLUMN_NAME||a.name||""),d=String(a.data_type||a.DATA_TYPE||a.type||"").toLowerCase(),u=$e(s,d),p=a.is_nullable!==void 0?a.is_nullable:a.IS_NULLABLE!==void 0?a.IS_NULLABLE:void 0,m=typeof p=="string"?p.toLowerCase()!=="no":typeof p=="boolean"?p:a.notnull!==void 0?a.notnull===0:true,c=a.column_default??a.COLUMN_DEFAULT??a.defaultValue??a.dflt_value??null,h=a.char_length!=null?Number(a.char_length):null,f=a.numeric_precision!=null?Number(a.numeric_precision):null,g=a.numeric_scale!=null?Number(a.numeric_scale):null,N=a.timezone!=null?!!a.timezone:/with time zone/.test(String(a.column_type||a.udt_name||d||"").toLowerCase()),q=null,R=String(a.column_type||a.COLUMN_TYPE||""),M=R.match(/^enum\((.+)\)$/i);M&&(q=M[1].split(",").map(E=>E.trim().replace(/^'|'$/g,"")));let x=R.toLowerCase(),P=x.includes(" unsigned"),_=x.includes(" zerofill");return {name:l,dataType:u,isNullable:m,defaultValue:c,length:h,precision:f,scale:g,withTimezone:N,enumValues:q,unsigned:P,zerofill:_}})}async getIndexInfo(e){let o=new T({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Jt(e)]).sql,n=this.getDbType(),s=[];try{let l=await this.rawQuery(o);s=this.extractRowsFromRawResult(l);}catch(l){if(je(this.getDbType(),l))return [];throw l}if(n==="mysql"||n==="mariadb"){let l=new Map;for(let d of s){let u=d.Key_name,p=d.Non_unique===0,m=l.get(u)||{name:u,columns:[],isUnique:p};m.columns.push(d.Column_name),l.set(u,m);}return Array.from(l.values())}if(n==="postgres"||n==="cockroachdb"){let l=new Map;for(let d of s){let u=d.index_name,p=!!d.is_unique,m=l.get(u)||{name:u,columns:[],isUnique:p};m.columns.push(d.column_name),l.set(u,m);}return Array.from(l.values())}let a=[];for(let l of s){let d=l.name,u=!!l.unique,p=await this.rawQuery(`PRAGMA index_info(${d})`),c=this.extractRowsFromRawResult(p).map(h=>h.name);a.push({name:d,columns:c,isUnique:u});}return a}async getForeignKeyInfo(e){let o=new T({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Vt(e)]).sql,n=[];try{let l=await this.rawQuery(o);n=this.extractRowsFromRawResult(l);}catch(l){if(je(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let d of n){let u=Number(d.id),p=l.get(u)||{name:void 0,columns:[],referencedTable:String(d.table),referencedColumns:[],onDelete:d.on_delete??null,onUpdate:d.on_update??null};p.columns.push(String(d.from)),p.referencedColumns.push(String(d.to)),l.set(u,p);}return Array.from(l.values())}let a=new Map;for(let l of n){let d=String(l.name||""),u=d||`${l.referenced_table}_${l.column_name}`,p=a.get(u)||{name:d||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};p.columns.push(String(l.column_name)),p.referencedColumns.push(String(l.referenced_column)),a.set(u,p);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let o=new T({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Ht(e)]).sql,n=[];try{let l=await this.rawQuery(o);n=this.extractRowsFromRawResult(l);}catch(l){if(je(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 T({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new jt(e)]).sql,n=[];try{let s=await this.rawQuery(o);n=this.extractRowsFromRawResult(s);}catch(s){if(je(this.getDbType(),s))return [];throw s}return n.map(s=>({name:String(s.name),expression:String(s.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
318
318
  v_result NUMBER;
319
319
  BEGIN
320
320
  v_result := DBMS_LOCK.REQUEST(
@@ -337,7 +337,7 @@ ORDER BY ordinal_position`,bindings:[]}}},lc=new Qi;var ki=class{toSql(t){let e=
337
337
  ELSE
338
338
  :result := 0;
339
339
  END IF;
340
- END;`))?.outBinds?.result===1}catch(o){let n=o instanceof Error?o:new Error(String(o));return b.warn(`Oracle lock release may have failed: ${n.message}`),!1}case "sqlite":return !0;default:return b.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(o){let n=o instanceof Error?o:new Error(String(o));return b.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 Ce=class{constructor(t){this.migrationTable="migrations";this.sql=t;}async upMigrations(t){for(let e of t){b.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){b.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 Rt(i,t,e,r,o){let n=i.getDbType(),s=o&&n!=="mssql"&&n!=="oracledb",a=null;b.info("Rolling back migrations for database type: "+n);try{let l=await Bt(n,i.getPool()),d=await Kt(n,e,r),u=l.map(c=>c.name),p=d.filter(c=>u.includes(c.migrationName));if(p.length===0){b.info("No pending migrations.");return}if(t){let c=p.findIndex(g=>g.migrationName===t);if(c===-1){b.error(`Rollback until migration not found: ${t}`);return}let h=p.slice(c);s&&(a=await i.transaction(),i=a.sql),await new Ce(i).downMigrations(h),s&&await a?.commit(),b.info("Migrations rolled back successfully");return}let m=new Ce(i);s&&(a=await i.transaction(),i=a.sql),await m.downMigrations(p),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}b.info("Migrations rolled back successfully");}var Or=class{static async generate(t){return `import { Migration } from "hysteria-orm";
340
+ END;`))?.outBinds?.result===1}catch(o){let n=o instanceof Error?o:new Error(String(o));return b.warn(`Oracle lock release may have failed: ${n.message}`),!1}case "sqlite":return !0;default:return b.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(o){let n=o instanceof Error?o:new Error(String(o));return b.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 Re=class{constructor(t){this.migrationTable="migrations";this.sql=t;}async upMigrations(t){for(let e of t){b.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){b.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 xt(i,t,e,r,o){let n=i.getDbType(),s=o&&n!=="mssql"&&n!=="oracledb",a=null;b.info("Rolling back migrations for database type: "+n);try{let l=await Kt(n,i.getPool()),d=await Wt(n,e,r),u=l.map(c=>c.name),p=d.filter(c=>u.includes(c.migrationName));if(p.length===0){b.info("No pending migrations.");return}if(t){let c=p.findIndex(g=>g.migrationName===t);if(c===-1){b.error(`Rollback until migration not found: ${t}`);return}let h=p.slice(c);s&&(a=await i.transaction(),i=a.sql),await new Re(i).downMigrations(h),s&&await a?.commit(),b.info("Migrations rolled back successfully");return}let m=new Re(i);s&&(a=await i.transaction(),i=a.sql),await m.downMigrations(p),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}b.info("Migrations rolled back successfully");}var Er=class{static async generate(t){return `import { Migration } from "hysteria-orm";
341
341
 
342
342
  export default class extends Migration {
343
343
  async up() {
@@ -346,7 +346,7 @@ ${t.map(r=>` this.schema.rawQuery('${r.replace(/\\/g,"\\\\").replace(/'/g,"\\
346
346
  }
347
347
 
348
348
  async down() {}
349
- }`}};var Er=class{static initTemplate(t){let e=this.getDefaultPort(t),r=t==="sqlite"?"database.db":"database",o=t==="mongodb"?"mongo":t==="redis"?"redis":"SqlDataSource";return t==="mongodb"||t==="redis"?this.handleNoSqlConnection(t,o==="SqlDataSource"?"sql":o):`
349
+ }`}};var vr=class{static initTemplate(t){let e=this.getDefaultPort(t),r=t==="sqlite"?"database.db":"database",o=t==="mongodb"?"mongo":t==="redis"?"redis":"SqlDataSource";return t==="mongodb"||t==="redis"?this.handleNoSqlConnection(t,o==="SqlDataSource"?"sql":o):`
350
350
  import { ${o} } from "hysteria-orm";
351
351
 
352
352
  const db = new ${o}({
@@ -386,7 +386,7 @@ export default db;`:""}static getNoSqlConnectionConfig(t){switch(t){case "mongod
386
386
  password: "root",
387
387
  username: "default",
388
388
  db: 0,
389
- }`;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;case "oracledb":return 1521;default:return 3306}}};async function vr(i,t,e){let r=t.getDbType();b.info(`Running sql for ${r}`);let o=await t.rawQuery(i);if(b.info("Sql ran successfully"),e){let n=ze.dirname(e);pe.existsSync(n)||pe.mkdirSync(n,{recursive:true}),pe.writeFileSync(e,JSON.stringify(o,null,2)),b.info(`Query result saved to ${e}`);return}b.info(JSON.stringify(o,null,2)),await t.disconnect();}var Qr=class{static seederTemplate(){return `import { BaseSeeder } from "hysteria-orm";
389
+ }`;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;case "oracledb":return 1521;default:return 3306}}};async function Qr(i,t,e){let r=t.getDbType();b.info(`Running sql for ${r}`);let o=await t.rawQuery(i);if(b.info("Sql ran successfully"),e){let n=ze.dirname(e);ye.existsSync(n)||ye.mkdirSync(n,{recursive:true}),ye.writeFileSync(e,JSON.stringify(o,null,2)),b.info(`Query result saved to ${e}`);return}b.info(JSON.stringify(o,null,2)),await t.disconnect();}var kr=class{static seederTemplate(){return `import { BaseSeeder } from "hysteria-orm";
390
390
 
391
391
  export default class extends BaseSeeder {
392
392
  /**
@@ -396,7 +396,7 @@ export default class extends BaseSeeder {
396
396
  console.log('Seeder completed');
397
397
  }
398
398
  }
399
- `}};var dy=(i,t,e)=>{let r=e||"database/seeders",o=t?".js":".ts",s=`${Date.now()}_${i}${o}`;pe.existsSync(r)||(pe.mkdirSync(r,{recursive:true}),b.info(`Created seeders directory: ${r}`));let a=ze.join(r,s),l=Qr.seederTemplate();pe.writeFileSync(a,l),b.info(`Seeder created successfully: ${a}`);},Ap=dy;var uy=async(i,t,e)=>{let r=[];for(let o of t){let n=ze.resolve(process.cwd(),o);pe.existsSync(n)||(b.error(`Path not found: ${n}`),process.exit(1));let s=pe.statSync(n);if(s.isDirectory()){let a=pe.readdirSync(n).filter(l=>l.endsWith(".ts")||l.endsWith(".js")).sort();for(let l of a)r.push({file:l,folder:n});}else if(s.isFile()){let a=ze.basename(n),l=ze.dirname(n);a.endsWith(".ts")||a.endsWith(".js")?r.push({file:a,folder:l}):(b.error(`File must be a .ts or .js file: ${a}`),process.exit(1));}}if(!r.length){b.info("No seeders found");return}b.info(`Found ${r.length} seeder(s) to run`),i.isConnected||await i.connect();for(let{file:o,folder:n}of r)try{b.info(`Running seeder: ${o}`);let s=ze.resolve(n,o),a=await Ye(s,e);if(!a.default){b.error(`Seeder ${o} does not export a default class`);continue}let l=new a.default(i);if(typeof l.run!="function"){b.error(`Seeder ${o} must have a run() method. Make sure it extends BaseSeeder from hysteria-orm`);continue}await l.run(),b.info(`\u2713 Completed seeder: ${o}`);}catch(s){throw b.error(`Failed to run seeder ${o}: ${s}`),s}b.info("All seeders completed successfully");},Pp=uy;var $p={devDependencies:{"@types/ioredis":"^5.0.0","@types/mongodb":"^4.0.7","@types/mssql":"^9.1.8","@types/oracledb":"^6.10.0","@types/pg":"^8.16.0","@types/sqlite3":"^5.1.0",esbuild:"^0.27.2",ioredis:"^5.9.3",mongodb:"^7.0.0",mssql:"^12.2.0",oracledb:"^6.10.0",pg:"^8.18.0",sqlite3:"^5.1.7",typescript:"^5.9.3"}};var Ip=()=>pe.existsSync(ze.join(process.cwd(),"yarn.lock"))?["yarn","add"]:pe.existsSync(ze.join(process.cwd(),"pnpm-lock.yaml"))?["pnpm","add"]:pe.existsSync(ze.join(process.cwd(),"package-lock.json"))?["npm","install"]:pe.existsSync(ze.join(process.cwd(),"bun.lockb"))?["bun","add"]:pe.existsSync(ze.join(process.cwd(),"deno.lock"))?["deno","add"]:["npm","install"],Dp=async(i,t,e,r)=>{let o=py.createInterface({input:process.stdin,output:process.stdout}),n=e.join(", "),s=`Do you want to install the following dependencies using ${t}?
399
+ `}};var py=(i,t,e)=>{let r=e||"database/seeders",o=t?".js":".ts",s=`${Date.now()}_${i}${o}`;ye.existsSync(r)||(ye.mkdirSync(r,{recursive:true}),b.info(`Created seeders directory: ${r}`));let a=ze.join(r,s),l=kr.seederTemplate();ye.writeFileSync(a,l),b.info(`Seeder created successfully: ${a}`);},Ip=py;var fy=async(i,t,e)=>{let r=[];for(let o of t){let n=ze.resolve(process.cwd(),o);ye.existsSync(n)||(b.error(`Path not found: ${n}`),process.exit(1));let s=ye.statSync(n);if(s.isDirectory()){let a=ye.readdirSync(n).filter(l=>l.endsWith(".ts")||l.endsWith(".js")).sort();for(let l of a)r.push({file:l,folder:n});}else if(s.isFile()){let a=ze.basename(n),l=ze.dirname(n);a.endsWith(".ts")||a.endsWith(".js")?r.push({file:a,folder:l}):(b.error(`File must be a .ts or .js file: ${a}`),process.exit(1));}}if(!r.length){b.info("No seeders found");return}b.info(`Found ${r.length} seeder(s) to run`),i.isConnected||await i.connect();for(let{file:o,folder:n}of r)try{b.info(`Running seeder: ${o}`);let s=ze.resolve(n,o),a=await Ye(s,e);if(!a.default){b.error(`Seeder ${o} does not export a default class`);continue}let l=new a.default(i);if(typeof l.run!="function"){b.error(`Seeder ${o} must have a run() method. Make sure it extends BaseSeeder from hysteria-orm`);continue}await l.run(),b.info(`\u2713 Completed seeder: ${o}`);}catch(s){throw b.error(`Failed to run seeder ${o}: ${s}`),s}b.info("All seeders completed successfully");},Op=fy;var Ep={devDependencies:{"@types/ioredis":"^5.0.0","@types/mongodb":"^4.0.7","@types/mssql":"^9.1.8","@types/oracledb":"^6.10.0","@types/pg":"^8.16.0","@types/sqlite3":"^5.1.0",esbuild:"^0.27.2",ioredis:"^5.9.3",mongodb:"^7.0.0",mssql:"^12.2.0",oracledb:"^6.10.0",pg:"^8.18.0",sqlite3:"^5.1.7",typescript:"^5.9.3"}};var Qp=()=>ye.existsSync(ze.join(process.cwd(),"yarn.lock"))?["yarn","add"]:ye.existsSync(ze.join(process.cwd(),"pnpm-lock.yaml"))?["pnpm","add"]:ye.existsSync(ze.join(process.cwd(),"package-lock.json"))?["npm","install"]:ye.existsSync(ze.join(process.cwd(),"bun.lockb"))?["bun","add"]:ye.existsSync(ze.join(process.cwd(),"deno.lock"))?["deno","add"]:["npm","install"],vp=async(i,t,e,r)=>{let o=gy.createInterface({input:process.stdin,output:process.stdout}),n=e.join(", "),s=`Do you want to install the following dependencies using ${t}?
400
400
  ${n}
401
- (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);});})},re=$p.devDependencies,Op=async(i,t,e)=>{let r=Br.includes(e)?[`typescript@${re.typescript}`,`esbuild@${re.esbuild}`]:[],o="";switch(e){case "mariadb":case "mysql":break;case "cockroachdb":case "postgres":o=`pg@${re.pg}`,r.push(`@types/pg@${re["@types/pg"]}`);break;case "sqlite":o=`sqlite3@${re.sqlite3}`,r.push(`@types/sqlite3@${re["@types/sqlite3"]}`);break;case "mongo":o=`mongodb@${re.mongodb}`,r.push(`@types/mongodb@${re["@types/mongodb"]}`);break;case "redis":o=`ioredis@${re.ioredis}`,r.push(`@types/ioredis@${re["@types/ioredis"]}`);break;case "mssql":o=`mssql@${re.mssql}`,r.push(`@types/mssql@${re["@types/mssql"]}`);break;case "oracledb":o=`oracledb@${re.oracledb}`,r.push(`@types/oracledb@${re["@types/oracledb"]}`);break;default:throw new Error(`Invalid database type: ${e}`)}if(o){let s=await Dp(`${i} ${t} ${o}`,i,[o],{stdio:"inherit"});s&&b.info("Driver dependency installed successfully"),s||b.info("Driver dependency installation skipped");}let n=i==="deno"?"--dev":"-D";if(r.length){let s=await Dp(`${i} ${t} ${r.join(" ")} ${n}`,i,r,{stdio:"inherit"});s&&b.info("Dev dependencies installed successfully"),s||b.info("Dev dependencies installation skipped");}};var Br=["sqlite","mysql","postgres","mariadb","cockroachdb","mssql"],Kr=Br.concat("mongodb","redis");async function We(i,t){let{default:e}=await Ye(ze.resolve(process.cwd(),i));return e||(b.error(`The provided datasource file does not export a default export: ${i}`),process.exit(1)),Mt.isSqlDataSource(e)||(b.error(`The provided datasource file does not export a valid SqlDataSource instance: ${i}`),process.exit(1)),e.isConnected||await e.connect(),e}var fe=new Command;fe.command("init",{isDefault:false}).option("-t, --type [type]",`Type of the database to connect to, available types: ${Kr.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=Kr.join(", ");i.type||(b.error(`Database type is required (-t|--type), available types: ${t}`),process.exit(1)),Kr.includes(i.type)||(b.error(`Invalid database type: ${i.type}, available types: ${Kr.join(", ")}`),process.exit(1)),b.info("Initializing hysteria-orm with standard configuration"),b.info(`Database type: ${i.type||"not specified (will use env DB_TYPE)"}`);let[e,r]=Ip();b.info(`Package manager: ${e}`),b.info("Installing base dependencies"),await Op(e,r,i.type);let o=Er.initTemplate(i.type);pe.existsSync("database")?b.info("database folder already exists, skipping"):pe.mkdirSync("database",{recursive:true}),pe.existsSync("database/index.ts")?b.info("database/index.ts file already exists, skipping"):pe.writeFileSync("database/index.ts",o),Br.includes(i.type)&&!pe.existsSync("database/migrations")?pe.mkdirSync("database/migrations",{recursive:true}):b.info("database/migrations folder already exists or is not a sql database, skipping"),b.info("Initialization completed successfully");});fe.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)=>{b.info("Starting SQL execution"),t?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=t?.file;!i&&!e&&(b.error("SQL query or file path is required"),process.exit(1)),i&&e&&(b.error("Cannot provide both sql query and file path"),process.exit(1));let r=await We(t.datasource,t?.tsconfigPath);if(i){b.info("Executing SQL query directly from command line");try{await vr(i,r,t?.out),b.info("SQL execution completed successfully"),process.exit(0);}catch(n){b.error(`SQL execution failed: ${n}`),process.exit(1);}}e||(b.error("No SQL statement or file provided"),process.exit(1)),b.info(`Reading SQL from file: ${e}`),e=ze.resolve(process.cwd(),e),pe.existsSync(e)||(b.error(`File not found: ${e}`),process.exit(1));let o=pe.readFileSync(e,"utf-8");b.info(`SQL file loaded successfully (${o.length} characters)`);try{await vr(o,r,t?.out),b.info("SQL file execution completed successfully"),process.exit(0);}catch(n){b.error(`SQL file execution failed: ${n}`),process.exit(1);}});fe.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)=>{b.info(`Creating migration: ${i}`),b.info(`Migration options: javascript=${t.javascript}, alter=${t.alter}, create=${t.create}, table=${t.table||"not specified"}`),i||(b.error("Migration name is required"),process.exit(1)),t.alter&&t.create&&(b.error("Cannot use --alter and --create at the same time"),process.exit(1)),t.table&&!(t.create||t.alter)&&(b.error("Cannot use --table without --create or --alter"),process.exit(1));let e=t.alter?"alter":t.create?"create":"basic";b.info(`Migration mode: ${e}`),sl(i,t.javascript,e,t.table||i);});fe.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||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await We(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,o=t?.tsconfigPath||e.migrationConfig.tsconfig,n=t?.lock??e.migrationConfig.lock,s=t?.lockTimeout?parseInt(t.lockTimeout,10):e.migrationConfig.lockTimeout,a=t?.transactional??e.migrationConfig.transactional,l=false;try{if(n){if(b.info("Acquiring migration lock"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw b.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");b.info("Migration lock acquired successfully");}await ht(e,i,r,o,a);}catch(d){throw console.error(d),d}finally{n&&l&&(b.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||b.warn("Failed to release migration lock")),await e.disconnect();}});fe.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||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await We(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,o=t?.tsconfigPath||e.migrationConfig.tsconfig,n=t?.lock??e.migrationConfig.lock,s=t?.lockTimeout?parseInt(t.lockTimeout,10):e.migrationConfig.lockTimeout,a=t?.transactional??e.migrationConfig.transactional,l=false;try{if(n){if(b.info("Acquiring migration lock"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw b.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");b.info("Migration lock acquired successfully");}await Rt(e,i,r,o,a);}catch(d){throw console.error(d),d}finally{n&&l&&(b.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||b.warn("Failed to release migration lock")),await e.disconnect();}});fe.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||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await We(i.datasource,i?.tsconfigPath),r=i?.migrationPath||e.migrationConfig.path,o=i?.tsconfigPath||e.migrationConfig.tsconfig,n=i?.lock??e.migrationConfig.lock,s=i?.lockTimeout?parseInt(i.lockTimeout,10):e.migrationConfig.lockTimeout,a=i?.transactional??e.migrationConfig.transactional,l=false;try{if(n){if(b.info("Acquiring migration lock for refresh operation"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw b.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");b.info("Migration lock acquired successfully");}t?await Ur(e,!1,a):await Rt(e,void 0,r,o,a),await ht(e,void 0,r,o,a);}catch(d){console.error(d);}finally{n&&l&&(b.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||b.warn("Failed to release migration lock")),await e.disconnect();}});fe.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).action(async i=>{i?.datasource||(b.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 We(i.datasource,i?.tsconfigPath),e=i?.migrationPath||t.migrationConfig.path;["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(b.error(`generate:migrations is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),process.exit(1));try{let n=(await Be.makeDiff(t)).getSqlStatements();if(n.length||(b.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){for(let l of n)console.log(l);process.exit(0);}pe.existsSync(e)||pe.mkdirSync(e,{recursive:!0});let s=await Or.generate(n),a=i?.javascript?".js":".ts";pe.writeFileSync(`${e}/${i?.name}${a}`,s),b.info(`Migration file created successfully: ${i?.name}${a}`),await t.disconnect(),process.exit(0);}catch(o){console.error(o),await t.disconnect(),process.exit(1);}});fe.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 i=>{i?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let t=await We(i.datasource,i?.tsconfigPath);["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(b.error(`sync is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),await t.disconnect(),process.exit(1));try{let o=(await Be.makeDiff(t)).getSqlStatements();if(o.length||(b.info("No new changes detected between database schema and models metadata"),await t.disconnect(),process.exit(0)),i.dry){b.info(`${o.length} SQL statement(s) would be executed:`);for(let n of o)console.log(n);await t.disconnect(),process.exit(0);}await t.syncSchema({transactional:i?.transactional??!1}),b.info("Schema sync completed successfully"),await t.disconnect(),process.exit(0);}catch(r){console.error(r),await t.disconnect(),process.exit(1);}});fe.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((i,t)=>{b.info(`Creating seeder: ${i}`),b.info(`Seeder options: javascript=${t.javascript}`),i||(b.error("Seeder name is required"),process.exit(1)),Ap(i,t.javascript,t.seederPath);});fe.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)",(i,t=[])=>[...t,i]).action(async i=>{b.info("Starting seeder execution"),i?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let t=await We(i.datasource,i?.tsconfigPath),e;i?.seederPath&&i.seederPath.length>0?e=i.seederPath.flatMap(o=>o.split(",").map(n=>n.trim())):e=[t.seederConfig.path];let r=i?.tsconfigPath||t.seederConfig.tsconfig;try{await Pp(t,e,r),await t.disconnect(),b.info("Seeding completed successfully"),process.exit(0);}catch(o){console.error(o),await t.disconnect(),process.exit(1);}});fe.parse(process.argv);export{Br as sqlDatabaseTypes};//# sourceMappingURL=cli.js.map
401
+ (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);});})},re=Ep.devDependencies,kp=async(i,t,e)=>{let r=Kr.includes(e)?[`typescript@${re.typescript}`,`esbuild@${re.esbuild}`]:[],o="";switch(e){case "mariadb":case "mysql":break;case "cockroachdb":case "postgres":o=`pg@${re.pg}`,r.push(`@types/pg@${re["@types/pg"]}`);break;case "sqlite":o=`sqlite3@${re.sqlite3}`,r.push(`@types/sqlite3@${re["@types/sqlite3"]}`);break;case "mongo":o=`mongodb@${re.mongodb}`,r.push(`@types/mongodb@${re["@types/mongodb"]}`);break;case "redis":o=`ioredis@${re.ioredis}`,r.push(`@types/ioredis@${re["@types/ioredis"]}`);break;case "mssql":o=`mssql@${re.mssql}`,r.push(`@types/mssql@${re["@types/mssql"]}`);break;case "oracledb":o=`oracledb@${re.oracledb}`,r.push(`@types/oracledb@${re["@types/oracledb"]}`);break;default:throw new Error(`Invalid database type: ${e}`)}if(o){let s=await vp(`${i} ${t} ${o}`,i,[o],{stdio:"inherit"});s&&b.info("Driver dependency installed successfully"),s||b.info("Driver dependency installation skipped");}let n=i==="deno"?"--dev":"-D";if(r.length){let s=await vp(`${i} ${t} ${r.join(" ")} ${n}`,i,r,{stdio:"inherit"});s&&b.info("Dev dependencies installed successfully"),s||b.info("Dev dependencies installation skipped");}};var Kr=["sqlite","mysql","postgres","mariadb","cockroachdb","mssql"],Wr=Kr.concat("mongodb","redis");async function Le(i,t){let{default:e}=await Ye(ze.resolve(process.cwd(),i));return e||(b.error(`The provided datasource file does not export a default export: ${i}`),process.exit(1)),Rt.isSqlDataSource(e)||(b.error(`The provided datasource file does not export a valid SqlDataSource instance: ${i}`),process.exit(1)),e.isConnected||await e.connect(),e}var he=new Command;he.command("init",{isDefault:false}).option("-t, --type [type]",`Type of the database to connect to, available types: ${Wr.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=Wr.join(", ");i.type||(b.error(`Database type is required (-t|--type), available types: ${t}`),process.exit(1)),Wr.includes(i.type)||(b.error(`Invalid database type: ${i.type}, available types: ${Wr.join(", ")}`),process.exit(1)),b.info("Initializing hysteria-orm with standard configuration"),b.info(`Database type: ${i.type||"not specified (will use env DB_TYPE)"}`);let[e,r]=Qp();b.info(`Package manager: ${e}`),b.info("Installing base dependencies"),await kp(e,r,i.type);let o=vr.initTemplate(i.type);ye.existsSync("database")?b.info("database folder already exists, skipping"):ye.mkdirSync("database",{recursive:true}),ye.existsSync("database/index.ts")?b.info("database/index.ts file already exists, skipping"):ye.writeFileSync("database/index.ts",o),Kr.includes(i.type)&&!ye.existsSync("database/migrations")?ye.mkdirSync("database/migrations",{recursive:true}):b.info("database/migrations folder already exists or is not a sql database, skipping"),b.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(i,t)=>{b.info("Starting SQL execution"),t?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=t?.file;!i&&!e&&(b.error("SQL query or file path is required"),process.exit(1)),i&&e&&(b.error("Cannot provide both sql query and file path"),process.exit(1));let r=await Le(t.datasource,t?.tsconfigPath);if(i){b.info("Executing SQL query directly from command line");try{await Qr(i,r,t?.out),b.info("SQL execution completed successfully"),process.exit(0);}catch(n){b.error(`SQL execution failed: ${n}`),process.exit(1);}}e||(b.error("No SQL statement or file provided"),process.exit(1)),b.info(`Reading SQL from file: ${e}`),e=ze.resolve(process.cwd(),e),ye.existsSync(e)||(b.error(`File not found: ${e}`),process.exit(1));let o=ye.readFileSync(e,"utf-8");b.info(`SQL file loaded successfully (${o.length} characters)`);try{await Qr(o,r,t?.out),b.info("SQL file execution completed successfully"),process.exit(0);}catch(n){b.error(`SQL file execution failed: ${n}`),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((i,t)=>{b.info(`Creating migration: ${i}`),b.info(`Migration options: javascript=${t.javascript}, alter=${t.alter}, create=${t.create}, table=${t.table||"not specified"}`),i||(b.error("Migration name is required"),process.exit(1)),t.alter&&t.create&&(b.error("Cannot use --alter and --create at the same time"),process.exit(1)),t.table&&!(t.create||t.alter)&&(b.error("Cannot use --table without --create or --alter"),process.exit(1));let e=t.alter?"alter":t.create?"create":"basic";b.info(`Migration mode: ${e}`),al(i,t.javascript,e,t.table||i);});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(i,t)=>{t?.datasource||(b.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?.lock??e.migrationConfig.lock,s=t?.lockTimeout?parseInt(t.lockTimeout,10):e.migrationConfig.lockTimeout,a=t?.transactional??e.migrationConfig.transactional,l=false;try{if(n){if(b.info("Acquiring migration lock"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw b.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");b.info("Migration lock acquired successfully");}await gt(e,i,r,o,a);}catch(d){throw console.error(d),d}finally{n&&l&&(b.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||b.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(i,t)=>{t?.datasource||(b.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?.lock??e.migrationConfig.lock,s=t?.lockTimeout?parseInt(t.lockTimeout,10):e.migrationConfig.lockTimeout,a=t?.transactional??e.migrationConfig.transactional,l=false;try{if(n){if(b.info("Acquiring migration lock"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw b.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");b.info("Migration lock acquired successfully");}await xt(e,i,r,o,a);}catch(d){throw console.error(d),d}finally{n&&l&&(b.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||b.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 i=>{let t=i?.force||false;i?.datasource||(b.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?.lock??e.migrationConfig.lock,s=i?.lockTimeout?parseInt(i.lockTimeout,10):e.migrationConfig.lockTimeout,a=i?.transactional??e.migrationConfig.transactional,l=false;try{if(n){if(b.info("Acquiring migration lock for refresh operation"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw b.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");b.info("Migration lock acquired successfully");}t?await Fr(e,!1,a):await xt(e,void 0,r,o,a),await gt(e,void 0,r,o,a);}catch(d){console.error(d);}finally{n&&l&&(b.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||b.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).action(async i=>{i?.datasource||(b.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())||(b.error(`generate:migrations is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),process.exit(1));try{let n=(await ke.makeDiff(t)).getSqlStatements();if(n.length||(b.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){for(let l of n)console.log(l);process.exit(0);}ye.existsSync(e)||ye.mkdirSync(e,{recursive:!0});let s=await Er.generate(n),a=i?.javascript?".js":".ts";ye.writeFileSync(`${e}/${i?.name}${a}`,s),b.info(`Migration file created successfully: ${i?.name}${a}`),await t.disconnect(),process.exit(0);}catch(o){console.error(o),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 i=>{i?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let t=await Le(i.datasource,i?.tsconfigPath);["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(b.error(`sync is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),await t.disconnect(),process.exit(1));try{let o=(await ke.makeDiff(t)).getSqlStatements();if(o.length||(b.info("No new changes detected between database schema and models metadata"),await t.disconnect(),process.exit(0)),i.dry){b.info(`${o.length} SQL statement(s) would be executed:`);for(let n of o)console.log(n);await t.disconnect(),process.exit(0);}await t.syncSchema({transactional:i?.transactional??!1}),b.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((i,t)=>{b.info(`Creating seeder: ${i}`),b.info(`Seeder options: javascript=${t.javascript}`),i||(b.error("Seeder name is required"),process.exit(1)),Ip(i,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)",(i,t=[])=>[...t,i]).action(async i=>{b.info("Starting seeder execution"),i?.datasource||(b.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let t=await Le(i.datasource,i?.tsconfigPath),e;i?.seederPath&&i.seederPath.length>0?e=i.seederPath.flatMap(o=>o.split(",").map(n=>n.trim())):e=[t.seederConfig.path];let r=i?.tsconfigPath||t.seederConfig.tsconfig;try{await Op(t,e,r),await t.disconnect(),b.info("Seeding completed successfully"),process.exit(0);}catch(o){console.error(o),await t.disconnect(),process.exit(1);}});he.parse(process.argv);export{Kr as sqlDatabaseTypes};//# sourceMappingURL=cli.js.map
402
402
  //# sourceMappingURL=cli.js.map