hysteria-orm 12.3.0 → 12.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cli.js +36 -36
- package/lib/cli.js.map +1 -1
- package/lib/index.cjs +26 -26
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +593 -107
- package/lib/index.d.ts +593 -107
- package/lib/index.js +26 -26
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
package/lib/cli.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {PassThrough,Readable}from'stream';import {Command}from'commander';import ae,{promises}from'fs';import ft from'path';import Ru from'fs/promises';import {format}from'sql-formatter';import {highlight}from'sql-highlight';import {createRequire}from'module';import {pathToFileURL}from'url';import Pe,{privateDecrypt,publicEncrypt}from'crypto';import {AsyncLocalStorage}from'async_hooks';import {execSync}from'child_process';import Kg from'readline';var mu=Object.defineProperty;var pu=i=>{throw TypeError(i)};var Ie=(i,t)=>()=>(i&&(t=i(i=0)),t);var fu=(i,t)=>{for(var e in t)mu(i,e,{get:t[e],enumerable:true});};var yu=(i,t,e,r)=>{for(var n=void 0,o=i.length-1,s;o>=0;o--)(s=i[o])&&(n=(s(t,e,n))||n);return n&&mu(t,e,n),n};var ky=(i,t,e)=>t.has(i)||pu("Cannot "+e);var hu=(i,t,e)=>t.has(i)?pu("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);var gu=(i,t,e)=>(ky(i,t,"access private method"),e);var L,le=Ie(()=>{L=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};});var ty,ge,hg,ry,Ot=Ie(()=>{le();ty=[],ge=i=>{ty.push(i);},hg=async(i,t,e,r)=>{if(!Array.isArray(t?.dialects))throw new Error(`driver must be a registered driver name or a DriverAdapterFactory with a "dialects" array (got ${typeof t}).`);if(!t.dialects.includes(i))throw new Error(`driver "${t.name}" does not support dialect "${i}" (declares: ${t.dialects.join(", ")}).`);return t.create({dialect:i,jsEnvironment:e,input:r})},ry=async(i,t,e,r)=>{if(e&&typeof e!="string")return hg(i,e,t,r);let n=ty.filter(l=>l.dialects.includes(i)),o=(l,u)=>(l.environments??["node"]).includes(u),s=(l,u)=>(e?l.name===e:true)&&o(l,u),a=n.find(l=>s(l,t));if(a)return a.create({dialect:i,jsEnvironment:t,input:r});if(t==="bun"){let l=n.find(u=>s(u,"node"));if(l)return l.create({dialect:i,jsEnvironment:t,input:r})}throw new L(e??i)};});var Dt,Ng,oy,er=Ie(()=>{Dt=async(i,t={},e)=>{let r=new PassThrough({objectMode:t.objectMode??true,highWaterMark:t.highWaterMark});try{for(let n of i)e.onData?await e.onData(r,n):r.write(n);r.end();}catch(n){r.destroy(n);}return r},Ng=i=>{if(i.writableNeedDrain)return new Promise(t=>i.once("drain",()=>t()))},oy=async(i,t={},e)=>{let r=new PassThrough({objectMode:t.objectMode??true,highWaterMark:t.highWaterMark});try{for(let n of i)e.onData?await e.onData(r,n):r.write(n),await Ng(r);r.end();}catch(n){r.destroy(n);}return r};});var sy,Mn,iy=Ie(()=>{er();sy=i=>{if(!i||typeof i!="object")return i;let t=i,e=t.errno,r=typeof e=="string"&&/^[0-9A-Z]{5}$/.test(e),n=typeof t.code=="string"&&t.code.startsWith("ERR_");return !r||!n||(t.cause===void 0&&(t.cause=i),t.code=e),i},Mn=class{constructor(t,e,r){this.jsEnvironment="bun";this.dialect=t;let n={hostname:e.host,port:e.port,username:e.username,password:e.password,database:e.database,...e.driverOptions};(t==="mysql"||t==="mariadb")&&(n.adapter="mysql",n.allowPublicKeyRetrieval=true),this.sql=new r(n),this.pool=this.sql;}createPool(){}async closePool(){this.sql.close();}async reserveConnection(){return this.sql.reserve()}releaseConnection(t){t?.release();}async beginTransaction(t,e){(this.dialect==="mysql"||this.dialect==="mariadb")&&e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await e.rawQuery(this.dialect==="mysql"||this.dialect==="mariadb"?"START TRANSACTION":"BEGIN TRANSACTION"),(this.dialect==="postgres"||this.dialect==="cockroachdb")&&e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.sql,o;try{o=await n.unsafe(t,e);}catch(a){throw sy(a)}if(this.dialect==="mysql"||this.dialect==="mariadb"){let a=/^\s*(select|show|desc(ribe)?|explain)\b/i.test(t);if(Array.isArray(o)&&(a||o.length>0))return [o,void 0];let l=o;return [{affectedRows:Number(l.affectedRows),insertId:Number(l.lastInsertRowid)},void 0]}let s=o;return Array.isArray(o)&&!((s.command==="INSERT"||s.command==="UPDATE"||s.command==="DELETE")&&o.length===0)?{rows:o,rowCount:o.length}:{rows:[],rowCount:s.count??s.affectedRows??0}}extract(t,e){if(e==="raw")return t;if(this.dialect==="mysql"||this.dialect==="mariadb"){let n=t;return e==="affectedRows"?n[0]?.affectedRows??0:n[0]}let r=t;return e==="affectedRows"?r.rowCount:r.rows}async stream(t,e,r,n){let o=r.connection??this.sql,s;try{s=await o.unsafe(t,e);}catch(l){throw sy(l)}let a=Array.isArray(s)?s:[];return Dt(a,r,n)}};});var xn,ay=Ie(()=>{er();xn=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="bun";this.db=new r(String(e.database??":memory:"),e.driverOptions),this.pool=this.db;}createPool(){}async closePool(){this.db.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.db,o=r.sqlLiteOptions??{},s=o.mode||"fetch";return ["begin","begin transaction","commit","rollback"].includes(t.trim().toLowerCase())?n.query(t).run(...e).changes:s==="fetch"?n.query(t).all(...e):o?.typeofModel?s==="insertOne"||s==="insertMany"?n.query(`${t} returning *`).all(...e):n.query(t).run(...e).changes:n.query(t).run(...e).changes}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.db;return oy(o.query(t).iterate(...e),r,n)}};});var ly={};fu(ly,{registerBunDrivers:()=>qg});var qg,uy=Ie(()=>{Ot();iy();ay();qg=async()=>{let{SQL:i}=await import('bun'),{Database:t}=await import('bun:sqlite');ge({name:"bun-sql",dialects:["postgres","cockroachdb","mysql","mariadb"],environments:["bun"],create:async({dialect:e,input:r})=>new Mn(e,r,i)}),ge({name:"bun-sqlite",dialects:["sqlite"],environments:["bun"],create:async({dialect:e,input:r})=>new xn(e,r,t)});};});var Cg,On,Xl,eu=Ie(()=>{er();Cg=async i=>(await(await import('@sqlite.org/sqlite-wasm')).default(i)).oo1,On=class{constructor(t,e,r=Cg,n){this.dialect="sqlite";this.jsEnvironment="web";this.filename=String(e.database??":memory:"),this.loader=r,this.initConfig=n;}async createPool(){let t=await this.loader(this.initConfig),{filename:e}=this;this.db=e.startsWith(":memory:")||e===""?new t.DB(e):t.OpfsDb?new t.OpfsDb(e,"c"):new t.DB(e,"c"),this.pool=this.db;}async closePool(){this.db?.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.requireDb(),o=r.sqlLiteOptions??{},s=o.mode||"fetch",a=u=>(n.exec(u,{bind:e}),n.changes());return Xl(t)?a(t):s==="fetch"?n.selectObjects(t,e):o?.typeofModel&&(s==="insertOne"||s==="insertMany")?n.selectObjects(`${t} returning *`,e):a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.requireDb();return Dt(o.selectObjects(t,e),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-wasm: pool not created, await createPool() before querying");return this.db}},Xl=i=>["begin","begin transaction","commit","rollback"].includes(i.trim().toLowerCase());});var tu,Dn,dy=Ie(()=>{er();eu();tu=i=>Array.isArray(i)?i:i?._array??[],Dn=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="react-native";this.filename=String(e.database??":memory:"),this.engine=r;}createPool(){this.db=this.engine.open({name:this.filename}),this.pool=this.db;}async closePool(){this.db?.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.requireDb(),o=r.sqlLiteOptions??{},s=o.mode||"fetch",a=async u=>(await n.execute(u,e)).rowsAffected??0;if(Xl(t))return a(t);if(s==="fetch"){let u=await n.execute(t,e);return tu(u.rows)}if(!o?.typeofModel)return a(t);if(s==="insertOne"||s==="insertMany"){let u=await n.execute(`${t} returning *`,e);return tu(u.rows)}return a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let s=await(r.connection??this.requireDb()).execute(t,e);return Dt(tu(s.rows),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-rn: pool not created, await createPool() before querying");return this.db}};});var ru={};fu(ru,{registerReactNativeDrivers:()=>_g,registerWebDrivers:()=>Rg});var cy,my,Rg,py,_g,nu=Ie(()=>{Ot();dy();eu();cy=false,Rg=i=>{cy||(cy=true,my=i,ge({name:"sqlite-wasm",dialects:["sqlite"],environments:["web"],create:({dialect:t,input:e})=>new On(t,e,void 0,my)}));},py=false,_g=async()=>{if(py)return;py=true;let i=await import('@op-engineering/op-sqlite');ge({name:"sqlite-rn",dialects:["sqlite"],environments:["react-native"],create:({dialect:t,input:e})=>new Dn(t,e,i)});};});var $t=i=>{switch(i){case "mysql":return "mysql";case "mariadb":return "mariadb";case "postgres":case "cockroachdb":return "postgresql";case "sqlite":return "sqlite";case "mssql":return "transactsql";default:return "sql"}},Qn=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)},It=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,Qn(t[r]));for(let r=0;r<t.length;r++){let n=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(n,Qn(t[r]));}for(let r=0;r<t.length;r++){let n=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(n,Qn(t[r]));}return e},at=(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:false:false,vt=(i,t)=>{let e=i.getDbType(),r;try{r=format(t,{...i.inputDetails.queryFormatOptions,language:$t(e)});}catch{try{r=format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var Tu={info:0,warn:1,error:2};function ur(i){return i?i===true?{level:"info",logQueries:true}:{level:i.level??"info",logQueries:i.logQueries??true,customLogger:i.customLogger}:null}function Ly(i,t="info"){let e=ur(i);if(!e)return false;let r=e.level??"info";return Tu[t]>=Tu[r]}function Wy(i){let t=ur(i);return t?t.logQueries??true:false}var Qe={info:"32",warn:"33",error:"31",query:"35",dim:"2",cyan:"36"},jy=typeof process<"u"&&!!process.stdout?.isTTY&&!process.env.NO_COLOR,lt=(i,t)=>jy?`\x1B[${i}m${t}\x1B[0m`:t;function qu(){let i=new Date,t=r=>r.toString().padStart(2,"0"),e=i.getMilliseconds().toString().padStart(3,"0");return `${t(i.getHours())}:${t(i.getMinutes())}:${t(i.getSeconds())}.${e}`}function Kn(i,t){let e=lt(Qe.dim,`[${qu()}]`),r=lt(Qe[i],i.toUpperCase().padEnd(5));return `${e} ${r} ${t}`}var Fy=60,Uy=10,wu=400;function lr(i,t=Fy){return i.length<=t?i:`${i.slice(0,t)}\u2026`}function Vy(i){if(i==null)return "null";if(typeof i=="string")return `'${lr(i)}'`;if(typeof i=="number"||typeof i=="bigint")return String(i);if(typeof i=="boolean")return i?"true":"false";if(i instanceof Date)return `'${lr(i.toISOString())}'`;if(typeof i=="object"){let t;try{t=JSON.stringify(i);}catch{t=String(i);}return `'${lr(t)}'`}return lr(String(i))}function Jy(i){if(!i||i.length===0)return "[]";let t=i.slice(0,Uy).map(Vy),e=i.length-t.length;e>0&&t.push(`\u2026 (${e} more)`);let r=`[${t.join(", ")}]`;return r.length>wu&&(r=`${r.slice(0,wu)}\u2026`),r}var Su=(i,t)=>{let e=" ".repeat(t);return i.split(`
|
|
2
|
+
import {PassThrough,Readable}from'stream';import {Command}from'commander';import ae,{promises}from'fs';import ft from'path';import Au from'fs/promises';import {format}from'sql-formatter';import {highlight}from'sql-highlight';import {createRequire}from'module';import {pathToFileURL}from'url';import Pe,{privateDecrypt,publicEncrypt}from'crypto';import {AsyncLocalStorage}from'async_hooks';import {execSync}from'child_process';import zg from'readline';var bu=Object.defineProperty;var Tu=i=>{throw TypeError(i)};var Ie=(i,t)=>()=>(i&&(t=i(i=0)),t);var wu=(i,t)=>{for(var e in t)bu(i,e,{get:t[e],enumerable:true});};var Su=(i,t,e,r)=>{for(var n=void 0,o=i.length-1,s;o>=0;o--)(s=i[o])&&(n=(s(t,e,n))||n);return n&&bu(t,e,n),n};var Uf=(i,t,e)=>t.has(i)||Tu("Cannot "+e);var Nu=(i,t,e)=>t.has(i)?Tu("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);var qu=(i,t,e)=>(Uf(i,t,"access private method"),e);var L,le=Ie(()=>{L=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};});var lf,be,Rg,uf,$t=Ie(()=>{le();lf=[],be=i=>{lf.push(i);},Rg=async(i,t,e,r)=>{if(!Array.isArray(t?.dialects))throw new Error(`driver must be a registered driver name or a DriverAdapterFactory with a "dialects" array (got ${typeof t}).`);if(!t.dialects.includes(i))throw new Error(`driver "${t.name}" does not support dialect "${i}" (declares: ${t.dialects.join(", ")}).`);return t.create({dialect:i,jsEnvironment:e,input:r})},uf=async(i,t,e,r)=>{if(e&&typeof e!="string")return Rg(i,e,t,r);let n=lf.filter(l=>l.dialects.includes(i)),o=(l,u)=>(l.environments??["node"]).includes(u),s=(l,u)=>(e?l.name===e:true)&&o(l,u),a=n.find(l=>s(l,t));if(a)return a.create({dialect:i,jsEnvironment:t,input:r});if(t==="bun"){let l=n.find(u=>s(u,"node"));if(l)return l.create({dialect:i,jsEnvironment:t,input:r})}throw new L(e??i)};});var It,Dg,cf,nr=Ie(()=>{It=async(i,t={},e)=>{let r=new PassThrough({objectMode:t.objectMode??true,highWaterMark:t.highWaterMark});try{for(let n of i)e.onData?await e.onData(r,n):r.write(n);r.end();}catch(n){r.destroy(n);}return r},Dg=i=>{if(i.writableNeedDrain)return new Promise(t=>i.once("drain",()=>t()))},cf=async(i,t={},e)=>{let r=new PassThrough({objectMode:t.objectMode??true,highWaterMark:t.highWaterMark});try{for(let n of i)e.onData?await e.onData(r,n):r.write(n),await Dg(r);r.end();}catch(n){r.destroy(n);}return r};});var mf,Dn,pf=Ie(()=>{nr();mf=i=>{if(!i||typeof i!="object")return i;let t=i,e=t.errno,r=typeof e=="string"&&/^[0-9A-Z]{5}$/.test(e),n=typeof t.code=="string"&&t.code.startsWith("ERR_");return !r||!n||(t.cause===void 0&&(t.cause=i),t.code=e),i},Dn=class{constructor(t,e,r){this.jsEnvironment="bun";this.dialect=t;let n={hostname:e.host,port:e.port,username:e.username,password:e.password,database:e.database,...e.driverOptions};(t==="mysql"||t==="mariadb")&&(n.adapter="mysql",n.allowPublicKeyRetrieval=true),this.sql=new r(n),this.pool=this.sql;}createPool(){}async closePool(){this.sql.close();}async reserveConnection(){return this.sql.reserve()}releaseConnection(t){t?.release();}async beginTransaction(t,e){(this.dialect==="mysql"||this.dialect==="mariadb")&&e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await e.rawQuery(this.dialect==="mysql"||this.dialect==="mariadb"?"START TRANSACTION":"BEGIN TRANSACTION"),(this.dialect==="postgres"||this.dialect==="cockroachdb")&&e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.sql,o;try{o=await n.unsafe(t,e);}catch(a){throw mf(a)}if(this.dialect==="mysql"||this.dialect==="mariadb"){let a=/^\s*(select|show|desc(ribe)?|explain)\b/i.test(t);if(Array.isArray(o)&&(a||o.length>0))return [o,void 0];let l=o;return [{affectedRows:Number(l.affectedRows),insertId:Number(l.lastInsertRowid)},void 0]}let s=o;return Array.isArray(o)&&!((s.command==="INSERT"||s.command==="UPDATE"||s.command==="DELETE")&&o.length===0)?{rows:o,rowCount:o.length}:{rows:[],rowCount:s.count??s.affectedRows??0}}extract(t,e){if(e==="raw")return t;if(this.dialect==="mysql"||this.dialect==="mariadb"){let n=t;return e==="affectedRows"?n[0]?.affectedRows??0:n[0]}let r=t;return e==="affectedRows"?r.rowCount:r.rows}async stream(t,e,r,n){let o=r.connection??this.sql,s;try{s=await o.unsafe(t,e);}catch(l){throw mf(l)}let a=Array.isArray(s)?s:[];return It(a,r,n)}};});var $n,yf=Ie(()=>{nr();$n=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="bun";this.db=new r(String(e.database??":memory:"),e.driverOptions),this.pool=this.db;}createPool(){}async closePool(){this.db.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.db,o=r.sqlLiteOptions??{},s=o.mode||"fetch";return ["begin","begin transaction","commit","rollback"].includes(t.trim().toLowerCase())?n.query(t).run(...e).changes:s==="fetch"?n.query(t).all(...e):o?.typeofModel?s==="insertOne"||s==="insertMany"?n.query(`${t} returning *`).all(...e):n.query(t).run(...e).changes:n.query(t).run(...e).changes}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.db;return cf(o.query(t).iterate(...e),r,n)}};});var ff={};wu(ff,{registerBunDrivers:()=>$g});var $g,hf=Ie(()=>{$t();pf();yf();$g=async()=>{let{SQL:i}=await import('bun'),{Database:t}=await import('bun:sqlite');be({name:"bun-sql",dialects:["postgres","cockroachdb","mysql","mariadb"],environments:["bun"],create:async({dialect:e,input:r})=>new Dn(e,r,i)}),be({name:"bun-sqlite",dialects:["sqlite"],environments:["bun"],create:async({dialect:e,input:r})=>new $n(e,r,t)});};});var Ig,In,su,iu=Ie(()=>{nr();Ig=async i=>(await(await import('@sqlite.org/sqlite-wasm')).default(i)).oo1,In=class{constructor(t,e,r=Ig,n){this.dialect="sqlite";this.jsEnvironment="web";this.filename=String(e.database??":memory:"),this.loader=r,this.initConfig=n;}async createPool(){let t=await this.loader(this.initConfig),{filename:e}=this;this.db=e.startsWith(":memory:")||e===""?new t.DB(e):t.OpfsDb?new t.OpfsDb(e,"c"):new t.DB(e,"c"),this.pool=this.db;}async closePool(){this.db?.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.requireDb(),o=r.sqlLiteOptions??{},s=o.mode||"fetch",a=u=>(n.exec(u,{bind:e}),n.changes());return su(t)?a(t):s==="fetch"?n.selectObjects(t,e):o?.typeofModel&&(s==="insertOne"||s==="insertMany")?n.selectObjects(`${t} returning *`,e):a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.requireDb();return It(o.selectObjects(t,e),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-wasm: pool not created, await createPool() before querying");return this.db}},su=i=>["begin","begin transaction","commit","rollback"].includes(i.trim().toLowerCase());});var au,vn,gf=Ie(()=>{nr();iu();au=i=>Array.isArray(i)?i:i?._array??[],vn=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="react-native";this.filename=String(e.database??":memory:"),this.engine=r;}createPool(){this.db=this.engine.open({name:this.filename}),this.pool=this.db;}async closePool(){this.db?.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.requireDb(),o=r.sqlLiteOptions??{},s=o.mode||"fetch",a=async u=>(await n.execute(u,e)).rowsAffected??0;if(su(t))return a(t);if(s==="fetch"){let u=await n.execute(t,e);return au(u.rows)}if(!o?.typeofModel)return a(t);if(s==="insertOne"||s==="insertMany"){let u=await n.execute(`${t} returning *`,e);return au(u.rows)}return a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let s=await(r.connection??this.requireDb()).execute(t,e);return It(au(s.rows),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-rn: pool not created, await createPool() before querying");return this.db}};});var lu={};wu(lu,{registerReactNativeDrivers:()=>Pg,registerWebDrivers:()=>vg});var bf,Tf,vg,wf,Pg,uu=Ie(()=>{$t();gf();iu();bf=false,vg=i=>{bf||(bf=true,Tf=i,be({name:"sqlite-wasm",dialects:["sqlite"],environments:["web"],create:({dialect:t,input:e})=>new In(t,e,void 0,Tf)}));},wf=false,Pg=async()=>{if(wf)return;wf=true;let i=await import('@op-engineering/op-sqlite');be({name:"sqlite-rn",dialects:["sqlite"],environments:["react-native"],create:({dialect:t,input:e})=>new vn(t,e,i)});};});var Pt=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";default:return "sql"}},jn=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)},Et=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,jn(t[r]));for(let r=0;r<t.length;r++){let n=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(n,jn(t[r]));}for(let r=0;r<t.length;r++){let n=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(n,jn(t[r]));}return e},lt=(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:false:false,Bt=(i,t)=>{let e=i.getDbType(),r;try{r=format(t,{...i.inputDetails.queryFormatOptions,language:Pt(e)});}catch{try{r=format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var Ru={info:0,warn:1,error:2};function mr(i){return i?i===true?{level:"info",logQueries:true}:{level:i.level??"info",logQueries:i.logQueries??true,customLogger:i.customLogger}:null}function Hf(i,t="info"){let e=mr(i);if(!e)return false;let r=e.level??"info";return Ru[t]>=Ru[r]}function zf(i){let t=mr(i);return t?t.logQueries??true:false}var Qe={info:"32",warn:"33",error:"31",query:"35",dim:"2",cyan:"36"},Gf=typeof process<"u"&&!!process.stdout?.isTTY&&!process.env.NO_COLOR,ut=(i,t)=>Gf?`\x1B[${i}m${t}\x1B[0m`:t;function Ou(){let i=new Date,t=r=>r.toString().padStart(2,"0"),e=i.getMilliseconds().toString().padStart(3,"0");return `${t(i.getHours())}:${t(i.getMinutes())}:${t(i.getSeconds())}.${e}`}function Fn(i,t){let e=ut(Qe.dim,`[${Ou()}]`),r=ut(Qe[i],i.toUpperCase().padEnd(5));return `${e} ${r} ${t}`}var Yf=60,Zf=10,_u=400;function cr(i,t=Yf){return i.length<=t?i:`${i.slice(0,t)}\u2026`}function Xf(i){if(i==null)return "null";if(typeof i=="string")return `'${cr(i)}'`;if(typeof i=="number"||typeof i=="bigint")return String(i);if(typeof i=="boolean")return i?"true":"false";if(i instanceof Date)return `'${cr(i.toISOString())}'`;if(typeof i=="object"){let t;try{t=JSON.stringify(i);}catch{t=String(i);}return `'${cr(t)}'`}return cr(String(i))}function eh(i){if(!i||i.length===0)return "[]";let t=i.slice(0,Zf).map(Xf),e=i.length-t.length;e>0&&t.push(`\u2026 (${e} more)`);let r=`[${t.join(", ")}]`;return r.length>_u&&(r=`${r.slice(0,_u)}\u2026`),r}var Mu=(i,t)=>{let e=" ".repeat(t);return i.split(`
|
|
3
3
|
`).map(r=>`${e}${r}`).join(`
|
|
4
|
-
`)};function
|
|
5
|
-
`)}var
|
|
4
|
+
`)};function th(i){let t=i<10?Qe.info:i<100?Qe.warn:Qe.error;return ut(t,`(${i}ms)`)}function rh(i,t,e){let r=ut(Qe.dim,`[${Ou()}]`),n=ut(Qe.query,"QUERY"),s=[e===void 0?`${r} ${n}`:`${r} ${n} ${th(e)}`,Mu(i,2)];return t&&t.length>0&&s.push(Mu(`parameters: ${ut(Qe.cyan,eh(t))}`,4)),s.join(`
|
|
5
|
+
`)}var xu={info(i){console.log(Fn("info",i));},error(i){console.error(Fn("error",i));},warn(i){console.warn(Fn("warn",i));}},dt=class{static setCustomLogger(t){this.loggerInstance=t;}static info(t){this.loggerInstance.info(t);}static error(t){this.loggerInstance.error(t instanceof Error?String(t):t);}static warn(t){this.loggerInstance.warn(t);}static query(t){if(this.loggerInstance===xu){console.log(t);return}this.loggerInstance.info(t);}};dt.loggerInstance=xu;function ct(i,t,e,r,n,o){if(!zf(t))return;let s=i;if(r||n)try{s=format(i,{...r,language:r?.language??(n?Pt(n):void 0)});}catch{s=i;}let a=highlight(s,{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"}});dt.query(rh(a,e,o));}function Un(i,t,e=false){Hf(e,t)&&dt.loggerInstance[t](i);}var g=dt;var Vn=class{parseGetAllTables(t,e,r){switch(t){case "mysql":case "mariadb":return r[0].map(o=>o[`Tables_in_${e}`]);case "cockroachdb":case "postgres":return r.rows.map(o=>o.table_name);case "mssql":return r.recordset.map(o=>o.TABLE_NAME);default:throw new Error(`Unsupported database type: ${t}`)}}getAllTablesTemplate(t,e){switch(t){case "mysql":case "mariadb":return `SHOW TABLES FROM ${e};`;case "cockroachdb":case "postgres":return `SELECT table_name
|
|
6
6
|
FROM information_schema.tables
|
|
7
7
|
WHERE table_catalog = '${e}'
|
|
8
8
|
AND table_schema = 'public'
|
|
@@ -111,20 +111,20 @@ CREATE TABLE [migrations] (
|
|
|
111
111
|
[name] NVARCHAR(255) NOT NULL,
|
|
112
112
|
[timestamp] DATETIME NOT NULL DEFAULT GETDATE(),
|
|
113
113
|
PRIMARY KEY ([id])
|
|
114
|
-
);`}},
|
|
114
|
+
);`}},re=new Vn;async function Jn(i,t=true,e){let r=i.getDbType(),n=i.database;r||(g.error("DB_TYPE is not set could not drop all tables"),process.exit(1)),n||(g.error("DB_DATABASE is not set could not drop all tables"),process.exit(1)),g.info("Dropping all tables for database type: "+r);let o=null,s=e&&r==="postgres";try{if(r==="sqlite"){await i.disconnect(),await Au.rm(n,{recursive:!0,force:!0}),g.info("Sqlite database dropped successfully"),await Au.writeFile(n,""),g.info("Sqlite database recreated successfully"),await i.connect(),g.info("All tables dropped successfully");return}let a=re.getAllTablesTemplate(r,n),l=await i.rawQuery(a),u=re.parseGetAllTables(r,n,l);if(!u.length){g.info("No tables to drop");return}let d=re.dropAllTablesTemplate(r,u);if(s&&(o=await i.transaction(),i=o.sql),(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 0;"),r==="mssql"){let c=(await i.rawQuery(`
|
|
115
115
|
SELECT
|
|
116
116
|
OBJECT_NAME(parent_object_id) AS table_name,
|
|
117
117
|
name AS constraint_name
|
|
118
118
|
FROM sys.foreign_keys;
|
|
119
|
-
`)).recordset;for(let p of
|
|
120
|
-
`).forEach(r=>{let[n,o]=r.split("="),s=n.trim(),a=o.trim();switch(s){case "DB_TYPE":I.DB_TYPE||(I.DB_TYPE=a);break;case "DB_HOST":I.DB_HOST||(I.DB_HOST=a);break;case "DB_PORT":I.DB_PORT||(I.DB_PORT=a);break;case "DB_USER":I.DB_USER||(I.DB_USER=a);break;case "DB_PASSWORD":I.DB_PASSWORD||(I.DB_PASSWORD=a);break;case "DB_DATABASE":I.DB_DATABASE||(I.DB_DATABASE=a);break;case "MIGRATION_PATH":I.MIGRATION_PATH||(I.MIGRATION_PATH=a||"database/migrations");break;case "REDIS_HOST":I.REDIS_HOST||(I.REDIS_HOST=a);break;case "REDIS_PORT":I.REDIS_PORT||(I.REDIS_PORT=a);break;case "REDIS_USERNAME":I.REDIS_USERNAME||(I.REDIS_USERNAME=a);break;case "REDIS_PASSWORD":I.REDIS_PASSWORD||(I.REDIS_PASSWORD=a);break;case "REDIS_DATABASE":I.REDIS_DATABASE||(I.REDIS_DATABASE=a);break;case "MONGO_URL":I.MONGO_URL||(I.MONGO_URL=a);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":I.MSSQL_TRUST_SERVER_CERTIFICATE||(I.MSSQL_TRUST_SERVER_CERTIFICATE=a==="true");break}});}catch{}finally{return I}},E=Xy();var eh=()=>{let i=E.MIGRATION_PATH,t=ft.resolve(process.cwd(),i);return ae.existsSync(t)||ae.mkdirSync(t,{recursive:true}),t},Ou=(i,t=false,e="basic",r="table")=>{let n=eh(),o=new Date().getTime(),s=t?`${o}_${i}.js`:`${o}_${i}.ts`,a=ft.join(n,s),l;switch(e){case "alter":l=te.alterMigrationTemplate(t,r);break;case "create":l=te.createMigrationTemplate(t,r);break;default:l=te.basicMigrationTemplate(t);break}ae.writeFileSync(a,l),g.info(`Migration created successfully at '${a}'.`),process.exit(0);};var T=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}},Et=class extends T{constructor(t){super("ValidationError","VALIDATION_ERROR"),this.errors=t;}};async function nh(i){try{return import(pathToFileURL(i).href)}catch{let e=createRequire(import.meta.url)(i);return {default:e.default||e,...e}}}async function oh(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 ae.promises.unlink(r).catch(()=>{});}}async function pt(i,t){let e=ft.isAbsolute(i)?i:ft.resolve(process.cwd(),i);return e.endsWith(".ts")?oh(e):nh(e)}var ah=async(i,t)=>{if(i.endsWith(".ts"))return pt(i);try{return import(pathToFileURL(i).href)}catch{let n=createRequire(import.meta.url);try{let o=n(i);return {default:o.default||o,...o}}catch{throw new T(`MigrationUtils::importMigrationFile Failed to import migration file: ${i}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function fr(i,t){switch(i){case "mariadb":case "mysql":return await t.rawQuery(te.migrationTableTemplateMysql()),(await t.rawQuery(te.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":return await t.rawQuery(te.migrationTableTemplatePg()),(await t.rawQuery(te.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await t.rawQuery(te.migrationTableTemplateSQLite()),await t.rawQuery(te.selectAllFromMigrationsTemplate());case "mssql":return await t.rawQuery(te.migrationTableTemplateMssql()),(await t.rawQuery(te.selectAllFromMigrationsTemplate())).recordset;default:throw new T("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function yr(i,t,e){let r=uh(t),n=[];for(let{name:o,fullPath:s}of r){let a=await lh(s),l=new a(i||E.DB_TYPE);l.migrationName=o,n.push(l);}return n}async function lh(i,t){let e=await ah(i);if(!e.default)throw new T("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}function uh(i){let t=process.cwd(),e=i||E.MIGRATION_PATH||"database/migrations",r=/[*?{}\[\]]/.test(e);if(!r){let s=ft.isAbsolute(e)?e:ft.resolve(t,e);if(!ae.existsSync(s))return ae.mkdirSync(s,{recursive:true}),[]}let n=r?e:ft.join(e,"**/*.{ts,js}"),o=ft.isAbsolute(n)?n:ft.resolve(t,n);try{return ae.globSync(o).filter(a=>ae.statSync(a).isFile()).sort().map(a=>({name:ft.basename(a),fullPath:a}))}catch{return []}}async function Bt(i,t,e,r,n){let o=i.getDbType(),s=n&&o!=="mssql",a=null;g.info("Running migrations for database type: "+o);try{let l=await fr(o,i),d=(await yr(o,e,r)).filter(m=>!l.map(p=>p.name).includes(m.migrationName));if(!d.length){g.info("No pending migrations.");return}if(t){let m=d.findIndex(f=>f.migrationName===t);if(m===-1){console.error(`Migration ${t} not found.`);return}let p=d.slice(0,m+1);s&&(a=await i.transaction(),i=a.sql),await new We(i).upMigrations(p),s&&await a?.commit(),g.info("Migrations ran successfully");return}s&&(a=await i.transaction(),i=a.sql),await new We(i).upMigrations(d),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}g.info("Migrations ran successfully");}le();var hr={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 Iu=null;function Xe(i,t){return t.getModelManager(i)}function $u(i,t,e){if(!t||typeof t!="object")return;let r=t;if(!r.filters)return;let n=e.getColumns();for(let[o,s]of Object.entries(r.filters)){let a=s.value;if(a==null||a==="")continue;let l=n.find(c=>c.columnName===o||c.databaseName===o);if(!l)continue;let u=typeof l.type=="string"?l.type:"string",d=hr[u]||"string";if(d==="string"||d==="textarea"){i.whereLike(o,`%${a}%`);continue}if(d==="boolean"){i.where(o,a==="true"||a===true);continue}if(d==="date"||d==="datetime"){if(typeof a=="object"&&a!==null){let c=a;c.from&&i.where(o,">=",c.from),c.to&&i.where(o,"<=",c.to);continue}i.where(o,a);continue}i.where(o,a);}}function kt(i,t){let e={},r=t.getColumns();for(let n of r){let o=i[n.columnName];e[n.columnName]=o;}return e}async function dh(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(o){super(o),this._model=o,this._db=Iu;}static isAdapterFor(o){if(typeof o!="function")return false;let s=o;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=hr[a]||"string";return new r({path:s.columnName,type:l,isId:s.isPrimary,isSortable:true})})}property(o){let a=this._model.getColumns().find(d=>d.columnName===o||d.databaseName===o);if(!a)return null;let l=typeof a.type=="string"?a.type:"string",u=hr[l]||"string";return new r({path:a.columnName,type:u,isId:a.isPrimary,isSortable:true})}async count(o){let a=Xe(this._model,this._db).query();return $u(a,o,this._model),a.getCount()}async find(o,s={}){let l=Xe(this._model,this._db).query();return $u(l,o,this._model),s.limit&&l.limit(s.limit),s.offset&&l.offset(s.offset),s.sort?.sortBy&&l.orderBy(s.sort.sortBy,s.sort.direction||"asc"),(await l.many()).map(d=>new e(kt(d,this._model),this))}async findOne(o){if(!this._model.primaryKey)return null;let l=await Xe(this._model,this._db).findOneByPrimaryKey(o);return l?new e(kt(l,this._model),this):null}async findMany(o){let s=this._model.primaryKey;return s?(await Xe(this._model,this._db).query().whereIn(s,o).many()).map(u=>new e(kt(u,this._model),this)):[]}async create(o){let a=await Xe(this._model,this._db).insert(o,{returning:["*"]});return kt(a,this._model)}async update(o,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=Xe(this._model,this._db);if(!await l.findOneByPrimaryKey(o))throw new Error("Record not found");let d=await l.updateRecord(o,s,{returning:["*"]});return kt(d,this._model)}async delete(o){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=Xe(this._model,this._db);await a.findOneByPrimaryKey(o)&&await a.deleteRecord(o);}}}async function ch(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function mh(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),t=await dh(),e=await ch();i.default.registerAdapter({Database:e,Resource:t});}async function Hn(i,t){Iu=i;let e=await import('adminjs').catch(()=>{throw new L("adminjs")});await mh();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 n=r.map(a=>{let l=t.resourceOptions?.[a.table]||{};return {resource:a,options:l}}),o={rootPath:t.rootPath||"/admin",resources:n};if(t.branding&&(o.branding=t.branding),t.locale?.language&&(o.locale=t.locale),t.assets&&(o.assets=t.assets),t.settings&&(o.settings=t.settings),t.pages){let a={};for(let[l,u]of Object.entries(t.pages))u.component&&(a[l]=u);Object.keys(a).length>0&&(o.pages=a);}return {admin:new e.default(o)}}async function vu(i,t){let{admin:e}=await Hn(i,t),r;try{r=await import('@adminjs/express');}catch{throw new L("@adminjs/express")}let n=r.buildRouter(e);return {admin:e,router:n}}var yt=new Map,je=new Map,gr=class{async get(t){return yt.get(t)}async set(t,e,r){let n=je.get(t);if(n&&(clearTimeout(n),je.delete(t)),yt.set(t,e),r){let o=setTimeout(()=>{yt.delete(t),je.delete(t);},r);je.set(t,o);}}async invalidate(t){let e=je.get(t);e&&(clearTimeout(e),je.delete(t)),yt.delete(t);}async invalidateAll(t){let e=yt.keys();for(let r of e)if(r.startsWith(t)){let n=je.get(r);n&&(clearTimeout(n),je.delete(r)),yt.delete(r);}}};var Qt=class{constructor(t){switch(this.type=t?.type||E.DB_TYPE,this.type){case "mongo":this.handleMongoSource(t);break;case "cockroachdb":this.handleCockroachdbSource(t);break;case "postgres":this.handlePostgresSource(t);break;case "mariadb":case "mysql":this.handleMysqlSource(t);break;case "sqlite":this.handleSqliteSource(t);break;case "mssql":this.handleMssqlSource(t);break;default:throw new T(`Invalid database type: ${this.type}, please provide a valid database type in your input or in the .env file with the key DB_TYPE
|
|
121
|
-
Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}let e=ur(this.logs);e?.customLogger&&g.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||E.DB_DATABASE||":memory:",this.logs=t?.logs||E.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||E.MONGO_URL,this.logs=t?.logs||E.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=1433);}};var ph=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},fh=i=>i.openApi?.required??false,yh=i=>{let t=i.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=ph(r));return e},hh=i=>{let t=i.getColumns(),e=[];for(let r of t)fh(r)&&e.push(r.columnName);return e||[]},gh=i=>{let t=yh(i),e=hh(i);return {type:"object",properties:t,required:e.length?e:[]}};var Pu=i=>i.map(t=>({...gh(t),modelName:t.table,$id:t.table}));var zn=(i,t)=>{let e=Pe.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var Gn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(n+=` ${s.join(" ")}`);}return {sql:`add ${n}`,bindings:[]}}},Eu=new Gn;var Yn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Bu=new Yn;var Zn=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`[${n}]`).join(", ")})`,bindings:[]}}},ku=new Zn;var Xn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),s=o.join(" ");e.newType.dataType==="uuid"&&(s=s.replace(/\s+default\s+.+$/i,"").trim());let a="";e.options.nullable!==void 0&&(a=e.options.nullable?" null":" not null");let l=`alter column [${e.column}] ${s}${a}`;if(e.options.dropDefault&&(l=`drop constraint DF_${e.column}, ${l}`),e.options.default!==void 0&&!e.options.dropDefault){let u=e.options.default;u===null?u="null":typeof u=="string"&&(u==="NULL"?u="null":u==="TRUE"||u==="FALSE"?u=u==="TRUE"?"1":"0":u=`'${u}'`),l+=`, add constraint DF_${e.column} default ${u} for [${e.column}]`;}return e.options.unique!==void 0&&e.options.unique&&(l+=`, add constraint UQ_${e.column} unique ([${e.column}])`),{sql:l,bindings:[]}}},Qu=new Xn;var N=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var ht=class extends N{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};function br(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 Tr(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function eo(i){if(typeof i!="string"||!i)return i;let t=Tr(i);return t.charAt(0).toUpperCase()+t.slice(1)}function H(i,t){return t==="preserve"?i:t==="snake"?br(i):t==="camel"?Tr(i):t==="pascal"?eo(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}function Me(i){return String(i).padStart(2,"0")}function Th(i,t){let e=i.getFullYear(),r=Me(i.getMonth()+1),n=Me(i.getDate()),o=Me(i.getHours()),s=Me(i.getMinutes()),a=Me(i.getSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${s}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${s}:${a}`;case "TIMESTAMP":return Math.floor(i.getTime()/1e3).toString()}}function Ku(i,t){let e=i.getUTCFullYear(),r=Me(i.getUTCMonth()+1),n=Me(i.getUTCDate()),o=Me(i.getUTCHours()),s=Me(i.getUTCMinutes()),a=Me(i.getUTCSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${s}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${s}:${a}`;case "TIMESTAMP":return Math.floor(i.getTime()/1e3).toString()}}var ue=(i,t="ISO",e="UTC")=>{if(!(i instanceof Date)||isNaN(i.getTime()))throw new Error("Invalid date provided");return e==="LOCAL"?Th(i,t):Ku(i,t)};var gt=(i=new Date)=>Ku(i,"ISO");var wh=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},to=i=>!i.expression&&(i.type==="date"||i.type==="datetime"||i.type==="timestamp"),y=class{constructor(t){this.model=t;this.modelColumnsMap=typeof t.getColumnsByName=="function"?t.getColumnsByName():new Map;let e=[],r=[];for(let n of this.modelColumnsMap.values())n.expression||((n.type==="ulid"||n.autoCreate==="js")&&e.push(n),n.autoUpdate&&r.push(n));this.jsInsertColumns=e,this.autoUpdateColumns=r;}formatStringColumn(t,e){if(e==="*")return "*";let r=this.resolveComputedExpression(e);if(r!==void 0)return `(${r})`;if(e.includes(".")){let[s,a]=e.split(".");if(a==="*")switch(t){case "mysql":case "mariadb":return `\`${s}\`.*`;case "postgres":case "cockroachdb":case "sqlite":return `"${s}".*`;case "mssql":return `[${s}].*`;default:throw new Error(`Unsupported database type: ${t}`)}let l=this.modelColumnsMap.get(a)?.databaseName??H(a,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${s}\`.\`${l}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${s}"."${l}"`;case "mssql":return `[${s}].[${l}]`;default:throw new Error(`Unsupported database type: ${t}`)}}let o=this.modelColumnsMap.get(e)?.databaseName??H(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${o}"`;case "mssql":return `[${o}]`;default:throw new Error(`Unsupported database type: ${t}`)}}resolveComputedExpression(t){let e=t.includes(".")?t.split(".").pop():t;return this.modelColumnsMap.get(e)?.expression}isComputedColumn(t){return !!this.modelColumnsMap.get(t)?.expression}filterComputedColumns(t){return this.modelColumnsMap.size===0?t:t.filter(e=>!this.isComputedColumn(e))}stripComputedFromData(t){if(this.modelColumnsMap.size===0)return t;let e={};for(let r of Object.keys(t))this.isComputedColumn(r)||(e[r]=t[r]);return e}formatStringColumnBare(t,e){let r=e.includes(".")?e.split(".")[1]:e;return this.formatStringColumn(t,r)}dialectEmitsReturning(t){switch(t){case "postgres":case "cockroachdb":case "sqlite":case "mssql":return true;default:return false}}shouldFetchNatively(t,e){if(!this.dialectEmitsReturning(t)||t==="mssql")return false;if(t==="sqlite"&&e==="update"){for(let r of this.modelColumnsMap.values())if(r.autoUpdate)return false}return true}hasComputedColumn(t){return t.some(e=>this.isComputedColumn(e))}resolveColumnAlias(t,e){let r=this.modelColumnsMap.get(e);if(!r||r.columnName===r.databaseName)return "";switch(t){case "mssql":return ` as [${r.columnName}]`;case "mysql":case "mariadb":return ` as \`${r.columnName}\``;case "postgres":case "cockroachdb":case "sqlite":return ` as "${r.columnName}"`;default:return ""}}formatStringTable(t,e){e=e.replace(/\s+/g," ").trim();let r="";return e.toLowerCase().includes(" as ")&&([e,r]=e.split(" as ")),`${e.split(".").map(o=>this.quoteIdentifier(t,o)).join(".")}${r?` as ${this.quoteIdentifier(t,r)}`:""}`}quoteIdentifier(t,e){switch(t){case "mysql":case "mariadb":return `\`${e}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${e}"`;case "mssql":return `[${e}]`;default:return e}}formatRawPlaceholders(t,e,r=[],n=1){if(!r.length)return {sql:e,bindings:[]};let o=n;return {sql:e.replace(/\?/g,()=>{switch(t){case "postgres":case "cockroachdb":return `$${o++}`;case "mssql":return `@${o++}`;default:return "?"}}),bindings:r}}prepareColumns(t,e,r="insert",n="postgres"){if(!t.length)return {columns:t,values:e};let o=[],s=[];for(let l=0;l<t.length;l++){let u=t[l],d=e[l];u!=="*"&&(o.push(u),s.push(d));}let a=n==="mysql"||n==="mariadb";for(let l=0;l<o.length;l++){let u=o[l],d=s[l],c=this.modelColumnsMap.get(u);if(c?.expression){o.splice(l,1),s.splice(l,1),l--;continue}if(!(d instanceof N)){if(!c){wh(d)&&(s[l]=JSON.stringify(d));continue}if(d==null&&(c.autoCreate===true||c.type==="uuid"&&n!=="mysql"&&n!=="mariadb")){o.splice(l,1),s.splice(l,1),l--;continue}if(c.prepare){let m=r==="insert"?c.prepare(d):c.prepare(d)??d;if(m!==null&&typeof m?.then=="function")throw new Error(`hysteria-orm: prepare on column "${u}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);s[l]=m;}n==="sqlite"&&s[l]instanceof Date&&to(c)&&(s[l]=ue(s[l],"ISO","UTC"));}}if(r==="insert"){let l=new Set(t);for(let u of this.jsInsertColumns)l.has(u.columnName)||this.generateJsInsertColumn(u,o,s,n);if(a){let u=this.model.primaryKey;if(u){let d=this.modelColumnsMap.get(u);d&&d.type==="uuid"&&d.isPrimary&&!l.has(u)&&this.generateJsInsertColumn(d,o,s,n);}}}else {let l=new Set(t);for(let u of this.autoUpdateColumns){if(l.has(u.columnName))continue;let d=u.prepare?.(new Date);if(d!=null){if(typeof d?.then=="function")throw new Error(`hysteria-orm: prepare on column "${u.columnName}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);o.push(u.columnName),s.push(n==="sqlite"&&d instanceof Date&&to(u)?ue(d,"ISO","UTC"):d);}}}return {columns:o,values:s}}generateJsInsertColumn(t,e,r,n){let o=t.prepare?.(void 0);if(o!==null&&typeof o?.then=="function")throw new Error(`hysteria-orm: prepare on column "${t.columnName}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);e.push(t.columnName),r.push(n==="sqlite"&&o instanceof Date&&to(t)?ue(o,"ISO","UTC"):o??void 0);}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new b(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}renderWithNodes(t,e,r){return e?.length?new b(this.model,t).parse(e,r):{sql:"",bindings:[]}}};var ro=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};if(e.children.length===1&&e.children[0]instanceof ht){let d=e.children[0];return {sql:`EXEC sp_rename '${e.table}', '${d.newName}'`,bindings:[]}}let o=new b(this.model,"mssql"),s=[],a=[];for(let d of e.children){let{sql:c,bindings:m}=o.parse([d]);s.push(c.trim()),a.push(...m);}let l=s.join(", ");return {sql:`${n} ${l}`,bindings:a}}},Lu=new ro;var no=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},Wu=new no;var oo=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},ju=new oo;var so=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},Fu=new so;var io=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] null`,bindings:[]}}},Uu=new io;var ao=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},Vu=new ao;var lo=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},Ju=new lo;var uo=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},Hu=new uo;var O=class extends N{constructor(e,r){super("raw",true);this.canKeywordBeSeenMultipleTimes=true;this.chainsWith=" ";this.currParamIndex=0;this.isRawValue=true;this.folder="raw";this.file="raw";this.rawValue=e,this.bindings=r;}};var v=class extends N{constructor(e,r=[]){super("sqlfunc");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="sqlfunc";this.file="sqlfunc";this.fn=e,this.args=r;}};var zu=new Map;function Fe(i,t){let e=i===void 0?void 0:zu.get(i),r=zu.get("*");return e?.(t)??r?.(t)}var co=class{toSql(t){let e=t,r;return e.defaultValue instanceof O?r=e.defaultValue.rawValue:e.defaultValue instanceof v?r=new b(this.model,"mssql").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"||e.defaultValue===null?r="null":e.defaultValue==="TRUE"?r="1":e.defaultValue==="FALSE"?r="0":typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="1"&&e.defaultValue!=="0"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`add constraint DF_${e.column} default ${r} for [${e.column}]`,bindings:[]}}},Gu=new co;var mo=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] not null`,bindings:[]}}},Yu=new mo;var po=class{toSql(t){return {sql:"",bindings:[]}}},Zu=new po;function fo(i){return i.replace(/^[`"]|[`"]$/g,"")}function yo(i,t,e){if(!i.includes(".")){let o=fo(i);return `${t}.${o}`}let[r,n]=i.split(".");return r=fo(r),n=fo(n),r!==e?i:n==="*"?`${t}.*`:`${t}.${n}`}function C(i){return typeof i=="function"?i():i}var W=(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 n=0;n<i.length;n++)r[n]=W(i[n],t);return r}let e=Object.create(Object.getPrototypeOf(i)||{});t.set(i,e);for(let r of Object.getOwnPropertyNames(i)){let n=i[r];if(typeof n=="function"){e[r]=n;continue}e[r]=W(n,t);}return e};var ho=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new y(this.model).formatStringColumn("mssql",C(e.column)),o=e.dataType.toLowerCase();if(o==="char"){let a=e.length??1;return {sql:`${n} char(${a})`,bindings:[]}}if(o==="varchar"){let a=e.length??255;return {sql:`${n} varchar(${a})`,bindings:[]}}if(o==="text"||o==="longtext"||o==="mediumtext"||o==="tinytext")return {sql:`${n} varchar(max)`,bindings:[]};if(o==="uuid"){let a=e.isForeignKey?"":" default NEWID()";return {sql:`${n} uniqueidentifier${a}`,bindings:[]}}if(o==="ulid")return {sql:`${n} varchar(26)`,bindings:[]};if(o==="bigint")return e.autoIncrement?{sql:`${n} bigint identity(1,1)`,bindings:[]}:{sql:`${n} bigint`,bindings:[]};if(o==="tinyint")return {sql:`${n} tinyint`,bindings:[]};if(o==="smallint")return {sql:`${n} smallint`,bindings:[]};if(o==="mediumint")return {sql:`${n} int`,bindings:[]};if(o==="float"||o==="real")return {sql:`${n} real`,bindings:[]};if(o==="double")return {sql:`${n} float`,bindings:[]};if(o==="decimal"||o==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${n} decimal(${a}, ${l})`,bindings:[]}}if(o==="date")return {sql:`${n} date`,bindings:[]};if(o==="year")return {sql:`${n} smallint`,bindings:[]};if(o==="time"){let a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${n} time${a}`,bindings:[]}}if(o==="datetime"||o==="timestamp"){let a=typeof e.precision=="number"?`(${e.precision})`:"",l=`${n} datetime2${a}`;return e.autoCreate&&(l+=" default current_timestamp"),{sql:l,bindings:[]}}if(o==="boolean"||o==="bool")return {sql:`${n} bit`,bindings:[]};if(o==="bytea"||o==="binary"||o==="varbinary"||o==="blob"||o==="longblob"||o==="mediumblob"||o==="tinyblob")return {sql:`${n} varbinary(max)`,bindings:[]};if(o==="json"||o==="jsonb")return {sql:`${n} nvarchar(max)`,bindings:[]};if(o==="enum"){if(e.enumValues&&e.enumValues.length>0){let a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${n} varchar(255) check (${n} in (${a}))`,bindings:[]}}return {sql:`${n} varchar(255)`,bindings:[]}}if(o==="integer"||o==="int")return e.autoIncrement?{sql:`${n} int identity(1,1)`,bindings:[]}:{sql:`${n} int`,bindings:[]};if(o==="geometry")return {sql:`${n} geometry`,bindings:[]};if(o==="point")return {sql:`${n} geometry`,bindings:[]};if(o==="linestring")return {sql:`${n} geometry`,bindings:[]};if(o==="polygon")return {sql:`${n} geometry`,bindings:[]};if(o==="multipoint")return {sql:`${n} geometry`,bindings:[]};let s=e.length?`(${e.length})`:"";return {sql:`${n} ${o}${s}`,bindings:[]}}},Xu=new ho;var go=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
122
|
-
`:e,bindings:[]}}},ed=new go;var bo=class{toSql(t){return {sql:"",bindings:[]}}},td=new bo;var To=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let n=e.constraintName?`constraint [${e.constraintName}] `:"",o=(e.columns??[]).map(s=>r.formatStringColumn("mssql",C(s))).join(", ");return {sql:`${n}primary key (${o})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns??[],o=e.constraintName?`constraint [${e.constraintName}] `:"",s=n.map(a=>r.formatStringColumn("mssql",C(a))).join(", ");return e.constraintName?{sql:`${o}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 n=e.defaultValue;return n instanceof O?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof v?{sql:`default ${new b(this.model,"mssql").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"?{sql:"default 1",bindings:[]}:n==="FALSE"?{sql:"default 0",bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let n=e.columns.map(u=>r.formatStringColumn("mssql",C(u))).join(", ");if(!e.references)return {sql:"",bindings:[]};let o=r.formatStringTable("mssql",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("mssql",C(u))).join(", "),l=`${e.constraintName?`constraint [${e.constraintName}] `:""}foreign key (${n}) references ${o}(${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:[]}}},rd=new To;var wo=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mssql"),s=[],a=[];for(let h of e.children){let{sql:f,bindings:w}=o.parse([h]);if(h.folder==="constraint"){let S=s.pop()??"",q=f;if(/not null/i.test(q)||/null/i.test(q)||/default/i.test(q)){let M=`${S} ${q}`.trim();M=M.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(M),a.push(...w);continue}s.push(S),s.push(q),a.push(...w);continue}s.push(f),a.push(...w);}for(let h of e.namedConstraints){let{sql:f,bindings:w}=o.parse([h]);s.push(f),a.push(...w);}let l=s.join(", "),u=[];e.dataCompression&&u.push(`DATA_COMPRESSION = ${e.dataCompression}`);let d=e.onFilegroup?` ON [${e.onFilegroup}]`:"",c=e.textImageOn?` TEXTIMAGE_ON [${e.textImageOn}]`:"",m=u.length>0?` WITH (${u.join(", ")})`:"";return {sql:`${n} (${l})${m}${d}${c}`,bindings:a}}},nd=new wo;var So=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("mssql",e.fromNode),bindings:[]}}},od=new So;var No=class{toSql(t){return {sql:"",bindings:[]}}},sd=new No;var qo=class{toSql(t){return g.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},id=new qo;var Co=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},ad=new Co;var Ro=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},ld=new Ro;var _o=class{toSql(t){let e=t,r=new y(this.model),n=e.alias?` as ${r.quoteIdentifier("mssql",e.alias)}`:"";if(e.table instanceof O){let{sql:l,bindings:u}=r.formatRawPlaceholders("mssql",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("mssql",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"mssql").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},ud=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:[]}}},dd=new Mo;var xo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,n=new b(this.model,"mssql"),o=new y(this.model);if(e.group?.length){let{sql:u,bindings:d}=n.parse(e.group,e.currParamIndex,true);return {sql:`(${u})`,bindings:d}}let s=o.formatStringColumn("mssql",e.column),a="",l=[];if(e.subquery!==void 0){let u=this.parseSubquery(n,e,r);a=`${e.column?`${s} `:""}${e.operator} (${u.sql})`,l=u.bindings;}else if(e.value instanceof v){let u=n.parse([e.value],1,true).sql;a=`${s} ${e.operator} ${u}`;}else if(e.operator==="is null"||e.operator==="is not null")a=`${s} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")a=`${s} ${e.operator} @${r} and @${r+1}`;else {let u=e.value.map((d,c)=>`@${r+c}`).join(", ");a=`${s} ${e.operator} (${u})`;}l=e.value;}else a=`${s} ${e.operator} @${r}`,l=[e.value];return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:l}}parseSubquery(t,e,r){let n=e.subquery;if(typeof n=="string")return {sql:n,bindings:[]};let o=Array.isArray(n)?n:[n];return t.parse(o,r)}},cd=new xo;var Oo=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table),o=e.columns.map(a=>`[${a}]`).join(", ");return {sql:`${e.unique?"unique ":""}[${e.indexName}] on ${n} (${o})`,bindings:[]}}},md=new Oo;var Do=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},pd=new Do;var Ao=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode),o=r.renderWithNodes("mssql",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u="",d;if(e.source){let m=new b(this.model,"mssql").parse(e.source,a);u=e.targetColumns?.length?` (${e.targetColumns.map(p=>r.formatStringColumn("mssql",p)).join(", ")})`:"",d=m.sql,l.push(...m.bindings);}else {let m=e.records.length?Object.keys(e.records[0]).filter(p=>e.records[0][p]!==void 0):[];if(!m.length)d="default values";else {u=` (${m.map(h=>r.formatStringColumn("mssql",h)).join(", ")})`;let p=[];for(let h of e.records){let f=m.map(S=>h[S]),w=[];for(let S of f)S instanceof O?w.push(S.rawValue):(l.push(S),w.push(`@${a++}`));p.push(`(${w.join(", ")})`);}d=`values ${p.join(", ")}`;}}let c="";return e.disableReturning||(c=` output ${(e.returning?.length?e.returning:this.getOutputColumns(e.source?e.targetColumns??[]:Object.keys(e.records[0]??{}).filter(p=>e.records[0][p]!==void 0),r)).map(p=>`inserted.${r.formatStringColumn("mssql",p)}${r.resolveColumnAlias("mssql",p)}`).join(", ")}`),{sql:`${s}${n}${u}${c} ${d}`,bindings:[...o.bindings,...l]}}getOutputColumns(t,e){let r=[...t],n=this.model.primaryKey;return n&&!t.includes(n)&&r.push(n),r}},fd=new Ao;var $o=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};if(e.using?.length)throw new T("JoinQueryBuilder::using","USING_NOT_SUPPORTED_IN_MSSQL");let r=new y(this.model),n=r.formatStringTable("mssql",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let s=e.right;s.includes(".")||(s=`${this.model.table}.${s}`);let a=r.formatStringColumn("mssql",o),l=r.formatStringColumn("mssql",s),u=`${n} on ${a} ${e.on?.operator} ${l}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"mssql");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},yd=new $o;var Kt=class extends N{constructor(e,r,n,o,s){super("json_mutation");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="json_mutation";this.file="json_mutation";this.operation=e,this.column=r,this.path=n,this.value=o,this.alias=s;}},hd=(i,t,e,r)=>new Kt("set",i,t,e,r),gd=(i,t,e,r)=>new Kt("insert",i,t,e,r),bd=(i,t,e)=>new Kt("remove",i,t,void 0,e),Sh=/^[A-Za-z_][A-Za-z0-9_]*$/;function Td(i){if(Array.isArray(i))return i;let t=[],e=i.replace(/^\$/,""),r=/\.([^.[\]]+)|\[(\d+)\]/g,n;for(;(n=r.exec(e))!==null;)n[1]!==void 0?t.push(n[1]):t.push(Number(n[2]));return t}function bt(i){return "$"+Td(i).map(e=>typeof e=="number"?`[${e}]`:Sh.test(e)?`.${e}`:`["${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"]`).join("")}function wd(i){return `'{${Td(i).map(r=>{let n=String(r);return /^[A-Za-z0-9_]+$/.test(n)?n:`"${n.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}).join(",")}}'`}var Io=class{toSql(t){let e=t;if(e.operation!=="set")throw new T("MssqlJsonMutationInterpreter::toSql","NOT_SUPPORTED_IN_MSSQL",new Error(`json${e.operation==="insert"?"Insert":"Remove"} is not supported by mssql; only jsonSet (JSON_MODIFY) is`));let r=new y(this.model).formatStringColumn("mssql",e.column),n=`'${bt(e.path).replace(/'/g,"''")}'`,o=e.value!==null&&typeof e.value=="object",s=`JSON_MODIFY(${r}, ${n}, @${e.currParamIndex})`;return {sql:this.withAlias(s,e.alias),bindings:[o?JSON.stringify(e.value):e.value]}}withAlias(t,e){return e?`${t} as [${e}]`:t}},Sd=new Io;var vo=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},Nd=new vo;var Po=class{toSql(t){return {sql:"",bindings:[]}}},qd=new Po;var Eo=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},Cd=new Eo;var Bo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:(g.warn("MSSQL does not support ON CONFLICT or ON DUPLICATE KEY. Use MERGE statement for upsert operations. This clause will be ignored. Consider using raw queries for MSSQL upserts."),{sql:"",bindings:[]})}},Rd=new Bo;var ko=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("mssql",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},_d=new ko;var Qo=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Md=new Qo;var Ko=class{toSql(t){let e=t,r=new y(this.model);return {sql:`output ${!e.columns.length||e.columns.includes("*")?`${e.prefix}.*`:e.columns.map(o=>`${e.prefix}.${r.formatStringColumn("mssql",o)}${r.resolveColumnAlias("mssql",o)}`).join(", ")}`,bindings:[]}}},xd=new Ko;var Lo=class{toSql(t){return {sql:`SELECT
|
|
119
|
+
`)).recordset;for(let p of c)await i.rawQuery(`ALTER TABLE [${p.table_name}] DROP CONSTRAINT [${p.constraint_name}];`);}await i.rawQuery(d),(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 1;"),s&&await o?.commit(),g.info("All tables dropped successfully");}catch(a){throw s&&await o?.rollback(),g.error(a),a}finally{t&&await i.disconnect();}}function pr(i){if(i&&i!=="auto")return i;if(typeof process<"u"&&process.versions?.bun)return "bun";if(globalThis.navigator?.product==="ReactNative"||"HermesInternal"in globalThis)return "react-native";let e=typeof globalThis.self<"u";return typeof window<"u"||typeof document<"u"||e?"web":"node"}var nh=i=>{i[6]=i[6]&15|64,i[8]=i[8]&63|128;let t=Le(i);return [t.slice(0,8),t.slice(8,12),t.slice(12,16),t.slice(16,20),t.slice(20)].join("-")},Du=i=>{let t=globalThis.crypto;if(!t||typeof t.getRandomValues!="function")throw new mt("crypto.getRandomValues \u2014 browsers require a secure context (HTTPS); React Native requires react-native-get-random-values or expo-crypto");return t.getRandomValues(i)},Hn=class{unsupported(t){throw new mt(`fs.${t}`)}exists(){return this.unsupported("exists")}readFileSync(){return this.unsupported("readFileSync")}readFile(){return this.unsupported("readFile")}readdir(){return this.unsupported("readdir")}mkdir(){return this.unsupported("mkdir")}writeFile(){return this.unsupported("writeFile")}rm(){return this.unsupported("rm")}},zn=class{join(...t){return t.filter(Boolean).join("/").replace(/\/+/g,"/")}dirname(t){let e=t.lastIndexOf("/");return e<=0?".":t.slice(0,e)}basename(t,e){let r=t.slice(t.lastIndexOf("/")+1);return e&&r.endsWith(e)?r.slice(0,-e.length):r}resolve(...t){let e=t.filter(Boolean).join("/").replace(/\/+/g,"/");return e.startsWith("/")?e:`/${e}`}},Ke=class{constructor(){this.name="web";this.crypto={randomUUID:()=>{let t=globalThis.crypto;return typeof t?.randomUUID=="function"?t.randomUUID():nh(Du(new Uint8Array(16)))},randomBytes:t=>Du(new Uint8Array(t))};this.timing={now:()=>globalThis.performance.now()};this.fs=new Hn;this.path=new zn;}readEnv(t){}};var pt=class extends Ke{constructor(){super(...arguments);this.name="node";this.fs={exists:e=>ae.existsSync(e),readFileSync:e=>ae.existsSync(e)?new Uint8Array(ae.readFileSync(e)):null,readFile:async e=>promises.readFile(e,"utf8"),readdir:e=>promises.readdir(e),mkdir:async(e,r)=>{await promises.mkdir(e,{recursive:r?.recursive});},writeFile:async(e,r)=>{await promises.writeFile(e,r);},rm:async(e,r)=>{await promises.rm(e,{recursive:r?.recursive,force:r?.force});}};this.path=ft;}readEnv(e){return typeof process>"u"?void 0:process.env[e]}};var Yn=()=>import('bun'),yr=class extends pt{constructor(){super();this.name="bun";let e=this.fs;this.fs={...e,readFile:async r=>(await Yn()).file(r).text(),readdir:async r=>{let n=await Yn(),o=[];for await(let s of new n.Glob("*").scan({cwd:r}))o.push(s);return o},writeFile:async(r,n)=>{await(await Yn()).write(r,n);}};}};var fr=class extends Ke{constructor(){super(...arguments);this.name="react-native";}};var mt=class extends Error{constructor(t){super(`Platform does not support: ${t}`),this.name="PlatformUnsupportedError";}},Le=i=>{let t="";for(let e of i)t+=e.toString(16).padStart(2,"0");return t},$u=new Map,sh=i=>{switch(i){case "bun":return new yr;case "node":return new pt;case "react-native":return new fr;default:return new Ke}};function oe(i){let t=pr(i),e=$u.get(t);return e||(e=sh(t),$u.set(t,e)),e}var X=oe(),P={DB_TYPE:X.readEnv("DB_TYPE"),DB_HOST:X.readEnv("DB_HOST"),DB_PORT:X.readEnv("DB_PORT"),DB_USER:X.readEnv("DB_USER"),DB_PASSWORD:X.readEnv("DB_PASSWORD"),DB_DATABASE:X.readEnv("DB_DATABASE"),DB_LOGS:X.readEnv("DB_LOGS")==="true",MIGRATION_PATH:X.readEnv("MIGRATION_PATH")||"database/migrations",REDIS_HOST:X.readEnv("REDIS_HOST"),REDIS_PORT:X.readEnv("REDIS_PORT"),REDIS_USERNAME:X.readEnv("REDIS_USERNAME"),REDIS_PASSWORD:X.readEnv("REDIS_PASSWORD"),REDIS_DATABASE:X.readEnv("REDIS_DATABASE"),MONGO_URL:X.readEnv("MONGO_URL"),MONGO_LOGS:X.readEnv("MONGO_LOGS")==="true",MSSQL_TRUST_SERVER_CERTIFICATE:X.readEnv("MSSQL_TRUST_SERVER_CERTIFICATE")==="true"||false},ih=()=>{try{if(!X.fs.exists(".env"))return P;let i=X.fs.readFileSync(".env");if(!i)return P;new TextDecoder().decode(i).split(`
|
|
120
|
+
`).forEach(r=>{let[n,o]=r.split("="),s=n.trim(),a=o.trim();switch(s){case "DB_TYPE":P.DB_TYPE||(P.DB_TYPE=a);break;case "DB_HOST":P.DB_HOST||(P.DB_HOST=a);break;case "DB_PORT":P.DB_PORT||(P.DB_PORT=a);break;case "DB_USER":P.DB_USER||(P.DB_USER=a);break;case "DB_PASSWORD":P.DB_PASSWORD||(P.DB_PASSWORD=a);break;case "DB_DATABASE":P.DB_DATABASE||(P.DB_DATABASE=a);break;case "MIGRATION_PATH":P.MIGRATION_PATH||(P.MIGRATION_PATH=a||"database/migrations");break;case "REDIS_HOST":P.REDIS_HOST||(P.REDIS_HOST=a);break;case "REDIS_PORT":P.REDIS_PORT||(P.REDIS_PORT=a);break;case "REDIS_USERNAME":P.REDIS_USERNAME||(P.REDIS_USERNAME=a);break;case "REDIS_PASSWORD":P.REDIS_PASSWORD||(P.REDIS_PASSWORD=a);break;case "REDIS_DATABASE":P.REDIS_DATABASE||(P.REDIS_DATABASE=a);break;case "MONGO_URL":P.MONGO_URL||(P.MONGO_URL=a);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":P.MSSQL_TRUST_SERVER_CERTIFICATE||(P.MSSQL_TRUST_SERVER_CERTIFICATE=a==="true");break}});}catch{}finally{return P}},B=ih();var ah=()=>{let i=B.MIGRATION_PATH,t=ft.resolve(process.cwd(),i);return ae.existsSync(t)||ae.mkdirSync(t,{recursive:true}),t},vu=(i,t=false,e="basic",r="table")=>{let n=ah(),o=new Date().getTime(),s=t?`${o}_${i}.js`:`${o}_${i}.ts`,a=ft.join(n,s),l;switch(e){case "alter":l=re.alterMigrationTemplate(t,r);break;case "create":l=re.createMigrationTemplate(t,r);break;default:l=re.basicMigrationTemplate(t);break}ae.writeFileSync(a,l),g.info(`Migration created successfully at '${a}'.`),process.exit(0);};var T=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}},Qt=class extends T{constructor(t){super("ValidationError","VALIDATION_ERROR"),this.errors=t;}};async function dh(i){try{return import(pathToFileURL(i).href)}catch{let e=createRequire(import.meta.url)(i);return {default:e.default||e,...e}}}async function ch(i){let{build:t}=await import('esbuild').catch(()=>{throw new Error("esbuild is required to import TypeScript files. Install it with: npm install esbuild -D")}),e=Math.random().toString(36).slice(2,8),r=i.replace(/\.ts$/,`.bundled_${e}.mjs`);try{return await t({entryPoints:[i],bundle:!0,platform:"node",format:"esm",sourcemap:"inline",outfile:r,packages:"external",logLevel:"silent"}),await import(pathToFileURL(r).href)}finally{await ae.promises.unlink(r).catch(()=>{});}}async function yt(i,t){let e=ft.isAbsolute(i)?i:ft.resolve(process.cwd(),i);return e.endsWith(".ts")?ch(e):dh(e)}var yh=async(i,t)=>{if(i.endsWith(".ts"))return yt(i);try{return import(pathToFileURL(i).href)}catch{let n=createRequire(import.meta.url);try{let o=n(i);return {default:o.default||o,...o}}catch{throw new T(`MigrationUtils::importMigrationFile Failed to import migration file: ${i}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function gr(i,t){switch(i){case "mariadb":case "mysql":return await t.rawQuery(re.migrationTableTemplateMysql()),(await t.rawQuery(re.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":return await t.rawQuery(re.migrationTableTemplatePg()),(await t.rawQuery(re.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await t.rawQuery(re.migrationTableTemplateSQLite()),await t.rawQuery(re.selectAllFromMigrationsTemplate());case "mssql":return await t.rawQuery(re.migrationTableTemplateMssql()),(await t.rawQuery(re.selectAllFromMigrationsTemplate())).recordset;default:throw new T("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function br(i,t,e){let r=hh(t),n=[];for(let{name:o,fullPath:s}of r){let a=await fh(s),l=new a(i||B.DB_TYPE);l.migrationName=o,n.push(l);}return n}async function fh(i,t){let e=await yh(i);if(!e.default)throw new T("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}function hh(i){let t=process.cwd(),e=i||B.MIGRATION_PATH||"database/migrations",r=/[*?{}\[\]]/.test(e);if(!r){let s=ft.isAbsolute(e)?e:ft.resolve(t,e);if(!ae.existsSync(s))return ae.mkdirSync(s,{recursive:true}),[]}let n=r?e:ft.join(e,"**/*.{ts,js}"),o=ft.isAbsolute(n)?n:ft.resolve(t,n);try{return ae.globSync(o).filter(a=>ae.statSync(a).isFile()).sort().map(a=>({name:ft.basename(a),fullPath:a}))}catch{return []}}async function Kt(i,t,e,r,n){let o=i.getDbType(),s=n&&o!=="mssql",a=null;g.info("Running migrations for database type: "+o);try{let l=await gr(o,i),d=(await br(o,e,r)).filter(c=>!l.map(p=>p.name).includes(c.migrationName));if(!d.length){g.info("No pending migrations.");return}if(t){let c=d.findIndex(y=>y.migrationName===t);if(c===-1){console.error(`Migration ${t} not found.`);return}let p=d.slice(0,c+1);s&&(a=await i.transaction(),i=a.sql),await new We(i).upMigrations(p),s&&await a?.commit(),g.info("Migrations ran successfully");return}s&&(a=await i.transaction(),i=a.sql),await new We(i).upMigrations(d),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}g.info("Migrations ran successfully");}le();var Tr={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 ku=null;function et(i,t){return t.getModelManager(i)}function Bu(i,t,e){if(!t||typeof t!="object")return;let r=t;if(!r.filters)return;let n=e.getColumns();for(let[o,s]of Object.entries(r.filters)){let a=s.value;if(a==null||a==="")continue;let l=n.find(m=>m.columnName===o||m.databaseName===o);if(!l)continue;let u=typeof l.type=="string"?l.type:"string",d=Tr[u]||"string";if(d==="string"||d==="textarea"){i.whereLike(o,`%${a}%`);continue}if(d==="boolean"){i.where(o,a==="true"||a===true);continue}if(d==="date"||d==="datetime"){if(typeof a=="object"&&a!==null){let m=a;m.from&&i.where(o,">=",m.from),m.to&&i.where(o,"<=",m.to);continue}i.where(o,a);continue}i.where(o,a);}}function Lt(i,t){let e={},r=t.getColumns();for(let n of r){let o=i[n.columnName];e[n.columnName]=o;}return e}async function gh(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(o){super(o),this._model=o,this._db=ku;}static isAdapterFor(o){if(typeof o!="function")return false;let s=o;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=Tr[a]||"string";return new r({path:s.columnName,type:l,isId:s.isPrimary,isSortable:true})})}property(o){let a=this._model.getColumns().find(d=>d.columnName===o||d.databaseName===o);if(!a)return null;let l=typeof a.type=="string"?a.type:"string",u=Tr[l]||"string";return new r({path:a.columnName,type:u,isId:a.isPrimary,isSortable:true})}async count(o){let a=et(this._model,this._db).query();return Bu(a,o,this._model),a.getCount()}async find(o,s={}){let l=et(this._model,this._db).query();return Bu(l,o,this._model),s.limit&&l.limit(s.limit),s.offset&&l.offset(s.offset),s.sort?.sortBy&&l.orderBy(s.sort.sortBy,s.sort.direction||"asc"),(await l.many()).map(d=>new e(Lt(d,this._model),this))}async findOne(o){if(!this._model.primaryKey)return null;let l=await et(this._model,this._db).findOneByPrimaryKey(o);return l?new e(Lt(l,this._model),this):null}async findMany(o){let s=this._model.primaryKey;return s?(await et(this._model,this._db).query().whereIn(s,o).many()).map(u=>new e(Lt(u,this._model),this)):[]}async create(o){let a=await et(this._model,this._db).insert(o,{returning:["*"]});return Lt(a,this._model)}async update(o,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=et(this._model,this._db);if(!await l.findOneByPrimaryKey(o))throw new Error("Record not found");let d=await l.updateRecord(o,s,{returning:["*"]});return Lt(d,this._model)}async delete(o){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=et(this._model,this._db);await a.findOneByPrimaryKey(o)&&await a.deleteRecord(o);}}}async function bh(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function Th(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),t=await gh(),e=await bh();i.default.registerAdapter({Database:e,Resource:t});}async function Xn(i,t){ku=i;let e=await import('adminjs').catch(()=>{throw new L("adminjs")});await Th();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 n=r.map(a=>{let l=t.resourceOptions?.[a.table]||{};return {resource:a,options:l}}),o={rootPath:t.rootPath||"/admin",resources:n};if(t.branding&&(o.branding=t.branding),t.locale?.language&&(o.locale=t.locale),t.assets&&(o.assets=t.assets),t.settings&&(o.settings=t.settings),t.pages){let a={};for(let[l,u]of Object.entries(t.pages))u.component&&(a[l]=u);Object.keys(a).length>0&&(o.pages=a);}return {admin:new e.default(o)}}async function Qu(i,t){let{admin:e}=await Xn(i,t),r;try{r=await import('@adminjs/express');}catch{throw new L("@adminjs/express")}let n=r.buildRouter(e);return {admin:e,router:n}}var ht=new Map,je=new Map,wr=class{async get(t){return ht.get(t)}async set(t,e,r){let n=je.get(t);if(n&&(clearTimeout(n),je.delete(t)),ht.set(t,e),r){let o=setTimeout(()=>{ht.delete(t),je.delete(t);},r);je.set(t,o);}}async invalidate(t){let e=je.get(t);e&&(clearTimeout(e),je.delete(t)),ht.delete(t);}async invalidateAll(t){let e=ht.keys();for(let r of e)if(r.startsWith(t)){let n=je.get(r);n&&(clearTimeout(n),je.delete(r)),ht.delete(r);}}};var Wt=class{constructor(t){switch(this.type=t?.type||B.DB_TYPE,this.type){case "mongo":this.handleMongoSource(t);break;case "cockroachdb":this.handleCockroachdbSource(t);break;case "postgres":this.handlePostgresSource(t);break;case "mariadb":case "mysql":this.handleMysqlSource(t);break;case "sqlite":this.handleSqliteSource(t);break;case "mssql":this.handleMssqlSource(t);break;default:throw new T(`Invalid database type: ${this.type}, please provide a valid database type in your input or in the .env file with the key DB_TYPE
|
|
121
|
+
Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}let e=mr(this.logs);e?.customLogger&&g.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||B.DB_HOST,this.port=+t?.port||+B.DB_PORT,this.username=t?.username||B.DB_USER,this.password=t?.password||B.DB_PASSWORD,this.database=t?.database||B.DB_DATABASE,this.logs=t?.logs||B.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||B.DB_HOST,this.port=+t?.port||+B.DB_PORT,this.username=t?.username||B.DB_USER,this.password=t?.password||B.DB_PASSWORD,this.database=t?.database||B.DB_DATABASE,this.logs=t?.logs||B.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||B.DB_HOST,this.port=+t?.port||+B.DB_PORT,this.username=t?.username||B.DB_USER,this.password=t?.password||B.DB_PASSWORD,this.database=t?.database||B.DB_DATABASE,this.logs=t?.logs||B.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||B.DB_DATABASE||":memory:",this.logs=t?.logs||B.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||B.MONGO_URL,this.logs=t?.logs||B.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||B.DB_HOST,this.port=+t?.port||+B.DB_PORT,this.username=t?.username||B.DB_USER,this.password=t?.password||B.DB_PASSWORD,this.database=t?.database||B.DB_DATABASE,this.logs=t?.logs||B.DB_LOGS||false,this.port||(this.port=1433);}};var wh=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},Sh=i=>i.openApi?.required??false,Nh=i=>{let t=i.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=wh(r));return e},qh=i=>{let t=i.getColumns(),e=[];for(let r of t)Sh(r)&&e.push(r.columnName);return e||[]},Ch=i=>{let t=Nh(i),e=qh(i);return {type:"object",properties:t,required:e.length?e:[]}};var Ku=i=>i.map(t=>({...Ch(t),modelName:t.table,$id:t.table}));var eo=(i,t)=>{let e=Pe.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var to=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(n+=` ${s.join(" ")}`);}return {sql:`add ${n}`,bindings:[]}}},Lu=new to;var ro=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Wu=new ro;var no=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`[${n}]`).join(", ")})`,bindings:[]}}},ju=new no;var oo=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),s=o.join(" ");e.newType.dataType==="uuid"&&(s=s.replace(/\s+default\s+.+$/i,"").trim());let a="";e.options.nullable!==void 0&&(a=e.options.nullable?" null":" not null");let l=`alter column [${e.column}] ${s}${a}`;if(e.options.dropDefault&&(l=`drop constraint DF_${e.column}, ${l}`),e.options.default!==void 0&&!e.options.dropDefault){let u=e.options.default;u===null?u="null":typeof u=="string"&&(u==="NULL"?u="null":u==="TRUE"||u==="FALSE"?u=u==="TRUE"?"1":"0":u=`'${u}'`),l+=`, add constraint DF_${e.column} default ${u} for [${e.column}]`;}return e.options.unique!==void 0&&e.options.unique&&(l+=`, add constraint UQ_${e.column} unique ([${e.column}])`),{sql:l,bindings:[]}}},Fu=new oo;var N=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var gt=class extends N{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};function Sr(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 Nr(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function so(i){if(typeof i!="string"||!i)return i;let t=Nr(i);return t.charAt(0).toUpperCase()+t.slice(1)}function H(i,t){return t==="preserve"?i:t==="snake"?Sr(i):t==="camel"?Nr(i):t==="pascal"?so(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}function Me(i){return String(i).padStart(2,"0")}function _h(i,t){let e=i.getFullYear(),r=Me(i.getMonth()+1),n=Me(i.getDate()),o=Me(i.getHours()),s=Me(i.getMinutes()),a=Me(i.getSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${s}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${s}:${a}`;case "TIMESTAMP":return Math.floor(i.getTime()/1e3).toString()}}function Uu(i,t){let e=i.getUTCFullYear(),r=Me(i.getUTCMonth()+1),n=Me(i.getUTCDate()),o=Me(i.getUTCHours()),s=Me(i.getUTCMinutes()),a=Me(i.getUTCSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${s}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${s}:${a}`;case "TIMESTAMP":return Math.floor(i.getTime()/1e3).toString()}}var ue=(i,t="ISO",e="UTC")=>{if(!(i instanceof Date)||isNaN(i.getTime()))throw new Error("Invalid date provided");return e==="LOCAL"?_h(i,t):Uu(i,t)};var bt=(i=new Date)=>Uu(i,"ISO");var Mh=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},io=i=>!i.expression&&(i.type==="date"||i.type==="datetime"||i.type==="timestamp"),f=class{constructor(t){this.model=t;this.modelColumnsMap=typeof t.getColumnsByName=="function"?t.getColumnsByName():new Map;let e=[],r=[];for(let n of this.modelColumnsMap.values())n.expression||((n.type==="ulid"||n.autoCreate==="js")&&e.push(n),n.autoUpdate&&r.push(n));this.jsInsertColumns=e,this.autoUpdateColumns=r;}formatStringColumn(t,e){if(e==="*")return "*";let r=this.resolveComputedExpression(e);if(r!==void 0)return `(${r})`;if(e.includes(".")){let[s,a]=e.split(".");if(a==="*")switch(t){case "mysql":case "mariadb":return `\`${s}\`.*`;case "postgres":case "cockroachdb":case "sqlite":return `"${s}".*`;case "mssql":return `[${s}].*`;default:throw new Error(`Unsupported database type: ${t}`)}let l=this.modelColumnsMap.get(a)?.databaseName??H(a,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${s}\`.\`${l}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${s}"."${l}"`;case "mssql":return `[${s}].[${l}]`;default:throw new Error(`Unsupported database type: ${t}`)}}let o=this.modelColumnsMap.get(e)?.databaseName??H(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${o}"`;case "mssql":return `[${o}]`;default:throw new Error(`Unsupported database type: ${t}`)}}resolveComputedExpression(t){let e=t.includes(".")?t.split(".").pop():t;return this.modelColumnsMap.get(e)?.expression}isComputedColumn(t){return !!this.modelColumnsMap.get(t)?.expression}filterComputedColumns(t){return this.modelColumnsMap.size===0?t:t.filter(e=>!this.isComputedColumn(e))}stripComputedFromData(t){if(this.modelColumnsMap.size===0)return t;let e={};for(let r of Object.keys(t))this.isComputedColumn(r)||(e[r]=t[r]);return e}formatStringColumnBare(t,e){let r=e.includes(".")?e.split(".")[1]:e;return this.formatStringColumn(t,r)}dialectEmitsReturning(t){switch(t){case "postgres":case "cockroachdb":case "sqlite":case "mssql":return true;default:return false}}shouldFetchNatively(t,e){if(!this.dialectEmitsReturning(t)||t==="mssql")return false;if(t==="sqlite"&&e==="update"){for(let r of this.modelColumnsMap.values())if(r.autoUpdate)return false}return true}hasComputedColumn(t){return t.some(e=>this.isComputedColumn(e))}resolveColumnAlias(t,e){let r=this.modelColumnsMap.get(e);if(!r||r.columnName===r.databaseName)return "";switch(t){case "mssql":return ` as [${r.columnName}]`;case "mysql":case "mariadb":return ` as \`${r.columnName}\``;case "postgres":case "cockroachdb":case "sqlite":return ` as "${r.columnName}"`;default:return ""}}formatStringTable(t,e){e=e.replace(/\s+/g," ").trim();let r="";return e.toLowerCase().includes(" as ")&&([e,r]=e.split(" as ")),`${e.split(".").map(o=>this.quoteIdentifier(t,o)).join(".")}${r?` as ${this.quoteIdentifier(t,r)}`:""}`}quoteIdentifier(t,e){switch(t){case "mysql":case "mariadb":return `\`${e}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${e}"`;case "mssql":return `[${e}]`;default:return e}}formatRawPlaceholders(t,e,r=[],n=1){if(!r.length)return {sql:e,bindings:[]};let o=n;return {sql:e.replace(/\?/g,()=>{switch(t){case "postgres":case "cockroachdb":return `$${o++}`;case "mssql":return `@${o++}`;default:return "?"}}),bindings:r}}prepareColumns(t,e,r="insert",n="postgres"){if(!t.length)return {columns:t,values:e};let o=[],s=[];for(let l=0;l<t.length;l++){let u=t[l],d=e[l];u!=="*"&&(o.push(u),s.push(d));}let a=n==="mysql"||n==="mariadb";for(let l=0;l<o.length;l++){let u=o[l],d=s[l],m=this.modelColumnsMap.get(u);if(m?.expression){o.splice(l,1),s.splice(l,1),l--;continue}if(!(d instanceof N)){if(!m){Mh(d)&&(s[l]=JSON.stringify(d));continue}if(d==null&&(m.autoCreate===true||m.type==="uuid"&&n!=="mysql"&&n!=="mariadb")){o.splice(l,1),s.splice(l,1),l--;continue}if(m.prepare){let c=r==="insert"?m.prepare(d):m.prepare(d)??d;if(c!==null&&typeof c?.then=="function")throw new Error(`hysteria-orm: prepare on column "${u}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);s[l]=c;}n==="sqlite"&&s[l]instanceof Date&&io(m)&&(s[l]=ue(s[l],"ISO","UTC"));}}if(r==="insert"){let l=new Set(t);for(let u of this.jsInsertColumns)l.has(u.columnName)||this.generateJsInsertColumn(u,o,s,n);if(a){let u=this.model.primaryKey;if(u){let d=this.modelColumnsMap.get(u);d&&d.type==="uuid"&&d.isPrimary&&!l.has(u)&&this.generateJsInsertColumn(d,o,s,n);}}}else {let l=new Set(t);for(let u of this.autoUpdateColumns){if(l.has(u.columnName))continue;let d=u.prepare?.(new Date);if(d!=null){if(typeof d?.then=="function")throw new Error(`hysteria-orm: prepare on column "${u.columnName}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);o.push(u.columnName),s.push(n==="sqlite"&&d instanceof Date&&io(u)?ue(d,"ISO","UTC"):d);}}}return {columns:o,values:s}}generateJsInsertColumn(t,e,r,n){let o=t.prepare?.(void 0);if(o!==null&&typeof o?.then=="function")throw new Error(`hysteria-orm: prepare on column "${t.columnName}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);e.push(t.columnName),r.push(n==="sqlite"&&o instanceof Date&&io(t)?ue(o,"ISO","UTC"):o??void 0);}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new b(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}getWriteSource(t,e,r){if(typeof e.table=="string"){let a=e.schema?`${e.schema}.${e.table}`:e.table,l=e.alias?` as ${e.alias}`:"";return {sql:`${this.formatStringTable(t,a)}${l}`,bindings:[]}}let n=new b(this.model,t),{sql:o,bindings:s}=n.parse(Array.isArray(e.table)?e.table:[e.table],r);return {sql:e.alias?`(${o}) as ${e.alias}`:`(${o})`,bindings:s}}renderWithNodes(t,e,r){return e?.length?new b(this.model,t).parse(e,r):{sql:"",bindings:[]}}};var ao=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};if(e.children.length===1&&e.children[0]instanceof gt){let d=e.children[0];return {sql:`EXEC sp_rename '${e.table}', '${d.newName}'`,bindings:[]}}let o=new b(this.model,"mssql"),s=[],a=[];for(let d of e.children){let{sql:m,bindings:c}=o.parse([d]);s.push(m.trim()),a.push(...c);}let l=s.join(", ");return {sql:`${n} ${l}`,bindings:a}}},Vu=new ao;var lo=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},Ju=new lo;var uo=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},Hu=new uo;var co=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},zu=new co;var mo=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] null`,bindings:[]}}},Gu=new mo;var po=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},Yu=new po;var yo=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},Zu=new yo;var fo=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},Xu=new fo;var x=class extends N{constructor(e,r){super("raw",true);this.canKeywordBeSeenMultipleTimes=true;this.chainsWith=" ";this.currParamIndex=0;this.isRawValue=true;this.folder="raw";this.file="raw";this.rawValue=e,this.bindings=r;}};var I=class extends N{constructor(e,r=[]){super("sqlfunc");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="sqlfunc";this.file="sqlfunc";this.fn=e,this.args=r;}};var ed=new Map;function Fe(i,t){let e=i===void 0?void 0:ed.get(i),r=ed.get("*");return e?.(t)??r?.(t)}var ho=class{toSql(t){let e=t,r;return e.defaultValue instanceof x?r=e.defaultValue.rawValue:e.defaultValue instanceof I?r=new b(this.model,"mssql").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"||e.defaultValue===null?r="null":e.defaultValue==="TRUE"?r="1":e.defaultValue==="FALSE"?r="0":typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="1"&&e.defaultValue!=="0"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`add constraint DF_${e.column} default ${r} for [${e.column}]`,bindings:[]}}},td=new ho;var go=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] not null`,bindings:[]}}},rd=new go;var bo=class{toSql(t){return {sql:"",bindings:[]}}},nd=new bo;function To(i){return i.replace(/^[`"]|[`"]$/g,"")}function wo(i,t,e){if(!i.includes(".")){let o=To(i);return `${t}.${o}`}let[r,n]=i.split(".");return r=To(r),n=To(n),r!==e?i:n==="*"?`${t}.*`:`${t}.${n}`}function C(i){return typeof i=="function"?i():i}var W=(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 n=0;n<i.length;n++)r[n]=W(i[n],t);return r}let e=Object.create(Object.getPrototypeOf(i)||{});t.set(i,e);for(let r of Object.getOwnPropertyNames(i)){let n=i[r];if(typeof n=="function"){e[r]=n;continue}e[r]=W(n,t);}return e};var So=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new f(this.model).formatStringColumn("mssql",C(e.column)),o=e.dataType.toLowerCase();if(o==="char"){let a=e.length??1;return {sql:`${n} char(${a})`,bindings:[]}}if(o==="varchar"){let a=e.length??255;return {sql:`${n} varchar(${a})`,bindings:[]}}if(o==="text"||o==="longtext"||o==="mediumtext"||o==="tinytext")return {sql:`${n} varchar(max)`,bindings:[]};if(o==="uuid"){let a=e.isForeignKey?"":" default NEWID()";return {sql:`${n} uniqueidentifier${a}`,bindings:[]}}if(o==="ulid")return {sql:`${n} varchar(26)`,bindings:[]};if(o==="bigint")return e.autoIncrement?{sql:`${n} bigint identity(1,1)`,bindings:[]}:{sql:`${n} bigint`,bindings:[]};if(o==="tinyint")return {sql:`${n} tinyint`,bindings:[]};if(o==="smallint")return {sql:`${n} smallint`,bindings:[]};if(o==="mediumint")return {sql:`${n} int`,bindings:[]};if(o==="float"||o==="real")return {sql:`${n} real`,bindings:[]};if(o==="double")return {sql:`${n} float`,bindings:[]};if(o==="decimal"||o==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${n} decimal(${a}, ${l})`,bindings:[]}}if(o==="date")return {sql:`${n} date`,bindings:[]};if(o==="year")return {sql:`${n} smallint`,bindings:[]};if(o==="time"){let a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${n} time${a}`,bindings:[]}}if(o==="datetime"||o==="timestamp"){let a=typeof e.precision=="number"?`(${e.precision})`:"",l=`${n} datetime2${a}`;return e.autoCreate&&(l+=" default current_timestamp"),{sql:l,bindings:[]}}if(o==="boolean"||o==="bool")return {sql:`${n} bit`,bindings:[]};if(o==="bytea"||o==="binary"||o==="varbinary"||o==="blob"||o==="longblob"||o==="mediumblob"||o==="tinyblob")return {sql:`${n} varbinary(max)`,bindings:[]};if(o==="json"||o==="jsonb")return {sql:`${n} nvarchar(max)`,bindings:[]};if(o==="enum"){if(e.enumValues&&e.enumValues.length>0){let a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${n} varchar(255) check (${n} in (${a}))`,bindings:[]}}return {sql:`${n} varchar(255)`,bindings:[]}}if(o==="integer"||o==="int")return e.autoIncrement?{sql:`${n} int identity(1,1)`,bindings:[]}:{sql:`${n} int`,bindings:[]};if(o==="geometry")return {sql:`${n} geometry`,bindings:[]};if(o==="point")return {sql:`${n} geometry`,bindings:[]};if(o==="linestring")return {sql:`${n} geometry`,bindings:[]};if(o==="polygon")return {sql:`${n} geometry`,bindings:[]};if(o==="multipoint")return {sql:`${n} geometry`,bindings:[]};let s=e.length?`(${e.length})`:"";return {sql:`${n} ${o}${s}`,bindings:[]}}},od=new So;var No=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
122
|
+
`:e,bindings:[]}}},sd=new No;var qo=class{toSql(t){return {sql:"",bindings:[]}}},id=new qo;var Co=class{toSql(t){let e=t,r=new f(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let n=e.constraintName?`constraint [${e.constraintName}] `:"",o=(e.columns??[]).map(s=>r.formatStringColumn("mssql",C(s))).join(", ");return {sql:`${n}primary key (${o})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns??[],o=e.constraintName?`constraint [${e.constraintName}] `:"",s=n.map(a=>r.formatStringColumn("mssql",C(a))).join(", ");return e.constraintName?{sql:`${o}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 n=e.defaultValue;return n instanceof x?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof I?{sql:`default ${new b(this.model,"mssql").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"?{sql:"default 1",bindings:[]}:n==="FALSE"?{sql:"default 0",bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let n=e.columns.map(u=>r.formatStringColumn("mssql",C(u))).join(", ");if(!e.references)return {sql:"",bindings:[]};let o=r.formatStringTable("mssql",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("mssql",C(u))).join(", "),l=`${e.constraintName?`constraint [${e.constraintName}] `:""}foreign key (${n}) references ${o}(${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:[]}}},ad=new Co;var Ro=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mssql"),s=[],a=[];for(let h of e.children){let{sql:y,bindings:w}=o.parse([h]);if(h.folder==="constraint"){let S=s.pop()??"",q=y;if(/not null/i.test(q)||/null/i.test(q)||/default/i.test(q)){let M=`${S} ${q}`.trim();M=M.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(M),a.push(...w);continue}s.push(S),s.push(q),a.push(...w);continue}s.push(y),a.push(...w);}for(let h of e.namedConstraints){let{sql:y,bindings:w}=o.parse([h]);s.push(y),a.push(...w);}let l=s.join(", "),u=[];e.dataCompression&&u.push(`DATA_COMPRESSION = ${e.dataCompression}`);let d=e.onFilegroup?` ON [${e.onFilegroup}]`:"",m=e.textImageOn?` TEXTIMAGE_ON [${e.textImageOn}]`:"",c=u.length>0?` WITH (${u.join(", ")})`:"";return {sql:`${n} (${l})${c}${d}${m}`,bindings:a}}},ld=new Ro;var _o=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mssql",e.fromNode),bindings:[]}}},ud=new _o;var Mo=class{toSql(t){return {sql:"",bindings:[]}}},dd=new Mo;var xo=class{toSql(t){return g.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},cd=new xo;var Oo=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},md=new Oo;var Ao=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},pd=new Ao;var Do=class{toSql(t){let e=t,r=new f(this.model),n=e.alias?` as ${r.quoteIdentifier("mssql",e.alias)}`:"";if(e.table instanceof x){let{sql:l,bindings:u}=r.formatRawPlaceholders("mssql",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("mssql",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"mssql").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},yd=new Do;var $o=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},fd=new $o;var Io=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,n=new b(this.model,"mssql"),o=new f(this.model);if(e.group?.length){let{sql:u,bindings:d}=n.parse(e.group,e.currParamIndex,true);return {sql:`(${u})`,bindings:d}}let s=o.formatStringColumn("mssql",e.column),a="",l=[];if(e.subquery!==void 0){let u=this.parseSubquery(n,e,r);a=`${e.column?`${s} `:""}${e.operator} (${u.sql})`,l=u.bindings;}else if(e.value instanceof I){let u=n.parse([e.value],1,true).sql;a=`${s} ${e.operator} ${u}`;}else if(e.operator==="is null"||e.operator==="is not null")a=`${s} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")a=`${s} ${e.operator} @${r} and @${r+1}`;else {let u=e.value.map((d,m)=>`@${r+m}`).join(", ");a=`${s} ${e.operator} (${u})`;}l=e.value;}else a=`${s} ${e.operator} @${r}`,l=[e.value];return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:l}}parseSubquery(t,e,r){let n=e.subquery;if(typeof n=="string")return {sql:n,bindings:[]};let o=Array.isArray(n)?n:[n];return t.parse(o,r)}},hd=new Io;var vo=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table),o=e.columns.map(a=>`[${a}]`).join(", ");return {sql:`${e.unique?"unique ":""}[${e.indexName}] on ${n} (${o})`,bindings:[]}}},gd=new vo;var Po=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},bd=new Po;var Eo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode),o=r.renderWithNodes("mssql",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u="",d;if(e.source){let c=new b(this.model,"mssql").parse(e.source,a);u=e.targetColumns?.length?` (${e.targetColumns.map(p=>r.formatStringColumn("mssql",p)).join(", ")})`:"",d=c.sql,l.push(...c.bindings);}else {let c=e.records.length?Object.keys(e.records[0]).filter(p=>e.records[0][p]!==void 0):[];if(!c.length)d="default values";else {u=` (${c.map(h=>r.formatStringColumn("mssql",h)).join(", ")})`;let p=[];for(let h of e.records){let y=c.map(S=>h[S]),w=[];for(let S of y)S instanceof x?w.push(S.rawValue):(l.push(S),w.push(`@${a++}`));p.push(`(${w.join(", ")})`);}d=`values ${p.join(", ")}`;}}let m="";return e.disableReturning||(m=` output ${(e.returning?.length?e.returning:this.getOutputColumns(e.source?e.targetColumns??[]:Object.keys(e.records[0]??{}).filter(p=>e.records[0][p]!==void 0),r)).map(p=>`inserted.${r.formatStringColumn("mssql",p)}${r.resolveColumnAlias("mssql",p)}`).join(", ")}`),{sql:`${s}${n}${u}${m} ${d}`,bindings:[...o.bindings,...l]}}getOutputColumns(t,e){let r=[...t],n=this.model.primaryKey;return n&&!t.includes(n)&&r.push(n),r}},Td=new Eo;var Bo=class{toSql(t){let e=t;if(e.isRawValue)return new f(this.model).formatRawPlaceholders("mssql",e.table,e.bindings??[],e.currParamIndex);if(e.using?.length)throw new T("JoinQueryBuilder::using","USING_NOT_SUPPORTED_IN_MSSQL");let r=new f(this.model),n=e.subquery?.length&&!e.isRawValue?new b(this.model,"mssql").parse(e.subquery,e.currParamIndex):null,o=n?`(${n.sql}) as ${r.quoteIdentifier("mssql",e.table)}`:r.formatStringTable("mssql",e.schema?`${e.schema}.${e.table}`:e.table),s=n?.bindings??[];if(e.type==="cross")return {sql:o,bindings:s};let a=e.left;a.includes(".")||(a=`${e.table}.${a}`);let l=e.right;l.includes(".")||(l=`${this.model.table}.${l}`);let u=r.formatStringColumn("mssql",a),d=r.formatStringColumn("mssql",l),m=`${o} on ${u} ${e.on?.operator} ${d}`,c=[...s];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new b(this.model,"mssql");for(let h of e.additionalConditions){let y=p.parse([h],e.currParamIndex+c.length);if(y.sql){let w=y.sql.replace(/^where\s+/i,"");m+=` and ${w}`,c.push(...y.bindings);}}}return {sql:m,bindings:c}}},wd=new Bo;var jt=class extends N{constructor(e,r,n,o,s){super("json_mutation");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="json_mutation";this.file="json_mutation";this.operation=e,this.column=r,this.path=n,this.value=o,this.alias=s;}},Sd=(i,t,e,r)=>new jt("set",i,t,e,r),Nd=(i,t,e,r)=>new jt("insert",i,t,e,r),qd=(i,t,e)=>new jt("remove",i,t,void 0,e),xh=/^[A-Za-z_][A-Za-z0-9_]*$/;function Cd(i){if(Array.isArray(i))return i;let t=[],e=i.replace(/^\$/,""),r=/\.([^.[\]]+)|\[(\d+)\]/g,n;for(;(n=r.exec(e))!==null;)n[1]!==void 0?t.push(n[1]):t.push(Number(n[2]));return t}function Tt(i){return "$"+Cd(i).map(e=>typeof e=="number"?`[${e}]`:xh.test(e)?`.${e}`:`["${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"]`).join("")}function Rd(i){return `'{${Cd(i).map(r=>{let n=String(r);return /^[A-Za-z0-9_]+$/.test(n)?n:`"${n.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}).join(",")}}'`}var ko=class{toSql(t){let e=t;if(e.operation!=="set")throw new T("MssqlJsonMutationInterpreter::toSql","NOT_SUPPORTED_IN_MSSQL",new Error(`json${e.operation==="insert"?"Insert":"Remove"} is not supported by mssql; only jsonSet (JSON_MODIFY) is`));let r=new f(this.model).formatStringColumn("mssql",e.column),n=`'${Tt(e.path).replace(/'/g,"''")}'`,o=e.value!==null&&typeof e.value=="object",s=`JSON_MODIFY(${r}, ${n}, @${e.currParamIndex})`;return {sql:this.withAlias(s,e.alias),bindings:[o?JSON.stringify(e.value):e.value]}}withAlias(t,e){return e?`${t} as [${e}]`:t}},_d=new ko;var Qo=class{toSql(t){let e=t,r=e.currParamIndex;return e.skipBinding?{sql:`${e.limit}`,bindings:[]}:{sql:`fetch next @${r} rows only`,bindings:[e.limit]}}},Md=new Qo;var Ko=class{toSql(t){return {sql:"",bindings:[]}}},xd=new Ko;var Lo=class{toSql(t){let e=t,r=e.currParamIndex;return e.skipBinding?{sql:`${e.offset}`,bindings:[]}:{sql:`offset @${r} rows`,bindings:[e.offset]}}},Od=new Lo;var Wo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:(g.warn("MSSQL does not support ON CONFLICT or ON DUPLICATE KEY. Use MERGE statement for upsert operations. This clause will be ignored. Consider using raw queries for MSSQL upserts."),{sql:"",bindings:[]})}},Ad=new Wo;var jo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("mssql",e.column),n=e.direction.toLowerCase();if(e.nulls){let o=e.nulls==="first"?"desc":"asc";return {sql:`${`case when ${r} is null then 1 else 0 end ${o}`}, ${r} ${n}`,bindings:[]}}return {sql:`${r} ${n}`,bindings:[]}}},Dd=new jo;var Fo=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},$d=new Fo;var Uo=class{toSql(t){let e=t,r=new f(this.model);return {sql:`output ${!e.columns.length||e.columns.includes("*")?`${e.prefix}.*`:e.columns.map(o=>`${e.prefix}.${r.formatStringColumn("mssql",o)}${r.resolveColumnAlias("mssql",o)}`).join(", ")}`,bindings:[]}}},Id=new Uo;var Vo=class{toSql(t){return {sql:`SELECT
|
|
123
123
|
cc.name AS name,
|
|
124
124
|
cc.definition AS expression
|
|
125
125
|
FROM sys.check_constraints cc
|
|
126
126
|
JOIN sys.tables t ON cc.parent_object_id = t.object_id
|
|
127
|
-
WHERE t.name = '${t.table}'`,bindings:[]}}},
|
|
127
|
+
WHERE t.name = '${t.table}'`,bindings:[]}}},vd=new Vo;var Jo=class{toSql(t){return {sql:`SELECT
|
|
128
128
|
fk.name as name,
|
|
129
129
|
c.name as column_name,
|
|
130
130
|
rt.name as referenced_table,
|
|
@@ -136,7 +136,7 @@ INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_i
|
|
|
136
136
|
INNER JOIN sys.columns c ON fkc.parent_object_id = c.object_id AND fkc.parent_column_id = c.column_id
|
|
137
137
|
INNER JOIN sys.tables rt ON fkc.referenced_object_id = rt.object_id
|
|
138
138
|
INNER JOIN sys.columns rc ON fkc.referenced_object_id = rc.object_id AND fkc.referenced_column_id = rc.column_id
|
|
139
|
-
WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},
|
|
139
|
+
WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},Pd=new Jo;var Ho=class{toSql(t){return {sql:`SELECT COLUMN_NAME as column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '${t.table}' ORDER BY ORDINAL_POSITION`,bindings:[]}}},Ed=new Ho;var zo=class{toSql(t){return {sql:"SELECT TABLE_NAME as table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_NAME",bindings:[]}}},Bd=new zo;var Go=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS cc INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc ON cc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME WHERE tc.TABLE_NAME = '${e.table}' AND cc.CONSTRAINT_NAME = '${e.constraint}'`,bindings:[]}}},kd=new Go;var Yo=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '${e.table}' AND COLUMN_NAME = '${e.column}'`,bindings:[]}}},Qd=new Yo;var Zo=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM sys.indexes i INNER JOIN sys.tables t ON i.object_id = t.object_id WHERE t.name = '${e.table}' AND i.name = '${e.index}'`,bindings:[]}}},Kd=new Zo;var Xo=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = '${t.table}' AND CONSTRAINT_TYPE = 'PRIMARY KEY'`,bindings:[]}}},Ld=new Xo;var es=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = '${t.table}'`,bindings:[]}}},Wd=new es;var ts=class{toSql(t){return {sql:`SELECT
|
|
140
140
|
i.name as index_name,
|
|
141
141
|
c.name as column_name,
|
|
142
142
|
i.is_unique as is_unique
|
|
@@ -145,7 +145,7 @@ INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = i
|
|
|
145
145
|
INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
|
|
146
146
|
WHERE i.object_id = OBJECT_ID('${t.table}')
|
|
147
147
|
AND i.is_primary_key = 0
|
|
148
|
-
AND i.type > 0`,bindings:[]}}},
|
|
148
|
+
AND i.type > 0`,bindings:[]}}},jd=new ts;var rs=class{toSql(t){return {sql:`SELECT
|
|
149
149
|
tc.CONSTRAINT_NAME as name,
|
|
150
150
|
kcu.COLUMN_NAME as column_name
|
|
151
151
|
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
|
|
@@ -153,7 +153,7 @@ JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
|
|
|
153
153
|
ON tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
|
|
154
154
|
WHERE tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
|
|
155
155
|
AND tc.TABLE_NAME = '${t.table}'
|
|
156
|
-
ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},
|
|
156
|
+
ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},Fd=new rs;var ns=class{toSql(t){return {sql:`SELECT
|
|
157
157
|
c.COLUMN_NAME as column_name,
|
|
158
158
|
c.DATA_TYPE as data_type,
|
|
159
159
|
c.IS_NULLABLE as is_nullable,
|
|
@@ -163,8 +163,8 @@ ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},Qd=new Yo;var Zo=class{toSql(t){re
|
|
|
163
163
|
c.NUMERIC_SCALE as numeric_scale
|
|
164
164
|
FROM INFORMATION_SCHEMA.COLUMNS c
|
|
165
165
|
WHERE c.TABLE_NAME = '${t.table}'
|
|
166
|
-
ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Kd=new Zo;var Xo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("mssql",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"mssql").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"mssql").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new y(this.model).formatStringColumn("mssql",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"mssql").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},Ld=new Xo;var ee=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 n=Number(r);return isNaN(n)?r:n}):[]}return []}getSegments(){return [...this.segments]}isEmpty(){return this.segments.length===0}toPostgres(t=false){if(this.isEmpty())return "";let e=[];for(let r=0;r<this.segments.length;r++){let n=this.segments[r],o=r===this.segments.length-1,s=typeof n=="number";o&&t?e.push(s?`->>${n}`:`->>'${n}'`):e.push(s?`->${n}`:`->'${n}'`);}return e.join("")}toStandardJsonPath(){return this.isEmpty()?"$":`$.${this.segments.join(".")}`}toMysql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments){if(typeof e=="number"){t.push(`[${e}]`);continue}t.push(`.${e}`);}return t.join("")}toSqlite(){return this.toStandardJsonPath()}toMssql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments)typeof e=="number"?t.push(`[${e}]`):t.push(`.${e}`);return t.join("")}toDbSyntax(t,e=false){switch(t){case "postgres":case "cockroachdb":return this.toPostgres(e);case "mysql":case "mariadb":return this.toMysql();case "sqlite":return this.toSqlite();case "mssql":return this.toMssql();default:return this.toStandardJsonPath()}}static from(t){return new i(t)}static root(){return new i("")}};var es=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("mssql",e.column),n=ee.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMssql();return r==="$"?t:`JSON_VALUE(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toMssql();return `(SELECT COUNT(*) FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}buildObjectKeysSql(t,e){let r=e.toMssql();return `(SELECT [key] FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}formatWithAlias(t,e){return e&&e.length>0?`${t} as [${e}]`:t}},Wd=new es;var ts=class{toSql(t){let e=t,r=Fe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof O?s.rawValue:s instanceof v?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "NEWID()";case "$now":case "$currentTimestamp":return "current_timestamp";default:return}}},jd=new ts;var rs=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:[]};if(e.options&&Object.values(e.options).some(Boolean))throw new T("MssqlTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("MSSQL does not support TRUNCATE options"));return {sql:`table ${new y(this.model).getFromForWriteOperations("mssql",e.fromNode)}`,bindings:[]}}},Fd=new rs;var ns=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new y(this.model).formatRawPlaceholders("mssql",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Ud=new ns;var os=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((u,d)=>{let c=e.values[d],m=r.formatStringColumn("mssql",u);if(c instanceof O)return `${m} = ${c.rawValue}`;if(c instanceof N){let h=new b(this.model,"mssql").parse([c],s,true);return o.push(...h.bindings),s+=h.bindings.length,`${m} = ${h.sql}`}let p=`@${s++}`;return o.push(c),`${m} = ${p}`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},Vd=new os;var ss=class{toSql(t){let e=t;if(e.isRawValue){let a=e.value??[];if(a.length===0)return {sql:e.column,bindings:[]};let l=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`@${l++}`),bindings:a}}let r=e.value,n=e.currParamIndex;if(this.isRawNode(r)){let a=this.formatRawIdentifierIfPossible(r.rawValue),u=`${new y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`.trim();return e.isNegated&&(u=`not (${u})`),{sql:u,bindings:[]}}if(Array.isArray(r)){let a=new y(this.model).formatStringColumn("mssql",e.column);if(e.operator.toLowerCase()==="between"){let d=`@${n} AND @${n+1}`,c=`${a} between ${d}`;return e.isNegated&&(c=`not (${c})`),{sql:c.trim(),bindings:r}}let l=r.map((d,c)=>`@${n+c}`).join(", "),u=`${a} ${e.operator} (${l})`;return e.isNegated&&(u=`not (${u})`),{sql:u.trim(),bindings:r}}if(r instanceof v){let a=new b(this.model,"mssql").parse([r],1,true).sql,u=`${new y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`;return e.isNegated&&(u=`not (${u})`),{sql:u.trim(),bindings:[]}}let o=new y(this.model).formatStringColumn("mssql",e.column);if(e.operator.includes("null")){let a=`${o} ${e.operator}`;return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:[]}}if(r===void 0)return {sql:"",bindings:[]};let s=`${o} ${e.operator} @${n}`;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,n=t.isRawValue===true;return r&&n}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("mssql",t):t}},Jd=new ss;var is=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"mssql"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},Hd=new is;var as=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],s=new y(this.model).formatStringColumn("mssql",e.column);switch(e.jsonOperator){case "=":n=`${s} = @${r}`,o=[JSON.stringify(e.value)];break;case "contains":case "not contains":n=`CHARINDEX(@${r}, ${s}) > 0`,o=[JSON.stringify(e.value)];break;case "path":{let a=ee.from(e.path??"");n=`JSON_VALUE(${s}, '${a.toMssql()}') ${e.comparisonOperator??"="} @${r}`,o=[e.value];break}case "subset":case "has none":throw new T("WhereJsonInterpreter::unsupported","NOT_SUPPORTED_IN_MSSQL");case "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`NOT (${n})`),{sql:n.trim(),bindings:o}}},zd=new as;var ls=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"mssql"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"mssql"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},Gd=new ls;var us=class{toSql(t){let e=t,r=new y(this.model),n=s=>r.formatStringColumn("mssql",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},Yd=new us;var ds=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex);e.clause==="materialized"&&g.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored.");let s=e.columns?.length?` (${e.columns.map(a=>new y(this.model).formatStringColumnBare("mssql",a)).join(", ")})`:"";return {sql:`[${e.alias}]${s} as (${o.sql})`,bindings:o.bindings}}},Zd=new ds;var cs=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length>0){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length>0&&(n+=` ${s.join(" ")}`);}return this.dbType!=="mariadb"&&(n=n.replace(/\s+default\s+\(uuid\(\)\)/gi,"")),{sql:`add column ${n}`,bindings:[]}}},Xd=new cs;var ms=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},ec=new ms;var ps=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`\`${n}\``).join(", ")})`,bindings:[]}}},tc=new ps;var fs=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),s=o.join(" ");e.newType.dataType==="uuid"&&(s=s.replace(/\s+default\s+.+$/i,"").trim());let a=`modify column \`${e.column}\` ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?" null":" not null";a+=l;}if(!e.options.dropDefault){if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=` default ${l}`;}}return e.options.collate&&(a+=` COLLATE ${e.options.collate}`),e.options.unique!==void 0&&e.options.unique&&(a+=" unique"),{sql:a,bindings:[]}}},rc=new fs;var ys=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,this.dbType??"mysql"),s=[],a=[];for(let m of e.children){let{sql:p,bindings:h}=o.parse([m]);if(m.file==="add_column")s.push(p);else if(m.file==="add_constraint"||m.folder==="constraint"){let f=s[s.length-1]??"",w=/^\s*add\s+column\b/i.test(f),S=/^\s*add\s+constraint\b/i.test(p);if(w&&!S){let q=p.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${f} ${q}`;}else {let q=/^\s*add\b/i.test(p)?p:`add ${p}`;s.push(q);}}else m.file==="set_default"||m.file==="drop_default"||m.file==="set_not_null"||m.file,s.push(p);a.push(...h);}let l=s.join(", "),u=e.ifExists?"if exists ":"";return {sql:/^\s*drop\s+index\b/i.test(l)?l:`${u}${n} ${l}`,bindings:a}}},nc=new ys;var hs=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},oc=new hs;var gs=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},sc=new gs;var bs=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},ic=new bs;var Ts=class{toSql(t){return {sql:"",bindings:[]}}},ac=new Ts;var ws=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},lc=new ws;var Ss=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},uc=new Ss;var Ns=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},dc=new Ns;var qs=class{toSql(t){let e=t,r;return e.defaultValue instanceof O?r=e.defaultValue.rawValue:e.defaultValue instanceof v?r=new b(this.model,"mysql").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column \`${e.column}\` set default ${r}`,bindings:[]}}},cc=new qs;var Cs=class{toSql(t){return {sql:"",bindings:[]}}},mc=new Cs;var Rs=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:[]}}},pc=new Rs;var _s=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new y(this.model).formatStringColumn("mysql",C(e.column)),o=e.dataType.toLowerCase(),s,a=false,l=false;if(o==="char"){let u=e.length??1;s=`${n} char(${u})`;}else if(o==="varchar"){let u=e.length??255;s=`${n} varchar(${u})`;}else if(o==="uuid")s=e.isForeignKey?`${n} varchar(36)`:`${n} varchar(36) default (uuid())`;else if(o==="ulid")s=`${n} varchar(26)`;else if(o==="longtext"||o==="mediumtext"||o==="tinytext"||o==="text")s=`${n} ${o}`;else if(o==="integer"||o==="int")a=true,l=!!e.autoIncrement,s=`${n} int`;else if(o==="tinyint")a=true,s=`${n} tinyint`;else if(o==="smallint")a=true,s=`${n} smallint`;else if(o==="mediumint")a=true,s=`${n} mediumint`;else if(o==="bigint")a=true,l=!!e.autoIncrement,s=`${n} bigint`;else if(o==="float")a=true,s=`${n} float`;else if(o==="double")a=true,s=`${n} double`;else if(o==="real")a=true,s=`${n} double`;else if(o==="decimal"){a=true;let u=e.precision??10,d=e.scale??0;s=`${n} decimal(${u}, ${d})`;}else if(o==="numeric"){a=true;let u=e.precision??10,d=e.scale??0;s=`${n} numeric(${u}, ${d})`;}else if(o==="date")s=`${n} date`;else if(o==="time"){let u=typeof e.precision=="number"?`(${e.precision})`:"";s=`${n} time${u}`.trimEnd();}else if(o==="datetime"){let u=typeof e.precision=="number"?`(${e.precision})`:"";s=`${n} datetime${u}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${u}`),e.autoUpdate&&(s+=` on update current_timestamp${u}`);}else if(o==="timestamp"){let u=typeof e.precision=="number"?`(${e.precision})`:"";s=`${n} timestamp${u}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${u}`),e.autoUpdate&&(s+=` on update current_timestamp${u}`);}else if(o==="year")s=`${n} year`;else if(o==="boolean")s=`${n} boolean`;else if(o==="varbinary"){let u=e.length??255;s=`${n} varbinary(${u})`;}else if(o==="binary"){let u=e.length??255;s=`${n} binary(${u})`;}else if(o==="bytea"||o==="blob")s=`${n} blob`;else if(o==="json"||o==="jsonb")s=`${n} json`;else if(o==="enum")if(e.enumValues&&e.enumValues.length>0){let u=e.enumValues.map(d=>`'${d}'`).join(", ");s=`${n} enum(${u})`;}else s=`${n} text`;else if(o==="geometry")s=`${n} geometry`;else if(o==="point")s=`${n} point`;else if(o==="linestring")s=`${n} linestring`;else if(o==="polygon")s=`${n} polygon`;else if(o==="multipoint")s=`${n} multipoint`;else {let u=e.length?`(${e.length})`:"";s=`${n} ${o}${u}`;}return a&&(e.zerofill?s+=" ZEROFILL":e.unsigned&&(s+=" UNSIGNED"),l&&(s+=" AUTO_INCREMENT")),e.collate&&(s+=` COLLATE ${e.collate}`),{sql:s,bindings:[]}}},fc=new _s;var Ms=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
167
|
-
`:e,bindings:[]}}},yc=new Ms;var xs=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},hc=new xs;var Os=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){let n=(e.columns??[]).map(s=>r.formatStringColumn("mysql",C(s))).join(", ");return {sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}primary key (${n})`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns.map(s=>r.formatStringColumn("mysql",C(s))).join(", "),o=e.constraintName?`constraint \`${e.constraintName}\` `:"";return e.constraintName?{sql:`${o}unique (${n})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let n=e.defaultValue;return n instanceof O?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof v?{sql:`default ${new b(this.model,"mysql").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let n=(e.columns??[]).map(u=>r.formatStringColumn("mysql",C(u))).join(", "),o=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("mysql",C(u))).join(", "),l=`${e.constraintName?`constraint \`${e.constraintName}\` `:""}foreign key (${n}) references ${o}(${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:[]}}},gc=new Os;var Ds=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mysql"),s=[],a=[];for(let p of e.children){let{sql:h,bindings:f}=o.parse([p]);if(p.folder==="constraint"){let w=s.pop()??"",S=h;if(/not null/i.test(S)||/null/i.test(S)||/default/i.test(S)){let q=`${w} ${S}`.trim();q=q.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(q),a.push(...f);continue}s.push(w),s.push(S),a.push(...f);continue}s.push(h),a.push(...f);}for(let p of e.namedConstraints){let{sql:h,bindings:f}=o.parse([p]);s.push(h),a.push(...f);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.engine&&d.push(`ENGINE=${e.engine}`),e.charset&&d.push(`CHARSET=${e.charset}`),e.collate&&d.push(`COLLATE=${e.collate}`);let c=d.length>0?` ${d.join(" ")}`:"";return {sql:`${u}${n} (${l})${c}`,bindings:a}}},bc=new Ds;var As=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:[]}}},Tc=new As;var $s=class{toSql(t){return {sql:"distinct",bindings:[]}}},wc=new $s;var Is=class{toSql(t){return g.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},Sc=new Is;var vs=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Nc=new vs;var Ps=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},qc=new Ps;var Es=class{toSql(t){let e=t,r=new y(this.model),n=e.alias?` as ${r.quoteIdentifier("mysql",e.alias)}`:"";if(e.table instanceof O){let{sql:l,bindings:u}=r.formatRawPlaceholders("mysql",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("mysql",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"mysql").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},Cc=new Es;var Bs=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},Rc=new Bs;var ks=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=new b(this.model,"mysql"),n=new y(this.model);if(e.group?.length){let{sql:l,bindings:u}=r.parse(e.group,e.currParamIndex,true);return {sql:`(${l})`,bindings:u}}let o=n.formatStringColumn("mysql",e.column),s="",a=[];if(e.subquery!==void 0){let l=this.parseSubquery(r,e);s=`${e.column?`${o} `:""}${e.operator} (${l.sql})`,a=l.bindings;}else if(e.value instanceof v){let l=r.parse([e.value],1,true).sql;s=`${o} ${e.operator} ${l}`;}else if(e.operator==="is null"||e.operator==="is not null")s=`${o} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")s=`${o} ${e.operator} ? and ?`;else {let l=e.value.map(()=>"?").join(", ");s=`${o} ${e.operator} (${l})`;}a=e.value;}else s=`${o} ${e.operator} ?`,a=[e.value];return e.isNegated&&(s=`not (${s})`),{sql:s.trim(),bindings:a}}parseSubquery(t,e){let r=e.subquery;if(typeof r=="string")return {sql:r,bindings:[]};let n=Array.isArray(r)?r:[r];return t.parse(n,e.currParamIndex)}},_c=new ks;var Qs=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table),o=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${n} (${o})`,bindings:[]}}},Mc=new Qs;var Ks=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:[]}}},xc=new Ks;var Ls=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=this.dbType==="mariadb"?"mariadb":"mysql",n=new y(this.model),o=n.getFromForWriteOperations(r,e.fromNode);if(e.withNodes?.length&&!e.source)throw new T("MysqlInsertInterpreter","CTE_NOT_SUPPORTED_ON_INSERT",new Error("MySQL/MariaDB only support a CTE on INSERT ... SELECT (insertFrom), not on a VALUES insert"));let s=n.renderWithNodes(r,e.withNodes,e.currParamIndex),a=e.currParamIndex+s.bindings.length,l=[],u;if(e.source){let c=new b(this.model,r).parse(e.source,a),m=e.targetColumns?.length?` (${e.targetColumns.map(h=>n.formatStringColumn(r,h)).join(", ")})`:"",p=s.sql?` ${s.sql}`:"";u=`${o}${m}${p} ${c.sql}`,l.push(...c.bindings);}else {let c=e.records.length?Object.keys(e.records[0]):[];if(!c.length)u=`${o} () values ()`;else {let m=c.map(h=>n.formatStringColumn(r,h)).join(", "),p=[];for(let h of e.records){let f=c.map(S=>h[S]),w=[];for(let S of f)S instanceof O?w.push(S.rawValue):(l.push(S),w.push("?"));p.push(`(${w.join(", ")})`);}u=`${o} (${m}) VALUES ${p.join(", ")}`;}}let d=`${u}`;if(this.dbType==="mariadb"&&!e.disableReturning){if(e.returning&&e.returning.length){let c=e.returning.map(m=>n.formatStringColumn("mariadb",m)).join(", ");return {sql:`${d} returning ${c}`,bindings:[...s.bindings,...l]}}return {sql:`${d} returning *`,bindings:[...s.bindings,...l]}}return {sql:d,bindings:[...s.bindings,...l]}}},Oc=new Ls;var Ws=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=r.formatStringTable("mysql",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o;if(e.using?.length){let c=e.using.map(m=>r.formatStringColumn("mysql",m)).join(", ");return o=`${n} using (${c})`,{sql:o,bindings:[]}}let s=e.left;s.includes(".")||(s=`${e.table}.${s}`);let a=e.right;a.includes(".")||(a=`${this.model.table}.${a}`);let l=r.formatStringColumn("mysql",s),u=r.formatStringColumn("mysql",a);o=`${n} on ${l} ${e.on?.operator} ${u}`;let d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"mysql");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");o+=` and ${h}`,d.push(...p.bindings);}}}return {sql:o,bindings:d}}},Dc=new Ws;var Nh={set:"JSON_SET",insert:"JSON_INSERT",remove:"JSON_REMOVE"},js=class{toSql(t){let e=t,r=new y(this.model).formatStringColumn("mysql",e.column),n=`'${bt(e.path).replace(/'/g,"''")}'`,o=Nh[e.operation];if(e.operation==="remove")return {sql:this.withAlias(`${o}(${r}, ${n})`,e.alias),bindings:[]};let s=e.value!==null&&typeof e.value=="object",a=s&&this.dbType!=="mariadb"?"CAST(? AS JSON)":"?",l=s?JSON.stringify(e.value):e.value;return {sql:this.withAlias(`${o}(${r}, ${n}, ${a})`,e.alias),bindings:[l]}}withAlias(t,e){return e?`${t} as \`${e}\``:t}},Ac=new js;var Fs=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},$c=new Fs;var qh={for_update:"for update",for_share:"lock in share mode"},Us=class{toSql(t){let e=t,r=qh[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},Ic=new Us;var Vs=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},vc=new Vs;var Js=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model);if(e.mode==="ignore"){let o=e.conflictColumns?.[0]||"id",s=r.formatStringColumn("mysql",`${e.table}.${o}`);return {sql:`ON DUPLICATE KEY UPDATE ${s} = ${s}`,bindings:[]}}return {sql:`ON DUPLICATE KEY UPDATE ${e.columnsToUpdate.map(o=>`${r.formatStringColumn("mysql",o)} = VALUES(${r.formatStringColumn("mysql",o)})`).join(", ")}`,bindings:[]}}},Pc=new Js;var Hs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("mysql",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},Ec=new Hs;var zs=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Bc=new zs;var Gs=class{toSql(t){return {sql:"",bindings:[]}}},kc=new Gs;var Ys=class{toSql(t){return {sql:`SELECT
|
|
166
|
+
ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Ud=new ns;var os=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("mssql",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"mssql").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"mssql").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new f(this.model).formatStringColumn("mssql",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"mssql").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},Vd=new os;var ee=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 n=Number(r);return isNaN(n)?r:n}):[]}return []}getSegments(){return [...this.segments]}isEmpty(){return this.segments.length===0}toPostgres(t=false){if(this.isEmpty())return "";let e=[];for(let r=0;r<this.segments.length;r++){let n=this.segments[r],o=r===this.segments.length-1,s=typeof n=="number";o&&t?e.push(s?`->>${n}`:`->>'${n}'`):e.push(s?`->${n}`:`->'${n}'`);}return e.join("")}toStandardJsonPath(){return this.isEmpty()?"$":`$.${this.segments.join(".")}`}toMysql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments){if(typeof e=="number"){t.push(`[${e}]`);continue}t.push(`.${e}`);}return t.join("")}toSqlite(){return this.toStandardJsonPath()}toMssql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments)typeof e=="number"?t.push(`[${e}]`):t.push(`.${e}`);return t.join("")}toDbSyntax(t,e=false){switch(t){case "postgres":case "cockroachdb":return this.toPostgres(e);case "mysql":case "mariadb":return this.toMysql();case "sqlite":return this.toSqlite();case "mssql":return this.toMssql();default:return this.toStandardJsonPath()}}static from(t){return new i(t)}static root(){return new i("")}};var ss=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("mssql",e.column),n=ee.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMssql();return r==="$"?t:`JSON_VALUE(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toMssql();return `(SELECT COUNT(*) FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}buildObjectKeysSql(t,e){let r=e.toMssql();return `(SELECT [key] FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}formatWithAlias(t,e){return e&&e.length>0?`${t} as [${e}]`:t}},Jd=new ss;var is=class{toSql(t){let e=t,r=Fe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof x?s.rawValue:s instanceof I?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "NEWID()";case "$now":case "$currentTimestamp":return "current_timestamp";default:return}}},Hd=new is;var as=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:[]};if(e.options&&Object.values(e.options).some(Boolean))throw new T("MssqlTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("MSSQL does not support TRUNCATE options"));return {sql:`table ${new f(this.model).getFromForWriteOperations("mssql",e.fromNode)}`,bindings:[]}}},zd=new as;var ls=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new f(this.model).formatRawPlaceholders("mssql",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:e.wrap?`(${o.sql})`:o.sql,bindings:o.bindings}}},Gd=new ls;var us=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((u,d)=>{let m=e.values[d],c=r.formatStringColumn("mssql",u);if(m instanceof x)return `${c} = ${m.rawValue}`;if(m instanceof N){let h=new b(this.model,"mssql").parse([m],s,true);return o.push(...h.bindings),s+=h.bindings.length,`${c} = ${h.sql}`}let p=`@${s++}`;return o.push(m),`${c} = ${p}`}).join(", ");return {sql:`${n} set ${a}${this.renderFromSource(e,s,o)}`,bindings:o}}renderFromSource(t,e,r){if(!t.fromSourceNode)return "";let n=new f(this.model).getWriteSource("mssql",t.fromSourceNode,e);return r.push(...n.bindings),` from ${n.sql}`}},Yd=new us;var ds=class{toSql(t){let e=t;if(e.isRawValue){let m=e.value??[];if(m.length===0)return {sql:e.column,bindings:[]};let c=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`@${c++}`),bindings:m}}let r=e.value,n=e.currParamIndex,o=e.operator.toLowerCase(),s=o==="ilike"||o==="not ilike",a=o==="not ilike"?"not like":s?"like":e.operator,l=m=>s?`lower(${m})`:m;if(this.isRawNode(r)){let m=this.formatRawIdentifierIfPossible(r.rawValue),c=new f(this.model).formatStringColumn("mssql",e.column),p=`${l(c)} ${a} ${l(m)}`.trim();return e.isNegated&&(p=`not (${p})`),{sql:p,bindings:[]}}if(e.tupleColumns?.length){let m=new f(this.model),c=e.tupleColumns.map(w=>m.formatStringColumn("mssql",w)),p=r,h=n,y=p.map(()=>`(${c.map(w=>`${w} = @${h++}`).join(" and ")})`).join(" or ");return {sql:(e.isNegated?`not (${y})`:y).trim(),bindings:p.flat()}}if(Array.isArray(r)){let m=new f(this.model).formatStringColumn("mssql",e.column);if(e.operator.toLowerCase()==="between"){let h=`@${n} AND @${n+1}`,y=`${m} between ${h}`;return e.isNegated&&(y=`not (${y})`),{sql:y.trim(),bindings:r}}let c=r.map((h,y)=>`@${n+y}`).join(", "),p=`${m} ${e.operator} (${c})`;return e.isNegated&&(p=`not (${p})`),{sql:p.trim(),bindings:r}}if(r instanceof I){let m=new b(this.model,"mssql").parse([r],1,true).sql,c=new f(this.model).formatStringColumn("mssql",e.column),p=`${l(c)} ${a} ${l(m)}`;return e.isNegated&&(p=`not (${p})`),{sql:p.trim(),bindings:[]}}let u=new f(this.model).formatStringColumn("mssql",e.column);if(e.operator.includes("null")){let m=`${u} ${e.operator}`;return e.isNegated&&(m=`not (${m})`),{sql:m.trim(),bindings:[]}}if(r===void 0)return {sql:"",bindings:[]};let d=`${l(u)} ${a} ${s?`lower(@${n})`:`@${n}`}`;return e.isNegated&&(d=`not (${d})`),{sql:d.trim(),bindings:[r]}}isRawNode(t){if(!t||!(typeof t=="object"))return false;let r="rawValue"in t,n=t.isRawValue===true;return r&&n}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new f(this.model).formatStringColumn("mssql",t):t}},Zd=new ds;var cs=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"mssql"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:e.isNegated?`not (${n})`:`(${n})`,bindings:o}}},Xd=new cs;var ms=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],s=new f(this.model).formatStringColumn("mssql",e.column);switch(e.jsonOperator){case "=":n=`${s} = @${r}`,o=[JSON.stringify(e.value)];break;case "contains":case "not contains":n=`CHARINDEX(@${r}, ${s}) > 0`,o=[JSON.stringify(e.value)];break;case "path":{let a=ee.from(e.path??"");n=`JSON_VALUE(${s}, '${a.toMssql()}') ${e.comparisonOperator??"="} @${r}`,o=[e.value];break}case "subset":case "has none":throw new T("WhereJsonInterpreter::unsupported","NOT_SUPPORTED_IN_MSSQL");case "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`NOT (${n})`),{sql:n.trim(),bindings:o}}},ec=new ms;var ps=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"mssql"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"mssql"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},tc=new ps;var ys=class{toSql(t){let e=t,r=new f(this.model),n=s=>r.formatStringColumn("mssql",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},rc=new ys;var fs=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex);e.clause==="materialized"&&g.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored.");let s=e.columns?.length?` (${e.columns.map(a=>new f(this.model).formatStringColumnBare("mssql",a)).join(", ")})`:"";return {sql:`[${e.alias}]${s} as (${o.sql})`,bindings:o.bindings}}},nc=new fs;var hs=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length>0){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length>0&&(n+=` ${s.join(" ")}`);}return this.dbType!=="mariadb"&&(n=n.replace(/\s+default\s+\(uuid\(\)\)/gi,"")),{sql:`add column ${n}`,bindings:[]}}},oc=new hs;var gs=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},sc=new gs;var bs=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`\`${n}\``).join(", ")})`,bindings:[]}}},ic=new bs;var Ts=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),s=o.join(" ");e.newType.dataType==="uuid"&&(s=s.replace(/\s+default\s+.+$/i,"").trim());let a=`modify column \`${e.column}\` ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?" null":" not null";a+=l;}if(!e.options.dropDefault){if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=` default ${l}`;}}return e.options.collate&&(a+=` COLLATE ${e.options.collate}`),e.options.unique!==void 0&&e.options.unique&&(a+=" unique"),{sql:a,bindings:[]}}},ac=new Ts;var ws=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,this.dbType??"mysql"),s=[],a=[];for(let c of e.children){let{sql:p,bindings:h}=o.parse([c]);if(c.file==="add_column")s.push(p);else if(c.file==="add_constraint"||c.folder==="constraint"){let y=s[s.length-1]??"",w=/^\s*add\s+column\b/i.test(y),S=/^\s*add\s+constraint\b/i.test(p);if(w&&!S){let q=p.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${y} ${q}`;}else {let q=/^\s*add\b/i.test(p)?p:`add ${p}`;s.push(q);}}else c.file==="set_default"||c.file==="drop_default"||c.file==="set_not_null"||c.file,s.push(p);a.push(...h);}let l=s.join(", "),u=e.ifExists?"if exists ":"";return {sql:/^\s*drop\s+index\b/i.test(l)?l:`${u}${n} ${l}`,bindings:a}}},lc=new ws;var Ss=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},uc=new Ss;var Ns=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},dc=new Ns;var qs=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},cc=new qs;var Cs=class{toSql(t){return {sql:"",bindings:[]}}},mc=new Cs;var Rs=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},pc=new Rs;var _s=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},yc=new _s;var Ms=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},fc=new Ms;var xs=class{toSql(t){let e=t,r;return e.defaultValue instanceof x?r=e.defaultValue.rawValue:e.defaultValue instanceof I?r=new b(this.model,"mysql").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column \`${e.column}\` set default ${r}`,bindings:[]}}},hc=new xs;var Os=class{toSql(t){return {sql:"",bindings:[]}}},gc=new Os;var As=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:[]}}},bc=new As;var Ds=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new f(this.model).formatStringColumn("mysql",C(e.column)),o=e.dataType.toLowerCase(),s,a=false,l=false;if(o==="char"){let u=e.length??1;s=`${n} char(${u})`;}else if(o==="varchar"){let u=e.length??255;s=`${n} varchar(${u})`;}else if(o==="uuid")s=e.isForeignKey?`${n} varchar(36)`:`${n} varchar(36) default (uuid())`;else if(o==="ulid")s=`${n} varchar(26)`;else if(o==="longtext"||o==="mediumtext"||o==="tinytext"||o==="text")s=`${n} ${o}`;else if(o==="integer"||o==="int")a=true,l=!!e.autoIncrement,s=`${n} int`;else if(o==="tinyint")a=true,s=`${n} tinyint`;else if(o==="smallint")a=true,s=`${n} smallint`;else if(o==="mediumint")a=true,s=`${n} mediumint`;else if(o==="bigint")a=true,l=!!e.autoIncrement,s=`${n} bigint`;else if(o==="float")a=true,s=`${n} float`;else if(o==="double")a=true,s=`${n} double`;else if(o==="real")a=true,s=`${n} double`;else if(o==="decimal"){a=true;let u=e.precision??10,d=e.scale??0;s=`${n} decimal(${u}, ${d})`;}else if(o==="numeric"){a=true;let u=e.precision??10,d=e.scale??0;s=`${n} numeric(${u}, ${d})`;}else if(o==="date")s=`${n} date`;else if(o==="time"){let u=typeof e.precision=="number"?`(${e.precision})`:"";s=`${n} time${u}`.trimEnd();}else if(o==="datetime"){let u=typeof e.precision=="number"?`(${e.precision})`:"";s=`${n} datetime${u}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${u}`),e.autoUpdate&&(s+=` on update current_timestamp${u}`);}else if(o==="timestamp"){let u=typeof e.precision=="number"?`(${e.precision})`:"";s=`${n} timestamp${u}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${u}`),e.autoUpdate&&(s+=` on update current_timestamp${u}`);}else if(o==="year")s=`${n} year`;else if(o==="boolean")s=`${n} boolean`;else if(o==="varbinary"){let u=e.length??255;s=`${n} varbinary(${u})`;}else if(o==="binary"){let u=e.length??255;s=`${n} binary(${u})`;}else if(o==="bytea"||o==="blob")s=`${n} blob`;else if(o==="json"||o==="jsonb")s=`${n} json`;else if(o==="enum")if(e.enumValues&&e.enumValues.length>0){let u=e.enumValues.map(d=>`'${d}'`).join(", ");s=`${n} enum(${u})`;}else s=`${n} text`;else if(o==="geometry")s=`${n} geometry`;else if(o==="point")s=`${n} point`;else if(o==="linestring")s=`${n} linestring`;else if(o==="polygon")s=`${n} polygon`;else if(o==="multipoint")s=`${n} multipoint`;else {let u=e.length?`(${e.length})`:"";s=`${n} ${o}${u}`;}return a&&(e.zerofill?s+=" ZEROFILL":e.unsigned&&(s+=" UNSIGNED"),l&&(s+=" AUTO_INCREMENT")),e.collate&&(s+=` COLLATE ${e.collate}`),{sql:s,bindings:[]}}},Tc=new Ds;var $s=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
167
|
+
`:e,bindings:[]}}},wc=new $s;var Is=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Sc=new Is;var vs=class{toSql(t){let e=t,r=new f(this.model);if(e.constraintType==="primary_key"){let n=(e.columns??[]).map(s=>r.formatStringColumn("mysql",C(s))).join(", ");return {sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}primary key (${n})`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns.map(s=>r.formatStringColumn("mysql",C(s))).join(", "),o=e.constraintName?`constraint \`${e.constraintName}\` `:"";return e.constraintName?{sql:`${o}unique (${n})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let n=e.defaultValue;return n instanceof x?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof I?{sql:`default ${new b(this.model,"mysql").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let n=(e.columns??[]).map(u=>r.formatStringColumn("mysql",C(u))).join(", "),o=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("mysql",C(u))).join(", "),l=`${e.constraintName?`constraint \`${e.constraintName}\` `:""}foreign key (${n}) references ${o}(${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:[]}}},Nc=new vs;var Ps=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mysql"),s=[],a=[];for(let p of e.children){let{sql:h,bindings:y}=o.parse([p]);if(p.folder==="constraint"){let w=s.pop()??"",S=h;if(/not null/i.test(S)||/null/i.test(S)||/default/i.test(S)){let q=`${w} ${S}`.trim();q=q.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(q),a.push(...y);continue}s.push(w),s.push(S),a.push(...y);continue}s.push(h),a.push(...y);}for(let p of e.namedConstraints){let{sql:h,bindings:y}=o.parse([p]);s.push(h),a.push(...y);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.engine&&d.push(`ENGINE=${e.engine}`),e.charset&&d.push(`CHARSET=${e.charset}`),e.collate&&d.push(`COLLATE=${e.collate}`);let m=d.length>0?` ${d.join(" ")}`:"";return {sql:`${u}${n} (${l})${m}`,bindings:a}}},qc=new Ps;var Es=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode.table=="string")return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model).getFromForWriteOperations("mysql",e.fromNode);if(!e.joinNodes?.length)return {sql:r,bindings:[]};let n=new b(this.model,"mysql").parse(e.joinNodes,e.currParamIndex);return {sql:`${r} from ${r} ${n.sql}`,bindings:n.bindings}}},Cc=new Es;var Bs=class{toSql(t){return {sql:"distinct",bindings:[]}}},Rc=new Bs;var ks=class{toSql(t){return g.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},_c=new ks;var Qs=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Mc=new Qs;var Ks=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},xc=new Ks;var Ls=class{toSql(t){let e=t,r=new f(this.model),n=e.alias?` as ${r.quoteIdentifier("mysql",e.alias)}`:"";if(e.table instanceof x){let{sql:l,bindings:u}=r.formatRawPlaceholders("mysql",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("mysql",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"mysql").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},Oc=new Ls;var Ws=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},Ac=new Ws;var js=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=new b(this.model,"mysql"),n=new f(this.model);if(e.group?.length){let{sql:l,bindings:u}=r.parse(e.group,e.currParamIndex,true);return {sql:`(${l})`,bindings:u}}let o=n.formatStringColumn("mysql",e.column),s="",a=[];if(e.subquery!==void 0){let l=this.parseSubquery(r,e);s=`${e.column?`${o} `:""}${e.operator} (${l.sql})`,a=l.bindings;}else if(e.value instanceof I){let l=r.parse([e.value],1,true).sql;s=`${o} ${e.operator} ${l}`;}else if(e.operator==="is null"||e.operator==="is not null")s=`${o} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")s=`${o} ${e.operator} ? and ?`;else {let l=e.value.map(()=>"?").join(", ");s=`${o} ${e.operator} (${l})`;}a=e.value;}else s=`${o} ${e.operator} ?`,a=[e.value];return e.isNegated&&(s=`not (${s})`),{sql:s.trim(),bindings:a}}parseSubquery(t,e){let r=e.subquery;if(typeof r=="string")return {sql:r,bindings:[]};let n=Array.isArray(r)?r:[r];return t.parse(n,e.currParamIndex)}},Dc=new js;var Fs=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mysql",e.table),o=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${n} (${o})`,bindings:[]}}},$c=new Fs;var Us=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:[]}}},Ic=new Us;var Vs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=this.dbType==="mariadb"?"mariadb":"mysql",n=new f(this.model),o=n.getFromForWriteOperations(r,e.fromNode);if(e.withNodes?.length&&!e.source)throw new T("MysqlInsertInterpreter","CTE_NOT_SUPPORTED_ON_INSERT",new Error("MySQL/MariaDB only support a CTE on INSERT ... SELECT (insertFrom), not on a VALUES insert"));let s=n.renderWithNodes(r,e.withNodes,e.currParamIndex),a=e.currParamIndex+s.bindings.length,l=[],u;if(e.source){let m=new b(this.model,r).parse(e.source,a),c=e.targetColumns?.length?` (${e.targetColumns.map(h=>n.formatStringColumn(r,h)).join(", ")})`:"",p=s.sql?` ${s.sql}`:"";u=`${o}${c}${p} ${m.sql}`,l.push(...m.bindings);}else {let m=e.records.length?Object.keys(e.records[0]):[];if(!m.length)u=`${o} () values ()`;else {let c=m.map(h=>n.formatStringColumn(r,h)).join(", "),p=[];for(let h of e.records){let y=m.map(S=>h[S]),w=[];for(let S of y)S instanceof x?w.push(S.rawValue):(l.push(S),w.push("?"));p.push(`(${w.join(", ")})`);}u=`${o} (${c}) VALUES ${p.join(", ")}`;}}let d=`${u}`;if(this.dbType==="mariadb"&&!e.disableReturning){if(e.returning&&e.returning.length){let m=e.returning.map(c=>n.formatStringColumn("mariadb",c)).join(", ");return {sql:`${d} returning ${m}`,bindings:[...s.bindings,...l]}}return {sql:`${d} returning *`,bindings:[...s.bindings,...l]}}return {sql:d,bindings:[...s.bindings,...l]}}},vc=new Vs;var Js=class{toSql(t){let e=t;if(e.isRawValue)return new f(this.model).formatRawPlaceholders("mysql",e.table,e.bindings??[],e.currParamIndex);let r=new f(this.model),n=e.subquery?.length&&!e.isRawValue?new b(this.model,"mysql").parse(e.subquery,e.currParamIndex):null,o=n?`(${n.sql}) as ${r.quoteIdentifier("mysql",e.table)}`:r.formatStringTable("mysql",e.schema?`${e.schema}.${e.table}`:e.table),s=n?.bindings??[];if(e.type==="cross")return {sql:o,bindings:s};let a;if(e.using?.length){let p=e.using.map(h=>r.formatStringColumn("mysql",h)).join(", ");return a=`${o} using (${p})`,{sql:a,bindings:s}}let l=e.left;l.includes(".")||(l=`${e.table}.${l}`);let u=e.right;u.includes(".")||(u=`${this.model.table}.${u}`);let d=r.formatStringColumn("mysql",l),m=r.formatStringColumn("mysql",u);a=`${o} on ${d} ${e.on?.operator} ${m}`;let c=[...s];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new b(this.model,"mysql");for(let h of e.additionalConditions){let y=p.parse([h],e.currParamIndex+c.length);if(y.sql){let w=y.sql.replace(/^where\s+/i,"");a+=` and ${w}`,c.push(...y.bindings);}}}return {sql:a,bindings:c}}},Pc=new Js;var Oh={set:"JSON_SET",insert:"JSON_INSERT",remove:"JSON_REMOVE"},Hs=class{toSql(t){let e=t,r=new f(this.model).formatStringColumn("mysql",e.column),n=`'${Tt(e.path).replace(/'/g,"''")}'`,o=Oh[e.operation];if(e.operation==="remove")return {sql:this.withAlias(`${o}(${r}, ${n})`,e.alias),bindings:[]};let s=e.value!==null&&typeof e.value=="object",a=s&&this.dbType!=="mariadb"?"CAST(? AS JSON)":"?",l=s?JSON.stringify(e.value):e.value;return {sql:this.withAlias(`${o}(${r}, ${n}, ${a})`,e.alias),bindings:[l]}}withAlias(t,e){return e?`${t} as \`${e}\``:t}},Ec=new Hs;var zs=class{toSql(t){let e=t;return e.skipBinding?{sql:`${e.limit}`,bindings:[]}:{sql:"?",bindings:[e.limit]}}},Bc=new zs;var Ah={for_update:"for update",for_share:"lock in share mode"},Gs=class{toSql(t){let e=t,r=Ah[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},kc=new Gs;var Ys=class{toSql(t){let e=t;return e.skipBinding?{sql:`${e.offset}`,bindings:[]}:{sql:"?",bindings:[e.offset]}}},Qc=new Ys;var Zs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model);if(e.mode==="ignore"){let o=e.conflictColumns?.[0]||"id",s=r.formatStringColumn("mysql",`${e.table}.${o}`);return {sql:`ON DUPLICATE KEY UPDATE ${s} = ${s}`,bindings:[]}}return {sql:`ON DUPLICATE KEY UPDATE ${e.columnsToUpdate.map(o=>`${r.formatStringColumn("mysql",o)} = VALUES(${r.formatStringColumn("mysql",o)})`).join(", ")}`,bindings:[]}}},Kc=new Zs;var Xs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("mysql",e.column),n=e.direction.toLowerCase();if(e.nulls){let o=e.nulls==="first"?"desc":"asc";return {sql:`${r} is null ${o}, ${r} ${n}`,bindings:[]}}return {sql:`${r} ${n}`,bindings:[]}}},Lc=new Xs;var ei=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Wc=new ei;var ti=class{toSql(t){return {sql:"",bindings:[]}}},jc=new ti;var ri=class{toSql(t){return {sql:`SELECT
|
|
168
168
|
cc.CONSTRAINT_NAME AS name,
|
|
169
169
|
cc.CHECK_CLAUSE AS expression
|
|
170
170
|
FROM information_schema.CHECK_CONSTRAINTS cc
|
|
@@ -173,7 +173,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Kd=new Zo;var Xo=class{toSql(t){let
|
|
|
173
173
|
AND cc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
|
|
174
174
|
WHERE tc.TABLE_SCHEMA = DATABASE()
|
|
175
175
|
AND tc.TABLE_NAME = '${t.table}'
|
|
176
|
-
AND tc.CONSTRAINT_TYPE = 'CHECK'`,bindings:[]}}},
|
|
176
|
+
AND tc.CONSTRAINT_TYPE = 'CHECK'`,bindings:[]}}},Fc=new ri;var ni=class{toSql(t){return {sql:`SELECT
|
|
177
177
|
k.CONSTRAINT_NAME AS name,
|
|
178
178
|
k.COLUMN_NAME AS column_name,
|
|
179
179
|
k.REFERENCED_TABLE_NAME AS referenced_table,
|
|
@@ -184,13 +184,13 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Kd=new Zo;var Xo=class{toSql(t){let
|
|
|
184
184
|
JOIN information_schema.REFERENTIAL_CONSTRAINTS r
|
|
185
185
|
ON k.CONSTRAINT_NAME = r.CONSTRAINT_NAME AND k.CONSTRAINT_SCHEMA = r.CONSTRAINT_SCHEMA
|
|
186
186
|
WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.REFERENCED_TABLE_NAME IS NOT NULL
|
|
187
|
-
ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},
|
|
187
|
+
ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},Uc=new ni;var oi=class{toSql(t){return {sql:`SELECT column_name as name FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${t.table}' ORDER BY ordinal_position`,bindings:[]}}},Vc=new oi;var si=class{toSql(t){return {sql:"SELECT table_name as name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE' ORDER BY table_name",bindings:[]}}},Jc=new si;var ii=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.check_constraints WHERE constraint_schema = DATABASE() AND constraint_name = '${t.constraint}'`,bindings:[]}}},Hc=new ii;var ai=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${e.table}' AND column_name = '${e.column}'`,bindings:[]}}},zc=new ai;var li=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM information_schema.statistics WHERE table_schema = DATABASE() AND table_name = '${e.table}' AND index_name = '${e.index}'`,bindings:[]}}},Gc=new li;var ui=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.table_constraints WHERE table_schema = DATABASE() AND table_name = '${t.table}' AND constraint_type = 'PRIMARY KEY'`,bindings:[]}}},Yc=new ui;var di=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = '${t.table}'`,bindings:[]}}},Zc=new di;var ci=class{toSql(t){return {sql:`SHOW INDEX FROM \`${t.table}\``,bindings:[]}}},Xc=new ci;var mi=class{toSql(t){return {sql:`SELECT
|
|
188
188
|
CONSTRAINT_NAME AS name,
|
|
189
189
|
COLUMN_NAME AS column_name
|
|
190
190
|
FROM information_schema.KEY_COLUMN_USAGE k
|
|
191
191
|
WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.CONSTRAINT_NAME = 'PRIMARY'
|
|
192
|
-
ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},zc=new ai;var li=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:[]}}},Gc=new li;var ui=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("mysql",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"mysql").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"mysql").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new y(this.model).formatStringColumn("mysql",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"mysql").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},Yc=new ui;var di=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("mysql",e.column),n=ee.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMysql();return r==="$"?t:`JSON_EXTRACT(${t}, '${r}')`}buildExtractTextSql(t,e){let r=e.toMysql();return r==="$"?`JSON_UNQUOTE(${t})`:`JSON_UNQUOTE(JSON_EXTRACT(${t}, '${r}'))`}buildArrayLengthSql(t,e){let r=e.toMysql();return r==="$"?`JSON_LENGTH(${t})`:`JSON_LENGTH(${t}, '${r}')`}buildObjectKeysSql(t,e){let r=e.toMysql();return r==="$"?`JSON_KEYS(${t})`:`JSON_KEYS(${t}, '${r}')`}formatWithAlias(t,e){return e&&e.length>0?`${t} as \`${e}\``:t}},Zc=new di;var ci=class{toSql(t){let e=t,r=Fe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof O?s.rawValue:s instanceof v?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "(uuid())";case "$now":return "now()";case "$currentTimestamp":return "current_timestamp";default:return}}},Xc=new ci;var mi=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:[]};if(e.options&&Object.values(e.options).some(Boolean))throw new T("MysqlTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("MySQL/MariaDB do not support TRUNCATE options"));return {sql:new y(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},em=new mi;var pi=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new y(this.model).formatRawPlaceholders("mysql",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},tm=new pi;var fi=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((u,d)=>{let c=e.values[d],m=r.formatStringColumn("mysql",u);if(c instanceof O)return `${m} = ${c.rawValue}`;if(c instanceof N){let p=new b(this.model,"mysql").parse([c],s,true);return o.push(...p.bindings),s+=p.bindings.length,`${m} = ${p.sql}`}return o.push(c),`${m} = ?`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},rm=new fi;var yi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",n=[];if(this.isRawNode(e.value)){let o=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${o}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,n=e.value;else {let o=e.value.map(s=>"?").join(", ");r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${o})`,n=e.value;}else if(e.value instanceof v){let o=new b(this.model,"mysql").parse([e.value],1,true).sql;r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${o}`,n=[];}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ?`,n=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("mysql",t):t}},nm=new yi;var hi=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"mysql"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},om=new hi;var gi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new y(this.model).formatStringColumn("mysql",e.column);switch(e.jsonOperator){case "=":r=this.dbType==="mariadb"?`${o} = ?`:`${o} = CAST(? AS JSON)`,n=[JSON.stringify(e.value)];break;case "contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "subset":r=`JSON_CONTAINS(?, ${o})`,n=[JSON.stringify(e.value)];break;case "path":{let s=ee.from(e.path??"");r=`JSON_UNQUOTE(JSON_EXTRACT(${o}, '${s.toMysql()}')) ${e.comparisonOperator??"="} ?`,n=[e.value];break}case "has none":throw new T("WhereJsonInterpreter::has none","NOT_SUPPORTED_IN_MYSQL");case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},sm=new gi;var bi=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"mysql"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"mysql"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},im=new bi;var Ti=class{toSql(t){let e=t,r=new y(this.model),n=s=>r.formatStringColumn("mysql",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},am=new Ti;var wi=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.columns?.length?` (${e.columns.map(a=>new y(this.model).formatStringColumnBare("mysql",a)).join(", ")})`:"";return {sql:`${e.alias}${s} as (${o.sql})`,bindings:o.bindings}}},lm=new wi;var Si=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(n+=` ${s.join(" ")}`);}return {sql:`add column ${n}`,bindings:[]}}},um=new Si;var Ni=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},dm=new Ni;var qi=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`"${n}"`).join(", ")})`,bindings:[]}}},cm=new qi;var Ci=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),s=o.join(" ");s=s.replace(/\s*check\s*\(.*\)\s*$/i,"").trim(),e.newType.dataType==="uuid"&&(s=s.replace(/\s+default\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:[]}}},mm=new Ci;var Ri=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"postgres"),s=[],a=[];for(let c of e.children){let{sql:m,bindings:p}=o.parse([c]);s.push(m.trim()),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifExists?"if exists ":""}${n} ${l}`,bindings:a}}},pm=new Ri;var _i=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},fm=new _i;var Mi=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},ym=new Mi;var xi=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},hm=new xi;var Oi=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},gm=new Oi;var Di=class{toSql(t){return {sql:"",bindings:[]}}},bm=new Di;var Ai=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Tm=new Ai;var $i=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},wm=new $i;var Ii=class{toSql(t){let e=t,r;return e.defaultValue instanceof O?r=e.defaultValue.rawValue:e.defaultValue instanceof v?r=new b(this.model,"postgres").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},Sm=new Ii;var vi=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Nm=new vi;var Pi=class{toSql(t){return {sql:"",bindings:[]}}},qm=new Pi;var Ei=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new y(this.model).formatStringColumn("postgres",C(e.column)),o=e.dataType.toLowerCase();if(o==="char"){let a=e.length??1;return {sql:`${n} char(${a})`,bindings:[]}}else if(o==="varchar"){let a=e.length??255;return {sql:`${n} varchar(${a})`,bindings:[]}}else {if(o==="text"||o==="longtext"||o==="mediumtext"||o==="tinytext")return {sql:`${n} text`,bindings:[]};if(o==="uuid"){let a=e.isForeignKey?"":" default gen_random_uuid()";return {sql:`${n} uuid${a}`,bindings:[]}}else {if(o==="ulid")return {sql:`${n} varchar(26)`,bindings:[]};if(o==="bigint")return e.autoIncrement?{sql:`${n} bigserial`,bindings:[]}:{sql:`${n} bigint`,bindings:[]};if(o==="tinyint")return {sql:`${n} smallint`,bindings:[]};if(o==="smallint")return {sql:`${n} smallint`,bindings:[]};if(o==="mediumint")return {sql:`${n} integer`,bindings:[]};if(o==="float"||o==="real")return {sql:`${n} real`,bindings:[]};if(o==="double")return {sql:`${n} double precision`,bindings:[]};if(o==="decimal"||o==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${n} numeric(${a}, ${l})`,bindings:[]}}else {if(o==="date")return {sql:`${n} date`,bindings:[]};if(o==="year")return {sql:`${n} smallint`,bindings:[]};if(o==="time"){let a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${n} time${a}`,bindings:[]}}else if(o==="datetime"||o==="timestamp"){let a=e.withTimezone?" with time zone":" without time zone",l=typeof e.precision=="number"?`(${e.precision})`:"",u=`${n} timestamp${l}${a}`.trimEnd();return e.autoCreate&&(u+=" default current_timestamp"),{sql:u,bindings:[]}}else {if(o==="boolean"||o==="bool")return {sql:`${n} boolean`,bindings:[]};if(o==="bytea"||o==="binary"||o==="varbinary"||o==="blob"||o==="longblob"||o==="mediumblob"||o==="tinyblob")return {sql:`${n} bytea`,bindings:[]};if(o==="json")return {sql:`${n} json`,bindings:[]};if(o==="jsonb")return {sql:`${n} jsonb`,bindings:[]};if(o==="enum"){if(e.enumValues&&e.enumValues.length>0){let a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${n} text check (${n} in (${a}))`,bindings:[]}}return {sql:`${n} text`,bindings:[]}}else {if(o==="integer"||o==="int")return e.autoIncrement?{sql:`${n} serial`,bindings:[]}:{sql:`${n} integer`,bindings:[]};if(o==="geometry")return {sql:`${n} geometry`,bindings:[]};if(o==="point")return {sql:`${n} point`,bindings:[]};if(o==="linestring")return {sql:`${n} linestring`,bindings:[]};if(o==="polygon")return {sql:`${n} polygon`,bindings:[]};if(o==="multipoint")return {sql:`${n} multipoint`,bindings:[]}}}}}}let s=e.length?`(${e.length})`:"";return {sql:`${n} ${o}${s}`,bindings:[]}}},Cm=new Ei;var Bi=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
193
|
-
`:e,bindings:[]}}},Rm=new Bi;var ki=class{toSql(t){return {sql:"",bindings:[]}}},_m=new ki;var Qi=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let n=e.constraintName?`constraint "${e.constraintName}" `:"",o=(e.columns??[]).map(s=>r.formatStringColumn("postgres",C(s))).join(", ");return {sql:`${n}primary key (${o})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns??[],o=e.constraintName?`constraint "${e.constraintName}" `:"",s=n.map(a=>r.formatStringColumn("postgres",C(a))).join(", ");return e.constraintName?{sql:`${o}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 n=e.defaultValue;return n instanceof O?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof v?{sql:`default ${new b(this.model,"postgres").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let n=e.columns.map(u=>r.formatStringColumn("postgres",C(u))).join(", ");if(!e.references)return {sql:"",bindings:[]};let o=r.formatStringTable("postgres",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("postgres",C(u))).join(", "),l=`${e.constraintName?`constraint "${e.constraintName}" `:""}foreign key (${n}) references ${o}(${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 Qi;var Ki=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"postgres"),s=[],a=[];for(let S of e.children){let{sql:q,bindings:M}=o.parse([S]);if(S.folder==="constraint"){let R=s.pop()??"",$=q;if(/not null/i.test($)||/null/i.test($)||/default/i.test($)){let A=`${R} ${$}`.trim();A=A.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(A),a.push(...M);continue}s.push(R),s.push($),a.push(...M);continue}s.push(q),a.push(...M);}for(let S of e.namedConstraints){let{sql:q,bindings:M}=o.parse([S]);s.push(q),a.push(...M);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.temporary&&d.push("TEMPORARY"),e.unlogged&&d.push("UNLOGGED");let c=[];if(e.postgresWith){let S=Object.entries(e.postgresWith).map(([q,M])=>`${q}=${M}`).join(", ");S&&c.push(`WITH (${S})`);}let m=e.tablespace?`TABLESPACE ${e.tablespace}`:"",p=d.length>0?`${d.join(" ")} `:"",h=c.length>0?` ${c.join(" ")}`:"",f=m?` ${m}`:"";return {sql:`${u}${p}${n} (${l})${h}${f}`,bindings:a}}},xm=new Ki;var Li=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},Om=new Li;var Wi=class{toSql(t){return {sql:"",bindings:[]}}},Dm=new Wi;var ji=class{toSql(t){return {sql:`(${t.columns.map(n=>new y(this.model).formatStringColumn("postgres",n)).join(", ")})`,bindings:[]}}},Am=new ji;var Fi=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},$m=new Fi;var Ui=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},Im=new Ui;var Vi=class{toSql(t){let e=t,r=new y(this.model),n=e.alias?` as ${r.quoteIdentifier("postgres",e.alias)}`:"";if(e.table instanceof O){let{sql:l,bindings:u}=r.formatRawPlaceholders("postgres",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("postgres",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"postgres").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},vm=new Vi;var Ji=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},Pm=new Ji;var Hi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,n=new b(this.model,"postgres"),o=new y(this.model);if(e.group?.length){let{sql:u,bindings:d}=n.parse(e.group,e.currParamIndex,true);return {sql:`(${u})`,bindings:d}}let s=o.formatStringColumn("postgres",e.column),a="",l=[];if(e.subquery!==void 0){let u=this.parseSubquery(n,e,r);a=`${e.column?`${s} `:""}${e.operator} (${u.sql})`,l=u.bindings;}else if(e.value instanceof v){let u=n.parse([e.value],1,true).sql;a=`${s} ${e.operator} ${u}`;}else if(e.operator==="is null"||e.operator==="is not null")a=`${s} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")a=`${s} ${e.operator} $${r} and $${r+1}`;else {let u=e.value.map((d,c)=>`$${r+c}`).join(", ");a=`${s} ${e.operator} (${u})`;}l=e.value;}else a=`${s} ${e.operator} $${r}`,l=[e.value];return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:l}}parseSubquery(t,e,r){let n=e.subquery;if(typeof n=="string")return {sql:n,bindings:[]};let o=Array.isArray(n)?n:[n];return t.parse(o,r)}},Em=new Hi;var zi=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table),o=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${n} (${o})`,bindings:[]}}},Bm=new zi;var Gi=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},km=new Gi;var Yi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode),o=r.renderWithNodes("postgres",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u;if(e.source){let c=new b(this.model,"postgres").parse(e.source,a),m=e.targetColumns?.length?` (${e.targetColumns.map(p=>r.formatStringColumn("postgres",p)).join(", ")})`:"";u=`${n}${m} ${c.sql}`,l.push(...c.bindings);}else {let c=e.records.length?Object.keys(e.records[0]):[];if(!c.length)u=`${n} default values`;else {let m=c.map(f=>r.formatStringColumn("postgres",f)).join(", "),p=[],h=typeof this.model?.getColumnsByName=="function"?this.model.getColumnsByName():new Map;for(let f of e.records){let w=c.map(q=>f[q]),S=[];for(let q=0;q<c.length;q++){let M=w[q];M instanceof O?S.push(M.rawValue):(l.push(M),S.push(`$${a++}${this.formatTypeCast(M,h.get(c[q])?.type)}`));}p.push(`(${S.join(", ")})`);}u=`${n} (${m}) values ${p.join(", ")}`;}}let d=`${s}${u}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let c=e.returning.map(m=>r.formatStringColumn("postgres",m)).join(", ");d+=` returning ${c}`;}else d+=" returning *";return {sql:d,bindings:[...o.bindings,...l]}}formatTypeCast(t,e){if(typeof t=="string"&&(e==="jsonb"||e==="json"))return "::text::jsonb";let r="";return Buffer.isBuffer(t)?r="::bytea":Array.isArray(t)?r="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?r="::jsonb":typeof t=="boolean"?r="::boolean":typeof t=="bigint"&&(r="::bigint"),r}},Qm=new Yi;var Zi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=r.formatStringTable("postgres",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o;if(e.using?.length){let c=e.using.map(m=>r.formatStringColumn("postgres",m)).join(", ");return o=`${n} using (${c})`,{sql:o,bindings:[]}}let s=e.left;s.includes(".")||(s=`${e.table}.${s}`);let a=e.right;a.includes(".")||(a=`${this.model.table}.${a}`);let l=r.formatStringColumn("postgres",s),u=r.formatStringColumn("postgres",a);o=`${n} on ${l} ${e.on?.operator} ${u}`;let d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"postgres");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");o+=` and ${h}`,d.push(...p.bindings);}}}return {sql:o,bindings:d}}},Km=new Zi;var Xi=class{toSql(t){let e=t,r=new y(this.model).formatStringColumn("postgres",e.column),n=wd(e.path);if(e.operation==="remove")return {sql:this.withAlias(`${r} #- ${n}`,e.alias),bindings:[]};let o=`jsonb_set(${r}, ${n}, $${e.currParamIndex}::jsonb, true)`,s=e.operation==="set"?o:`CASE WHEN ${r} #> ${n} IS NULL THEN ${o} ELSE ${r} END`;return {sql:this.withAlias(s,e.alias),bindings:[JSON.stringify(e.value)]}}withAlias(t,e){return e?`${t} as "${e}"`:t}},Lm=new Xi;var ea=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},Wm=new ea;var Ch={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},ta=class{toSql(t){let e=t,r=Ch[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},jm=new ta;var ra=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},Fm=new ra;var na=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.conflictColumns.map(l=>r.formatStringColumnBare("postgres",l)).join(", "),o=n?` (${n})`:"";if(e.mode==="ignore"){let l=`on conflict${o} do nothing`;if(e.returning&&e.returning.length){let u=e.returning.map(d=>r.formatStringColumn("postgres",d)).join(", ");l+=` returning ${u}`;}return {sql:l,bindings:[]}}let s=e.columnsToUpdate.map(l=>`${r.formatStringColumnBare("postgres",l)} = excluded.${r.formatStringColumnBare("postgres",l)}`).join(", "),a=`on conflict${o} do update set ${s}`;if(e.returning&&e.returning.length){let l=e.returning.map(u=>r.formatStringColumn("postgres",u)).join(", ");a+=` returning ${l}`;}return {sql:a,bindings:[]}}},Um=new na;var oa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("postgres",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},Vm=new oa;var sa=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Jm=new sa;var ia=class{toSql(t){let e=t,r=new y(this.model);return {sql:`returning ${!e.columns.length||e.columns.includes("*")?"*":e.columns.map(o=>r.formatStringColumn("postgres",o)).join(", ")}`,bindings:[]}}},Hm=new ia;var aa=class{toSql(t){return {sql:`SELECT
|
|
192
|
+
ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},em=new mi;var pi=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:[]}}},tm=new pi;var yi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("mysql",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"mysql").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"mysql").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new f(this.model).formatStringColumn("mysql",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"mysql").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},rm=new yi;var fi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("mysql",e.column),n=ee.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMysql();return r==="$"?t:`JSON_EXTRACT(${t}, '${r}')`}buildExtractTextSql(t,e){let r=e.toMysql();return r==="$"?`JSON_UNQUOTE(${t})`:`JSON_UNQUOTE(JSON_EXTRACT(${t}, '${r}'))`}buildArrayLengthSql(t,e){let r=e.toMysql();return r==="$"?`JSON_LENGTH(${t})`:`JSON_LENGTH(${t}, '${r}')`}buildObjectKeysSql(t,e){let r=e.toMysql();return r==="$"?`JSON_KEYS(${t})`:`JSON_KEYS(${t}, '${r}')`}formatWithAlias(t,e){return e&&e.length>0?`${t} as \`${e}\``:t}},nm=new fi;var hi=class{toSql(t){let e=t,r=Fe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof x?s.rawValue:s instanceof I?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "(uuid())";case "$now":return "now()";case "$currentTimestamp":return "current_timestamp";default:return}}},om=new hi;var gi=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:[]};if(e.options&&Object.values(e.options).some(Boolean))throw new T("MysqlTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("MySQL/MariaDB do not support TRUNCATE options"));return {sql:new f(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},sm=new gi;var bi=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new f(this.model).formatRawPlaceholders("mysql",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:e.wrap?`(${o.sql})`:o.sql,bindings:o.bindings}}},im=new bi;var Ti=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),n=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a="";if(e.joinNodes?.length){let d=new b(this.model,"mysql").parse(e.joinNodes,s);a=`${d.sql} `,o.push(...d.bindings),s+=d.bindings.length;}let l=e.columns.map((d,m)=>{let c=e.values[m],p=r.formatStringColumn("mysql",d);if(c instanceof x)return `${p} = ${c.rawValue}`;if(c instanceof N){let h=new b(this.model,"mysql").parse([c],s,true);return o.push(...h.bindings),s+=h.bindings.length,`${p} = ${h.sql}`}return o.push(c),`${p} = ?`}).join(", ");return {sql:`${n} ${a}set ${l}`,bindings:o}}},am=new Ti;var wi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",n=[],o=e.operator.toLowerCase(),s=o==="ilike"||o==="not ilike",a=o==="not ilike"?"not like":s?"like":e.operator,l=u=>s?`lower(${u})`:u;if(this.isRawNode(e.value)){let u=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${l(new f(this.model).formatStringColumn("mysql",e.column))} ${a} ${l(u)}`,n=[];}else if(e.tupleColumns?.length){let u=e.tupleColumns.map(c=>new f(this.model).formatStringColumn("mysql",c)).join(", "),d=e.value,m=d.map(c=>`(${c.map(()=>"?").join(", ")})`).join(", ");r=`(${u}) ${e.operator} (${m})`,n=d.flat();}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new f(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,n=e.value;else {let u=e.value.map(d=>"?").join(", ");r=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${u})`,n=e.value;}else if(e.value instanceof I){let u=new b(this.model,"mysql").parse([e.value],1,true).sql;r=`${l(new f(this.model).formatStringColumn("mysql",e.column))} ${a} ${l(u)}`,n=[];}else if(e.operator.includes("null"))r=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${l(new f(this.model).formatStringColumn("mysql",e.column))} ${a} ${s?"lower(?)":"?"}`,n=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new f(this.model).formatStringColumn("mysql",t):t}},lm=new wi;var Si=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"mysql"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:e.isNegated?`not (${n})`:`(${n})`,bindings:o}}},um=new Si;var Ni=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new f(this.model).formatStringColumn("mysql",e.column);switch(e.jsonOperator){case "=":r=this.dbType==="mariadb"?`${o} = ?`:`${o} = CAST(? AS JSON)`,n=[JSON.stringify(e.value)];break;case "contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "subset":r=`JSON_CONTAINS(?, ${o})`,n=[JSON.stringify(e.value)];break;case "path":{let s=ee.from(e.path??"");r=`JSON_UNQUOTE(JSON_EXTRACT(${o}, '${s.toMysql()}')) ${e.comparisonOperator??"="} ?`,n=[e.value];break}case "has none":throw new T("WhereJsonInterpreter::has none","NOT_SUPPORTED_IN_MYSQL");case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},dm=new Ni;var qi=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"mysql"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"mysql"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},cm=new qi;var Ci=class{toSql(t){let e=t,r=new f(this.model),n=s=>r.formatStringColumn("mysql",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},mm=new Ci;var Ri=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.columns?.length?` (${e.columns.map(a=>new f(this.model).formatStringColumnBare("mysql",a)).join(", ")})`:"";return {sql:`${e.alias}${s} as (${o.sql})`,bindings:o.bindings}}},pm=new Ri;var _i=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(n+=` ${s.join(" ")}`);}return {sql:`add column ${n}`,bindings:[]}}},ym=new _i;var Mi=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},fm=new Mi;var xi=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`"${n}"`).join(", ")})`,bindings:[]}}},hm=new xi;var Oi=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),s=o.join(" ");s=s.replace(/\s*check\s*\(.*\)\s*$/i,"").trim(),e.newType.dataType==="uuid"&&(s=s.replace(/\s+default\s+.+$/i,"").trim());let a=`alter column "${e.column}" type ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?`alter column "${e.column}" drop not null`:`alter column "${e.column}" set not null`;a+=`, ${l}`;}if(e.options.dropDefault)a+=`, alter column "${e.column}" drop default`;else if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=`, alter column "${e.column}" set default ${l}`;}return e.options.unique!==void 0&&(e.options.unique?a+=`, add constraint "unique_${e.column}" unique ("${e.column}")`:a+=`, drop constraint "unique_${e.column}"`),{sql:a,bindings:[]}}},gm=new Oi;var Ai=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"postgres"),s=[],a=[];for(let m of e.children){let{sql:c,bindings:p}=o.parse([m]);s.push(c.trim()),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifExists?"if exists ":""}${n} ${l}`,bindings:a}}},bm=new Ai;var Di=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Tm=new Di;var $i=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},wm=new $i;var Ii=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Sm=new Ii;var vi=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Nm=new vi;var Pi=class{toSql(t){return {sql:"",bindings:[]}}},qm=new Pi;var Ei=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Cm=new Ei;var Bi=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Rm=new Bi;var ki=class{toSql(t){let e=t,r;return e.defaultValue instanceof x?r=e.defaultValue.rawValue:e.defaultValue instanceof I?r=new b(this.model,"postgres").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},_m=new ki;var Qi=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Mm=new Qi;var Ki=class{toSql(t){return {sql:"",bindings:[]}}},xm=new Ki;var Li=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new f(this.model).formatStringColumn("postgres",C(e.column)),o=e.dataType.toLowerCase();if(o==="char"){let a=e.length??1;return {sql:`${n} char(${a})`,bindings:[]}}else if(o==="varchar"){let a=e.length??255;return {sql:`${n} varchar(${a})`,bindings:[]}}else {if(o==="text"||o==="longtext"||o==="mediumtext"||o==="tinytext")return {sql:`${n} text`,bindings:[]};if(o==="uuid"){let a=e.isForeignKey?"":" default gen_random_uuid()";return {sql:`${n} uuid${a}`,bindings:[]}}else {if(o==="ulid")return {sql:`${n} varchar(26)`,bindings:[]};if(o==="bigint")return e.autoIncrement?{sql:`${n} bigserial`,bindings:[]}:{sql:`${n} bigint`,bindings:[]};if(o==="tinyint")return {sql:`${n} smallint`,bindings:[]};if(o==="smallint")return {sql:`${n} smallint`,bindings:[]};if(o==="mediumint")return {sql:`${n} integer`,bindings:[]};if(o==="float"||o==="real")return {sql:`${n} real`,bindings:[]};if(o==="double")return {sql:`${n} double precision`,bindings:[]};if(o==="decimal"||o==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${n} numeric(${a}, ${l})`,bindings:[]}}else {if(o==="date")return {sql:`${n} date`,bindings:[]};if(o==="year")return {sql:`${n} smallint`,bindings:[]};if(o==="time"){let a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${n} time${a}`,bindings:[]}}else if(o==="datetime"||o==="timestamp"){let a=e.withTimezone?" with time zone":" without time zone",l=typeof e.precision=="number"?`(${e.precision})`:"",u=`${n} timestamp${l}${a}`.trimEnd();return e.autoCreate&&(u+=" default current_timestamp"),{sql:u,bindings:[]}}else {if(o==="boolean"||o==="bool")return {sql:`${n} boolean`,bindings:[]};if(o==="bytea"||o==="binary"||o==="varbinary"||o==="blob"||o==="longblob"||o==="mediumblob"||o==="tinyblob")return {sql:`${n} bytea`,bindings:[]};if(o==="json")return {sql:`${n} json`,bindings:[]};if(o==="jsonb")return {sql:`${n} jsonb`,bindings:[]};if(o==="enum"){if(e.enumValues&&e.enumValues.length>0){let a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${n} text check (${n} in (${a}))`,bindings:[]}}return {sql:`${n} text`,bindings:[]}}else {if(o==="integer"||o==="int")return e.autoIncrement?{sql:`${n} serial`,bindings:[]}:{sql:`${n} integer`,bindings:[]};if(o==="geometry")return {sql:`${n} geometry`,bindings:[]};if(o==="point")return {sql:`${n} point`,bindings:[]};if(o==="linestring")return {sql:`${n} linestring`,bindings:[]};if(o==="polygon")return {sql:`${n} polygon`,bindings:[]};if(o==="multipoint")return {sql:`${n} multipoint`,bindings:[]}}}}}}let s=e.length?`(${e.length})`:"";return {sql:`${n} ${o}${s}`,bindings:[]}}},Om=new Li;var Wi=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
193
|
+
`:e,bindings:[]}}},Am=new Wi;var ji=class{toSql(t){return {sql:"",bindings:[]}}},Dm=new ji;var Fi=class{toSql(t){let e=t,r=new f(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let n=e.constraintName?`constraint "${e.constraintName}" `:"",o=(e.columns??[]).map(s=>r.formatStringColumn("postgres",C(s))).join(", ");return {sql:`${n}primary key (${o})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns??[],o=e.constraintName?`constraint "${e.constraintName}" `:"",s=n.map(a=>r.formatStringColumn("postgres",C(a))).join(", ");return e.constraintName?{sql:`${o}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 n=e.defaultValue;return n instanceof x?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof I?{sql:`default ${new b(this.model,"postgres").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let n=e.columns.map(u=>r.formatStringColumn("postgres",C(u))).join(", ");if(!e.references)return {sql:"",bindings:[]};let o=r.formatStringTable("postgres",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("postgres",C(u))).join(", "),l=`${e.constraintName?`constraint "${e.constraintName}" `:""}foreign key (${n}) references ${o}(${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:[]}}},$m=new Fi;var Ui=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"postgres"),s=[],a=[];for(let S of e.children){let{sql:q,bindings:M}=o.parse([S]);if(S.folder==="constraint"){let R=s.pop()??"",D=q;if(/not null/i.test(D)||/null/i.test(D)||/default/i.test(D)){let $=`${R} ${D}`.trim();$=$.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push($),a.push(...M);continue}s.push(R),s.push(D),a.push(...M);continue}s.push(q),a.push(...M);}for(let S of e.namedConstraints){let{sql:q,bindings:M}=o.parse([S]);s.push(q),a.push(...M);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.temporary&&d.push("TEMPORARY"),e.unlogged&&d.push("UNLOGGED");let m=[];if(e.postgresWith){let S=Object.entries(e.postgresWith).map(([q,M])=>`${q}=${M}`).join(", ");S&&m.push(`WITH (${S})`);}let c=e.tablespace?`TABLESPACE ${e.tablespace}`:"",p=d.length>0?`${d.join(" ")} `:"",h=m.length>0?` ${m.join(" ")}`:"",y=c?` ${c}`:"";return {sql:`${u}${p}${n} (${l})${h}${y}`,bindings:a}}},Im=new Ui;var Vi=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode.table=="string")return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),o=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.usingNode)return {sql:o,bindings:[]};let s=r.getWriteSource("postgres",e.usingNode,e.currParamIndex);return {sql:`${o} using ${s.sql}`,bindings:s.bindings}}},vm=new Vi;var Ji=class{toSql(t){return {sql:"",bindings:[]}}},Pm=new Ji;var Hi=class{toSql(t){return {sql:`(${t.columns.map(n=>new f(this.model).formatStringColumn("postgres",n)).join(", ")})`,bindings:[]}}},Em=new Hi;var zi=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Bm=new zi;var Gi=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},km=new Gi;var Yi=class{toSql(t){let e=t,r=new f(this.model),n=e.alias?` as ${r.quoteIdentifier("postgres",e.alias)}`:"";if(e.table instanceof x){let{sql:l,bindings:u}=r.formatRawPlaceholders("postgres",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string"){let l=r.formatStringTable("postgres",e.schema?`${e.schema}.${e.table}`:e.table);return {sql:`${e.only?"only ":""}${l}${n}`,bindings:[]}}let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"postgres").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},Qm=new Yi;var Zi=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},Km=new Zi;var Xi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,n=new b(this.model,"postgres"),o=new f(this.model);if(e.group?.length){let{sql:u,bindings:d}=n.parse(e.group,e.currParamIndex,true);return {sql:`(${u})`,bindings:d}}let s=o.formatStringColumn("postgres",e.column),a="",l=[];if(e.subquery!==void 0){let u=this.parseSubquery(n,e,r);a=`${e.column?`${s} `:""}${e.operator} (${u.sql})`,l=u.bindings;}else if(e.value instanceof I){let u=n.parse([e.value],1,true).sql;a=`${s} ${e.operator} ${u}`;}else if(e.operator==="is null"||e.operator==="is not null")a=`${s} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")a=`${s} ${e.operator} $${r} and $${r+1}`;else {let u=e.value.map((d,m)=>`$${r+m}`).join(", ");a=`${s} ${e.operator} (${u})`;}l=e.value;}else a=`${s} ${e.operator} $${r}`,l=[e.value];return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:l}}parseSubquery(t,e,r){let n=e.subquery;if(typeof n=="string")return {sql:n,bindings:[]};let o=Array.isArray(n)?n:[n];return t.parse(o,r)}},Lm=new Xi;var ea=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("postgres",e.table),o=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${n} (${o})`,bindings:[]}}},Wm=new ea;var ta=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},jm=new ta;var ra=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode),o=r.renderWithNodes("postgres",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u;if(e.source){let m=new b(this.model,"postgres").parse(e.source,a),c=e.targetColumns?.length?` (${e.targetColumns.map(p=>r.formatStringColumn("postgres",p)).join(", ")})`:"";u=`${n}${c} ${m.sql}`,l.push(...m.bindings);}else {let m=e.records.length?Object.keys(e.records[0]):[];if(!m.length)u=`${n} default values`;else {let c=m.map(y=>r.formatStringColumn("postgres",y)).join(", "),p=[],h=typeof this.model?.getColumnsByName=="function"?this.model.getColumnsByName():new Map;for(let y of e.records){let w=m.map(q=>y[q]),S=[];for(let q=0;q<m.length;q++){let M=w[q];M instanceof x?S.push(M.rawValue):(l.push(M),S.push(`$${a++}${this.formatTypeCast(M,h.get(m[q])?.type)}`));}p.push(`(${S.join(", ")})`);}u=`${n} (${c}) values ${p.join(", ")}`;}}let d=`${s}${u}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(c=>r.formatStringColumn("postgres",c)).join(", ");d+=` returning ${m}`;}else d+=" returning *";return {sql:d,bindings:[...o.bindings,...l]}}formatTypeCast(t,e){if(typeof t=="string"&&(e==="jsonb"||e==="json"))return "::text::jsonb";let r="";return Buffer.isBuffer(t)?r="::bytea":Array.isArray(t)?r="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?r="::jsonb":typeof t=="boolean"?r="::boolean":typeof t=="bigint"&&(r="::bigint"),r}},Fm=new ra;var na=class{toSql(t){let e=t;if(e.isRawValue)return new f(this.model).formatRawPlaceholders("postgres",e.table,e.bindings??[],e.currParamIndex);let r=new f(this.model),n=e.subquery?.length&&!e.isRawValue?new b(this.model,"postgres").parse(e.subquery,e.currParamIndex):null,o=n?`(${n.sql}) as ${r.quoteIdentifier("postgres",e.table)}`:r.formatStringTable("postgres",e.schema?`${e.schema}.${e.table}`:e.table),s=n?.bindings??[];if(e.type==="cross")return {sql:o,bindings:s};let a;if(e.using?.length){let p=e.using.map(h=>r.formatStringColumn("postgres",h)).join(", ");return a=`${o} using (${p})`,{sql:a,bindings:s}}let l=e.left;l.includes(".")||(l=`${e.table}.${l}`);let u=e.right;u.includes(".")||(u=`${this.model.table}.${u}`);let d=r.formatStringColumn("postgres",l),m=r.formatStringColumn("postgres",u);a=`${o} on ${d} ${e.on?.operator} ${m}`;let c=[...s];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new b(this.model,"postgres");for(let h of e.additionalConditions){let y=p.parse([h],e.currParamIndex+c.length);if(y.sql){let w=y.sql.replace(/^where\s+/i,"");a+=` and ${w}`,c.push(...y.bindings);}}}return {sql:a,bindings:c}}},Um=new na;var oa=class{toSql(t){let e=t,r=new f(this.model).formatStringColumn("postgres",e.column),n=Rd(e.path);if(e.operation==="remove")return {sql:this.withAlias(`${r} #- ${n}`,e.alias),bindings:[]};let o=`jsonb_set(${r}, ${n}, $${e.currParamIndex}::jsonb, true)`,s=e.operation==="set"?o:`CASE WHEN ${r} #> ${n} IS NULL THEN ${o} ELSE ${r} END`;return {sql:this.withAlias(s,e.alias),bindings:[JSON.stringify(e.value)]}}withAlias(t,e){return e?`${t} as "${e}"`:t}},Vm=new oa;var sa=class{toSql(t){let e=t,r=e.currParamIndex;return e.skipBinding?{sql:`${e.limit}`,bindings:[]}:{sql:`$${r}`,bindings:[e.limit]}}},Jm=new sa;var Dh={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},ia=class{toSql(t){let e=t,r=Dh[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},Hm=new ia;var aa=class{toSql(t){let e=t,r=e.currParamIndex;return e.skipBinding?{sql:`${e.offset}`,bindings:[]}:{sql:`$${r}`,bindings:[e.offset]}}},zm=new aa;var la=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=e.conflictColumns.map(u=>r.formatStringColumnBare("postgres",u)).join(", "),o="";e.conflictConstraint?o=` on constraint ${r.formatStringColumnBare("postgres",e.conflictConstraint)}`:e.conflictTargetRaw?o=` ${e.conflictTargetRaw}`:n&&(o=` (${n})`);let s=this.renderMergeWhere(e);if(e.mode==="ignore"){let u=`on conflict${o} do nothing`;return u+=this.renderReturning(e),{sql:u,bindings:s.bindings}}let a=e.columnsToUpdate.map(u=>`${r.formatStringColumnBare("postgres",u)} = excluded.${r.formatStringColumnBare("postgres",u)}`).join(", "),l=`on conflict${o} do update set ${a}${s.sql}`;return l+=this.renderReturning(e),{sql:l,bindings:s.bindings}}renderMergeWhere(t){if(!t.whereNodes?.length)return {sql:"",bindings:[]};let e=new b(this.model,"postgres").parse(t.whereNodes,t.currParamIndex,true);return {sql:e.sql?` where ${e.sql}`:"",bindings:e.bindings}}renderReturning(t){return t.returning?.length?` returning ${t.returning.map(r=>new f(this.model).formatStringColumn("postgres",r)).join(", ")}`:""}},Gm=new la;var ua=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("postgres",e.column),n=e.direction.toLowerCase(),o=e.nulls?` nulls ${e.nulls}`:"";return {sql:`${r} ${n}${o}`,bindings:[]}}},Ym=new ua;var da=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Zm=new da;var ca=class{toSql(t){let e=t,r=new f(this.model);return {sql:`returning ${!e.columns.length||e.columns.includes("*")?"*":e.columns.map(o=>r.formatStringColumn("postgres",o)).join(", ")}`,bindings:[]}}},Xm=new ca;var ma=class{toSql(t){return {sql:`SELECT
|
|
194
194
|
con.conname AS name,
|
|
195
195
|
pg_get_constraintdef(con.oid) AS expression
|
|
196
196
|
FROM pg_constraint con
|
|
@@ -198,7 +198,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Kd=new Zo;var Xo=class{toSql(t){let
|
|
|
198
198
|
JOIN pg_namespace nsp ON nsp.oid = rel.relnamespace
|
|
199
199
|
WHERE con.contype = 'c'
|
|
200
200
|
AND rel.relname = '${t.table}'
|
|
201
|
-
AND nsp.nspname = current_schema()`,bindings:[]}}},
|
|
201
|
+
AND nsp.nspname = current_schema()`,bindings:[]}}},ep=new ma;var pa=class{toSql(t){return {sql:`SELECT
|
|
202
202
|
tc.constraint_name as name,
|
|
203
203
|
kcu.column_name as column_name,
|
|
204
204
|
ccu.table_name as referenced_table,
|
|
@@ -213,7 +213,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Kd=new Zo;var Xo=class{toSql(t){let
|
|
|
213
213
|
JOIN information_schema.referential_constraints rc
|
|
214
214
|
ON rc.constraint_name = tc.constraint_name AND rc.constraint_schema = tc.table_schema
|
|
215
215
|
WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
|
|
216
|
-
ORDER BY kcu.ordinal_position`,bindings:[]}}},
|
|
216
|
+
ORDER BY kcu.ordinal_position`,bindings:[]}}},tp=new pa;var ya=class{toSql(t){return {sql:`SELECT column_name FROM information_schema.columns WHERE table_schema = current_schema() AND table_name = '${t.table}' ORDER BY ordinal_position`,bindings:[]}}},rp=new ya;var fa=class{toSql(t){return {sql:"SELECT table_name AS name FROM information_schema.tables WHERE table_schema = current_schema() AND table_type = 'BASE TABLE' ORDER BY table_name",bindings:[]}}},np=new fa;var ha=class{toSql(t){let e=t;return {sql:`SELECT EXISTS (SELECT FROM information_schema.check_constraints cc INNER JOIN information_schema.table_constraints tc ON cc.constraint_name = tc.constraint_name WHERE tc.table_schema = current_schema() AND tc.table_name = '${e.table}' AND cc.constraint_name = '${e.constraint}') as exists`,bindings:[]}}},op=new ha;var ga=class{toSql(t){let e=t;return {sql:`SELECT EXISTS (SELECT FROM information_schema.columns WHERE table_schema = current_schema() AND table_name = '${e.table}' AND column_name = '${e.column}') as exists`,bindings:[]}}},sp=new ga;var ba=class{toSql(t){let e=t;return {sql:`SELECT EXISTS (SELECT FROM pg_indexes WHERE tablename = '${e.table}' AND indexname = '${e.index}') as exists`,bindings:[]}}},ip=new ba;var Ta=class{toSql(t){return {sql:`SELECT EXISTS (SELECT FROM information_schema.table_constraints WHERE table_schema = current_schema() AND table_name = '${t.table}' AND constraint_type = 'PRIMARY KEY') as exists`,bindings:[]}}},ap=new Ta;var wa=class{toSql(t){return {sql:`SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_schema = current_schema() AND table_name = '${t.table}') as exists`,bindings:[]}}},lp=new wa;var Sa=class{toSql(t){return {sql:`SELECT
|
|
217
217
|
i.relname as index_name,
|
|
218
218
|
a.attname as column_name,
|
|
219
219
|
ix.indisunique as is_unique
|
|
@@ -232,14 +232,14 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Kd=new Zo;var Xo=class{toSql(t){let
|
|
|
232
232
|
AND t.relname = '${t.table}'
|
|
233
233
|
AND t.relnamespace = n.oid
|
|
234
234
|
AND n.nspname = current_schema()
|
|
235
|
-
AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},
|
|
235
|
+
AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},up=new Sa;var Na=class{toSql(t){return {sql:`SELECT
|
|
236
236
|
tc.constraint_name as name,
|
|
237
237
|
kcu.column_name as column_name
|
|
238
238
|
FROM information_schema.table_constraints tc
|
|
239
239
|
JOIN information_schema.key_column_usage kcu
|
|
240
240
|
ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
|
|
241
241
|
WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
|
|
242
|
-
ORDER BY kcu.ordinal_position`,bindings:[]}}},
|
|
242
|
+
ORDER BY kcu.ordinal_position`,bindings:[]}}},dp=new Na;var qa=class{toSql(t){return {sql:`SELECT column_name,
|
|
243
243
|
data_type,
|
|
244
244
|
is_nullable,
|
|
245
245
|
column_default,
|
|
@@ -249,14 +249,14 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Kd=new Zo;var Xo=class{toSql(t){let
|
|
|
249
249
|
FROM information_schema.columns
|
|
250
250
|
WHERE table_schema = current_schema()
|
|
251
251
|
AND table_name = '${t.table}'
|
|
252
|
-
ORDER BY ordinal_position`,bindings:[]}}},ip=new ba;var Ta=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("postgres",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"postgres").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"postgres").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new y(this.model).formatStringColumn("postgres",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"postgres").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},ap=new Ta;var wa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("postgres",e.column),n=ee.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toPostgres(false);return r?`${t}${r}`:t}buildExtractTextSql(t,e){if(e.isEmpty())return `${t}::text`;let r=e.toPostgres(true);return `${t}${r}`}buildArrayLengthSql(t,e){return `jsonb_array_length(${this.buildExtractSql(t,e)})`}buildObjectKeysSql(t,e){return `jsonb_object_keys(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},lp=new wa;var Sa=class{toSql(t){let e=t,r=Fe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof O?s.rawValue:s instanceof v?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "gen_random_uuid()";case "$now":return "now()";case "$currentTimestamp":return "current_timestamp";default:return}}},up=new Sa;var Na=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:[]};let r=e.options;if(this.dbType==="cockroachdb"&&(r?.restartIdentity||r?.continueIdentity))throw new T("PostgresTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("CockroachDB does not support the identity TRUNCATE options"));let n=new y(this.model).getFromForWriteOperations("postgres",e.fromNode),o="";return r?.restartIdentity?o+=" restart identity":r?.continueIdentity&&(o+=" continue identity"),r?.cascade&&(o+=" cascade"),{sql:`${n}${o}`,bindings:[]}}},dp=new Na;var qa=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new y(this.model).formatRawPlaceholders("postgres",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},cp=new qa;var Ca=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=typeof this.model?.getColumnsByName=="function"?this.model.getColumnsByName():new Map,l=e.columns.map((d,c)=>{let m=e.values[c],p=r.formatStringColumn("postgres",d);if(m instanceof O)return `${p} = ${m.rawValue}`;if(m instanceof N){let f=new b(this.model,"postgres").parse([m],s,true);return o.push(...f.bindings),s+=f.bindings.length,`${p} = ${f.sql}`}let h=`$${s++}`;return o.push(m),`${p} = ${h}${this.formatTypeCast(m,a.get(d)?.type)}`}).join(", ");return {sql:`${n} set ${l}`,bindings:o}}formatTypeCast(t,e){if(typeof t=="string"&&(e==="jsonb"||e==="json"))return "::text::jsonb";let r="";return Buffer.isBuffer(t)?r="::bytea":Array.isArray(t)?r="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?r="::jsonb":typeof t=="boolean"?r="::boolean":typeof t=="bigint"&&(r="::bigint"),r}},mp=new Ca;var Ra=class{toSql(t){let e=t;if(e.isRawValue){let s=e.value??[];if(s.length===0)return {sql:e.column,bindings:[]};let a=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`$${a++}`),bindings:s}}let r=e.currParamIndex,n="",o=[];if(this.isRawNode(e.value)){let s=this.formatRawIdentifierIfPossible(e.value.rawValue);n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between"){let s=`$${r} AND $${r+1}`;n=`${new y(this.model).formatStringColumn("postgres",e.column)} between ${s}`,o=e.value;}else {let s=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,o=e.value;}else if(e.value instanceof v){let s=new b(this.model,"postgres").parse([e.value],1,true).sql;n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,o=[];}else if(e.operator.includes("null"))n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,o=[e.value];}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("postgres",t):t}},pp=new Ra;var _a=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"postgres"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},fp=new _a;var Ma=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],s=new y(this.model).formatStringColumn("postgres",e.column);switch(e.jsonOperator){case "=":n=`${s} = $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "contains":n=`${s} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "not contains":n=`${s} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "subset":n=`${s} <@ $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "path":{let a=ee.from(e.path??"");n=`${s}${a.toPostgres(true)} ${e.comparisonOperator??"="} $${r}`,o=[e.value];break}case "has none":{let a=e.value??[],l=a.map((u,d)=>`$${r+d}`).join(", ");n=`not (jsonb_exists_any(${s}, array[${l}]))`,o=a;break}case "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},yp=new Ma;var xa=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},hp=new xa;var Oa=class{toSql(t){let e=t,r=new y(this.model),n=s=>r.formatStringColumn("postgres",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},gp=new Oa;var Da=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" materialized":e.clause==="not materialized"?" not materialized":"",a=e.columns?.length?` (${e.columns.map(l=>new y(this.model).formatStringColumnBare("postgres",l)).join(", ")})`:"";return {sql:`${e.alias}${a} as${s} (${o.sql})`,bindings:o.bindings}}},bp=new Da;var Aa=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length>0){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length>0&&(n+=` ${s.join(" ")}`);}return {sql:`add column ${n}`,bindings:[]}}},Tp=new Aa;var $a=class{toSql(t){return {sql:"",bindings:[]}}},wp=new $a;var Ia=class{toSql(t){return {sql:"",bindings:[]}}},Sp=new Ia;var va=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"sqlite"),s=[],a=[],l=false;for(let m of e.children){let{sql:p,bindings:h}=o.parse([m]);if(!(!p||!p.trim())){if(m.file==="add_column")s.push(p),l=true;else if(m.file==="add_constraint"&&l){let f=s.pop()??"",w=p.replace(/^\s*add\s+/i,"").trimStart();s.push(`${f} ${w}`);}else {if(m.file==="set_not_null"||m.file==="drop_not_null")continue;if(m.file==="set_default"||m.file==="drop_default")continue;s.push(p),l=false;}a.push(...h);}}let u=s.join(", "),d=e.ifExists?"if exists ":"";return u.trim()?{sql:`${d}${n} ${u}`,bindings:a}:{sql:"",bindings:[]}}},Np=new va;var Pa=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},qp=new Pa;var Ea=class{toSql(t){return {sql:"",bindings:[]}}},Cp=new Ea;var Ba=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Rp=new Ba;var ka=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},_p=new ka;var Qa=class{toSql(t){return {sql:"",bindings:[]}}},Mp=new Qa;var Ka=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},xp=new Ka;var La=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Op=new La;var Wa=class{toSql(t){let e=t,r;return e.defaultValue instanceof O?r=e.defaultValue.rawValue:e.defaultValue instanceof v?r=new b(this.model,"sqlite").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},Dp=new Wa;var ja=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Ap=new ja;var Fa=class{toSql(t){return {sql:"",bindings:[]}}},$p=new Fa;var Ua=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new y(this.model).formatStringColumn("sqlite",C(e.column)),o=e.dataType.toLowerCase();if(o==="bigincrement")return {sql:`${n} integer primary key autoincrement`,bindings:[]};if(o==="char"||o==="varchar")return {sql:`${n} text`,bindings:[]};if(o==="uuid"){let a=e.isForeignKey?"":" default (lower(hex(randomblob(16))))";return {sql:`${n} varchar(36)${a}`,bindings:[]}}else if(o==="ulid")return {sql:`${n} varchar(26)`,bindings:[]};if(o.includes("text"))return {sql:`${n} text`,bindings:[]};if(o==="integer"||o==="bigint"||o==="int")return e.autoIncrement?{sql:`${n} integer primary key autoincrement`,bindings:[]}:{sql:`${n} integer`,bindings:[]};if(o==="tinyint")return {sql:`${n} integer`,bindings:[]};if(o==="smallint")return {sql:`${n} integer`,bindings:[]};if(o==="mediumint")return {sql:`${n} integer`,bindings:[]};if(o==="float"||o==="double")return {sql:`${n} real`,bindings:[]};if(o==="decimal"||o==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${n} numeric(${a}, ${l})`,bindings:[]}}if(o==="date"||o==="datetime"||o==="timestamp"||o==="time"||o==="year"){let a=`${n} text`;return (o==="datetime"||o==="timestamp")&&e.autoCreate&&(a+=" default current_timestamp"),{sql:a,bindings:[]}}else {if(o==="boolean")return {sql:`${n} integer`,bindings:[]};if(o==="json"||o==="jsonb")return {sql:`${n} text`,bindings:[]};if(o==="enum")return {sql:`${n} text`,bindings:[]};if(o==="bytea"||o==="blob"||o==="binary"||o==="longblob"||o==="mediumblob"||o==="tinyblob")return {sql:`${n} blob`,bindings:[]};if(o==="geometry"||o==="point"||o==="linestring"||o==="polygon"||o==="multipoint")return {sql:`${n} ${o}`,bindings:[]}}let s=e.length?`(${e.length})`:"";return {sql:`${n} ${o}${s}`,bindings:[]}}},Ip=new Ua;var Va=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
253
|
-
`:e,bindings:[]}}},vp=new Va;var Ja=class{toSql(t){return {sql:"",bindings:[]}}},Pp=new Ja;var Ha=class{toSql(t){let e=t,r=new y(this.model),n=e.constraintName?`constraint "${e.constraintName}" `:"";if(e.constraintType==="primary_key"){let o=!!e.autoIncrement,s=(e.columnType||"").toLowerCase();return o&&(s==="integer"||s==="bigint")?{sql:`${n}primary key autoincrement`,bindings:[]}:{sql:`${n}primary key`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length){let o=e.columns.map(s=>r.formatStringColumn("sqlite",C(s))).join(", ");return e.constraintName?{sql:`${n}unique (${o})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let o=e.defaultValue;return o instanceof O?{sql:`default ${o.rawValue}`,bindings:[]}:o instanceof v?{sql:`default ${new b(this.model,"sqlite").parse([o],1,true).sql}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let o=(e.columns??[]).map(u=>r.formatStringColumn("sqlite",C(u))).join(", "),s=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(u=>r.formatStringColumn("sqlite",C(u))).join(", "),l=`${n}foreign key (${o}) 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:`${n}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Ep=new Ha;var za=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"sqlite"),s=[],a=[];for(let f of e.children){let{sql:w,bindings:S}=o.parse([f]);if(f.folder==="constraint"){let q=s.pop()??"",M=w;if(/not null/i.test(M)||/null/i.test(M)||/default/i.test(M)||/primary key/i.test(M)){let R=`${q} ${M}`.trim();R=R.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(R),a.push(...S);continue}s.push(q),s.push(M),a.push(...S);continue}s.push(w),a.push(...S);}for(let f of e.namedConstraints){let{sql:w,bindings:S}=o.parse([f]);s.push(w),a.push(...S);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.sqliteTemporary&&d.push("TEMPORARY");let c=d.length>0?`${d.join(" ")} `:"",m=e.withoutRowId?" WITHOUT ROWID":"",p=e.strict?" STRICT":"";return {sql:`${u}${c}${n} (${l})${m}${p}`,bindings:a}}},Bp=new za;var Ga=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:[]}}},kp=new Ga;var Ya=class{toSql(t){return {sql:"distinct",bindings:[]}}},Qp=new Ya;var Za=class{toSql(t){return g.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},Kp=new Za;var Xa=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Lp=new Xa;var el=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},Wp=new el;var tl=class{toSql(t){let e=t,r=new y(this.model),n=e.alias?` as ${r.quoteIdentifier("sqlite",e.alias)}`:"";if(e.table instanceof O){let{sql:l,bindings:u}=r.formatRawPlaceholders("sqlite",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("sqlite",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"sqlite").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},jp=new tl;var rl=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},Fp=new rl;var nl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=new b(this.model,"sqlite"),n=new y(this.model);if(e.group?.length){let{sql:l,bindings:u}=r.parse(e.group,e.currParamIndex,true);return {sql:`(${l})`,bindings:u}}let o=n.formatStringColumn("sqlite",e.column),s="",a=[];if(e.subquery!==void 0){let l=this.parseSubquery(r,e);s=`${e.column?`${o} `:""}${e.operator} (${l.sql})`,a=l.bindings;}else if(e.value instanceof v){let l=r.parse([e.value],1,true).sql;s=`${o} ${e.operator} ${l}`;}else if(e.operator==="is null"||e.operator==="is not null")s=`${o} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")s=`${o} ${e.operator} ? and ?`;else {let l=e.value.map(()=>"?").join(", ");s=`${o} ${e.operator} (${l})`;}a=e.value;}else s=`${o} ${e.operator} ?`,a=[e.value];return e.isNegated&&(s=`not (${s})`),{sql:s.trim(),bindings:a}}parseSubquery(t,e){let r=e.subquery;if(typeof r=="string")return {sql:r,bindings:[]};let n=Array.isArray(r)?r:[r];return t.parse(n,e.currParamIndex)}},Up=new nl;var ol=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table),o=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${n} (${o})`,bindings:[]}}},Vp=new ol;var sl=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},Jp=new sl;var Rh=new Set(["where","group_by","having","order_by","limit","offset","union"]),il=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode),o=r.renderWithNodes("sqlite",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u;if(e.source){let d=new b(this.model,"sqlite").parse(e.source,a),c=e.targetColumns?.length?` (${e.targetColumns.map(p=>r.formatStringColumn("sqlite",p)).join(", ")})`:"",m=e.disambiguateSource&&!e.source.some(p=>Rh.has(p.folder));u=`${n}${c} ${d.sql}${m?" where true":""}`,l.push(...d.bindings);}else {let d=e.records.length?Object.keys(e.records[0]):[];if(!d.length)u=`${n} default values`;else {let c=d.map(p=>r.formatStringColumn("sqlite",p)).join(", "),m=[];for(let p of e.records){let h=d.map(w=>p[w]),f=[];for(let w of h)w instanceof O?f.push(w.rawValue):(l.push(w),f.push("?"));m.push(`(${f.join(", ")})`);}u=`${n} (${c}) VALUES ${m.join(", ")}`;}}return {sql:`${s}${u}`,bindings:[...o.bindings,...l]}}},Hp=new il;var al=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=r.formatStringTable("sqlite",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o;if(e.using?.length){let c=e.using.map(m=>r.formatStringColumn("sqlite",m)).join(", ");return o=`${n} using (${c})`,{sql:o,bindings:[]}}let s=e.left;s.includes(".")||(s=`${e.table}.${s}`);let a=e.right;a.includes(".")||(a=`${this.model.table}.${a}`);let l=r.formatStringColumn("sqlite",s),u=r.formatStringColumn("sqlite",a);o=`${n} on ${l} ${e.on?.operator} ${u}`;let d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"sqlite");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");o+=` and ${h}`,d.push(...p.bindings);}}}return {sql:o,bindings:d}}},zp=new al;var _h={set:"json_set",insert:"json_insert",remove:"json_remove"},ll=class{toSql(t){let e=t,r=new y(this.model).formatStringColumn("sqlite",e.column),n=`'${bt(e.path).replace(/'/g,"''")}'`,o=_h[e.operation];if(e.operation==="remove")return {sql:this.withAlias(`${o}(${r}, ${n})`,e.alias),bindings:[]};let s=e.value!==null&&typeof e.value=="object",a=s?"json(?)":"?",l=s?JSON.stringify(e.value):e.value;return {sql:this.withAlias(`${o}(${r}, ${n}, ${a})`,e.alias),bindings:[l]}}withAlias(t,e){return e?`${t} as "${e}"`:t}},Gp=new ll;var ul=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Yp=new ul;var dl=class{toSql(t){return {sql:"",bindings:[]}}},Zp=new dl;var cl=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Xp=new cl;var ml=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.conflictColumns.map(a=>r.formatStringColumnBare("sqlite",a)).join(", "),o=n?` (${n})`:"";if(e.mode==="ignore")return {sql:`ON CONFLICT${o} DO NOTHING`,bindings:[]};let s=e.columnsToUpdate.map(a=>`${r.formatStringColumnBare("sqlite",a)} = EXCLUDED.${r.formatStringColumnBare("sqlite",a)}`).join(", ");return {sql:`ON CONFLICT${o} DO UPDATE SET ${s}`,bindings:[]}}},ef=new ml;var pl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("sqlite",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},tf=new pl;var fl=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},rf=new fl;var yl=class{toSql(t){let e=t,r=new y(this.model);return {sql:`returning ${!e.columns.length||e.columns.includes("*")?"*":e.columns.map(o=>r.formatStringColumn("sqlite",o)).join(", ")}`,bindings:[]}}},nf=new yl;var hl=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},of=new hl;var gl=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},sf=new gl;var bl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},af=new bl;var Tl=class{toSql(t){return {sql:"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name",bindings:[]}}},lf=new Tl;var wl=class{toSql(t){return {sql:`SELECT sql FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},uf=new wl;var Sl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},df=new Sl;var Nl=class{toSql(t){let e=t;return {sql:`SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='${e.table}' AND name='${e.index}'`,bindings:[]}}},cf=new Nl;var ql=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},mf=new ql;var Cl=class{toSql(t){return {sql:`SELECT name FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},pf=new Cl;var Rl=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},ff=new Rl;var _l=class{toSql(t){return {sql:`SELECT
|
|
252
|
+
ORDER BY ordinal_position`,bindings:[]}}},cp=new qa;var Ca=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("postgres",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"postgres").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"postgres").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new f(this.model).formatStringColumn("postgres",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"postgres").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},mp=new Ca;var Ra=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("postgres",e.column),n=ee.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toPostgres(false);return r?`${t}${r}`:t}buildExtractTextSql(t,e){if(e.isEmpty())return `${t}::text`;let r=e.toPostgres(true);return `${t}${r}`}buildArrayLengthSql(t,e){return `jsonb_array_length(${this.buildExtractSql(t,e)})`}buildObjectKeysSql(t,e){return `jsonb_object_keys(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},pp=new Ra;var _a=class{toSql(t){let e=t,r=Fe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof x?s.rawValue:s instanceof I?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "gen_random_uuid()";case "$now":return "now()";case "$currentTimestamp":return "current_timestamp";default:return}}},yp=new _a;var Ma=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:[]};let r=e.options;if(this.dbType==="cockroachdb"&&(r?.restartIdentity||r?.continueIdentity))throw new T("PostgresTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("CockroachDB does not support the identity TRUNCATE options"));let n=new f(this.model).getFromForWriteOperations("postgres",e.fromNode),o="";return r?.restartIdentity?o+=" restart identity":r?.continueIdentity&&(o+=" continue identity"),r?.cascade&&(o+=" cascade"),{sql:`${n}${o}`,bindings:[]}}},fp=new Ma;var xa=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new f(this.model).formatRawPlaceholders("postgres",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:e.wrap?`(${o.sql})`:o.sql,bindings:o.bindings}}},hp=new xa;var Oa=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=typeof this.model?.getColumnsByName=="function"?this.model.getColumnsByName():new Map,l=e.columns.map((d,m)=>{let c=e.values[m],p=r.formatStringColumn("postgres",d);if(c instanceof x)return `${p} = ${c.rawValue}`;if(c instanceof N){let y=new b(this.model,"postgres").parse([c],s,true);return o.push(...y.bindings),s+=y.bindings.length,`${p} = ${y.sql}`}let h=`$${s++}`;return o.push(c),`${p} = ${h}${this.formatTypeCast(c,a.get(d)?.type)}`}).join(", ");return {sql:`${n} set ${l}${this.renderFromSource("postgres",e,s,o)}`,bindings:o}}renderFromSource(t,e,r,n){if(!e.fromSourceNode)return "";let o=new f(this.model).getWriteSource(t,e.fromSourceNode,r);return n.push(...o.bindings),` from ${o.sql}`}formatTypeCast(t,e){if(typeof t=="string"&&(e==="jsonb"||e==="json"))return "::text::jsonb";let r="";return Buffer.isBuffer(t)?r="::bytea":Array.isArray(t)?r="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?r="::jsonb":typeof t=="boolean"?r="::boolean":typeof t=="bigint"&&(r="::bigint"),r}},gp=new Oa;var Aa=class{toSql(t){let e=t;if(e.isRawValue){let s=e.value??[];if(s.length===0)return {sql:e.column,bindings:[]};let a=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`$${a++}`),bindings:s}}let r=e.currParamIndex,n="",o=[];if(this.isRawNode(e.value)){let s=this.formatRawIdentifierIfPossible(e.value.rawValue);n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,o=[];}else if(e.tupleColumns?.length){let s=e.tupleColumns.map(u=>new f(this.model).formatStringColumn("postgres",u)).join(", "),a=e.value,l=a.map((u,d)=>`(${u.map((m,c)=>`$${r+d*u.length+c}`).join(", ")})`).join(", ");n=`(${s}) ${e.operator} (${l})`,o=a.flat();}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between"){let s=`$${r} AND $${r+1}`;n=`${new f(this.model).formatStringColumn("postgres",e.column)} between ${s}`,o=e.value;}else {let s=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,o=e.value;}else if(e.value instanceof I){let s=new b(this.model,"postgres").parse([e.value],1,true).sql;n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,o=[];}else if(e.operator.includes("null"))n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,o=[e.value];}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new f(this.model).formatStringColumn("postgres",t):t}},bp=new Aa;var Da=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"postgres"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:e.isNegated?`not (${n})`:`(${n})`,bindings:o}}},Tp=new Da;var $a=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],s=new f(this.model).formatStringColumn("postgres",e.column);switch(e.jsonOperator){case "=":n=`${s} = $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "contains":n=`${s} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "not contains":n=`${s} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "subset":n=`${s} <@ $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "path":{let a=ee.from(e.path??"");n=`${s}${a.toPostgres(true)} ${e.comparisonOperator??"="} $${r}`,o=[e.value];break}case "has none":{let a=e.value??[],l=a.map((u,d)=>`$${r+d}`).join(", ");n=`not (jsonb_exists_any(${s}, array[${l}]))`,o=a;break}case "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},wp=new $a;var Ia=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},Sp=new Ia;var va=class{toSql(t){let e=t,r=new f(this.model),n=s=>r.formatStringColumn("postgres",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},Np=new va;var Pa=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" materialized":e.clause==="not materialized"?" not materialized":"",a=e.columns?.length?` (${e.columns.map(l=>new f(this.model).formatStringColumnBare("postgres",l)).join(", ")})`:"";return {sql:`${e.alias}${a} as${s} (${o.sql})`,bindings:o.bindings}}},qp=new Pa;var Ea=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length>0){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length>0&&(n+=` ${s.join(" ")}`);}return {sql:`add column ${n}`,bindings:[]}}},Cp=new Ea;var Ba=class{toSql(t){return {sql:"",bindings:[]}}},Rp=new Ba;var ka=class{toSql(t){return {sql:"",bindings:[]}}},_p=new ka;var Qa=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"sqlite"),s=[],a=[],l=false;for(let c of e.children){let{sql:p,bindings:h}=o.parse([c]);if(!(!p||!p.trim())){if(c.file==="add_column")s.push(p),l=true;else if(c.file==="add_constraint"&&l){let y=s.pop()??"",w=p.replace(/^\s*add\s+/i,"").trimStart();s.push(`${y} ${w}`);}else {if(c.file==="set_not_null"||c.file==="drop_not_null")continue;if(c.file==="set_default"||c.file==="drop_default")continue;s.push(p),l=false;}a.push(...h);}}let u=s.join(", "),d=e.ifExists?"if exists ":"";return u.trim()?{sql:`${d}${n} ${u}`,bindings:a}:{sql:"",bindings:[]}}},Mp=new Qa;var Ka=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},xp=new Ka;var La=class{toSql(t){return {sql:"",bindings:[]}}},Op=new La;var Wa=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Ap=new Wa;var ja=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Dp=new ja;var Fa=class{toSql(t){return {sql:"",bindings:[]}}},$p=new Fa;var Ua=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Ip=new Ua;var Va=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},vp=new Va;var Ja=class{toSql(t){let e=t,r;return e.defaultValue instanceof x?r=e.defaultValue.rawValue:e.defaultValue instanceof I?r=new b(this.model,"sqlite").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},Pp=new Ja;var Ha=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Ep=new Ha;var za=class{toSql(t){return {sql:"",bindings:[]}}},Bp=new za;var Ga=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new f(this.model).formatStringColumn("sqlite",C(e.column)),o=e.dataType.toLowerCase();if(o==="bigincrement")return {sql:`${n} integer primary key autoincrement`,bindings:[]};if(o==="char"||o==="varchar")return {sql:`${n} text`,bindings:[]};if(o==="uuid"){let a=e.isForeignKey?"":" default (lower(hex(randomblob(16))))";return {sql:`${n} varchar(36)${a}`,bindings:[]}}else if(o==="ulid")return {sql:`${n} varchar(26)`,bindings:[]};if(o.includes("text"))return {sql:`${n} text`,bindings:[]};if(o==="integer"||o==="bigint"||o==="int")return e.autoIncrement?{sql:`${n} integer primary key autoincrement`,bindings:[]}:{sql:`${n} integer`,bindings:[]};if(o==="tinyint")return {sql:`${n} integer`,bindings:[]};if(o==="smallint")return {sql:`${n} integer`,bindings:[]};if(o==="mediumint")return {sql:`${n} integer`,bindings:[]};if(o==="float"||o==="double")return {sql:`${n} real`,bindings:[]};if(o==="decimal"||o==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${n} numeric(${a}, ${l})`,bindings:[]}}if(o==="date"||o==="datetime"||o==="timestamp"||o==="time"||o==="year"){let a=`${n} text`;return (o==="datetime"||o==="timestamp")&&e.autoCreate&&(a+=" default current_timestamp"),{sql:a,bindings:[]}}else {if(o==="boolean")return {sql:`${n} integer`,bindings:[]};if(o==="json"||o==="jsonb")return {sql:`${n} text`,bindings:[]};if(o==="enum")return {sql:`${n} text`,bindings:[]};if(o==="bytea"||o==="blob"||o==="binary"||o==="longblob"||o==="mediumblob"||o==="tinyblob")return {sql:`${n} blob`,bindings:[]};if(o==="geometry"||o==="point"||o==="linestring"||o==="polygon"||o==="multipoint")return {sql:`${n} ${o}`,bindings:[]}}let s=e.length?`(${e.length})`:"";return {sql:`${n} ${o}${s}`,bindings:[]}}},kp=new Ga;var Ya=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
253
|
+
`:e,bindings:[]}}},Qp=new Ya;var Za=class{toSql(t){return {sql:"",bindings:[]}}},Kp=new Za;var Xa=class{toSql(t){let e=t,r=new f(this.model),n=e.constraintName?`constraint "${e.constraintName}" `:"";if(e.constraintType==="primary_key"){let o=!!e.autoIncrement,s=(e.columnType||"").toLowerCase();return o&&(s==="integer"||s==="bigint")?{sql:`${n}primary key autoincrement`,bindings:[]}:{sql:`${n}primary key`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length){let o=e.columns.map(s=>r.formatStringColumn("sqlite",C(s))).join(", ");return e.constraintName?{sql:`${n}unique (${o})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let o=e.defaultValue;return o instanceof x?{sql:`default ${o.rawValue}`,bindings:[]}:o instanceof I?{sql:`default ${new b(this.model,"sqlite").parse([o],1,true).sql}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let o=(e.columns??[]).map(u=>r.formatStringColumn("sqlite",C(u))).join(", "),s=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(u=>r.formatStringColumn("sqlite",C(u))).join(", "),l=`${n}foreign key (${o}) 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:`${n}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Lp=new Xa;var el=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"sqlite"),s=[],a=[];for(let y of e.children){let{sql:w,bindings:S}=o.parse([y]);if(y.folder==="constraint"){let q=s.pop()??"",M=w;if(/not null/i.test(M)||/null/i.test(M)||/default/i.test(M)||/primary key/i.test(M)){let R=`${q} ${M}`.trim();R=R.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(R),a.push(...S);continue}s.push(q),s.push(M),a.push(...S);continue}s.push(w),a.push(...S);}for(let y of e.namedConstraints){let{sql:w,bindings:S}=o.parse([y]);s.push(w),a.push(...S);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.sqliteTemporary&&d.push("TEMPORARY");let m=d.length>0?`${d.join(" ")} `:"",c=e.withoutRowId?" WITHOUT ROWID":"",p=e.strict?" STRICT":"";return {sql:`${u}${m}${n} (${l})${c}${p}`,bindings:a}}},Wp=new el;var tl=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("sqlite",e.fromNode),bindings:[]}}},jp=new tl;var rl=class{toSql(t){return {sql:"distinct",bindings:[]}}},Fp=new rl;var nl=class{toSql(t){return g.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},Up=new nl;var ol=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Vp=new ol;var sl=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},Jp=new sl;var il=class{toSql(t){let e=t,r=new f(this.model),n=e.alias?` as ${r.quoteIdentifier("sqlite",e.alias)}`:"";if(e.table instanceof x){let{sql:l,bindings:u}=r.formatRawPlaceholders("sqlite",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("sqlite",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"sqlite").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},Hp=new il;var al=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},zp=new al;var ll=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=new b(this.model,"sqlite"),n=new f(this.model);if(e.group?.length){let{sql:l,bindings:u}=r.parse(e.group,e.currParamIndex,true);return {sql:`(${l})`,bindings:u}}let o=n.formatStringColumn("sqlite",e.column),s="",a=[];if(e.subquery!==void 0){let l=this.parseSubquery(r,e);s=`${e.column?`${o} `:""}${e.operator} (${l.sql})`,a=l.bindings;}else if(e.value instanceof I){let l=r.parse([e.value],1,true).sql;s=`${o} ${e.operator} ${l}`;}else if(e.operator==="is null"||e.operator==="is not null")s=`${o} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")s=`${o} ${e.operator} ? and ?`;else {let l=e.value.map(()=>"?").join(", ");s=`${o} ${e.operator} (${l})`;}a=e.value;}else s=`${o} ${e.operator} ?`,a=[e.value];return e.isNegated&&(s=`not (${s})`),{sql:s.trim(),bindings:a}}parseSubquery(t,e){let r=e.subquery;if(typeof r=="string")return {sql:r,bindings:[]};let n=Array.isArray(r)?r:[r];return t.parse(n,e.currParamIndex)}},Gp=new ll;var ul=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("sqlite",e.table),o=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${n} (${o})`,bindings:[]}}},Yp=new ul;var dl=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},Zp=new dl;var $h=new Set(["where","group_by","having","order_by","limit","offset","union"]),cl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode),o=r.renderWithNodes("sqlite",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u;if(e.source){let d=new b(this.model,"sqlite").parse(e.source,a),m=e.targetColumns?.length?` (${e.targetColumns.map(p=>r.formatStringColumn("sqlite",p)).join(", ")})`:"",c=e.disambiguateSource&&!e.source.some(p=>$h.has(p.folder));u=`${n}${m} ${d.sql}${c?" where true":""}`,l.push(...d.bindings);}else {let d=e.records.length?Object.keys(e.records[0]):[];if(!d.length)u=`${n} default values`;else {let m=d.map(p=>r.formatStringColumn("sqlite",p)).join(", "),c=[];for(let p of e.records){let h=d.map(w=>p[w]),y=[];for(let w of h)w instanceof x?y.push(w.rawValue):(l.push(w),y.push("?"));c.push(`(${y.join(", ")})`);}u=`${n} (${m}) VALUES ${c.join(", ")}`;}}return {sql:`${s}${u}`,bindings:[...o.bindings,...l]}}},Xp=new cl;var ml=class{toSql(t){let e=t;if(e.isRawValue)return new f(this.model).formatRawPlaceholders("sqlite",e.table,e.bindings??[],e.currParamIndex);let r=new f(this.model),n=e.subquery?.length&&!e.isRawValue?new b(this.model,"sqlite").parse(e.subquery,e.currParamIndex):null,o=n?`(${n.sql}) as ${r.quoteIdentifier("sqlite",e.table)}`:r.formatStringTable("sqlite",e.schema?`${e.schema}.${e.table}`:e.table),s=n?.bindings??[];if(e.type==="cross")return {sql:o,bindings:s};let a;if(e.using?.length){let p=e.using.map(h=>r.formatStringColumn("sqlite",h)).join(", ");return a=`${o} using (${p})`,{sql:a,bindings:s}}let l=e.left;l.includes(".")||(l=`${e.table}.${l}`);let u=e.right;u.includes(".")||(u=`${this.model.table}.${u}`);let d=r.formatStringColumn("sqlite",l),m=r.formatStringColumn("sqlite",u);a=`${o} on ${d} ${e.on?.operator} ${m}`;let c=[...s];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new b(this.model,"sqlite");for(let h of e.additionalConditions){let y=p.parse([h],e.currParamIndex+c.length);if(y.sql){let w=y.sql.replace(/^where\s+/i,"");a+=` and ${w}`,c.push(...y.bindings);}}}return {sql:a,bindings:c}}},ey=new ml;var Ih={set:"json_set",insert:"json_insert",remove:"json_remove"},pl=class{toSql(t){let e=t,r=new f(this.model).formatStringColumn("sqlite",e.column),n=`'${Tt(e.path).replace(/'/g,"''")}'`,o=Ih[e.operation];if(e.operation==="remove")return {sql:this.withAlias(`${o}(${r}, ${n})`,e.alias),bindings:[]};let s=e.value!==null&&typeof e.value=="object",a=s?"json(?)":"?",l=s?JSON.stringify(e.value):e.value;return {sql:this.withAlias(`${o}(${r}, ${n}, ${a})`,e.alias),bindings:[l]}}withAlias(t,e){return e?`${t} as "${e}"`:t}},ty=new pl;var yl=class{toSql(t){let e=t;return e.skipBinding?{sql:`${e.limit}`,bindings:[]}:{sql:"?",bindings:[e.limit]}}},ry=new yl;var fl=class{toSql(t){return {sql:"",bindings:[]}}},ny=new fl;var hl=class{toSql(t){let e=t;return e.skipBinding?{sql:`${e.offset}`,bindings:[]}:{sql:"?",bindings:[e.offset]}}},oy=new hl;var gl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=e.conflictColumns.map(l=>r.formatStringColumnBare("sqlite",l)).join(", "),o="";if(e.conflictTargetRaw?o=` ${e.conflictTargetRaw}`:n&&(o=` (${n})`),e.mode==="ignore")return {sql:`ON CONFLICT${o} DO NOTHING`,bindings:[]};let s=e.columnsToUpdate.map(l=>`${r.formatStringColumnBare("sqlite",l)} = EXCLUDED.${r.formatStringColumnBare("sqlite",l)}`).join(", "),a=this.renderMergeWhere(e);return {sql:`ON CONFLICT${o} DO UPDATE SET ${s}${a.sql}`,bindings:a.bindings}}renderMergeWhere(t){if(!t.whereNodes?.length)return {sql:"",bindings:[]};let e=new b(this.model,"sqlite").parse(t.whereNodes,t.currParamIndex,true);return {sql:e.sql?` WHERE ${e.sql}`:"",bindings:e.bindings}}},sy=new gl;var bl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("sqlite",e.column),n=e.direction.toLowerCase(),o=e.nulls?` nulls ${e.nulls}`:"";return {sql:`${r} ${n}${o}`,bindings:[]}}},iy=new bl;var Tl=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},ay=new Tl;var wl=class{toSql(t){let e=t,r=new f(this.model);return {sql:`returning ${!e.columns.length||e.columns.includes("*")?"*":e.columns.map(o=>r.formatStringColumn("sqlite",o)).join(", ")}`,bindings:[]}}},ly=new wl;var Sl=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},uy=new Sl;var Nl=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},dy=new Nl;var ql=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},cy=new ql;var Cl=class{toSql(t){return {sql:"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name",bindings:[]}}},my=new Cl;var Rl=class{toSql(t){return {sql:`SELECT sql FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},py=new Rl;var _l=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},yy=new _l;var Ml=class{toSql(t){let e=t;return {sql:`SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='${e.table}' AND name='${e.index}'`,bindings:[]}}},fy=new Ml;var xl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},hy=new xl;var Ol=class{toSql(t){return {sql:`SELECT name FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},gy=new Ol;var Al=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},by=new Al;var Dl=class{toSql(t){return {sql:`SELECT
|
|
254
254
|
'PRIMARY' as name,
|
|
255
255
|
name as column_name
|
|
256
256
|
FROM pragma_table_info('${t.table}')
|
|
257
257
|
WHERE pk > 0
|
|
258
|
-
ORDER BY pk`,bindings:[]}}},yf=new _l;var Ml=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},hf=new Ml;var xl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("sqlite",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"sqlite").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"sqlite").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new y(this.model).formatStringColumn("sqlite",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"sqlite").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},gf=new xl;var Ol=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("sqlite",e.column),n=ee.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toSqlite();return r==="$"?t:`json_extract(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toSqlite();return r==="$"?`json_array_length(${t})`:`json_array_length(${t}, '${r}')`}buildObjectKeysSql(t,e){return `json_each.key FROM json_each(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},bf=new Ol;var Dl=class{toSql(t){let e=t,r=Fe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof O?s.rawValue:s instanceof v?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "lower(hex(randomblob(16)))";case "$now":case "$currentTimestamp":return "current_timestamp";default:return}}},Tf=new Dl;var Al=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return e.keyword="",{sql:e.fromNode,bindings:[]};if(e.options&&Object.values(e.options).some(Boolean))throw new T("SqliteTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("SQLite does not support TRUNCATE options"));let r=new y(this.model).getFromForWriteOperations("sqlite",e.fromNode);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},wf=new Al;var $l=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new y(this.model).formatRawPlaceholders("sqlite",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Sf=new $l;var Il=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((l,u)=>{let d=e.values[u],c=r.formatStringColumn("sqlite",l);if(d instanceof O)return `${c} = ${d.rawValue}`;if(d instanceof N){let m=new b(this.model,"sqlite").parse([d],s,true);return o.push(...m.bindings),s+=m.bindings.length,`${c} = ${m.sql}`}return o.push(d),`${c} = ?`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},Nf=new Il;var vl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",n=[];if(this.isRawNode(e.value)){let o=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${o}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,n=e.value;else {let o=e.value.map(s=>"?").join(", ");r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${o})`,n=e.value;}else if(e.value instanceof v){let o=new b(this.model,"sqlite").parse([e.value],1,true).sql;r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${o}`,n=[];}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ?`,n=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("sqlite",t):t}},qf=new vl;var Pl=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"sqlite"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},Cf=new Pl;var El=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new y(this.model).formatStringColumn("sqlite",e.column);switch(e.jsonOperator){case "=":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "path":{let s=ee.from(e.path??"");r=`json_extract(${o}, '${s.toSqlite()}') ${e.comparisonOperator??"="} ?`,n=[e.value];break}case "subset":case "has none":throw new T("WhereJsonInterpreter::unsupported","NOT_SUPPORTED_IN_SQLITE");case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},Rf=new El;var Bl=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"sqlite"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"sqlite"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},_f=new Bl;var kl=class{toSql(t){let e=t,r=new y(this.model),n=s=>r.formatStringColumn("sqlite",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},Mf=new kl;var Ql=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.columns?.length?` (${e.columns.map(a=>new y(this.model).formatStringColumnBare("sqlite",a)).join(", ")})`:"";return {sql:`${e.alias}${s} as (${o.sql})`,bindings:o.bindings}}},xf=new Ql;var Kl={mssql:{alter_table:{add_column:Eu,add_constraint:Bu,add_primary_key:ku,alter_column_type:Qu,alter_table:Lu,drop_column:Wu,drop_constraint:ju,drop_default:Fu,drop_not_null:Uu,drop_primary_key:Vu,rename_column:Ju,rename_table:Hu,set_default:Gu,set_not_null:Yu,set_table_options:Zu},column:{column_type:Xu},comment:{comment:ed},constraint:{after:td,constraint:rd},create_table:{create_table:nd},delete:{delete:od},distinct:{distinct:sd,distinct_on:id},drop_table:{drop_table:ad},extension:{create_extension:ld},from:{from:ud},group_by:{group_by:dd},having:{having:cd},index_op:{create_index:md,drop_index:pd},insert:{insert:fd},join:{join:yd},json_mutation:{json_mutation:Sd},limit:{limit:Nd},lock:{lock:qd},offset:{offset:Cd},on_duplicate:{on_duplicate:Rd},order_by:{order_by:_d},raw:{raw:Md},returning:{returning:xd},schema:{check_constraint_info:Od,foreign_key_info:Dd,get_column_listing:Ad,get_tables:$d,has_check_constraint:Id,has_column:vd,has_index:Pd,has_primary_key:Ed,has_table:Bd,index_info:kd,primary_key_info:Qd,table_info:Kd},select:{select:Ld,select_json:Wd},sqlfunc:{sqlfunc:jd},truncate:{truncate:Fd},union:{union:Ud},update:{update:Vd},where:{where:Jd,where_group:Hd,where_json:zd,where_subquery:Gd},window:{window:Yd},with:{with:Zd}},mysql:{alter_table:{add_column:Xd,add_constraint:ec,add_primary_key:tc,alter_column_type:rc,alter_table:nc,drop_column:oc,drop_constraint:sc,drop_default:ic,drop_not_null:ac,drop_primary_key:lc,rename_column:uc,rename_table:dc,set_default:cc,set_not_null:mc,set_table_options:pc},column:{column_type:fc},comment:{comment:yc},constraint:{after:hc,constraint:gc},create_table:{create_table:bc},delete:{delete:Tc},distinct:{distinct:wc,distinct_on:Sc},drop_table:{drop_table:Nc},extension:{create_extension:qc},from:{from:Cc},group_by:{group_by:Rc},having:{having:_c},index_op:{create_index:Mc,drop_index:xc},insert:{insert:Oc},join:{join:Dc},json_mutation:{json_mutation:Ac},limit:{limit:$c},lock:{lock:Ic},offset:{offset:vc},on_duplicate:{on_duplicate:Pc},order_by:{order_by:Ec},raw:{raw:Bc},returning:{returning:kc},schema:{check_constraint_info:Qc,foreign_key_info:Kc,get_column_listing:Lc,get_tables:Wc,has_check_constraint:jc,has_column:Fc,has_index:Uc,has_primary_key:Vc,has_table:Jc,index_info:Hc,primary_key_info:zc,table_info:Gc},select:{select:Yc,select_json:Zc},sqlfunc:{sqlfunc:Xc},truncate:{truncate:em},union:{union:tm},update:{update:rm},where:{where:nm,where_group:om,where_json:sm,where_subquery:im},window:{window:am},with:{with:lm}},postgres:{alter_table:{add_column:um,add_constraint:dm,add_primary_key:cm,alter_column_type:mm,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:wm,set_default:Sm,set_not_null:Nm,set_table_options:qm},column:{column_type:Cm},comment:{comment:Rm},constraint:{after:_m,constraint:Mm},create_table:{create_table:xm},delete:{delete:Om},distinct:{distinct:Dm,distinct_on:Am},drop_table:{drop_table:$m},extension:{create_extension:Im},from:{from:vm},group_by:{group_by:Pm},having:{having:Em},index_op:{create_index:Bm,drop_index:km},insert:{insert:Qm},join:{join:Km},json_mutation:{json_mutation:Lm},limit:{limit:Wm},lock:{lock:jm},offset:{offset:Fm},on_duplicate:{on_duplicate:Um},order_by:{order_by:Vm},raw:{raw:Jm},returning:{returning:Hm},schema:{check_constraint_info:zm,foreign_key_info:Gm,get_column_listing:Ym,get_tables:Zm,has_check_constraint:Xm,has_column:ep,has_index:tp,has_primary_key:rp,has_table:np,index_info:op,primary_key_info:sp,table_info:ip},select:{select:ap,select_json:lp},sqlfunc:{sqlfunc:up},truncate:{truncate:dp},union:{union:cp},update:{update:mp},where:{where:pp,where_group:fp,where_json:yp,where_subquery:hp},window:{window:gp},with:{with:bp}},sqlite:{alter_table:{add_column:Tp,add_constraint:wp,alter_column_type:Sp,alter_table:Np,drop_column:qp,drop_constraint:Cp,drop_default:Rp,drop_not_null:_p,drop_primary_key:Mp,rename_column:xp,rename_table:Op,set_default:Dp,set_not_null:Ap,set_table_options:$p},column:{column_type:Ip},comment:{comment:vp},constraint:{after:Pp,constraint:Ep},create_table:{create_table:Bp},delete:{delete:kp},distinct:{distinct:Qp,distinct_on:Kp},drop_table:{drop_table:Lp},extension:{create_extension:Wp},from:{from:jp},group_by:{group_by:Fp},having:{having:Up},index_op:{create_index:Vp,drop_index:Jp},insert:{insert:Hp},join:{join:zp},json_mutation:{json_mutation:Gp},limit:{limit:Yp},lock:{lock:Zp},offset:{offset:Xp},on_duplicate:{on_duplicate:ef},order_by:{order_by:tf},raw:{raw:rf},returning:{returning:nf},schema:{check_constraint_info:of,foreign_key_info:sf,get_column_listing:af,get_tables:lf,has_check_constraint:uf,has_column:df,has_index:cf,has_primary_key:mf,has_table:pf,index_info:ff,primary_key_info:yf,table_info:hf},select:{select:gf,select_json:bf},sqlfunc:{sqlfunc:Tf},truncate:{truncate:wf},union:{union:Sf},update:{update:Nf},where:{where:qf,where_group:Cf,where_json:Rf,where_subquery:_f},window:{window:Mf},with:{with:xf}}};var b=class{constructor(t,e){this.dbType=e,this.model=t;}parse(t,e=1,r=false){if(!t.length)return {sql:"",bindings:[]};let n=t.find(R=>!!R&&R.folder==="distinctOn"),o=!n&&t.find(R=>!!R&&R.folder==="distinct"),s=t.filter(R=>!!R&&R.folder==="comment"&&R.isHint).map(R=>this.renderNode(R)).filter(R=>R.length>0).join(" "),a=this.dbType==="mssql"?t.find(R=>!!R&&R.folder==="lock")??null:null,l=a?this.getMssqlTableHints(a):"",u=t.filter(R=>R!==null&&R.folder!=="distinct"&&R.folder!=="distinctOn"&&!(R.folder==="comment"&&R.isHint)),d=u.some(R=>R.folder==="offset"),c=u.some(R=>R.folder==="order_by"),m=u.find(R=>R.folder==="limit"),p=u.find(R=>R.folder==="offset"),h=this.dbType==="mssql"&&m&&!d&&!c,f=this.dbType==="mssql"&&!h&&(m||p),w=[],S=[],q=null;h&&m&&S.push(m.limit);for(let R=0;R<u.length;R++){let $=u[R];if(h&&$.folder==="limit"||f&&($.folder==="limit"||$.folder==="offset"))continue;$.currParamIndex=e+S.length;let A=Kl[this.mapCommonDbType(this.dbType)][$.folder][$.file];if(!A)throw new Error(`Interpreter not found for ${this.dbType} ${$.keyword}`);A.model=this.model,A.dbType=this.dbType;let D=A.toSql($);if(!D.sql||!D.sql.trim().length)continue;let Q=u[R+1],P=!Q||Q.keyword!==$.keyword?"":Q.chainsWith;if($.folder==="lock"||$.folder==="on_duplicate"||$.folder==="returning"||$.folder==="schema"||$.folder==="comment"){w.push(`${D.sql}${P}`),S.push(...D.bindings),q=$.keyword;continue}if(q!==$.keyword||$.canKeywordBeSeenMultipleTimes){if(r)w.push(`${D.sql}${P}`);else {let se=$.keyword;if($.folder==="with"&&this.dbType!=="mssql"){let Re=R,_e=false;for(;Re<u.length&&u[Re].keyword===$.keyword;){let cu=u[Re];if(cu.folder==="with"&&cu.clause==="recursive"){_e=true;break}Re++;}_e&&(se=`${se} recursive`);}let Ze=s?`${s} `:"";if(se==="select"){let Re=h?`top (@${e}) `:"";if(n){let _e=Array.isArray(n.columns)?n.columns.join(", "):"";w.push(`select ${Re}${Ze}distinct on (${_e}) ${D.sql}${P}`);}else o?w.push(`select ${Re}${Ze}distinct ${D.sql}${P}`):w.push(`select ${Re}${Ze}${D.sql}${P}`);}else se==="from"&&l?w.push(`${se} ${D.sql}${l}${P}`):w.push(`${se} ${D.sql}${P}`);}q=$.keyword;}else w.push(`${D.sql}${P}`);S.push(...D.bindings);}if(f){c||w.push("order by (select null)");let R=p?.offset??0;S.push(R);let A=`offset @${e+S.length-1} rows`;if(m){S.push(m.limit);let D=e+S.length-1;A+=` fetch next @${D} rows only`;}w.push(A);}return {sql:w.join(" "),bindings:S}}renderNode(t){let e=Kl[this.mapCommonDbType(this.dbType)][t.folder][t.file];if(!e)throw new Error(`Interpreter not found for ${this.dbType} ${t.keyword}`);return e.model=this.model,e.dbType=this.dbType,e.toSql(t).sql}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 wr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var Sr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var Nr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var qr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var Cr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var Rr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_table";this.table=e;}};var _r=class extends N{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_column";this.table=e,this.column=r;}};var Mr=class extends N{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_index";this.table=e,this.index=r;}};var xr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_primary_key";this.table=e;}};var Or=class extends N{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_check_constraint";this.table=e,this.constraint=r;}};var Dr=class extends N{constructor(){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_tables";}};var Ar=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_column_listing";this.table=e;}};var $r=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var we=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var Tt=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var Ir=class extends N{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="alter_column_type";this.column=e,this.newType=r,this.options=n;}};var fe=class extends N{constructor(e,r=[],n=false){super("alter table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="alter_table";this.table=e,this.children=r,this.ifExists=n;}};var vr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var Se=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var Lt=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var Pr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var wt=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var Er=class extends N{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var Br=class extends N{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_default";this.column=e,this.defaultValue=r;}};var kr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var St=class extends N{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 N{constructor(e,r={},n=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="constraint";this.constraintType=e,this.columns=r.columns,this.references=r.references,this.constraintName=r.constraintName,this.onDelete=r.onDelete,this.onUpdate=r.onUpdate,this.defaultValue=r.defaultValue,this.checkExpression=r.checkExpression,this.isRawValue=n;}};var Qr=class extends N{constructor(e,r=[],n=[],o=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=n,this.ifNotExists=o,s&&Object.assign(this,s);}};var Kr=class extends N{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 Lr=class extends N{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 Wr=class extends N{constructor(e,r,n,o=false){super("create index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="index_op";this.file="create_index";this.table=e,this.columns=r,this.indexName=n,this.unique=o;}};var jr=class extends N{constructor(e,r,n){super("drop index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.cascade=false;this.folder="index_op";this.file="drop_index";this.indexName=e,this.table=r,this.cascade=n??false;}};var Nt=class extends N{constructor(e,r=false,n){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e,this.options=n;}};function Mh(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 Fr=Symbol("columns"),qt=Symbol("primaryKey"),Ll=Symbol("relations"),Of=Symbol("indexes"),Df=Symbol("uniques"),Af=Symbol("checks"),Wl=i=>`${Mh(i)}_id`,jl=(i,t)=>`idx_${i}_${t}`,Ne=(i,t)=>`uq_${i}_${t}`,Y=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,qe=(i,t)=>`pk_${i}_${t}`;var k=class extends N{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="column";this.file="column_type";this.isRawValue=false;this.column=e,this.dataType=r,this.length=n.length,this.precision=n.precision,this.scale=n.scale,this.enumValues=n.enumValues,this.withTimezone=n.withTimezone,this.autoIncrement=n.autoIncrement,this.autoCreate=n.autoCreate,this.autoUpdate=n.autoUpdate,this.collate=n.collate,this.isRawValue=n.isRawValue??false,this.unsigned=n.unsigned,this.zerofill=n.zerofill;}};var Wt=class extends N{constructor(e,r=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="comment";this.file="comment";this.value=e,this.isHint=r;}};var et=class extends N{constructor(e,r=false,n=false){super("lock");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="lock";this.file="lock";this.lockType=e,this.skipLocked=r,this.noWait=n;}};var Ur=class extends N{constructor(e,r=[],n=[]){super("window");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="window";this.file="window";this.fn=e,this.partitionBy=r,this.orderBy=n;}};function $f(i){return i?Array.isArray(i)?i:[i]:[]}function If(i){return i?(Array.isArray(i)?i:[i]).map(e=>typeof e=="string"?{column:e}:e):[]}var ve=class extends N{constructor(e,r=false,n="union",o){super(r?`${n} all`:n);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="union";this.file="union";this.query=e,this.isAll=r,this.type=n,this.bindings=o;}};var tt=class extends N{constructor(e,r,n,o){e==="normal"&&(e="");super("with");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="with";this.file="with";this.alias=r,this.body=n,this.clause=e,this.columns=o;}};var Ue=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var Vr=class extends N{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var Jr=class extends Ue{constructor(t,e,r,n,o=[],s="create_table"){super(e),this.columnNode=r,this.tableName=n,this.namedConstraints=o,this.context=s,this.sqlType=t;}primaryKey(t){let e=qe(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){this.columnNode.isForeignKey=true;let[r,n]=t.split("."),o=n.split(","),s=e?.constraintName??Y(this.tableName??"",C(this.columnNode.column),o[0]);return this.context==="alter_table"?(this.nodes.push(new U("foreign_key",{columns:[C(this.columnNode.column)],references:{table:r,columns:o},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:o},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 O||t instanceof v?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??Ne(this.tableName??"",C(this.columnNode.column))})),this):(this.namedConstraints.push(new U("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName||Ne(this.tableName??"",C(this.columnNode.column))})),this)}check(t,e){let r=C(this.columnNode.column),n=e?.constraintName??`chk_${this.tableName}_${r}`.substring(0,63);return this.context==="alter_table"?(this.nodes.push(new U("check",{columns:[r],checkExpression:t,constraintName:n})),this):(this.namedConstraints.push(new U("check",{columns:[r],checkExpression:t,constraintName:n})),this)}after(t){return this.sqlType!=="mysql"?this:(this.nodes.push(new Vr(t)),this)}collate(t){return this.columnNode.collate=t,this}handleSqliteAutoIncrement(t){return this.isInlineSqlitePrimaryKey()?this:(this.nodes.push(new U("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this)}isInlineSqlitePrimaryKey(){let t=(this.columnNode.dataType??"").toLowerCase();return t==="bigincrement"?true:(t==="integer"||t==="bigint"||t==="int")&&!!this.columnNode.autoIncrement}};var rt=class extends Ue{constructor(e,r,n,o){super(r);this.context="create_table";this.tableName=n,this.namedConstraints=[],this.context=o??"create_table",this.sqlType=e;}mysqlOptions(e){return this._mysqlOptions=e,this}getMysqlOptions(){return this._mysqlOptions}build(e){return this.nodes.push(e),new Jr(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new O(e)}char(e,r=1){let n=new k(e,"char",{length:r});return this.build(n)}varchar(e,r=255){let n=new k(e,"varchar",{length:r});return this.build(n)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let n=new k(e,r);return this.build(n)}longtext(e){return this.text(e,"longtext")}mediumtext(e){return this.text(e,"mediumtext")}tinytext(e){return this.text(e,"tinytext")}uuid(e){let r=new k(e,"uuid");return this.build(r)}ulid(e){let r=new k(e,"ulid");return this.build(r)}integer(e,r=255){let n=new k(e,"integer",{length:r});return this.build(n)}tinyint(e,r=255){let n=new k(e,"tinyint",{length:r});return this.build(n)}smallint(e,r=255){let n=new k(e,"smallint",{length:r});return this.build(n)}mediumint(e,r=255){let n=new k(e,"mediumint",{length:r});return this.build(n)}biginteger(e,r=255){let n=new k(e,"bigint",{length:r});return this.build(n)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let n=new k(e,"float",{precision:r});return this.build(n)}double(e,r=10){let n=new k(e,"double",{precision:r});return this.build(n)}real(e,r=10){let n=new k(e,"real",{precision:r});return this.build(n)}decimal(e,r=10,n=2){let o=new k(e,"decimal",{precision:r,scale:n});return this.build(o)}numeric(e,r=10,n=2){let o=new k(e,"numeric",{precision:r,scale:n});return this.build(o)}increment(e,r=255){return this.integer(e,r).increment()}bigIncrement(e,r=255){return this.biginteger(e,r).increment()}date(e,r){let n=new k(e,"date",{precision:r});return this.build(n)}time(e,r){let n=new k(e,"time",{precision:r});return this.build(n)}year(e){let r=new k(e,"year");return this.build(r)}datetime(e,r){let n=new k(e,"datetime",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}timestamp(e,r){let n=new k(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}boolean(e){let r=new k(e,"boolean");return this.build(r)}binary(e){let r=new k(e,"binary");return this.build(r)}varbinary(e,r=255){let n=new k(e,"varbinary",{length:r});return this.build(n)}blob(e){let r=new k(e,"blob");return this.build(r)}tinyblob(e){let r=new k(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new k(e,"mediumblob");return this.build(r)}longblob(e){let r=new k(e,"longblob");return this.build(r)}json(e){let r=new k(e,"json");return this.build(r)}jsonb(e){let r=new k(e,"jsonb");return this.build(r)}enum(e,r){let n=new k(e,"enum",{enumValues:r});return this.build(n)}custom(e,r,n){let o=new k(e,r,{length:n});return this.build(o)}rawColumn(e){let r=new k(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new k(e,"geometry");return this.build(r)}point(e){let r=new k(e,"point");return this.build(r)}linestring(e){let r=new k(e,"linestring");return this.build(r)}polygon(e){let r=new k(e,"polygon");return this.build(r)}multiPoint(e){let r=new k(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var Hr=class extends Ue{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new O(t)}addColumn(t){let e=[],r=new rt(this.sqlType,e,this.table,"alter_table"),n=t(r);if(!e.length)return;let o=r.getNamedConstraints(),s=e.filter(c=>c.folder==="column");if(e=e.concat(o),s.length!==1)throw new Error("addColumn callback must define exactly one column");let a=s[0],l=n.getNodes().filter(c=>{let m=c;return m.constraintType==="not_null"||m.constraintType==="null"||m.constraintType==="default"}),u=new $r(a);u.inlineConstraints=l,this.nodes.push(u),n.getNodes().filter(c=>{let m=c;return m.constraintType==="unique"||m.constraintType==="foreign_key"||m.constraintType==="primary_key"}).forEach(c=>{this.nodes.push(new we(c));});}alterColumn(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new rt(this.sqlType,e,this.table,"alter_table"),n=t(r);if(!e.length)return;let o=e.filter(p=>p.folder==="column");if(o.length!==1)throw new Error("alterColumn callback must define exactly one column");let s=o[0],a=C(s.column),l=n.getNodes().find(p=>p.constraintType==="null"),d=n.getNodes().find(p=>p.constraintType==="not_null")||l,c=n.getNodes().find(p=>p.constraintType==="default"),m={};d&&(m.nullable=d.constraintType==="null"),c&&(c.defaultValue===void 0||c.defaultValue===null||c.defaultValue==="NULL"?m.dropDefault=true:m.default=c.defaultValue),s.collate&&(this.sqlType==="mysql"||this.sqlType==="mariadb")&&(m.collate=s.collate),this.nodes.push(new Ir(C(a),s,m)),d&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(d.constraintType==="not_null"?this.nodes.push(new kr(C(a))):d.constraintType==="null"&&this.nodes.push(new Pr(C(a)))),c&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(c.defaultValue===void 0||c.defaultValue===null||c.defaultValue==="NULL"?this.nodes.push(new Lt(C(a))):this.nodes.push(new Br(C(a),c.defaultValue))),n.getNodes().forEach(p=>{let h=p;switch(h.constraintType){case "primary_key":this.addPrimaryKey(C(a));break;case "unique":this.unique(C(a),{constraintName:h.constraintName});break;case "foreign_key":this.foreignKey(C(a),h.references?.table??"",C(h.references?.columns?.[0]??""),{constraintName:h.constraintName,onDelete:h.onDelete,onUpdate:h.onUpdate});break}});}dropColumn(t){this.nodes.push(new vr(t));}renameColumn(t,e){this.nodes.push(new Er(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Lt(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Tt([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new we(new U(...t)));}foreignKey(t,e,r,n){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new we(new U("foreign_key",{columns:[t],references:{table:e,columns:[r]},constraintName:n?.constraintName??Y(this.table,t,r),onDelete:n?.onDelete,onUpdate:n?.onUpdate})));}unique(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new we(new U("unique",{columns:[t],constraintName:e?.constraintName??Ne(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let r=Y(this.table,t,e);this.nodes.push(new Se(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new T("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??Ne(this.table,t);this.nodes.push(new Se(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Se(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new T("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new wt(t));}setTableOptions(t){let e=this.sqlType==="mysql"||this.sqlType==="mariadb",r=this.sqlType==="postgres"||this.sqlType==="cockroachdb",n=this.sqlType==="mssql";return this.sqlType==="sqlite"?this:(e?this.nodes.push(new St(t)):r?this.nodes.push(new St(t)):n&&this.nodes.push(new St(t)),this)}};var de=class{constructor(t){if(this.sqlType=t||E.DB_TYPE,!this.sqlType)throw new T("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new O(t)}rawQuery(t){this.queryStatements.push(t);}async execute(){for(let t of this.queryStatements)this.rawQuery(t);}runFile(t){if(!ae.existsSync(t))throw new T("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=ft.basename(t),r=ft.extname(e);if(r!==".sql"&&r!==".txt")throw new T("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let o=ae.readFileSync(t,"utf-8").split(";").map(s=>s.trim()).filter(s=>s.length>0&&!s.startsWith("--"));for(let s of o)this.rawQuery(s);}createTable(t,e,r){let n=new rt(this.sqlType,[],t);e(n);let o=n.getNodes(),s=new b({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a={...r,...this.sqlType==="mysql"||this.sqlType==="mariadb"?n.getMysqlOptions()||{}:{}},l=new Qr(t,o,n.getNamedConstraints(),r?.ifNotExists,a),u=s.parse([l]).sql,d=u.startsWith("create table")?u:`create table ${u}`;this.rawQuery(d),this.generateAutoUpdateTriggers(t,o);}alterTable(t,e){let r=[],n=new Hr(t,r,this.sqlType);if(e(n),!r.length)return;let o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"}),s=[],a=()=>{if(!s.length)return;let u=new fe(t,s),d=o.parse([u]).sql;if(!d||!d.trim())return;let c=d.startsWith("alter table")?d:`alter table ${d}`;this.rawQuery(c),s=[];};for(let u of r)u.file==="add_constraint"&&s.length&&s[0].file==="add_column"||a(),s.push(u);a();let l=r.filter(u=>u.file==="add_column").map(u=>u.column);this.generateAutoUpdateTriggers(t,l);}dropTable(t,e=false){let r=new Kr(t,e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}renameTable(t,e){let r=new fe(t,[new ht(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.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 n=r.constraintName||jl(t,e.join("_")),o=new Wr(t,e,n),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([o]).sql);}dropIndex(t,e){let r=new jr(t,e),n=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addPrimaryKey(t,e){let r=new fe(t,[new Tt(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addUnique(t,e,r){let n=Array.isArray(e)?e:[e],o=r?.constraintName??Ne(t,n.join("_")),s=new U("unique",{columns:n,constraintName:o}),a=new fe(t,[new we(s)]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropForeignKey(t,e,r){let n=Y(t,e,r),o=new Se(n),s=new fe(t,[o]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropUnique(t,e,r){let n=Array.isArray(e)?Ne(t,e.join("_")):Ne(t,e),o=r?.constraintName??n,s=new Se(o),a=new fe(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new wt,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new U(...e),n=new fe(t,[new we(r)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}dropConstraint(t,e){let r=new Se(e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addCheck(t,e,r){let n=r?.constraintName??`chk_${t}_custom`.substring(0,63),o=new U("check",{checkExpression:e,constraintName:n}),s=new fe(t,[new we(o)]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropCheck(t,e){if(this.sqlType==="mysql"){this.rawQuery(`ALTER TABLE \`${t}\` DROP CHECK \`${e}\``);return}let r=new Se(e),n=new fe(t,[r]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}createExtension(t,e=true){let r=new Lr(t,e),n=this.generateAstInstance({table:"",databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}generateAutoUpdateTriggers(t,e){if(this.sqlType==="mysql"||this.sqlType==="mariadb")return;let r=e.filter(n=>n.folder==="column"&&n.autoUpdate===true).map(n=>C(n.column));for(let n of r){let o=this.getAutoUpdateTriggerSql(t,n);for(let s of o)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`];default:return []}}generateAstInstance(t){return new b(t,this.sqlType)}};var zr,Ef,jt=class{constructor(t,e){hu(this,zr);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new de(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=gu(this,zr,Ef).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(`;
|
|
259
|
-
`)}async execute(){if(this.state!=="executed"){if(this.state==="failed")throw this.executionError;return this.then()}}isExecuted(){return this.state==="executed"}isPending(){return this.state==="pending"}hasFailed(){return this.state==="failed"}async hasTable(t){return this.dataSource.hasTable(t)}async hasColumn(t,e){return this.dataSource.hasColumn(t,e)}async hasColumns(t,...e){return this.dataSource.hasColumns(t,...e)}async hasIndex(t,e){return this.dataSource.hasIndex(t,e)}async hasPrimaryKey(t){return this.dataSource.hasPrimaryKey(t)}async hasUnique(t,e){return this.dataSource.hasUnique(t,e)}async hasForeignKey(t,e){return this.dataSource.hasForeignKey(t,e)}async hasCheckConstraint(t,e){return this.dataSource.hasCheckConstraint(t,e)}async getTables(){return this.dataSource.getTables()}async getColumnListing(t){return this.dataSource.getColumnListing(t)}dropTableIfExists(t){return this.schema.dropTable(t,true),this}async dropIndexIfExists(t,e){if(await this.dataSource.hasIndex(e,t)){let n=new de(this.dataSource.getDbType());n.dropIndex(t,e);let o=n.queryStatements[0];o&&await this.dataSource.rawQuery(o);}}renameColumn(t,e,r){return this.schema.alterTable(t,n=>{n.renameColumn(e,r);}),this}};zr=new WeakSet,Ef=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 xe=class{constructor(t,e){this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var Gr=class{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}buildDropDependencies(t){let e=new Map,r=new Map,n=new Map;for(let o of t.relationsToDrop||[]){let s=`${o.table}.${o.relation.name}`,a=[];if(o.relation.referencedTable&&a.push(`table.${o.relation.referencedTable}`),o.relation.referencedColumns)for(let l of o.relation.referencedColumns)a.push(`column.${o.relation.referencedTable}.${l}`);e.set(s,a);}for(let o of t.tablesToDrop||[]){let s=`table.${o.table}`,a=[];for(let l of this.models){let u=l.getRelations();for(let d of u)d.type==="belongsTo"&&d.model().table===o.table&&a.push(`fk.${l.table}.${d.constraintName}`);}r.set(s,a);}for(let o of t.columnsToDrop||[]){let s=`column.${o.table}.${o.column}`,a=[],l=this.models.find(u=>u.table===o.table);if(l){let u=l.getColumns().find(d=>d.databaseName===o.column);if(u){u.isPrimary&&a.push(`pk.${o.table}`);let d=l.getRelations();for(let c of d)c.columnName===u.columnName&&a.push(`fk.${o.table}.${c.constraintName}`);}}n.set(s,a);}return {foreignKeys:e,tables:r,constraints:n}}topologicalSortReverse(t,e){let r=new Set,n=new Set,o=[],s=a=>{if(n.has(a))throw new Error(`Circular dependency detected: ${a}`);if(r.has(a))return;n.add(a);let l=e(a);for(let u of l)s(u);n.delete(a),r.add(a),o.push(a);};for(let a of t.keys())r.has(a)||s(a);return o}generateDropOperations(t){let e=this.buildDropDependencies(t),r=[],n=this.topologicalSortReverse(e.foreignKeys,s=>e.foreignKeys.get(s)||[]);for(let s of n){let[a,l]=s.split("."),u=t.relationsToDrop?.find(d=>d.table===a&&d.relation.name===l);u&&r.push({type:"DROP_FOREIGN_KEY",phase:"DESTRUCTIVE_OPERATIONS",table:a,constraint:l,data:u,dependencies:e.foreignKeys.get(s)||[],sqlStatements:this.generateDropForeignKeySql(u)});}let o=this.topologicalSortReverse(e.tables,s=>e.tables.get(s)||[]);for(let s of t.columnsToDrop||[]){let a=`column.${s.table}.${s.column}`,l=e.constraints.get(a)||[];for(let u of l)u.startsWith("pk.")?r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:"PRIMARY KEY",data:{type:"primary_key",table:s.table},dependencies:[a],sqlStatements:this.generateDropPrimaryKeySql(s.table)}):u.startsWith("unique.")&&r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:`UNIQUE_${s.column}`,data:{type:"unique",table:s.table,column:s.column},dependencies:[a],sqlStatements:this.generateDropUniqueConstraintSql(s.table,s.column)});}for(let s of t.columnsToDrop||[])r.push({type:"DROP_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,column:s.column,data:s,dependencies:[],sqlStatements:this.generateDropColumnSql(s)});for(let s of o){let a=s.replace("table.",""),l=t.tablesToDrop?.find(u=>u.table===a);l&&r.push({type:"DROP_TABLE",phase:"DESTRUCTIVE_OPERATIONS",table:a,data:l,dependencies:e.tables.get(s)||[],sqlStatements:this.generateDropTableSql(l)});}return r}analyzeConstraintImpact(t){let e=new Map;for(let r of t.columnsToDrop||[]){let n=[],o=this.models.find(s=>s.table===r.table);if(o){let s=o.getColumns().find(a=>a.databaseName===r.column);if(s){s.isPrimary&&n.push(`PRIMARY KEY on ${r.table}`);let a=o.getRelations();for(let l of a)l.columnName===s.columnName&&n.push(`FOREIGN KEY ${l.constraintName} on ${r.table}`);}}e.set(`${r.table}.${r.column}`,n);}return e}detectMixedOperations(t){let e=[];for(let r of t.columnsToModify||[]){let n=this.models.find(o=>o.table===r.table);n&&n.getColumns().find(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,n=>{n.dropConstraint(t.relation.name);}).toQueries(),r=this.sql.getDbType();return (r==="mysql"||r==="mariadb")&&e.push(`DROP INDEX \`${t.relation.name}\` ON \`${t.table}\``),e}generateDropPrimaryKeySql(t){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,e=>{e.dropPrimaryKey();}).toQueries()}generateDropUniqueConstraintSql(t,e){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,r=>{r.dropConstraint(`UNIQUE_${e}`);}).toQueries()}generateDropColumnSql(t){return this.sql.schema().alterTable(t.table,e=>{e.dropColumn(t.column);}).toQueries()}generateDropTableSql(t){return [`DROP TABLE ${t.table}`]}};var Ul=i=>String(i??"").replace(/::[a-z_ ]+$/i,"").replace(/[()\s]/g,"").toLowerCase(),xh=/^(current[ _]?timestamp\d*|now\d*|getdate\d*|localtimestamp\d*|localtime\d*)$/,Oh={postgres:i=>i.includes("nextval"),cockroachdb:i=>i.includes("unique_rowid")},Dh={postgres:["gen_random_uuid"],cockroachdb:["gen_random_uuid"],mysql:["uuid"],mariadb:["uuid"],mssql:["newid"],sqlite:["lower(hex(randomblob(16)))"]},kf=(i,t)=>(Dh[i]??[]).includes(Ul(t)),Ct=(i,t)=>!!i.autoCreate&&xh.test(Ul(t)),Rt=(i,t,e)=>{if(t.type!=="increment"&&t.type!=="bigIncrement")return false;let r=Oh[i];return r?r(Ul(e)):false};var Yr=class Yr{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new Gr(t);}generateOperations(t){let e=[];e.push(...this.generateStructureCreationOperations(t)),e.push(...this.generateConstraintCreationOperations(t)),e.push(...this.generateDestructiveOperations(t)),e.push(...this.generateColumnModificationOperations(t));let r=l=>l.table&&l.constraint?`${l.table}::${l.constraint}`:void 0,n=new Set(e.filter(l=>l.type==="ADD_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),o=new Set(e.filter(l=>l.type==="DROP_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),s=new Set([...n].filter(l=>o.has(l)));return e.filter(l=>{let u=r(l);return u?!(s.has(u)&&(l.type==="ADD_FOREIGN_KEY"||l.type==="DROP_FOREIGN_KEY")):true})}generateStructureCreationOperations(t){let e=[];for(let r of t.tablesToAdd){let n=this.sql.schema().createTable(r.table,o=>{for(let s of r.columns){if(Array.isArray(s.type)){o.enum(s.databaseName,s.type);continue}s.type&&this.executeBuilderMethod(r.table,o,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:[n]});}for(let r of t.columnsToAdd){let n=this.generateAddColumnViaAlter(r);e.push({type:"ADD_COLUMN",phase:"STRUCTURE_CREATION",table:r.table,column:r.column.databaseName,data:r,dependencies:[`table.${r.table}`],sqlStatements:n});}return e}generateConstraintCreationOperations(t){let e=[];for(let n of t.uniquesToDrop||[]){let o=this.sql.schema().alterTable(n.table,s=>{s.dropConstraint(n.name);}).toQueries();e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:o});}let r=new Set((t.uniquesToDrop||[]).map(n=>n.name));for(let n of t.indexesToDrop){if(r.has(n.index))continue;let o=new de(this.sql.getDbType());o.dropIndex(n.index,n.table);let s=o.queryStatements[0];e.push({type:"DROP_INDEX",phase:"CONSTRAINT_CREATION",table:n.table,index:n.index,data:n,dependencies:[`table.${n.table}`],sqlStatements:[s]});}for(let n of t.primaryKeysToAdd){let a=this.models.find(u=>u.table===n.table)?.getColumns().find(u=>u.columnName===n.columns[0])?.primaryKeyConstraintName||qe(n.table,n.columns[0]),l=this.sql.schema().alterTable(n.table,u=>{let d=a||qe(n.table,n.columns[0]);u.addConstraint("primary_key",{columns:[n.columns[0]],constraintName:d});}).toQueries();e.push({type:"ADD_PRIMARY_KEY",phase:"CONSTRAINT_CREATION",table:n.table,constraint:a,data:n,dependencies:[`table.${n.table}`],sqlStatements:l});}for(let n of t.relationsToAdd){if(n.relation.type==="manyToMany")continue;let o=this.generateAddRelationViaAlter(n),s=this.computeFkConstraintName(n);e.push({type:"ADD_FOREIGN_KEY",phase:"CONSTRAINT_CREATION",table:n.table,constraint:s,data:n,dependencies:this.getForeignKeyDependencies(n),sqlStatements:o});}for(let n of t.uniquesToAdd||[]){let o=this.models.find(l=>l.table===n.table),s=(n.columns||[]).map(l=>o?.getColumns().find(d=>d.columnName===l)?.databaseName||l),a=this.sql.schema().alterTable(n.table,l=>{l.addConstraint("unique",{columns:s,constraintName:n.name||"mandatory"});}).toQueries();e.push({type:"ADD_UNIQUE_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name||"mandatory",data:n,dependencies:[`table.${n.table}`],sqlStatements:a});}for(let n of t.indexesToAdd){let o=this.generateCreateIndexSql(n);e.push({type:"CREATE_INDEX",phase:"CONSTRAINT_CREATION",table:n.table,index:n.index,data:n,dependencies:[`table.${n.table}`],sqlStatements:[o]});}for(let n of t.checksToDrop||[]){let o=new de(this.sql.getDbType());o.dropCheck(n.table,n.name);let s=o.queryStatements;e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:s});}for(let n of t.checksToAdd||[]){let o=new de(this.sql.getDbType());o.addCheck(n.table,n.expression,{constraintName:n.name});let s=o.queryStatements;e.push({type:"ADD_CHECK_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.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 o=this.models.find(a=>a.table===t.table)?.getColumns()||[],s=t.relation.columnName;return t.relation.type==="belongsTo"?s=o.find(l=>l.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey:s=o.find(l=>l.columnName===s)?.databaseName||s,Y(t.table,s,r)}generateDestructiveOperations(t){return this.dropResolver.generateDropOperations(t)}generateColumnModificationOperations(t){let e=[];for(let r of t.columnsToModify||[]){let n=this.generateModifyColumnViaAlter(r);e.push({type:"MODIFY_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:r.table,column:r.dbColumns.name,data:r,dependencies:[],sqlStatements:n});}return e}getForeignKeyDependencies(t){let e=[];if(t.relation.type==="belongsTo"){let n=t.relation.model();e.push(`table.${n.table}`);let o=n.primaryKey||"id",s=n.getColumns().find(a=>a.columnName===o);s&&e.push(`column.${n.table}.${s.databaseName}`);}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let n=C(t.relation.manyToManyOptions.throughModel);e.push(`table.${n}`);}e.push(`table.${t.table}`);let r=this.models.find(n=>n.table===t.table);if(r){let n=r.getColumns().find(o=>o.columnName===t.relation.columnName||o.databaseName===t.relation.columnName);n&&e.push(`column.${t.table}.${n.databaseName}`);}return e}applyNullableConstraint(t,e){return e===false?t.notNullable():e===true||this.sql.getDbType()==="mariadb"?t.nullable():t}executeBuilderMethod(t,e,r,n,o=true){let s;if(Array.isArray(r.type))s=e.enum(n[0],r.type);else if(typeof r.type=="string"&&Yr.BUILTIN_COLUMN_TYPES.has(r.type))s=e[r.type](...n);else if(typeof r.type=="string")s=e.custom(n[0],r.type,r.length);else throw new Error(`Unknown column type: ${String(r.type)} for column ${r.columnName}`);return o&&(r.isPrimary&&s.primaryKey({constraintName:r.primaryKeyConstraintName||qe(t,r.columnName)}),r.unsigned&&s.unsigned(),r.zerofill&&s.zerofill(),r.constraints?.default!==void 0&&s.default(r.constraints.default),this.applyNullableConstraint(s,r.constraints?.nullable)),s}generateAddColumnViaAlter(t){let e=[t.column.databaseName,t.column.length,t.column.precision&&!t.column.withTimezone?t.column.precision:void 0,t.column.scale,t.column.withTimezone?{withTimezone:t.column.withTimezone,precision:t.column.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,r=>{r.addColumn(n=>{let o=this.executeBuilderMethod(t.table,n,t.column,e,false);return t.column.constraints?.default!==void 0&&o.default(t.column.constraints.default),this.applyNullableConstraint(o,t.column.constraints?.nullable),o});}).toQueries()}generateModifyColumnViaAlter(t){if(this.sql.getDbType()==="sqlite")return [];let e=[t.modelColumn.databaseName,t.modelColumn.length,t.modelColumn.precision&&!t.modelColumn.withTimezone?t.modelColumn.precision:void 0,t.modelColumn.scale,t.modelColumn.withTimezone?{withTimezone:t.modelColumn.withTimezone,precision:t.modelColumn.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,n=>{n.alterColumn(o=>{let s=this.executeBuilderMethod(t.table,o,t.modelColumn,e,false);return t.modelColumn.constraints?.default!==void 0?s.default(t.modelColumn.constraints.default):t.dbColumns.defaultValue!=null&&t.dbColumns.defaultValue!==""&&!Ct(t.modelColumn,t.dbColumns.defaultValue)&&!Rt(this.sql.getDbType(),t.modelColumn,t.dbColumns.defaultValue)&&s.default(null),this.applyNullableConstraint(s,t.modelColumn.constraints?.nullable),s});}).toQueries()}generateCreateIndexSql(t){let e=this.models.find(s=>s.table===t.table),n=(e?.getIndexes().find(s=>s.name===t.index)?.columns||[]).map(s=>e?.getColumns().find(l=>l.columnName===s)?.databaseName||s),o=new de(this.sql.getDbType());return o.createIndex(t.table,n,{constraintName:t.index}),o.queryStatements[0]||""}generateAddRelationViaAlter(t){let e=t.table,r=t.relation.foreignKey;t.relation.type==="belongsTo"?(e=t.relation.model().table,r=t.relation.model().primaryKey||"id"):t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(e=C(t.relation.manyToManyOptions.throughModel),r=C(t.relation.manyToManyOptions.rightForeignKey),(!r||r==="undefined")&&(r=t.relation.model().primaryKey||"id"));let n=typeof t.relation.constraintName=="string"?t.relation.constraintName:void 0,o=C(r);if(t.relation.type==="belongsTo"){let m=t.relation.model(),p=m.primaryKey,f=m.getColumns().find(w=>w.columnName===p);if(f)o=f.databaseName;else {let w=m?.databaseCaseConvention||"preserve";o=H(p,w);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.model();if(typeof o=="string"&&o){let p=m.getColumns(),h=p.find(f=>f.columnName===o);if(h)o=h.databaseName;else {let f=m.primaryKey||"id",w=p.find(S=>S.columnName===f);if(w)o=w.databaseName;else {let S=m?.databaseCaseConvention||"preserve";o=H(o||f,S);}}}else {let p=m.primaryKey||"id",f=m.getColumns().find(w=>w.columnName===p);if(f)o=f.databaseName;else {let w=m?.databaseCaseConvention||"preserve";o=H(p,w);}}}let s=this.models.find(m=>m.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,u=a.find(m=>m.columnName===l);if(u)l=u.databaseName;else {let m=s?.databaseCaseConvention||"preserve";l=H(l,m);}if(t.relation.type==="belongsTo"){let m=a.find(p=>p.columnName===t.relation.foreignKey);if(m)l=m.databaseName;else {let p=s?.databaseCaseConvention||"preserve";l=H(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.manyToManyOptions.leftForeignKey,p=C(m),h=a.find(f=>f.columnName===p);if(h)l=h.databaseName;else {let f=s?.databaseCaseConvention||"preserve";l=H(p,f);}}let d=t.relation.onDelete?.toLowerCase(),c=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,m=>{let p=n||Y(t.table,l,e);m.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[o]},constraintName:p,onDelete:d,onUpdate:c});}).toQueries()}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};Yr.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 Ft=Yr;var Xr=class Xr{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}generateCode(t){let e=[],r=[],n=null,o={STRUCTURE_CREATION:"Structure creation",CONSTRAINT_CREATION:"Constraints and indexes",DESTRUCTIVE_OPERATIONS:"Destructive operations"};for(let s of t){s.phase!==n&&(n=s.phase,e.length>0&&e.push(""),e.push(`// ${o[n]}`));let{up:a,down:l}=this.generateOperationCode(s);a&&e.push(...a),l&&r.push(...l);}return {up:e,down:r}}generateOperationCode(t){switch(t.type){case "CREATE_TABLE":return this.generateCreateTableCode(t);case "ADD_COLUMN":return this.generateAddColumnCode(t);case "MODIFY_COLUMN":return this.generateModifyColumnCode(t);case "DROP_COLUMN":return this.generateDropColumnCode(t);case "CREATE_INDEX":return this.generateCreateIndexCode(t);case "DROP_INDEX":return this.generateDropIndexCode(t);case "ADD_FOREIGN_KEY":return this.generateAddForeignKeyCode(t);case "DROP_FOREIGN_KEY":return this.generateDropForeignKeyCode(t);case "ADD_UNIQUE_CONSTRAINT":return this.generateAddUniqueCode(t);case "DROP_CONSTRAINT":return this.generateDropConstraintCode(t);case "ADD_CHECK_CONSTRAINT":return this.generateAddCheckCode(t);case "ADD_PRIMARY_KEY":return this.generateAddPrimaryKeyCode(t);case "DROP_TABLE":return this.generateDropTableCode(t);case "MODIFY_PRIMARY_KEY":return this.generateModifyPrimaryKeyCode(t);default:return {up:null,down:null}}}generateCreateTableCode(t){let e=t.data,r=[];r.push(`this.schema.createTable(${this.quote(e.table)}, (table) => {`);for(let o of e.columns){let s=this.generateColumnCode(e.table,o,true);r.push(` ${s}`);}r.push("});");let n=[`this.schema.dropTable(${this.quote(e.table)});`];return {up:r,down:n}}generateAddColumnCode(t){let{table:e,column:r}=t.data,n=this.generateColumnCode(e,r,false),o=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.addColumn((col) => ${n.replace(/^table\./,"col.")});`,"});"],s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r.databaseName)});`,"});"];return {up:o,down:s}}generateModifyColumnCode(t){let{table:e,modelColumn:r,dbColumns:n}=t.data,o=this.generateColumnCodeForModify(e,r,n),s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.alterColumn((col) => ${o.replace(/^table\./,"col.")});`,"});"],a=[`// TODO: reverse column modification for ${this.quote(n.name)} on ${this.quote(e)}`];return {up:s,down:a}}generateDropColumnCode(t){let{table:e,column:r}=t.data,n=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r)});`,"});"],o=[`// TODO: reverse column drop for ${this.quote(r)} on ${this.quote(e)}`];return {up:n,down:o}}generateCreateIndexCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=(r?.getIndexes().find(u=>u.name===e.index)?.columns||[]).map(u=>r?.getColumns().find(c=>c.columnName===u)?.databaseName||u),s=o.length===1?this.quote(o[0]):`[${o.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.createIndex(${this.quote(e.table)}, ${s}, { constraintName: ${this.quote(e.index)} });`],l=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`];return {up:a,down:l}}generateDropIndexCode(t){let e=t.data,r=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`],n=[`// TODO: reverse index drop for ${this.quote(e.index)} on ${this.quote(e.table)}`];return {up:r,down:n}}generateAddForeignKeyCode(t){let e=t.data,{sourceColumn:r,referencedTable:n,referencedColumn:o,constraintName:s}=this.resolveRelationDetails(e),a=e.relation.onDelete?.toLowerCase(),l=e.relation.onUpdate?.toLowerCase(),u=[];s&&u.push(`constraintName: ${this.quote(s)}`),a&&u.push(`onDelete: ${this.quote(a)}`),l&&u.push(`onUpdate: ${this.quote(l)}`);let d=u.length>0?`, { ${u.join(", ")} }`:"",c=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.foreignKey(${this.quote(r)}, ${this.quote(n)}, ${this.quote(o)}${d});`,"});"],m=s||Y(e.table,r,n),p=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.dropConstraint(${this.quote(m)});`,"});"];return {up:c,down:p}}generateDropForeignKeyCode(t){let e=t.constraint||t.data?.relation?.name;if(!e)return {up:null,down:null};let r=t.table||t.data?.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(e)});`,"});"],o=[`// TODO: reverse FK drop for ${this.quote(e)} on ${this.quote(r)}`];return {up:n,down:o}}generateAddUniqueCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=`[${(e.columns||[]).map(u=>r?.getColumns().find(c=>c.columnName===u)?.databaseName||u).map(u=>this.quote(u)).join(", ")}]`,s=e.name||"mandatory",a=[`this.schema.addUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(s)} });`],l=[`this.schema.dropUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(s)} });`];return {up:a,down:l}}generateDropConstraintCode(t){let e=t.data,r=t.table||e.table,n=t.constraint||e.name;if(!n||!r)return {up:null,down:null};if(e.type==="primary_key"){let a=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});"],l=[`// TODO: reverse primary key drop on ${this.quote(r)}`];return {up:a,down:l}}if(e.type==="unique"){let a=e.column,l=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],u=[`// TODO: reverse unique constraint drop for ${this.quote(a)} on ${this.quote(r)}`];return {up:l,down:u}}if(e.expression!==void 0){let a=[`this.schema.dropCheck(${this.quote(r)}, ${this.quote(n)});`],l=[`// TODO: reverse check constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:a,down:l}}let o=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],s=[`// TODO: reverse constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:o,down:s}}generateAddCheckCode(t){let e=t.data,r=[`this.schema.addCheck(${this.quote(e.table)}, ${this.quote(e.expression)}, { constraintName: ${this.quote(e.name)} });`],n=[`this.schema.dropCheck(${this.quote(e.table)}, ${this.quote(e.name)});`];return {up:r,down:n}}generateAddPrimaryKeyCode(t){let e=t.data,o=this.models.find(u=>u.table===e.table)?.getColumns().find(u=>u.columnName===e.columns[0])?.primaryKeyConstraintName||qe(e.table,e.columns[0]),s=`[${e.columns.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.addConstraint("primary_key", { columns: ${s}, constraintName: ${this.quote(o)} });`,"});"],l=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`," table.dropPrimaryKey();","});"];return {up:a,down:l}}generateDropTableCode(t){let e=t.table||t.data?.table,r=[`this.schema.dropTable(${this.quote(e)});`],n=[`// TODO: reverse table drop for ${this.quote(e)}`];return {up:r,down:n}}generateModifyPrimaryKeyCode(t){let e=t.data,r=e.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});",`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.addPrimaryKey(${this.quote(e.modelPrimaryKey)});`,"});"],o=[`// TODO: reverse primary key modification on ${this.quote(r)}`];return {up:n,down:o}}generateColumnCode(t,e,r){let n=this.generateColumnTypeCode(e);if(!r)return n;if(e.isPrimary){let o=e.primaryKeyConstraintName||qe(t,e.columnName);n+=`.primaryKey({ constraintName: ${this.quote(o)} })`;}return e.unsigned&&(n+=".unsigned()"),e.zerofill&&(n+=".zerofill()"),e.constraints?.default!==void 0&&(n+=`.default(${this.formatDefaultValue(e.constraints.default)})`),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n+";"}generateColumnCodeForModify(t,e,r){let n=this.generateColumnTypeCode(e);return e.constraints?.default!==void 0?n+=`.default(${this.formatDefaultValue(e.constraints.default)})`:r.defaultValue!=null&&r.defaultValue!==""&&!Ct(e,r.defaultValue)&&!Rt(this.sql.getDbType(),e,r.defaultValue)&&(n+=".default(null)"),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n}generateColumnTypeCode(t){let e=t.databaseName;if(Array.isArray(t.type)){let s=t.type.map(a=>this.quote(a)).join(", ");return `table.enum(${this.quote(e)}, [${s}])`}let r=t.type;if(new Set(["uuid","ulid","boolean","year","json","jsonb","binary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]).has(r))return `table.${r}(${this.quote(e)})`;if(r==="timestamp"||r==="datetime"){let s=[];return t.withTimezone&&s.push("withTimezone: true"),t.precision!=null&&s.push(`precision: ${t.precision}`),s.length>0?`table.${r}(${this.quote(e)}, { ${s.join(", ")} })`:`table.${r}(${this.quote(e)})`}return r==="date"||r==="time"?t.precision!=null?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="increment"||r==="bigIncrement"?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:r==="decimal"||r==="numeric"?t.precision!=null?t.scale!=null?`table.${r}(${this.quote(e)}, ${t.precision}, ${t.scale})`:`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="float"||r==="double"||r==="real"?t.precision!=null&&t.precision!==10?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="longtext"||r==="mediumtext"||r==="tinytext"?`table.${r}(${this.quote(e)})`:new Set(["varchar","char","string","integer","tinyint","smallint","mediumint","bigint","biginteger","varbinary"]).has(r)?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:Xr.BUILTIN_COLUMN_TYPES.has(r)?`table.${r}(${this.quote(e)})`:t.length!=null?`table.custom(${this.quote(e)}, ${this.quote(r)}, ${t.length})`:`table.custom(${this.quote(e)}, ${this.quote(r)})`}resolveRelationDetails(t){let e=t.table,r="id";if(t.relation.type==="belongsTo"){let l=t.relation.model();e=l.table;let u=l.primaryKey||"id";r=l.getColumns().find(m=>m.columnName===u)?.databaseName||u;}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){e=C(t.relation.manyToManyOptions.throughModel);let l=C(t.relation.manyToManyOptions.rightForeignKey);l&&l!=="undefined"?r=l:r=t.relation.model().primaryKey||"id";}let o=this.models.find(l=>l.table===t.table)?.getColumns()||[],s=t.relation.columnName;if(t.relation.type==="belongsTo")s=o.find(u=>u.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey;else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let l=C(t.relation.manyToManyOptions.leftForeignKey);s=o.find(d=>d.columnName===l)?.databaseName||l;}else s=o.find(u=>u.columnName===s)?.databaseName||s;let a=typeof t.relation.constraintName=="string"?t.relation.constraintName:C(t.relation.constraintName)||void 0;return {sourceColumn:s,referencedTable:e,referencedColumn:r,constraintName:a}}quote(t){return `"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}formatDefaultValue(t){return t==null?"null":t==="NULL"?'"NULL"':typeof t=="boolean"||typeof t=="number"?t.toString():t==="TRUE"||t==="true"?"true":t==="FALSE"||t==="false"?"false":this.quote(String(t))}};Xr.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 Zr=Xr;function $h(i){return i.replace(/\s+/g," ").trim()}function Ih(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function vh(i){let t=i.split(/\s+/).filter(n=>n.length>0),e=[],r=[];for(let n of t)n==="unsigned"||n==="zerofill"?e.push(n):r.push(n);return {bareBase:r.join(" "),modifiers:e}}function Ph(i,t){return t.length===0?i:`${i} ${t.join(" ")}`}function Ve(i,t){let e=$h(t.toLowerCase()),r=Ih(e);switch(i){case "sqlite":{let n=[{test:o=>o==="increment",normalized:"integer"},{test:o=>o==="bigincrement",normalized:"integer"},{test:o=>o.includes("int"),normalized:"integer"},{test:o=>o==="string",normalized:"varchar"},{test:o=>o.includes("char"),normalized:"varchar"},{test:o=>o.includes("text"),normalized:"text"},{test:o=>o.includes("clob"),normalized:"text"},{test:o=>o.includes("date"),normalized:"text"},{test:o=>o.includes("time"),normalized:"text"},{test:o=>o.includes("timestamp"),normalized:"text"},{test:o=>o.includes("datetime"),normalized:"text"},{test:o=>o.includes("blob"),normalized:"blob"},{test:o=>o.includes("real")||o.includes("floa")||o.includes("doub"),normalized:"real"},{test:o=>o.includes("numeric"),normalized:"numeric"},{test:o=>o.includes("bool"),normalized:"integer"},{test:o=>o.includes("uuid"),normalized:"varchar"},{test:o=>o.includes("ulid"),normalized:"varchar"},{test:o=>o.includes("jsonb"),normalized:"text"},{test:o=>o.includes("json"),normalized:"text"}];for(let o of n)if(o.test(r))return o.normalized;return r}case "mysql":case "mariadb":{let{bareBase:n,modifiers:o}=vh(r),a=new Set(["int","integer","increment","tinyint","smallint","mediumint","bigint","bigincrement","float","double","double precision","real","decimal","numeric","year","bool","boolean"]).has(n);if(n.endsWith("text")||n==="text")return "text";let l;switch(n){case "int":case "integer":case "increment":l="integer";break;case "tinyint":l="boolean";break;case "smallint":l="smallint";break;case "mediumint":l="mediumint";break;case "bigint":case "bigincrement":l="bigint";break;case "float":l="float";break;case "double":case "double precision":l="double";break;case "real":l="double";break;case "decimal":case "numeric":l="numeric";break;case "string":case "varchar":case "character varying":l="varchar";break;case "char":case "character":l="char";break;case "uuid":l="varchar";break;case "ulid":l="varchar";break;case "date":l="date";break;case "datetime":l="datetime";break;case "timestamp":l="timestamp";break;case "time":l="time";break;case "year":l="year";break;case "jsonb":case "json":l=i==="mariadb"?"text":"json";break;case "enum":l="enum";break;case "binary":l="binary";break;case "varbinary":l="varbinary";break;case "tinyblob":l="tinyblob";break;case "mediumblob":l="mediumblob";break;case "longblob":l="longblob";break;case "blob":l="blob";break;case "boolean":case "bool":l="boolean";break;default:l=n;break}return a&&o.length>0?Ph(l,o):l}case "postgres":case "cockroachdb":{if(r.endsWith("text")||r==="text")return "text";if(r.startsWith("timestamp"))return "timestamp";if(r.startsWith("time"))return "time";if(r==="datetime")return "timestamp";switch(r){case "string":case "varchar":case "character varying":return "varchar";case "char":case "character":return "char";case "ulid":return "varchar";case "double precision":return "double";case "real":return "real";case "float":return "real";case "integer":case "int4":case "int":case "increment":case "serial":return "integer";case "mediumint":return "integer";case "bigint":case "int8":case "bigincrement":case "bigserial":return "bigint";case "smallint":case "int2":return "smallint";case "tinyint":return "smallint";case "uuid":return "uuid";case "year":return "smallint";case "bytea":return "bytea";case "binary":case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":return "bytea";case "boolean":case "bool":return "boolean";case "numeric":case "decimal":return "numeric";case "jsonb":return "jsonb";case "json":return "json";case "date":return "date";default:return r}}case "mssql":{if(r.endsWith("text")||r==="text"||r==="ntext")return "text";if(r.startsWith("datetime2"))return "datetime2";if(r.startsWith("datetimeoffset"))return "datetimeoffset";switch(r){case "int":case "integer":case "increment":return "int";case "tinyint":return "tinyint";case "smallint":return "smallint";case "bigint":case "bigincrement":return "bigint";case "float":return "float";case "real":return "real";case "double":case "double precision":return "float";case "decimal":case "numeric":return "decimal";case "money":return "money";case "smallmoney":return "smallmoney";case "string":case "varchar":case "character varying":return "varchar";case "nvarchar":return "nvarchar";case "char":case "character":return "char";case "nchar":return "nchar";case "uuid":case "uniqueidentifier":return "uniqueidentifier";case "ulid":return "varchar";case "date":return "date";case "datetime":return "datetime";case "smalldatetime":return "smalldatetime";case "time":return "time";case "timestamp":return "datetime2";case "binary":return "binary";case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":case "bytea":return "varbinary";case "image":return "image";case "bit":case "boolean":case "bool":return "bit";case "json":case "jsonb":return "nvarchar";case "xml":return "xml";case "sql_variant":return "sql_variant";default:return r}}default:return r}}var nt=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 n=await e.sql.getTableSchema(r.table),o={columns:r.getColumns().filter(f=>f?.type!==void 0&&f?.type!==null),indexes:r.getIndexes(),relations:r.getRelations()};if(!n.columns.length){e.data.tablesToAdd.push({table:r.table,columns:o.columns});for(let S of o.indexes)n.indexes.map(q=>q.name).includes(S.name)||e.data.indexesToAdd.push({table:r.table,index:S.name});let f=r.getUniques?.()||[];for(let S of f)e.data.uniquesToAdd.push({table:r.table,name:S.name||"mandatory",columns:S.columns});let w=r.getChecks?.()||[];for(let S of w)e.data.checksToAdd.push({table:r.table,name:S.name,expression:S.expression});for(let S of o.relations){if(S.type!=="belongsTo")continue;let q=C(S.constraintName);n.foreignKeys.find(R=>R.name===q)||e.data.relationsToAdd.push({table:r.table,relation:S,onDelete:S.onDelete,onUpdate:S.onUpdate});}return}for(let f of o.columns)n.columns.some(S=>S.name===f.databaseName||S.name===f.columnName)||e.data.columnsToAdd.push({table:r.table,column:f});let s=r.getColumns();for(let f of n.columns)s.some(S=>S.databaseName===f.name||S.columnName===f.name)||e.data.columnsToDrop.push({table:r.table,column:f.name});for(let f of o.indexes)n.indexes.map(w=>w.name).includes(f.name)||e.data.indexesToAdd.push({table:r.table,index:f.name});let a=r.getUniques?.()||[];for(let f of a)n.indexes.some(S=>S.name===f.name&&S.isUnique)||e.data.uniquesToAdd.push({table:r.table,name:f.name||"mandatory",columns:f.columns});let l=n.foreignKeys.map(f=>f.name);for(let f of n.indexes)f.isUnique||l.includes(f.name)||o.indexes.map(S=>S.name).includes(f.name)||e.data.indexesToDrop.push({table:r.table,index:f.name});for(let f of n.indexes){if(!f.isUnique||f.name==="PRIMARY")continue;(r.getUniques?.()||[]).map(S=>S.name).includes(f.name)||e.data.uniquesToDrop.push({table:r.table,name:f.name});}let u=r.getChecks?.()||[];for(let f of u)n.checkConstraints.some(S=>S.name===f.name)||e.data.checksToAdd.push({table:r.table,name:f.name,expression:f.expression});let d=new Set(u.map(f=>f.name)),c=o.columns.filter(f=>Array.isArray(f.type)),m=new Set(c.map(f=>f.databaseName||f.columnName));for(let f of n.checkConstraints)if(!d.has(f.name)){let w=[...m].find(S=>{let q=S.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),M=new RegExp(`[\\["\\[]?${q}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),R=new RegExp(`[\\("\\[]?${q}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return M.test(f.expression)||R.test(f.expression)});if(w){let S=c.find(M=>(M.databaseName||M.columnName)===w),q=n.columns.find(M=>M.name===w);if(S&&q?.enumValues&&Array.isArray(S.type)){let M=[...S.type].sort(),R=[...q.enumValues].sort();if(!(M.length===R.length&&M.every((A,D)=>A===R[D]))){e.data.checksToDrop.push({table:r.table,name:f.name});let A=e.sql.getDbType(),D=A==="mssql"?"[":'"',Q=A==="mssql"?"]":'"',pe=S.type.map(P=>`'${P.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:f.name,expression:`${D}${w}${Q} IN (${pe})`});}}}else e.data.checksToDrop.push({table:r.table,name:f.name});}for(let f of o.columns){let w=n.columns.find(M=>M.name===f.databaseName||M.name===f.columnName);if(!w)continue;let S=!e.areColumnsEqual(w,f,n.indexes),q=e.getDefaultChange({table:r.table,dbColumns:w,modelColumn:f});(S||q)&&e.data.columnsToModify.push({table:r.table,dbColumns:w,modelColumn:f});}for(let f of o.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):Y(q,C(f.manyToManyOptions.leftForeignKey||Wl(r.table)),r.table),onDelete:f.onDelete,onUpdate:f.onUpdate},onDelete:f.onDelete,onUpdate:f.onUpdate});continue}let w=C(f.constraintName);if(w&&n.foreignKeys.some(q=>q.name===w))continue;n.foreignKeys.find(q=>e.relationMatchesDbRelation(r,f,q))||e.data.relationsToAdd.push({table:r.table,relation:f,onDelete:f.onDelete,onUpdate:f.onUpdate});}let p=new Set(o.relations.filter(f=>f.type==="belongsTo").map(f=>{let w=C(f.foreignKey)||f.columnName,q=r.getColumns().find(M=>M.columnName===w)?.databaseName||w;return C(f.constraintName)||Y(r.table,q,f.model().table)}));for(let f of n.foreignKeys){if(f.name&&p.has(f.name))continue;o.relations.find(S=>S.type!=="belongsTo"&&S.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,S,f))||e.data.relationsToDrop.push({table:r.table,relation:f});}for(let f of o.relations){if(f.type!=="belongsTo"&&f.type!=="manyToMany")continue;let w=n.foreignKeys.find(S=>e.relationMatchesDbRelation(r,f,S));w&&!e.areRelationsEqual(w,f)&&e.data.relationsToModify.push({table:r.table,dbRelation:w,modelRelation:f,onDelete:f.onDelete,onUpdate:f.onUpdate});}let h=r.primaryKey;if(h&&!n.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[h]}),n.primaryKey&&!h&&e.data.primaryKeysToDrop.push({table:r.table,columns:n.primaryKey.columns,name:n.primaryKey.name}),h&&n.primaryKey){let f=r.getColumns().find(w=>w.columnName===h);f&&!e.arePrimaryKeysEqual(n.primaryKey,f)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:n.primaryKey,modelPrimaryKey:h});}})),await e.processManyToMany(),await e.removeFkChurnByName(),e}getSqlStatements(){let t=this.getSqlStatementsByPhase();return Object.values(t).flat().filter(r=>{let n=r.trim();return n?!this.emptyStatements.some(o=>o.test(n)):false})}getCodeStatements(){let e=new Ft(this.sql).generateOperations(this.data);return new Zr(this.sql).generateCode(e)}getSqlStatementsByPhase(){let t=new Ft(this.sql),e=t.generateOperations(this.data),r=t.formatSqlStatements(e),n={STRUCTURE_CREATION:[],CONSTRAINT_CREATION:[],DESTRUCTIVE_OPERATIONS:[]};for(let o of r)n[o.phase].push(...o.sqlStatements);return n}areColumnsEqual(t,e,r=[]){let n=t.name===e.databaseName,o=this.sql.getDbType(),s=Ve(o,t.dataType),a=typeof e.type=="string"?Ve(o,e.type):void 0,l=s.split(" ").filter(d=>d!=="unsigned"&&d!=="zerofill").join(" ");if(a&&n&&(n=l===a),Array.isArray(e.type)&&(o==="mysql"||o==="mariadb")){let d=[...e.type].sort(),c=t.enumValues?[...t.enumValues].sort():null;c&&n&&(n=d.length===c.length&&d.every((m,p)=>m===c[p]));}e.length!=null&&t.length!=null&&n&&(n=t.length===e.length);let u=a==="real"||a==="double"||a==="float";if(e.precision!=null&&t.precision!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.precision===e.precision)),e.scale!=null&&t.scale!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.scale===e.scale)),typeof e.type=="string"&&(a==="timestamp"||a==="time")&&(o==="postgres"||o==="cockroachdb")&&e.withTimezone!==void 0&&t.withTimezone!==void 0&&n&&(n=!!t.withTimezone==!!e.withTimezone),e.constraints?.nullable!==void 0){let d=e.constraints.nullable,c=t.isNullable;n=n&&d===c;}if(o==="mysql"||o==="mariadb"){if(e.unsigned!==void 0){let d=e.unsigned??false,c=t.unsigned??false;n&&(n=d===c);}if(e.zerofill!==void 0){let d=e.zerofill??false,c=t.zerofill??false;n&&(n=d===c);}}if(e.stringMode!==void 0){let d=e.stringMode??false,c=t.stringMode??false;n&&(n=d===c);}return n}areRelationsEqual(t,e){let r=C(e.constraintName),n=r?t.name===r:true;if(e.type==="belongsTo"){let u=e.model(),d=u.primaryKey||"id",c=u.getColumns().find(h=>h.columnName===d),m=u.table,p=c?.databaseName||d;n=n&&t.referencedTable===m&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===p;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let u=C(e.manyToManyOptions.throughModel);n=n&&t.referencedTable===u;}let o=t.onDelete?.toLowerCase(),s=t.onUpdate?.toLowerCase(),a=e.onDelete?.toLowerCase(),l=e.onUpdate?.toLowerCase();return a&&n&&(n=o===a),l&&n&&(n=s===l),n}relationMatchesDbRelation(t,e,r){let n,o=e;if(o&&o.model){if(typeof o.model=="function"&&o.model.table)n=o.model;else if(typeof o.model=="function")try{let f=o.model();f&&f.table&&(n=f);}catch{}}if(!n)return false;let s=e.type==="belongsTo"?n.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(),d=(o.type||"belongsTo")==="belongsTo"?C(o.foreignKey):o.columnName,c=l.find(f=>f.columnName===d);c&&(d=c.databaseName);let m=n.primaryKey||"id",h=n.getColumns().find(f=>f.columnName===m)?.databaseName||m;return r.columns.length===1&&r.columns[0]===d&&r.referencedColumns.length===1&&r.referencedColumns[0]===h}arePrimaryKeysEqual(t,e){if(t.columns.length!==1)return false;let n=t.columns[0]===e.databaseName,o=this.sql.getDbType();if(["mysql","mariadb"].includes(o))return n;let a=!t.name||!e.primaryKeyConstraintName||t.name===e.primaryKeyConstraintName;return n&&a}getDefaultChange(t){let e=this.sql.getDbType(),r=Ve(e,t.dbColumns.dataType),n=typeof t.modelColumn.type=="string"?Ve(e,t.modelColumn.type):void 0;if(n&&r!==n||t.modelColumn.length!=null&&t.dbColumns.length!=null&&t.dbColumns.length!==t.modelColumn.length||t.modelColumn.precision!=null&&t.dbColumns.precision!=null&&t.dbColumns.precision!==t.modelColumn.precision||t.modelColumn.scale!=null&&t.dbColumns.scale!=null&&t.dbColumns.scale!==t.modelColumn.scale||(this.sql.getDbType()==="postgres"||this.sql.getDbType()==="cockroachdb")&&typeof t.modelColumn.type=="string"&&(n==="timestamp"||n==="time")&&t.modelColumn.withTimezone!==void 0&&t.dbColumns.withTimezone!==void 0&&!!t.dbColumns.withTimezone!=!!t.modelColumn.withTimezone)return false;let s=t.modelColumn.constraints?.default!==void 0,a=t.dbColumns.defaultValue!==null&&t.dbColumns.defaultValue!==void 0;if(s&&!a)return "set";if(!s&&a){let l=t.dbColumns.defaultValue;return Rt(e,t.modelColumn,l)||Ct(t.modelColumn,l)||t.modelColumn.type==="uuid"&&kf(e,l)?false:"drop"}if(s&&a){let l=String(t.dbColumns.defaultValue),u=String(t.modelColumn.constraints?.default),d=this.normalizeDefaultValue(e,r,l),c=this.normalizeDefaultValue(e,n||r,u);return d!==c?"set":false}return false}normalizeDefaultValue(t,e,r){let n=String(r).trim();if(!n)return n;if(t==="postgres"||t==="cockroachdb"){if(e==="json"||e==="jsonb")try{n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::(jsonb?|[a-zA-Z_ ]+[\[\]]*)/g,"");let s=n.match(/^'(.*)'$/s);if(s&&(n=s[1]),n==="{}"||n==="")return "{}";let a=JSON.parse(n);return JSON.stringify(a)}catch{}n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::[a-zA-Z_ ]+[\[\]]*/g,"");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),/^true$/i.test(n)?"true":/^false$/i.test(n)?"false":/^null$/i.test(n)?"null":(n)}if(t==="mysql"||t==="mariadb"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);if(o&&(n=o[1]),/^current_timestamp(?:\(\d+\))?$/i.test(n))return "current_timestamp";if(e==="boolean"){if(/^1$/.test(n))return "true";if(/^0$/.test(n))return "false"}return n}if(t==="sqlite"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),n.toLowerCase()}return n}async processManyToMany(){let t=new Set;for(let e of this.models){let r=e.getRelations();for(let n of r){if(n.type!=="manyToMany"||!n.manyToManyOptions||n.manyToManyOptions.wasModelProvided)continue;let o=C(n.manyToManyOptions.throughModel);if(t.has(o))continue;t.add(o);let s=this.models.find(P=>P.table===n?.manyToManyOptions?.primaryModel),a=n.model();if(!s||!a)continue;let l=s.primaryKey||"id",u=a.primaryKey||"id",d=s.getColumns().find(P=>P.columnName===l),c=a.getColumns().find(P=>P.columnName===u);if(!d||!c)continue;let m=C(n.manyToManyOptions.leftForeignKey)||l,p=C(n.manyToManyOptions.rightForeignKey)||u,h=await this.sql.getTableSchema(o);if(!h.columns.length){this.data.tablesToAdd.push({table:o,columns:[this.clonePkAsColumn(d,m),this.clonePkAsColumn(c,p)]}),this.pushM2mFkRelations({throughTable:o,leftModel:s,rightModel:a,leftFkName:m,rightFkName:p,onDelete:n.onDelete,onUpdate:n.onUpdate,constraintName:void 0});continue}let f=this.clonePkAsColumn(d,m),w=this.clonePkAsColumn(c,p),S=h.columns.find(P=>P.name===m),q=h.columns.find(P=>P.name===p),M=S?this.areColumnsEqual(S,f,h.indexes):false,R=q?this.areColumnsEqual(q,w,h.indexes):false;for(let P of h.foreignKeys){let se=P.referencedTable===s.table,Ze=P.referencedTable===a.table;if(!se&&!Ze)continue;let Re=se?m:p,_e=P.columns[0];_e&&_e!==Re&&(this.data.relationsToDrop.push({table:o,relation:P}),_e!==m&&_e!==p&&this.data.columnsToDrop.push({table:o,column:_e}));}let $={};M||($[f.databaseName]=f),R||($[w.databaseName]=$[w.databaseName]||w);for(let P of Object.keys($))this.data.columnsToAdd.push({table:o,column:$[P]});let A=this.buildBelongsToRelation(o,()=>s,m,l,void 0,n.onDelete,n.onUpdate),D=this.buildBelongsToRelation(o,n.model,p,u,void 0,n.onDelete,n.onUpdate),Q=h.foreignKeys.find(P=>P.referencedTable===s.table&&P.columns.length===1&&P.columns[0]===m),pe=h.foreignKeys.find(P=>P.referencedTable===a.table&&P.columns.length===1&&P.columns[0]===p);if(!Q){let P=h.foreignKeys.find(se=>se.referencedTable===s.table);P&&this.data.relationsToDrop.push({table:o,relation:P}),this.data.relationsToAdd.push(A);}if(!pe){let P=h.foreignKeys.find(se=>se.referencedTable===a.table);P&&this.data.relationsToDrop.push({table:o,relation:P}),this.data.relationsToAdd.push(D);}}}}async removeFkChurnByName(){let t=new Set;for(let n of this.data.relationsToAdd)t.add(n.table);for(let n of this.data.relationsToDrop)t.add(n.table);let e=new Map;for(let n of t){let o=await this.sql.getTableSchema(n),s=new Set((o.foreignKeys||[]).map(a=>a.name).filter(Boolean));e.set(n,s);}let r=new Map;for(let n of this.models){let o=n.getRelations(),s=new Set;for(let a of o){if(a.type!=="belongsTo")continue;let l=a.foreignKey||a.columnName,d=n.getColumns().find(m=>m.columnName===l)?.databaseName||l,c=C(a.constraintName)||Y(n.table,d,a.model().table);s.add(c);}r.set(n.table,s);}this.data.relationsToAdd=await Promise.all(this.data.relationsToAdd.map(async n=>{let o=await this.sql.getTableSchema(n.table),s=this.models.find(f=>f.table===n.table),a=s?.getColumns()||[],l=n.relation.columnName;n.relation.type==="belongsTo"?l=a.find(w=>w.columnName===n.relation.foreignKey)?.databaseName||n.relation.foreignKey:l=a.find(w=>w.columnName===l)?.databaseName||l;let u=n.table,d=n.relation.foreignKey;if(n.relation.type==="belongsTo"){let f=n.relation.model();u=f.table;let w=f.primaryKey||"id";d=f.getColumns().find(q=>q.columnName===w)?.databaseName||w;}let c=new Set([l,n.relation.columnName].filter(Boolean)),m=o.foreignKeys.some(f=>{if(f.columns.length!==1||f.referencedColumns.length!==1)return false;let w=c.has(f.columns[0]),S=f.referencedTable===u,q=f.referencedColumns[0]===d;return w&&S&&q}),p=C(n.relation.constraintName)||Y(n.table,l,u),h=e.get(n.table)||new Set;if(m||p&&h.has(p))return null;if(n.relation.type==="manyToMany"&&n.relation.manyToManyOptions){let f=C(n.relation.manyToManyOptions.throughModel),w=C(n.relation.manyToManyOptions.leftForeignKey),S=C(n.relation.manyToManyOptions.rightForeignKey),q=n.table===f&&n.relation.columnName===w&&n.relation.model().table===s?.table,M=n.table===f&&n.relation.columnName===S&&n.relation.model().table!==s?.table,R=await this.sql.getTableSchema(f),$=R.foreignKeys.some(D=>D.columns.length===1&&D.columns[0]===w&&D.referencedTable===(s?.table||"")),A=R.foreignKeys.some(D=>D.columns.length===1&&D.columns[0]===S&&D.referencedTable===n.relation.model().table);if(q&&$||M&&A)return null}return n})).then(n=>n.filter(Boolean)),this.data.relationsToDrop=await Promise.all(this.data.relationsToDrop.map(async n=>{let o=this.models.find(u=>u.table===n.table);if(!o)return n;let s=o.getRelations(),a=o.getColumns();return s.some(u=>{if(u.type!=="belongsTo")return false;let c=a.find(w=>w.columnName===u.foreignKey)?.databaseName||u.foreignKey,m=u.model(),p=m.primaryKey||"id",f=m.getColumns().find(w=>w.columnName===p)?.databaseName||p;return n.relation.columns.length===1&&n.relation.columns[0]===c&&n.relation.referencedTable===m.table&&n.relation.referencedColumns.length===1&&n.relation.referencedColumns[0]===f})?null:n})).then(n=>n.filter(Boolean));}clonePkAsColumn(t,e){let r=t.type;return r==="bigIncrement"?r="bigint":r==="increment"&&(r="integer"),{columnName:e,databaseName:e,isPrimary:false,type:r,length:t.length,precision:t.precision,scale:t.scale,withTimezone:t.withTimezone,constraints:{nullable:false}}}pushM2mFkRelations(t){let e=this.buildBelongsToRelation(t.throughTable,()=>t.leftModel,t.leftFkName,t.leftModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate),r=this.buildBelongsToRelation(t.throughTable,()=>t.rightModel,t.rightFkName,t.rightModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate);this.data.relationsToAdd.push(e),this.data.relationsToAdd.push(r);}buildBelongsToRelation(t,e,r,n,o,s,a){let l=o?C(o):Y(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 Je=class{};Je.modelCaseConvention="camel",Je.databaseCaseConvention="snake";var Qf=(i,t)=>{try{let e=Pe.createHash("sha256").update(i).digest(),r=Pe.randomBytes(16),n=Pe.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");return o+=n.final("hex"),`${r.toString("hex")}:${o}`}catch(e){throw new T("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Kf=(i,t)=>{try{let e=Pe.createHash("sha256").update(i).digest(),r=String(t).trim(),[n,o]=r.split(":");if(!n||!o)throw new Error(`Invalid encrypted value format: expected "iv:data" but got "${r.substring(0,50)}..."`);let s=n.toLowerCase(),a=o.toLowerCase(),l=Pe.createDecipheriv("aes-256-cbc",e,Buffer.from(s,"hex")),u=l.update(a,"hex","utf8");return u+=l.final("utf8"),u}catch(e){throw new T("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Lf=(i,t)=>{try{let e=Pe.randomBytes(32),r=Pe.randomBytes(16),n=Pe.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");o+=n.final("hex");let s=publicEncrypt(i,e);return `${r.toString("hex")}:${s.toString("hex")}:${o}`}catch(e){throw new T("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},Wf=(i,t)=>{try{let e=String(t).trim(),[r,n,o]=e.split(":");if(!r||!n||!o)throw new Error(`Invalid encrypted value format: expected "iv:key:data" but got "${e.substring(0,50)}..."`);let s=privateDecrypt(i,Buffer.from(n,"hex")),a=Pe.createDecipheriv("aes-256-cbc",s,Buffer.from(r,"hex")),l=a.update(o,"hex","utf8");return l+=a.final("utf8"),l}catch(e){throw new T("Encryption::decryptAsymmetric","FAILED_TO_DECRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}};var z=class{static defineMetadata(t,e,r,n){if((typeof r!="object"||r===null)&&typeof r!="function")throw new TypeError("target must be an object or function");let o=this.store.get(r);o||(o=new Map,this.store.set(r,o));let s=o.get(n);s||(s=new Map,o.set(n,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 n=e;for(;n;){let o=this.store.get(n);if(o){let s=o.get(r);if(s&&s.has(t))return s.get(t)}n=Object.getPrototypeOf(n);}}};z.store=new WeakMap;var Jl="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Vl=Jl.length,kh=10,Qh=16,Kh=(i,t)=>{let e="";for(let r=0;r<t;r++){let n=i%Vl;e=Jl.charAt(n)+e,i=(i-n)/Vl;}return e},Lh=i=>{let t=oe().crypto.randomBytes(i),e="";for(let r=0;r<i;r++){let n=t[r];e+=Jl.charAt(n%Vl);}return e},jf=()=>{let i=Math.floor(Date.now()/1e3),t=Kh(i,kh),e=Lh(Qh);return t+e};var en=class extends xe{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var tn=class extends xe{constructor(e,r,n){super(e,r);this.type="hasMany";this.foreignKey=n,this.type="hasMany";}};var rn=class extends xe{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var nn=class extends xe{constructor(e,r,n){super(e,r);this.type="manyToMany";this.primaryModel=n.primaryModel,this.relatedModel=e.table,this.throughModel=n.throughModel,this.leftForeignKey=n.leftForeignKey,this.rightForeignKey=n.rightForeignKey;}};function _(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let n=e.constructor;if(t){if(z.getMetadata(qt,e))throw new T("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");z.defineMetadata(qt,r,e),z.defineMetadata(qt,r,e.constructor);}let o=i.databaseName??H(r,n.databaseCaseConvention),s={columnName:r,serialize:i.serialize,prepare:i.prepare,isPrimary:t,primaryKeyConstraintName:i.primaryKeyConstraintName??qe(n.table,r),autoUpdate:i.autoUpdate,autoCreate:i.autoCreate,databaseName:o,openApi:i.openApi,type:i.type,length:i?.length,precision:i?.precision,scale:i?.scale,withTimezone:i?.withTimezone,unsigned:i.unsigned,zerofill:i.zerofill,stringMode:i.stringMode,expression:i.expression,constraints:{nullable:i.nullable,default:i.default}};s.validate=i.validate;let a=z.getMetadata(Fr,e)||[];a.push(s),z.defineMetadata(Fr,a,e);}}_.primary=Wh;_.date=og;_.datetime=sg;_.timestamp=ig;_.time=ag;_.boolean=ng;_.json=lg;_.uuid=Jh;_.ulid=Hh;_.integer=Fh;_.bigInteger=Yh;_.float=jh;_.decimal=Zh;_.increment=Uh;_.bigIncrement=Vh;_.string=zh;_.text=Gh;_.binary=Xh;_.enum=eg;_.encryption={symmetric:tg,asymmetric:rg};_.computed=ug;function Wh(i={}){return _({...i,primaryKey:true})}function jh(i={}){return _({type:"float",...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?Number.parseInt(t):Number.parseFloat(t)},openApi:{type:"number",format:"float",description:"A floating point number",...i.openApi||{}}})}function Fh(i={}){return _({type:"integer",...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?+t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An integer number",...i.openApi||{}}})}function Uh(i={}){return _({type:"increment",...i,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An auto-incrementing integer number",...i.openApi||{}}})}function Vh(i={}){return _({type:"bigIncrement",...i,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An auto-incrementing bigint number",...i.openApi||{}}})}function Jh(i={}){return _({type:"uuid",...i,prepare:t=>t||oe().crypto.randomUUID(),openApi:{type:"string",format:"uuid",description:"uuid (Universally Unique Identifier)",...i.openApi||{}}})}function Hh(i={}){return _({type:"ulid",...i,prepare:t=>t||jf(),openApi:{type:"string",format:"ulid",description:"ulid (Universally Unique Lexicographically Sortable Identifier)",...i.openApi||{}}})}function zh(i={}){return _({type:"string",...i,openApi:{type:"string",description:"A string value",...i.openApi||{}}})}function Gh(i={}){return _({type:"longtext",...i,openApi:{type:"string",description:"A text value",...i.openApi||{}}})}function Yh(i={}){return _({type:"bigint",...i,serialize:t=>{if(t!==void 0){if(t===null)return null;if(typeof t=="number")return t;if(typeof t=="string")return Number.parseInt(t);if(typeof t=="bigint")return Number(t)}},openApi:{type:"integer",format:"int64",description:"A bigint number",...i.openApi||{}}})}function Zh(i={}){return _({type:"decimal",precision:i.precision??10,scale:i.scale??2,...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseFloat(t)},openApi:{type:"number",format:"double",description:"A decimal number",...i.openApi||{}}})}function Xh(i={}){return _({type:"binary",...i,openApi:{type:"string",format:"binary",description:"Binary data",...i.openApi||{}}})}function eg(i,t={}){return _({type:i,...t,openApi:{type:"string",enum:i,description:"An enum value",...t.openApi||{}}})}function tg(i){return _({...i,prepare:t=>t&&Qf(i.key,t),serialize:t=>t&&Kf(i.key,t)})}function rg(i){return _({...i,prepare:t=>t&&Lf(i.publicKey,t),serialize:t=>t&&Wf(i.privateKey,t)})}function ng(i={}){return _({type:"boolean",...i,serialize:t=>!!t,prepare:t=>{if(t!=null)return !!t},openApi:{type:"boolean",description:"A boolean value",...i.openApi||{}}})}function og(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=i,s=!!n,a=!!r,l=typeof n=="function"?"js":s?true:void 0,u=()=>new Date,d=()=>ue(new Date,"DATE_ONLY",e),c=t?typeof n=="function"?n:d:typeof n=="function"?n:u,m=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return _({type:"date",...o,autoUpdate:a,autoCreate:l,prepare:t?f=>f?a?m():f:s?c():null:f=>f?a?m():f:s?c():null,serialize:t?f=>{if(f!==void 0)return f===null?null:f instanceof Date?ue(f,"DATE_ONLY",e):String(f)}:f=>{if(f!==void 0)return f===null?null:f instanceof Date?f:new Date(f)},openApi:{type:"string",format:"date",description:"YYYY-MM-DD",...o.openApi||{}}})}function sg(i={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...s}=i,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,c=typeof o=="function"?"js":u?true:void 0,m=()=>new Date,p=()=>ue(new Date,"ISO",a),h=t?typeof o=="function"?o:p:typeof o=="function"?o:m,f=t?typeof n=="function"?n:p:typeof n=="function"?n:m;return _({type:"datetime",...s,withTimezone:l,autoUpdate:d,autoCreate:c,prepare:t?q=>q?d?f():q:u?h():null:q=>q?d?f():q:u?h():null,serialize:t?q=>{if(q!==void 0)return q===null?null:q instanceof Date?ue(q,"ISO",a):String(q)}:q=>{if(q!==void 0)return q===null?null:q instanceof Date?q:new Date(q)},stringMode:t,openApi:{type:"string",format:"date-time",description:"YYYY-MM-DD HH:mm:ss",...s.openApi||{}}})}function ig(i={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...s}=i,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,c=typeof o=="function"?"js":u?true:void 0,m=()=>new Date,p=()=>ue(new Date,"TIMESTAMP",a),h=t?typeof o=="function"?o:p:typeof o=="function"?o:m,f=t?typeof n=="function"?n:p:typeof n=="function"?n:m;return _({type:"timestamp",...s,withTimezone:l,autoUpdate:d,autoCreate:c,prepare:t?q=>q?d?f():q:u?h():null:q=>q?d?f():q:u?h():null,serialize:t?q=>{if(q!==void 0)return q===null?null:q instanceof Date?ue(q,"TIMESTAMP",a):String(q)}:q=>{if(q!==void 0)return q===null?null:q instanceof Date?q:new Date(q)},stringMode:t,openApi:{type:"string",format:"date-time",description:"Unix timestamp",...s.openApi||{}}})}function ag(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=i,s=!!n,a=!!r,l=typeof n=="function"?"js":s?true:void 0,u=()=>new Date,d=()=>ue(new Date,"TIME_ONLY",e),c=t?typeof n=="function"?n:d:typeof n=="function"?n:u,m=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return _({type:"time",...o,autoUpdate:a,autoCreate:l,prepare:t?f=>f?a?m():f:s?c():null:f=>f?a?m():f:s?c():null,serialize:t?f=>{if(f!==void 0)return f===null?null:f instanceof Date?ue(f,"TIME_ONLY",e):String(f)}:f=>{if(f!==void 0)return f===null?null:f instanceof Date?f:new Date(f)},stringMode:t,openApi:{type:"string",format:"time",description:"HH:mm:ss",...o.openApi||{}}})}function lg(i={}){return _({type:"jsonb",...i,serialize:t=>typeof t=="string"?JSON.parse(t):t,prepare:t=>typeof t!="string"?JSON.stringify(t):t,openApi:{type:"object",description:"A JSON object",...i.openApi||{}}})}function ug(i,t={}){return _({...t,expression:i})}function Ff(i){try{return z.getMetadata(Fr,i.prototype)||[]}catch{return []}}function Uf(i){return z.getMetadata(Ll,i.prototype)||[]}function Vf(i){return (z.getMetadata(Ll,i.prototype)||[]).map(e=>{let{type:r,model:n,columnName:o,foreignKey:s}=e,a=C(s),l=n();switch(r){case "belongsTo":return new en(l,o,a);case "hasOne":return new rn(l,o,a);case "hasMany":return new tn(l,o,a);case "manyToMany":if(!e.manyToManyOptions)throw new T("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let u=n();return new nn(u,o,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:C(e.manyToManyOptions.throughModel),leftForeignKey:C(e.manyToManyOptions.leftForeignKey),rightForeignKey:C(e.manyToManyOptions.rightForeignKey)});default:throw new T("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function Jf(i){return z.getMetadata(qt,i)||z.getMetadata(qt,i.prototype)}function Hf(i){return z.getMetadata(Of,i.prototype)||[]}function zf(i){return z.getMetadata(Df,i.prototype)||[]}function Gf(i){return z.getMetadata(Af,i.prototype)||[]}var ye=class{};ye.columns=new WeakMap,ye.byName=new WeakMap,ye.byDatabaseName=new WeakMap;var De=class extends Je{static get table(){let t=Object.getOwnPropertyDescriptor(this,"table");if(t&&"value"in t)return t.value;throw new Error(`Table name not set for model "${this.name}". Use defineModel() to create models.`)}static set table(t){Object.defineProperty(this,"table",{value:t,writable:true,enumerable:true,configurable:true});}static get primaryKey(){return Jf(this)}constructor(t){if(super(),t)for(let e in t)Object.assign(this,{[e]:t[e]});}static getColumns(){let t=ye.columns.get(this);return t||(t=Ff(this),ye.columns.set(this,t)),t}static getColumnsByName(){let t=ye.byName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.columnName,e])),ye.byName.set(this,t)),t}static getColumnsByDatabaseName(){let t=ye.byDatabaseName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.databaseName,e])),ye.byDatabaseName.set(this,t)),t}static getRelations(){return Uf(this)}static getIndexes(){return Hf(this)}static getUniques(){return zf(this)}static getChecks(){return Gf(this)}static async validate(t){var s,a;let e=this.getColumns(),r={},n=this.primaryKey,o=n&&t?.[n]!==void 0?"update":"insert";for(let l of e){if(l.expression)continue;let u=l.validate;if(!u)continue;let d=t?t[l.columnName]:void 0,c=Array.isArray(u)?u:[u];for(let m of c)try{let p=await m(d,{model:this,column:l.columnName,operation:o,data:t});if(!(p&&p.valid)){let h=p&&p.message||"Validation failed";(r[s=l.columnName]||(r[s]=[])).push(h);}}catch{(r[a=l.columnName]||(r[a]=[])).push("Validation error");}}if(Object.keys(r).length>0)throw new Et(r);return {valid:true}}};De.zodEngine=null,De.softDeleteColumn="deletedAt",De.softDeleteValue=gt();var _t=class extends N{constructor(e,r=false){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.fromNode=e;}};var V=class extends N{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var re=class extends N{constructor(e,r=[],n,o=false,s=false,a={}){super(a.ignoreInto?"insert ignore into":"insert into",s);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="insert";this.file="insert";this.fromNode=e,this.records=r,this.returning=n,this.disableReturning=o,this.withNodes=a.withNodes,this.source=a.source,this.targetColumns=a.targetColumns,this.ignoreInto=a.ignoreInto??false,this.disambiguateSource=a.disambiguateSource??false;}};var Ee=class extends N{constructor(e,r,n,o="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=n,this.mode=o,this.returning=s;}};var Mt=class extends N{constructor(e=[],r="inserted"){super("returning");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="returning";this.file="returning";this.columns=e,this.prefix=r;}};var Be=class extends N{constructor(e,r=[],n=[],o=false){super("update",o);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="update";this.file="update";this.fromNode=e,this.columns=r,this.values=n;}};var x=class extends N{constructor(e,r,n=false,o,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=n,this.operator=o,this.value=s;}};var Ae=class extends N{constructor(e,r="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`;}};var j=class extends x{constructor(e,r,n=false,o,s,a=false,l,u){super(e,r,n,"=",s,a);this.file="where_json";this.jsonOperator=o,this.value=s,this.path=l,this.comparisonOperator=u;}};var Ce=class extends N{constructor(e,r,n,o="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_subquery";this.column=e,this.operator=r,this.subquery=n,this.chainsWith=` ${o}`;}};var Yf;Yf=Symbol.toStringTag;var ie=class{constructor(t,e,r,n){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=n;this[Yf]="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 Hl=i=>{let t=i.lastIndexOf(".");return t===-1?i:i.slice(t+1)},$e=class extends ie{constructor(e,r,n,o,s,a,l){let u={requested:false,actionProvided:false};super(e,r,n,async()=>{if(u.requested&&!u.actionProvided)throw new T(l,"ON_CONFLICT_REQUIRES_MERGE_OR_IGNORE");return o()});this.conflictColumns=null;this.conflictState=u,this.commit=s,this.insertColumns=a.map(Hl),this.caller=l;}onConflict(e){if(e===void 0)return this.conflictColumns=[],this.conflictState.requested=true,this;let r=(Array.isArray(e)?e:[e]).map(Hl);if(!r.length)throw new T(this.caller,"ON_CONFLICT_COLUMNS_REQUIRED");return this.conflictColumns=r,this.conflictState.requested=true,this}merge(e){let r=this.requireConflictTarget("merge"),n=e===void 0?this.insertColumns.filter(o=>!r.includes(o)):(Array.isArray(e)?e:[e]).map(Hl);return this.commitConflict(r,"update",n),this}ignore(){if(!this.conflictState.requested)throw new T(`${this.caller}::ignore`,"MERGE_REQUIRES_ON_CONFLICT");return this.conflictState.actionProvided=true,this.commitConflict(this.conflictColumns??[],"ignore",[]),this}requireConflictTarget(e){if(!this.conflictColumns?.length)throw new T(`${this.caller}::${e}`,"MERGE_REQUIRES_ON_CONFLICT");return this.conflictColumns}commitConflict(e,r,n){this.conflictState.actionProvided=true,this.commit({conflictColumns:e,mode:r,columnsToUpdate:n});}};var dg=(i,t,e,r,n,o=false,s=new Set)=>{let a=Object.create(t.prototype);for(let l of Object.keys(i)){let u=i[l],d=s.has(l),c=e.get(l),m=l;!c&&!d&&(c=r.get(l),c&&(m=c.columnName));let p=c!==void 0,h=d||o?true:n?n.has(m):true;if(p){if(!h)continue;if(u===null){a[m]=null;continue}if(c?.serialize){let f=c.serialize(u);if(f!==null&&typeof f?.then=="function")throw new Error(`hysteria-orm: column "${m}" on model "${t.name}" has an async serialize function, but serializers must be synchronous. Move async work to prepare or a getter.`);a[m]=f;continue}a[m]=u;continue}(d||!o||n&&n.has(m))&&(a[m]=u);}if(n)for(let l of n)l in a||(a[l]=null);return a},he=(i,t,e=[],r=[])=>{if(!i.length)return null;let n=t.getColumnsByName(),o=t.getColumnsByDatabaseName(),s=e.some(c=>c.includes("*")),a=[];for(let c of e){if(c.toLowerCase().includes(" as ")){let f=c.match(/\s+as\s+(.+)$/i);f&&a.push(f[1].trim());continue}let p=c;if(p.includes(".")&&(p=p.split(".").pop()),p==="*")continue;let h=n.get(p)?.columnName??p;a.push(h);}let l=a.length?new Set(a):null,u=new Set(r),d=i.map(c=>dg(c,t,n,o,l,s,u));return d.length===1?d[0]:d};var Ut=class{constructor(t){this.observers=t??[];}add(t){this.observers.push(t);}async notifyBefore(t){for(let e of this.observers)e?.onBeforeQuery&&await e.onBeforeQuery(t);}async notifyAfter(t,e){for(let r of this.observers)r?.onAfterQuery&&(t.result??(t.result=e),await r.onAfterQuery(t));}async notifyError(t){for(let e of this.observers)e?.onQueryError&&await e.onQueryError(t);}},Zf=i=>{if(!i)return "OTHER";let t=i.trim().toUpperCase();return t.startsWith("SELECT")?"SELECT":t.startsWith("INSERT")?"INSERT":t.startsWith("UPDATE")?"UPDATE":t.startsWith("DELETE")?"DELETE":"OTHER"};var on=oe();function zl(i){let t=on.timing.now()-i;return Math.round(t*100)/100}var G=async(i,t,e,r,n="rows",o)=>{await e.ensureConnected();let s={id:on.crypto.randomUUID(),sql:i,params:t,model:void 0,operation:Zf(i),timestamp:on.timing.now()};try{let u=e.observerChain;u&&typeof u.notifyBefore=="function"&&await u.notifyBefore(s);}catch{}let a=on.timing.now(),l=u=>{o?.shouldNotLog||dt(i,e.logs,t,e.inputDetails.queryFormatOptions,r,u);};try{let u=e.driverAdapter;if(!u)throw new T("ExecSql","CONNECTION_NOT_ESTABLISHED");let d=o?.timeout,c=d?new AbortController:void 0,m,p=cg(()=>u.execute(i,t,{returning:n,sqlLiteOptions:o?.sqlLiteOptions,signal:c?.signal,connection:e.sqlConnection}),e.inputDetails.connectionPolicies?.retry,e.logs),h;try{d&&c?(h=await Promise.race([p,new Promise((f,w)=>{m=setTimeout(()=>{let S=new T("ExecSql::timeout","QUERY_TIMEOUT",new Error(`Query exceeded the ${d.ms}ms timeout`));d.cancel&&c.abort(S),w(S);},d.ms);})]),p.catch(()=>{})):h=await p;}finally{m&&clearTimeout(m);}try{let f=zl(a),w=e.observerChain;if(w&&typeof w.notifyAfter=="function"){let S={...s,duration:f,result:h};await w.notifyAfter(S);}}catch{}return l(zl(a)),u.extract(h,n)}catch(u){throw l(zl(a)),u}},sn=async(i,t,e,r={},n)=>{let o=e.driverAdapter;if(!o)throw new T("ExecSqlStreaming","CONNECTION_NOT_ESTABLISHED");return await o.stream(i,t,{...r,connection:e.sqlConnection??void 0},{onData:n.onData})};async function cg(i,t={maxRetries:0,delay:0},e=false){let r=0,n=t.maxRetries||0,o=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<n)return r++,Cu(`Retrying sql in ${o}ms (attempt ${r}/${n})`,"info",e),await new Promise(l=>setTimeout(l,o)),s();throw a}}return s()}var J=class extends N{constructor(e,r,n,o,s){super("select");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="select";this.file="select";this.column=e,this.alias=r,this.sqlFunction=n,this.isRawValue=o??false,this.distinct=s;}};var Vt=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=Vf(t),this.modelRelationsMap=new Map(this.modelRelations.map(n=>[n.columnName,n]));}getRelationFromModel(t){let e=this.modelRelationsMap.get(t.toString());if(!e)throw new T("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function an(i,t,e){return {total:e,perPage:t,currentPage:i,firstPage:1,isEmpty:e===0,lastPage:Math.max(1,Math.ceil(e/t)),hasMorePages:i<Math.max(1,Math.ceil(e/t)),hasPages:e>t}}var xt=i=>typeof i=="number"?i:parseFloat(i);var Z=class extends N{constructor(e,r,n=false,o,s,a=false,l,u){super("having",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="having";this.file="having";this.column=e,this.chainsWith=` ${r}`,this.isNegated=n,this.operator=o,this.value=s,this.subquery=l,this.group=u;}};var ln=class extends N{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var un=class extends N{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var He=class extends N{constructor(e,r,n,o="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=n,this.jsonOperator=o,this.isRawValue=s;}};var ne=class extends N{constructor(e,r,n,o="inner",s,a=false,l){super(`${o} join`,a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="join";this.file="join";this.type="inner";this.table=e,this.left=r,this.right=n,this.type=o,this.on=s,this.additionalConditions=l;}};var Jt=class extends N{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 dn=class extends N{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var cn=class extends N{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var Ht=class extends N{constructor(e,r="asc",n=false){super("order by",n);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="order_by";this.file="order_by";this.column=e,this.direction=r;}};var pn=class pn{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=pn.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 Jt(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Jt(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new Ht(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new Ht(t,"asc",true)),this}limit(t){return typeof t!="number"&&g.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new dn(t),this}offset(t){return typeof t!="number"&&g.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new cn(t),this}};pn.EMPTY_MAP=new Map;var mn=pn;var ot=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 n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"and",false,n,o)),this}orWhere(t,e,r){if(typeof t=="function")return this.orWhereGroup(t);let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"or",false,n,o)),this}whereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"and",true,n,o)),this}andWhereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"and",true,n,o)),this}orWhereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"or",true,n,o)),this}whereBetween(t,e,r){return this.andWhereBetween(t,e,r)}andWhereBetween(t,e,r){return this.whereNodes.push(new x(t,"and",false,"between",[e,r])),this}orWhereBetween(t,e,r){return this.whereNodes.push(new x(t,"or",false,"between",[e,r])),this}whereNotBetween(t,e,r){return this.andWhereNotBetween(t,e,r)}andWhereNotBetween(t,e,r){return this.whereNodes.push(new x(t,"and",true,"between",[e,r])),this}orWhereNotBetween(t,e,r){return this.whereNodes.push(new x(t,"or",true,"between",[e,r])),this}whereLike(t,e){return this.andWhereLike(t,e)}andWhereLike(t,e){return this.where(t,"like",e),this}orWhereLike(t,e){return this.orWhere(t,"like",e),this}whereILike(t,e){return this.andWhereILike(t,e)}andWhereILike(t,e){return this.where(t,"ilike",e),this}orWhereILike(t,e){return this.orWhere(t,"ilike",e),this}whereNotLike(t,e){return this.andWhereNotLike(t,e)}andWhereNotLike(t,e){return this.where(t,"not like",e),this}orWhereNotLike(t,e){return this.orWhere(t,"not like",e),this}whereNotILike(t,e){return this.andWhereNotILike(t,e)}andWhereNotILike(t,e){return this.where(t,"not ilike",e),this}orWhereNotILike(t,e){return this.orWhere(t,"not ilike",e),this}whereIn(t,e){return this.andWhereIn(t,e)}andWhereIn(t,e){return e.length?(this.whereNodes.push(new x(t,"and",false,"in",e)),this):(this.whereNodes.push(new x("false","and",true,"=",[],true)),this)}orWhereIn(t,e){return e.length?(this.whereNodes.push(new x(t,"or",false,"in",e)),this):(this.whereNodes.push(new x("false","or",true,"=",[],true)),this)}whereNotIn(t,e){return this.andWhereNotIn(t,e)}andWhereNotIn(t,e){return e.length?(this.whereNodes.push(new x(t,"and",true,"in",e)),this):(this.whereNodes.push(new x("true","and",true,"=",[],true)),this)}orWhereNotIn(t,e){return e.length?(this.whereNodes.push(new x(t,"or",true,"in",e)),this):(this.whereNodes.push(new x("true","or",true,"=",[],true)),this)}whereNull(t){return this.andWhereNull(t)}andWhereNull(t){return this.whereNodes.push(new x(t,"and",false,"is null",void 0)),this}orWhereNull(t){return this.whereNodes.push(new x(t,"or",false,"is null",void 0)),this}whereNotNull(t){return this.andWhereNotNull(t)}andWhereNotNull(t){return this.whereNodes.push(new x(t,"and",false,"is not null",void 0)),this}orWhereNotNull(t){return this.whereNodes.push(new x(t,"or",false,"is not null",void 0)),this}whereRegexp(t,e){return this.andWhereRegexp(t,e)}andWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(t,"and",false,r?"~":"regexp",e.source)),this}orWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(t,"or",false,r?"~":"regexp",e.source)),this}whereNotRegexp(t,e){return this.andWhereNotRegexp(t,e)}andWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(t,"and",true,r?"~":"regexp",e.source)),this}orWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(t,"or",true,r?"~":"regexp",e.source)),this}whereGroup(t){return this.andWhereGroup(t)}andWhereGroup(t){let e=new i(this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new Ae(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 Ae(r,"or")),this}whereRaw(t,e){return this.andWhereRaw(t,e)}andWhereRaw(t,e){return this.whereNodes.push(new x(t,"and",true,"=",e??[],true)),this}orWhereRaw(t,e){return this.whereNodes.push(new x(t,"or",true,"=",e??[],true)),this}};var fn=class extends mn{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new ne(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new ne(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new ne(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new ne(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new ne(t,"","","cross",{operator:"="},true)),this}crossJoin(t,e){let r=typeof t=="string"?t:t.table;return this.joinNodes.push(new ne(e?`${r} as ${e}`:r,"","","cross",{operator:"="})),this}using(...t){let e=this.joinNodes[this.joinNodes.length-1];if(!e||!t.length||e.isRawValue||e.type==="cross"||e.type==="natural")throw new T("JoinQueryBuilder::using","USING_REQUIRES_JOIN");return e.using=t.map(r=>String(r)),this}naturalJoinRaw(t){return this.joinNodes.push(new ne(t,"","","natural",{operator:"="},true)),this}innerJoin(t,e,r,n,o){if(e===void 0)return this.join(typeof t=="string"?t:t.table);let s=r,a=n,l=typeof n=="function"?n:o;if(!s){if(!this.model.primaryKey)throw new T("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,n,o){if(e===void 0)return this.joinNodes.push(new ne(typeof t=="string"?t:t.table,"","","inner",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new ot(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ne(typeof t=="string"?t:t.table,e,s,"inner",{operator:a||"="},false,u)),this}leftJoin(t,e,r,n,o){if(e===void 0)return this.joinNodes.push(new ne(typeof t=="string"?t:t.table,"","","left",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new ot(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ne(typeof t=="string"?t:t.table,e,s,"left",{operator:a||"="},false,u)),this}rightJoin(t,e,r,n,o){if(e===void 0)return this.joinNodes.push(new ne(typeof t=="string"?t:t.table,"","","right",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new ot(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ne(typeof t=="string"?t:t.table,e,s,"right",{operator:a||"="},false,u)),this}fullJoin(t,e,r,n,o){let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new ot(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ne(typeof t=="string"?t:t.table,e,s,"full",{operator:a||"="},false,u)),this}};var mg=/\bas\s+"?([A-Za-z_][A-Za-z0-9_]*)"?\s*(?:,|$)/gi,pg=/^[A-Za-z_][A-Za-z0-9_.]*$/,fg=i=>{let t=[];for(let e of i.matchAll(mg))t.push(e[1]);if(!t.length){let e=i.trim();pg.test(e)&&t.push(e.split(".").pop());}return t},yn=class extends fn{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.userOutputColumns=[];this.dbType=r.getDbType(),this.fromNode=new V(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return e.forEach(r=>{if(Array.isArray(r)){let[a,l]=r;this.modelSelectedColumns.push(l),this.userOutputColumns.push(l);let u=this.resolveComputedColumn(a);if(u){this.selectNodes.push(new J(`(${u.expression}) as ${l}`,void 0,void 0,true));return}let d=H(a,this.model.databaseCaseConvention);this.selectNodes.push(new J(d,l));return}let n=r;this.modelSelectedColumns.push(n);let o=this.resolveComputedColumn(n);if(o){this.selectNodes.push(new J(`(${o.expression}) as ${o.alias}`,void 0,void 0,true));return}let s=H(n,this.model.databaseCaseConvention);this.selectNodes.push(new J(s));}),this}selectRaw(e){return this.selectNodes.push(new J(e,void 0,void 0,true)),this.userOutputColumns.push(...fg(e)),this}collectUserOutputNames(){let e=new Set(this.userOutputColumns);for(let r of this.selectNodes)r.alias&&e.add(r.alias);return [...e]}selectFunc(e,r,n){return this.selectNodes.push(new J(r,n,e)),this}countDistinct(e,r){return this.selectNodes.push(new J(e,r,"count",false,true)),this}sumDistinct(e,r){return this.selectNodes.push(new J(e,r,"sum",false,true)),this}avgDistinct(e,r){return this.selectNodes.push(new J(e,r,"avg",false,true)),this}rank(e,r={}){return this.pushWindow("rank",e,r)}denseRank(e,r={}){return this.pushWindow("dense_rank",e,r)}rowNumber(e,r={}){return this.pushWindow("row_number",e,r)}pushWindow(e,r,n){return this.selectNodes.push(new J(new Ur(e,$f(n.partitionBy),If(n.orderBy)),r)),this}clearSelect(){return this.modelSelectedColumns=[],this.userOutputColumns=[],this.selectNodes=[],this}resolveComputedColumn(e){let r=this.model.getColumnsByName?.();if(!r||r.size===0)return;let n=e.includes(".")?e.split(".").pop():e,o=r.get(n);if(o?.expression)return {expression:o.expression,alias:o.databaseName||n}}clearFrom(){return this.fromNode=new V(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new V(e),this}distinct(){return this.distinctNode=new ln,this}distinctOn(...e){return this.distinctOnNode=new un(e),this}selectJson(e,r,n){return this.selectNodes.push(new He(e,r,n,"extract")),this}selectJsonText(e,r,n){return this.selectNodes.push(new He(e,r,n,"extract_text")),this}selectJsonArrayLength(e,r,n){return this.selectNodes.push(new He(e,r,n,"array_length")),this}selectJsonKeys(e,r,n){return this.selectNodes.push(new He(e,r,n,"object_keys")),this}selectJsonRaw(e,r){return this.selectNodes.push(new He(e,"",r,"raw",true)),this}};var hn=class extends yn{constructor(e,r,n=false){super(e,r);this.isNestedCondition=false;this.whereNodes=[],this.havingNodes=[],this.isNestedCondition=n;}clearWhere(){return this.whereNodes=[],this}clearHaving(){return this.havingNodes=[],this}strictWhen(e,r){return e==null?this:(r(this),this)}when(e,r){return e?(r(this),this):this}where(e,r,n){return typeof e=="function"?this.andWhereGroup(e):typeof r=="function"&&n===void 0?this.andWhereSubQuery(e,"in",r):r instanceof B&&n===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function")?this.andWhereSubQuery(e,r,n):this.andWhere(e,r,n)}andWhere(e,r,n){if(typeof e=="function")return this.andWhereGroup(e);if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new x(e,"and",false,o,s)),this}orWhere(e,r,n){if(typeof e=="function")return this.orWhereGroup(e);if(typeof r=="function"&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(r instanceof B&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new x(e,"or",false,o,s)),this}whereColumn(e,r,n){return this.andWhereColumn(e,r,n)}andWhereColumn(e,r,n){let o="=",s;return n!==void 0?(o=r,s=n):s=r,this.whereNodes.push(new x(e,"and",false,o,new O(s))),this}orWhereColumn(e,r,n){let o="=",s;return n!==void 0?(o=r,s=n):s=r,this.whereNodes.push(new x(e,"or",false,o,new O(s))),this}whereNotColumn(e,r,n){return this.andWhereNotColumn(e,r,n)}andWhereNotColumn(e,r,n){return this.pushNotColumnWhere("and",e,r,n)}orWhereNotColumn(e,r,n){return this.pushNotColumnWhere("or",e,r,n)}pushNotColumnWhere(e,r,n,o){let s="!=",a=false,l;return o!==void 0?(s=n,l=o,a=true):l=n,this.whereNodes.push(new x(r,e,a,s,new O(l))),this}whereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new x(e,"and",true,o,s)),this}andWhereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new x(e,"and",true,o,s)),this}orWhereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new x(e,"or",true,o,s)),this}whereBetween(e,r,n){return this.andWhereBetween(e,r,n)}andWhereBetween(e,r,n){return this.whereNodes.push(new x(e,"and",false,"between",[r,n])),this}orWhereBetween(e,r,n){return this.whereNodes.push(new x(e,"or",false,"between",[r,n])),this}whereNotBetween(e,r,n){return this.andWhereNotBetween(e,r,n)}andWhereNotBetween(e,r,n){return this.whereNodes.push(new x(e,"and",true,"between",[r,n])),this}orWhereNotBetween(e,r,n){return this.whereNodes.push(new x(e,"or",true,"between",[r,n])),this}whereLike(e,r){return this.andWhereLike(e,r)}andWhereLike(e,r){return this.where(e,"like",r),this}orWhereLike(e,r){return this.orWhere(e,"like",r),this}whereILike(e,r){return this.andWhereILike(e,r)}andWhereILike(e,r){return this.where(e,"ilike",r),this}orWhereILike(e,r){return this.orWhere(e,"ilike",r),this}whereNotLike(e,r){return this.andWhereNotLike(e,r)}andWhereNotLike(e,r){return this.where(e,"not like",r),this}orWhereNotLike(e,r){return this.orWhere(e,"not like",r),this}whereNotILike(e,r){return this.andWhereNotILike(e,r)}andWhereNotILike(e,r){return this.where(e,"not ilike",r),this}orWhereNotILike(e,r){return this.orWhere(e,"not ilike",r),this}whereIn(e,r){return this.andWhereIn(e,r)}andWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new x(e,"and",false,"in",r)),this):(this.whereNodes.push(new x("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new x(e,"or",false,"in",r)),this):(this.whereNodes.push(new x("false","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"in",r)}whereNotIn(e,r){return this.andWhereNotIn(e,r)}andWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new x(e,"and",true,"in",r)),this):(this.whereNodes.push(new x("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new x(e,"or",true,"in",r)),this):(this.whereNodes.push(new x("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new x(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new x(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new x(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new x(e,"or",false,"is not null",void 0)),this}whereRegexp(e,r){return this.andWhereRegexp(e,r)}andWhereRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(e,"and",false,n?"~":"regexp",r.source)),this}orWhereRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(e,"or",false,n?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new x(e,"and",true,n?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new x(e,"and",true,n?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new x(e,"or",true,n?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ce("","exists",r.extractQueryNodes(),"and")),this}orWhereExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ce("","exists",r.extractQueryNodes(),"or")),this}whereNotExists(e){return this.andWhereNotExists(e)}andWhereNotExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ce("","not exists",r.extractQueryNodes(),"and")),this}orWhereNotExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ce("","not exists",r.extractQueryNodes(),"or")),this}whereRaw(e,r=[]){return this.andWhereRaw(e,r)}andWhereRaw(e,r=[]){return this.whereNodes.push(new x(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new x(e,"or",false,"=",r,true)),this}having(e,r,n){return this.andHaving(e,r,n)}andHaving(e,r,n){let o="=",s;return typeof r=="string"&&n?(o=r,s=n):(s=r,o="="),this.havingNodes.push(new Z(e,"and",false,o,s)),this}orHaving(e,r,n){let o="=",s;return typeof r=="string"&&n?(o=r,s=n):(s=r,o="="),this.havingNodes.push(new Z(e,"or",false,o,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Z(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Z(e,"or",false,"=",[],true)),this}havingNull(e){return this.andHavingNull(e)}andHavingNull(e){return this.havingNodes.push(new Z(e,"and",false,"is null",void 0)),this}orHavingNull(e){return this.havingNodes.push(new Z(e,"or",false,"is null",void 0)),this}havingNotNull(e){return this.andHavingNotNull(e)}andHavingNotNull(e){return this.havingNodes.push(new Z(e,"and",false,"is not null",void 0)),this}orHavingNotNull(e){return this.havingNodes.push(new Z(e,"or",false,"is not null",void 0)),this}havingIn(e,r){return this.andHavingIn(e,r)}andHavingIn(e,r){return this.pushHavingIn("and",e,r,false)}orHavingIn(e,r){return this.pushHavingIn("or",e,r,false)}havingNotIn(e,r){return this.andHavingNotIn(e,r)}andHavingNotIn(e,r){return this.pushHavingIn("and",e,r,true)}orHavingNotIn(e,r){return this.pushHavingIn("or",e,r,true)}havingBetween(e,r){return this.andHavingBetween(e,r)}andHavingBetween(e,r){return this.havingNodes.push(new Z(e,"and",false,"between",r)),this}orHavingBetween(e,r){return this.havingNodes.push(new Z(e,"or",false,"between",r)),this}havingNotBetween(e,r){return this.andHavingNotBetween(e,r)}andHavingNotBetween(e,r){return this.havingNodes.push(new Z(e,"and",false,"not between",r)),this}orHavingNotBetween(e,r){return this.havingNodes.push(new Z(e,"or",false,"not between",r)),this}havingExists(e){return this.andHavingExists(e)}andHavingExists(e){return this.pushHavingExists("and",e,false)}orHavingExists(e){return this.pushHavingExists("or",e,false)}havingNotExists(e){return this.andHavingNotExists(e)}andHavingNotExists(e){return this.pushHavingExists("and",e,true)}orHavingNotExists(e){return this.pushHavingExists("or",e,true)}havingWrapped(e){return this.andHavingWrapped(e)}andHavingWrapped(e){return this.pushHavingGroup("and",e)}orHavingWrapped(e){return this.pushHavingGroup("or",e)}pushHavingIn(e,r,n,o){let s=o?"not in":"in";if(Array.isArray(n))return this.havingNodes.push(new Z(r,e,false,s,n)),this;let a=this.buildSubQuery(n);return this.havingNodes.push(new Z(r,e,false,s,[],false,a.extractQueryNodes())),this}pushHavingExists(e,r,n){let o=r instanceof B?r:new B(this.model,this.sqlDataSource);return o.isNestedCondition=true,typeof r=="function"&&r(o),this.havingNodes.push(new Z("",e,false,n?"not exists":"exists",[],false,o.extractQueryNodes())),this}pushHavingGroup(e,r){let n=new B(this.model,this.sqlDataSource);return n.isNestedCondition=true,r(n),this.havingNodes.push(new Z("",e,false,"=",[],false,void 0,n.havingNodes)),this}buildSubQuery(e){if(e instanceof B)return e;let r=new B(this.model,this.sqlDataSource),n=e(r);return n!=null&&"extractQueryNodes"in n?n:r}andWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new Ce(e,r,o.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new Ce(e,r,o.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new B(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new Ae(r.whereNodes,"and");return this.whereNodes.push(n),this}orWhereGroup(e){let r=new B(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new Ae(r.whereNodes,"or");return this.whereNodes.push(n),this}};var gn=class extends hn{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new j(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new j(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new j(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new j(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new j(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new j(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new j(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new j(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new j(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new j(t,"or",false,"raw",e)),this}whereJsonObject(t,e){return this.andWhereJsonObject(t,e)}andWhereJsonObject(t,e){return this.whereNodes.push(new j(t,"and",false,"=",e)),this}orWhereJsonObject(t,e){return this.whereNodes.push(new j(t,"or",false,"=",e)),this}whereNotJsonObject(t,e){return this.andWhereNotJsonObject(t,e)}andWhereNotJsonObject(t,e){return this.whereNodes.push(new j(t,"and",true,"=",e)),this}orWhereNotJsonObject(t,e){return this.whereNodes.push(new j(t,"or",true,"=",e)),this}whereJsonPath(t,e,r,n){return this.andWhereJsonPath(t,e,r,n)}andWhereJsonPath(t,e,r,n){return this.pushJsonPath("and",t,e,r,n,false),this}orWhereJsonPath(t,e,r,n){return this.pushJsonPath("or",t,e,r,n,false),this}whereJsonSupersetOf(t,e){return this.andWhereJsonSupersetOf(t,e)}andWhereJsonSupersetOf(t,e){return this.whereNodes.push(new j(t,"and",false,"contains",e)),this}orWhereJsonSupersetOf(t,e){return this.whereNodes.push(new j(t,"or",false,"contains",e)),this}whereJsonNotSupersetOf(t,e){return this.andWhereJsonNotSupersetOf(t,e)}andWhereJsonNotSupersetOf(t,e){return this.whereNodes.push(new j(t,"and",true,"contains",e)),this}orWhereJsonNotSupersetOf(t,e){return this.whereNodes.push(new j(t,"or",true,"contains",e)),this}whereJsonSubsetOf(t,e){return this.andWhereJsonSubsetOf(t,e)}andWhereJsonSubsetOf(t,e){return this.whereNodes.push(new j(t,"and",false,"subset",e)),this}orWhereJsonSubsetOf(t,e){return this.whereNodes.push(new j(t,"or",false,"subset",e)),this}whereJsonNotSubsetOf(t,e){return this.andWhereJsonNotSubsetOf(t,e)}andWhereJsonNotSubsetOf(t,e){return this.whereNodes.push(new j(t,"and",true,"subset",e)),this}orWhereJsonNotSubsetOf(t,e){return this.whereNodes.push(new j(t,"or",true,"subset",e)),this}whereJsonHasNone(t,e){return this.andWhereJsonHasNone(t,e)}andWhereJsonHasNone(t,e){return this.whereNodes.push(new j(t,"and",false,"has none",e)),this}orWhereJsonHasNone(t,e){return this.whereNodes.push(new j(t,"or",false,"has none",e)),this}pushJsonPath(t,e,r,n,o,s){let a=new j(e,t,s,"path",o,false,r,n);this.whereNodes.push(a);}};var B=class i extends gn{constructor(e,r){super(e,r);this.isNestedCondition=false;this._interpreterUtils=null;this.insertNode=null;this.insertNodeSource=void 0;this.onDuplicateNode=null;this.insertConflictConfig=null;this.updateNode=null;this.deleteNode=null;this.returningNode=null;this.truncateNode=null;this.replicationMode=null;this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.comments=[],this.hints=[],this.astParser=new b(this.model,this.dbType);}get interpreterUtils(){return this._interpreterUtils||(this._interpreterUtils=new y(this.model)),this._interpreterUtils}setReplicationMode(e){return this.replicationMode=e,this}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof i)&&typeof e[1]=="string"){let[r,n]=e;if(typeof r=="function"){let o=new i(this.model,this.sqlDataSource),s=r(o),a=s!=null&&"extractQueryNodes"in s?s:o;return this.selectNodes.push(new J(a.extractQueryNodes(),n)),this}return this.selectNodes.push(new J(r.extractQueryNodes(),n)),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}clearSelect(){return super.clearSelect(),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}countDistinct(e,r){return super.countDistinct(e,r),this}sumDistinct(e,r){return super.sumDistinct(e,r),this}avgDistinct(e,r){return super.avgDistinct(e,r),this}rank(e,r){return super.rank(e,r),this}denseRank(e,r){return super.denseRank(e,r),this}rowNumber(e,r){return super.rowNumber(e,r),this}async exists(){return !!await this.one()}async many(){let{sql:e,bindings:r}=this.unWrap();return this.execSqlWithSlaveHandling("read",n=>G(e,r,n,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}))}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async pluck(e){return (await this.many()).map(n=>n[e])}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async oneOrFail(){let e=await this.one();if(!e)throw new T("SqlDataSource::query::oneOrFail","ROW_NOT_FOUND");return e}async stream(e={}){let{sql:r,bindings:n}=this.unWrap();return this.execSqlWithSlaveHandling("read",async o=>await sn(r,n,o,e,{onData:(a,l)=>{a.write(l);}}))}async*chunk(e){let r=0;for(;;){let n=await this.limit(e).offset(r).many();if(!n.length)break;r+=n.length,yield n;}}async paginateWithCursor(e,r){if(!this.orderByNodes.length)throw new T(this.model.name+"::paginateWithCursor","ORDER_BY_REQUIRED");let n=this.orderByNodes;if(n.some(m=>m.isRawValue))throw new T(this.model.name+"::paginateWithCursor","ORDER_BY_RAW_NOT_SUPPORTED");let o=n.map(m=>m.column),s=n[0].direction==="desc"?"<":">";if(r){let m=Array.isArray(r.value)?r.value:[r.value];this.andWhere(p=>{for(let h=0;h<o.length;h++){let f=h;p.orWhere(w=>{for(let S=0;S<f;S++)w.where(o[S],"=",m[S]);w.where(o[f],s,m[f]);});}});}this.limit(e+1);let a=await this.many(),l=a.length>e,u=l?a.slice(0,e):a,d=u[u.length-1],c=o.map(m=>m.includes(".")?m.slice(m.lastIndexOf(".")+1):m);return {data:u,hasMore:l,nextCursor:d?{key:c.length===1?c[0]:c,value:c.length===1?d[c[0]]:c.map(m=>d[m])}:null}}lockForUpdate(e={}){return this.lockQueryNodes.push(new et("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new et("for_share",e.skipLocked,e.noWait)),this}forNoKeyUpdate(e={}){return this.assertPgLockStrength("forNoKeyUpdate","FOR NO KEY UPDATE"),this.lockQueryNodes.push(new et("for_no_key_update",e.skipLocked,e.noWait)),this}forKeyShare(e={}){return this.assertPgLockStrength("forKeyShare","FOR KEY SHARE"),this.lockQueryNodes.push(new et("for_key_share",e.skipLocked,e.noWait)),this}assertPgLockStrength(e,r){if(this.dbType!=="postgres")throw new T(`QueryBuilder::${e}`,`LOCK_STRENGTH_NOT_SUPPORTED_IN_${this.dbType.toUpperCase()}`,new Error(`${r} is only supported by postgres`))}timeout(e,r={}){return this.queryTimeout={ms:e,cancel:r.cancel??false},this}comment(e){return this.assertValidSqlComment(e),this.comments.push(e),this}hintComment(e){this.assertValidSqlComment(e);let r=e.slice(3,-2).trim(),n=this.hints[0];return this.hints=[n?`${n.slice(0,-2).trimEnd()} ${r} */`:`/*+ ${r} */`],this}clearComment(){return this.comments=[],this}clearHintComment(){return this.hints=[],this}assertValidSqlComment(e){let r=()=>{throw new T("QueryBuilder::comment","INVALID_SQL_COMMENT")};(!e.trim().length||e.includes("?"))&&r();let n=(this.dbType==="mysql"||this.dbType==="mariadb")&&e.startsWith("#");if(e.startsWith("--")||n){/[\r\n]/.test(e)&&r();return}if(e.startsWith("/*")&&e.endsWith("*/")&&e.length>=4){let o=e.slice(2,-2);(o.includes("/*")||o.includes("*/"))&&r();return}r();}union(e,r){if(typeof e=="string")return this.unionNodes.push(new ve(e,false,"union",r)),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,r){if(typeof e=="string")return this.unionNodes.push(new ve(e,true,"union",r)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new ve(o,true)),this}intersect(e,r){return this.unionNodes.push(new ve(this.resolveSetOperationNodes(e),false,"intersect",r)),this}except(e,r){return this.unionNodes.push(new ve(this.resolveSetOperationNodes(e),false,"except",r)),this}resolveSetOperationNodes(e){return typeof e=="string"?e:(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes()}increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?xt(r.total):0}needsDerivedTableCount(){return this.groupByNodes.length>0||this.havingNodes.length>0||this.distinctNode!==null||this.distinctOnNode!==null}buildCountQuery(e="*"){if(!this.needsDerivedTableCount()){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);return}this.clearOrderBy(),this.clearLimit(),this.clearOffset();let r=this.extractQueryNodes();this.withNodes=[],this.distinctNode=null,this.distinctOnNode=null,this.clearSelect(),this.fromNode=new V(r,"g"),this.joinNodes=[],this.whereNodes=[],this.groupByNodes=[],this.havingNodes=[],this.lockQueryNodes=[],this.unionNodes=[],this.comments=[],this.hints=[],this.selectRaw(`count(${e}) as total`);}async getMax(e){this.clearForFunctions(),this.selectFunc("max",e,"total");let r=await this.one();return r?xt(r.total):0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?xt(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?xt(r.total):0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?xt(r.total):0}async columnInfo(e){let r=typeof this.fromNode.table=="string"?this.fromNode.table:this.model.table,o=await(await this.getSqlDataSource("read")).getTableInfo(r);return e===void 0?o:o.find(s=>s.name===e)}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&g.warn(`${this.model.name}::paginate Non numeric values provided to \`paginate\``);let n=this.clone(),o=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>o.many(),()=>n.getCount("*"));return {paginationMetadata:an(e,r,a),data:s}}table(e,r){if(typeof e=="function"){if(!r)throw new T("QueryBuilder::table","MISSING_ALIAS_FOR_SUBQUERY");let n=new i(this.model,this.sqlDataSource),o=e(n),a=(o!=null&&"extractQueryNodes"in o?o:n).extractQueryNodes();return this.fromNode=new V(a,r),this}return this.fromNode=new V(e,r),this}withSchema(e){return this.schemaName=e,this}fromRaw(e,r=[]){return this.fromNode=new V(new O(e,r)),this}with(e,r,n){let o=Array.isArray(r)?r:void 0,s=Array.isArray(r)?n:r,a=new i(this.model,this.sqlDataSource),l=s(a),u=l!=null&&"extractQueryNodes"in l?l:a;return this.withNodes.push(new tt("normal",e,u.extractQueryNodes(),o)),this}withRecursive(e,r){let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new tt("recursive",e,s.extractQueryNodes())),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new T("QueryBuilder::withMaterialized","MATERIALIZED_CTE_NOT_SUPPORTED",new Error("MATERIALIZED CTE is only supported by postgres"));let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new tt("materialized",e,s.extractQueryNodes())),this}withNotMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new T("QueryBuilder::withNotMaterialized","NOT_MATERIALIZED_CTE_NOT_SUPPORTED",new Error("NOT MATERIALIZED CTE is only supported by postgres"));let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new tt("not materialized",e,s.extractQueryNodes())),this}insert(e,r){this.assertWriteClausesSupported("QueryBuilder::insert");let n=Object.fromEntries(Object.keys(e).map(s=>[s,e[s]])),o=!r||r.length===0;return this.insertNodeSource=void 0,this.insertConflictConfig=null,this.onDuplicateNode=null,this.insertNode=new re(this.fromNode,[this.interpreterUtils.stripComputedFromData(n)],r,o),new $e(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:s,values:a}=this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert",this.dbType),l=Object.fromEntries(s.map((h,f)=>[h,a[f]])),u=this.insertConflictConfig;if(this.insertNode=new re(this.fromNode,[l],u?void 0:r,u?true:o),u&&this.dbType==="mssql"){let h=await this.executeMssqlMergeRaw([l],u.conflictColumns,u.columnsToUpdate,{updateOnConflict:u.mode==="update",returning:r},[e]);return o?void 0:h[0]}let{sql:d,bindings:c}=this.astParser.parse(this.extractWriteNodes()),m=await this.getSqlDataSource("write"),p=await G(d,c,m,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:u?"raw":"insertOne",models:[e]}});if(!o)return Array.isArray(p)&&p.length?p[0]:p},this.buildInsertConflictCommit(r),this.interpreterUtils.filterComputedColumns(Object.keys(e)),"QueryBuilder::insert")}insertMany(e,r){this.assertWriteClausesSupported("QueryBuilder::insertMany");let n=e.map(s=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(s).map(a=>[a,s[a]])))),o=!r||r.length===0;return this.insertNodeSource=void 0,this.insertConflictConfig=null,this.onDuplicateNode=null,this.insertNode=new re(this.fromNode,n,r,o),new $e(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{if(!e.length)return o?void 0:[];let s=await Promise.all(e.map(async m=>{let{columns:p,values:h}=this.interpreterUtils.prepareColumns(Object.keys(m),Object.values(m),"insert",this.dbType);return Object.fromEntries(p.map((f,w)=>[f,h[w]]))})),a=this.insertConflictConfig;if(this.insertNode=new re(this.fromNode,s,a?void 0:r,a?true:o),a&&this.dbType==="mssql")return this.executeMssqlMergeRaw(s,a.conflictColumns,a.columnsToUpdate,{updateOnConflict:a.mode==="update",returning:r},e);let{sql:l,bindings:u}=this.astParser.parse(this.extractWriteNodes()),d=await this.getSqlDataSource("write"),c=await G(l,u,d,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:a?"raw":"insertMany",models:s}});if(!o)return c},this.buildInsertConflictCommit(r),e.length?this.interpreterUtils.filterComputedColumns(Object.keys(e[0])):[],"QueryBuilder::insertMany")}upsert(e,r,n={updateOnConflict:true}){return this.buildRawUpsert([{...r,...e}],Object.keys(r),this.interpreterUtils.filterComputedColumns(Object.keys(e)),n)}upsertMany(e,r,n,o={updateOnConflict:true}){return this.buildRawUpsert(n,e,this.interpreterUtils.filterComputedColumns(r),o)}buildRawUpsert(e,r,n,o){let s=o.returning?.length?[...o.returning]:void 0,a=s?this.insertMany(e,s):this.insertMany(e),l=o.updateOnConflict??true?a.onConflict(r).merge(n):a.onConflict(r).ignore();return new ie(()=>l.unWrap(),()=>l.toSql(),()=>l.toQuery(),async()=>{let u=await l;return Array.isArray(u)?u:[u]})}buildInsertConflictCommit(e){return r=>{this.insertConflictConfig=r;let n=r.conflictColumns.length===0;if(n&&this.dbType==="mssql")throw new T("QueryBuilder::onConflict","NOT_SUPPORTED_IN_MSSQL",new Error("MSSQL cannot express a target-less ON CONFLICT; provide the conflict columns"));let o=n&&(this.dbType==="mysql"||this.dbType==="mariadb");this.insertNode=new re(this.fromNode,this.insertNode?.records??[],void 0,true,false,{source:this.insertNode?.source,targetColumns:this.insertNode?.targetColumns}),this.onDuplicateNode=this.dbType==="mssql"||o?null:new Ee(this.model.table,r.conflictColumns,r.columnsToUpdate,r.mode,e?.length?e:void 0);}}insertFrom(e,r){this.assertWriteClausesSupported("QueryBuilder::insertFrom");let n=Array.isArray(e),o=n?e:void 0,s=n?r:e,a=typeof s=="function"?s(new i(this.model,this.sqlDataSource)):s,l=a!=null&&"extractQueryNodes"in a?a:s;return this.buildInsertFrom(l.extractQueryNodes(),o)}buildInsertFrom(e,r){return this.insertNodeSource=e,this.insertConflictConfig=null,this.onDuplicateNode=null,this.insertNode=new re(this.fromNode,[],void 0,true,false,{source:e,targetColumns:r}),new $e(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:n,bindings:o}=this.astParser.parse(this.extractWriteNodes()),s=await this.getSqlDataSource("write"),a=await G(n,o,s,this.dbType,"rows",{timeout:this.queryTimeout});return Array.isArray(a)?a:[a]},this.buildInsertConflictCommit(),r?this.interpreterUtils.filterComputedColumns(r):[],"QueryBuilder::insertFrom")}async executeMssqlMergeRaw(e,r,n,o,s){if(!e.length)return [];let a=Object.keys(e[0]),l=this.interpreterUtils.formatStringColumn("mssql",this.model.table),u=Q=>this.interpreterUtils.formatStringColumn("mssql",Q),d=[],c=e.map(Q=>`select ${a.map(P=>(d.push(Q[P]),`@${d.length}`)).join(", ")}`),m=a.map(u).join(", "),p=c.join(" union all "),h=r.map(Q=>`target.${u(Q)} = source.${u(Q)}`).join(" and "),f=n.filter(Q=>!r.includes(Q)).map(Q=>`target.${u(Q)} = source.${u(Q)}`).join(", "),w=a.map(u).join(", "),S=a.map(Q=>`source.${u(Q)}`).join(", "),q=o.returning&&o.returning.length?o.returning.map(Q=>`inserted.${u(Q)}`).join(", "):a.map(Q=>`inserted.${u(Q)}`).join(", "),R=(o.updateOnConflict??true)&&f?`when matched then update set ${f}`:"",$=`merge into ${l} as target using (${p}) as source (${m}) on ${h} ${R} when not matched then insert (${w}) values (${S}) output ${q};`,A=await this.getSqlDataSource("write"),D=await G($,d,A,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(D)?D:[D]}update(e,r){this.assertWriteClausesSupported("QueryBuilder::update",this.dbType==="mysql"||this.dbType==="mariadb",false);let n=this.interpreterUtils.stripComputedFromData(e),o=Object.keys(n),s=Object.values(n);if(!o.length)throw new T("QueryBuilder::update","UPDATE_REQUIRES_COLUMNS");this.updateNode=new Be(this.fromNode,o,s),this.returningNode=this.buildReturningNode("update",r);let a=this.returningNode!==null;return new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:u}=this.interpreterUtils.prepareColumns(o,s,"update",this.dbType);this.updateNode=new Be(this.fromNode,l,u);let{sql:d,bindings:c}=this.astParser.parse(this.extractWriteNodes()),m=await this.getSqlDataSource("write");return G(d,c,m,this.dbType,a?"rows":"affectedRows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:a?"fetch":"affectedRows"}})})}buildReturningNode(e,r){return !r?.length||!this.interpreterUtils.dialectEmitsReturning(this.dbType)?null:new Mt(r,e==="delete"?"deleted":"inserted")}withReturningNode(e){if(!this.returningNode)return e;if(this.dbType==="mssql"){let[r,...n]=e;return [r,this.returningNode,...n]}return [...e,this.returningNode]}truncate(e={}){if(this.assertWriteClausesSupported("QueryBuilder::truncate"),this.withNodes.length)throw new T("QueryBuilder::truncate","CTE_NOT_SUPPORTED_ON_TRUNCATE");return this.truncateNode=new Nt(this.fromNode,false,e),new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:r,bindings:n}=this.astParser.parse(this.extractWriteNodes()),o=await this.getSqlDataSource("write");await G(r,n,o,this.dbType,"rows",{timeout:this.queryTimeout});})}delete(e){this.assertWriteClausesSupported("QueryBuilder::delete",this.dbType==="mysql"||this.dbType==="mariadb",false),this.deleteNode=new _t(this.fromNode),this.returningNode=this.buildReturningNode("delete",e);let r=this.returningNode!==null;return new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:n,bindings:o}=this.astParser.parse(this.extractWriteNodes()),s=await this.getSqlDataSource("write");return G(n,o,s,this.dbType,r?"rows":"affectedRows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:r?"fetch":"affectedRows"}})})}softDelete(e={}){this.assertWriteClausesSupported("QueryBuilder::softDelete",this.dbType==="mysql"||this.dbType==="mariadb",false);let{column:r="deletedAt",value:n=gt()}=e||{};return this.updateNode=new Be(this.fromNode,[r],[n]),new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:o,values:s}=this.interpreterUtils.prepareColumns([r],[n],"update",this.dbType);this.updateNode=new Be(this.fromNode,o,s);let{sql:a,bindings:l}=this.astParser.parse(this.extractWriteNodes()),u=await this.getSqlDataSource("write");return G(a,l,u,this.dbType,"affectedRows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return It(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),n=vt(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${n}`:n,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new J("*")]);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=W(this.modelSelectedColumns),e.distinctNode=W(this.distinctNode),e.distinctOnNode=W(this.distinctOnNode),e.selectNodes=W(this.selectNodes),e.withQuery=W(this.withQuery),e.joinNodes=W(this.joinNodes),e.whereNodes=W(this.whereNodes),e.groupByNodes=W(this.groupByNodes),e.havingNodes=W(this.havingNodes),e.orderByNodes=W(this.orderByNodes),e.lockQueryNodes=W(this.lockQueryNodes),e.unionNodes=W(this.unionNodes),e.withNodes=W(this.withNodes),e.comments=[...this.comments],e.hints=[...this.hints],e.schemaName=this.schemaName,e.fromNode=W(this.fromNode),e.limitNode=W(this.limitNode),e.offsetNode=W(this.offsetNode),e.returningNode=W(this.returningNode),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}assertWriteClausesSupported(e,r=false,n=true){if(!n&&this.withNodes.length&&this.dbType==="mariadb")throw new T(e,"CTE_NOT_SUPPORTED_ON_WRITE",new Error("MariaDB does not support a CTE on UPDATE or DELETE"));if(this.selectNodes.length>0||!!this.distinctNode||!!this.distinctOnNode||this.groupByNodes.length>0||this.havingNodes.length>0||this.unionNodes.length>0||this.lockQueryNodes.length>0||this.comments.length>0||this.hints.length>0)throw new T(e,"SELECT_ONLY_CLAUSE_ON_WRITE");if(this.joinNodes.length>0)throw new T(e,"JOIN_NOT_SUPPORTED_ON_WRITE");let s=this.orderByNodes.length>0||this.limitNode!==null;if(this.offsetNode||!r&&s)throw new T(e,"ORDER_BY_LIMIT_NOT_SUPPORTED_ON_WRITE")}extractWriteNodes(){if(this.insertNode){let e=this.dbType==="mysql"||this.dbType==="mariadb";this.insertNode.withNodes=e&&this.withNodes.length?this.withNodes:void 0,this.insertNode.source=this.insertNodeSource;let r=(this.dbType==="mysql"||this.dbType==="mariadb")&&!!this.insertConflictConfig&&this.insertConflictConfig.conflictColumns.length===0&&this.insertConflictConfig.mode==="ignore";return this.insertNode.ignoreInto=r,this.insertNode.keyword=r?"insert ignore into":"insert into",this.insertNode.disambiguateSource=this.dbType==="sqlite"&&!!this.insertNodeSource&&!!this.onDuplicateNode,[...e?[]:this.withNodes,this.insertNode,this.onDuplicateNode].filter(Boolean)}return this.updateNode?[...this.withNodes,...this.withReturningNode([this.updateNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode].filter(Boolean))]:this.deleteNode?[...this.withNodes,...this.withReturningNode([this.deleteNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode].filter(Boolean))]:this.truncateNode?[this.truncateNode]:[]}extractQueryNodes(){if(this.schemaName){this.fromNode&&typeof this.fromNode.table=="string"&&(this.fromNode.schema=this.schemaName);for(let n of this.joinNodes)n.schema=this.schemaName;}if(this.insertNode||this.updateNode||this.deleteNode||this.truncateNode)return this.extractWriteNodes();this.selectNodes.length||(this.selectNodes=[new J("*")]);let e=this.comments.map(n=>new Wt(n)),r=this.hints.length?[new Wt(this.hints.join(" "),true)]:[];return [...this.withNodes,...e,this.distinctNode,this.distinctOnNode,...this.selectNodes,...r,this.fromNode,...this.joinNodes,...this.whereNodes,...this.groupByNodes,...this.havingNodes,...this.orderByNodes,this.limitNode,this.offsetNode,...this.lockQueryNodes,...this.unionNodes].filter(Boolean)}clearForFunctions(){return this.clearSelect(),this.clearGroupBy(),this.clearOrderBy(),this.clearLimit(),this.clearOffset(),this}isMssqlTransaction(){return this.sqlDataSource.type==="mssql"&&!!this.sqlDataSource.sqlConnection}async executePaginateQueries(e,r){if(this.isMssqlTransaction()){let n=await e(),o=await r();return [n,o]}return Promise.all([e(),r()])}async getSqlDataSource(e){return this.replicationMode?this.replicationMode==="master"?this.sqlDataSource:e==="write"?this.sqlDataSource:this.sqlDataSource.getSlave()||this.sqlDataSource:e==="read"?this.sqlDataSource.getSlave()||this.sqlDataSource:this.sqlDataSource}async execSqlWithSlaveHandling(e,r){let n=await this.getSqlDataSource(e);if(!(n!==this.sqlDataSource))return r(n);try{return await r(n)}catch(s){let a=s instanceof Error?s:new Error(String(s)),l=this.sqlDataSource.getOnSlaveServerFailure();if(l)return await l(a,{host:n.host,port:n.port,username:n.username,password:n.password,database:n.database,type:n.getDbType()}),await r(this.sqlDataSource);throw a}}};function Xf(i,t){return t.strategy&&t.strategy!=="auto"?t.strategy:yg(i)}function yg(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 Gl=oe(),st=class i extends B{constructor(e,r){super(e,r);this.loadOptions={strategy:"auto"};this.sqlModelManagerUtils=new Vt(e,this.dbType,r),this.relationQueryBuilders=[],this.modelSelectedColumns=[],this.modelColumnsMap=this.model.getColumnsByDatabaseName(),this.modelColumnsDatabaseNames=new Map;for(let[n,o]of this.modelColumnsMap)this.modelColumnsDatabaseNames.set(n,o.columnName);}expandModelSelectColumns(){let e=this.selectNodes;if(!e.length){if(this.joinNodes.length)return;for(let[,r]of this.modelColumnsMap)r.expression||e.push(new J(r.databaseName,r.columnName));return}for(let r of e){if(r.isRawValue||r.alias!==void 0||typeof r.column!="string"||r.column.includes(".")||r.column==="*")continue;let n=this.modelColumnsMap.get(r.column);!n||n.expression||(r.alias=n.columnName);}}get isRelationQueryBuilder(){return !!this.relation}static from(e,r={}){if(r.connection)return new 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(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async oneOrFail(e){let r=await this.one();if(!r)throw new T(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return r}async many(){await this.model.beforeFetch?.(this);let e=this.collectUserOutputNames();this.expandModelSelectColumns();let n=await super.many();if(!n.length)return [];let o=he(n,this.model,this.modelSelectedColumns,e);if(!o)return [];let s=Array.isArray(o)?o:[o];return 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){let r=0;for(;;){let n=await this.limit(e).offset(r).many();if(!n.length)break;yield n,r+=n.length;}}async stream(e={}){await this.model.beforeFetch?.(this);let r=this.collectUserOutputNames();this.expandModelSelectColumns();let{sql:n,bindings:o}=this.unWrap(),s=await this.getSqlDataSource("read");return await sn(n,o,s,e,{onData:async(l,u)=>{let d=he([u],this.model,this.modelSelectedColumns,r);d&&(this.relationQueryBuilders.length&&await this.processRelationsRecursively([d]),l.write(d));}})}async paginateWithCursor(e,r){return super.paginateWithCursor(e,r)}insert(e,r={}){return this.assertWriteClausesSupported("ModelQueryBuilder::insert"),this.getModelManager(r.trx).insert(e,{returning:r.returning,withNodes:this.withNodes.length?this.withNodes:void 0})}insertMany(e,r={}){return this.assertWriteClausesSupported("ModelQueryBuilder::insertMany"),this.getModelManager(r.trx).insertMany(e,{returning:r.returning,withNodes:this.withNodes.length?this.withNodes:void 0})}insertFrom(e,r){this.assertWriteClausesSupported("ModelQueryBuilder::insertFrom");let n=Array.isArray(e),o=n?e:void 0,s=n?r:e,a=typeof s=="function"?s(new i(this.model,this.sqlDataSource)):s,l=a!=null&&"extractQueryNodes"in a?a:s;return this.buildInsertFrom(l.extractQueryNodes(),o)}upsert(e,r,n={updateOnConflict:true}){this.assertWriteClausesSupported("ModelQueryBuilder::upsert");let o=this.getModelManager(n.trx),s=Object.keys(e),a=Object.keys(r),l={...e,...r};return o.upsertMany(s,a,[l],{updateOnConflict:n.updateOnConflict??true,returning:n.returning}).then(u=>Array.isArray(u)?u[0]:u)}upsertMany(e,r,n={updateOnConflict:true}){this.assertWriteClausesSupported("ModelQueryBuilder::upsertMany");let o=this.getModelManager(n.trx),s=r.length>0?Object.keys(r[0]):[];return o.upsertMany(e,s,r,{updateOnConflict:n.updateOnConflict??true,returning:n.returning})}getModelManager(e){let r=e?e.sql:this.sqlDataSource.getTransactionBoundSqlDataSource()??this.sqlDataSource;return new it(this.model,r)}async find(e){return this.getModelManager().find(e)}async findOne(e){return this.getModelManager().findOne(e)}async findOneOrFail(e){return this.getModelManager().findOneOrFail(e)}async findOneByPrimaryKey(e,r){return this.getModelManager().findOneByPrimaryKey(e,r)}async updateRecord(e,r,n){return this.getModelManager(n?.trx).updateRecord(e,r,n)}async deleteRecord(e,r){return this.getModelManager(r?.trx).deleteRecord(e)}async save(e,r){let n=this.model.primaryKey;if(!n)throw new T(this.model.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");let o=e[n],s=o?{[n]:o}:{};return this.upsert(s,e,{updateOnConflict:true,returning:r?.returning,trx:r?.trx})}async softDeleteRecord(e,r,n){let{column:o=this.model.softDeleteColumn,value:s=this.model.softDeleteValue}=r||{},a={[o]:s};return this.getModelManager(n?.trx).updateRecord(e,a,{returning:n?.returning})}async firstOrInsert(e,r,n){let o=this.getModelManager(n?.trx),s=await o.findOne({where:e});if(s)return s;let a={...e,...r};return o.insert(a,{returning:["*"]})}async refresh(e){return this.getModelManager().findOneByPrimaryKey(e)}async sync(e,r,n,o,s={}){if(Array.isArray(n)||(n=[n]),!n.length)return;let a=this.sqlModelManagerUtils.getRelationFromModel(e);if(a.type!=="manyToMany")throw new T(`${this.model.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let l=H(a.leftForeignKey,s.caseConvention||this.model.databaseCaseConvention),u=H(a.rightForeignKey,s.caseConvention||this.model.databaseCaseConvention),d=n.map((p,h)=>({[l]:r[this.model.primaryKey],[u]:p[a.model.primaryKey],...o?o(p,h):{}}));class c extends De{static get table(){return a.throughModel}}c.databaseCaseConvention="preserve",c.modelCaseConvention="preserve",await new it(c,s.trx?s.trx.sql:this.sqlDataSource).insertMany(d);}truncate(e={}){return super.truncate(e)}update(e,r={}){let n=r.returning,o=super.update(e,n);return new ie(()=>o.unWrap(),()=>o.toSql(),()=>o.toQuery(),async()=>{if(!n||!this.returningNode)return o;let s=await o;return he(s,this.model,n)})}softDelete(e={}){let r=super.softDelete(e);return new ie(()=>r.unWrap(),()=>r.toSql(),()=>r.toQuery(),async()=>r)}delete(e={}){let r=e.returning,n=super.delete(r);return new ie(()=>n.unWrap(),()=>n.toSql(),()=>n.toQuery(),async()=>{if(!r||!this.returningNode)return n;let o=await n;return he(o,this.model,r)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?+r.total:0}async getMax(e){this.clearForFunctions(),this.selectFunc("max",e,"total");let r=await this.one();return r?+r.total:0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?+r.total:0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?+r.total:0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?+r.total:0}async paginate(e,r){let n=this.clone(),o=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>o.many(),()=>n.getCount("*"));return {paginationMetadata:an(e,r,a),data:s}}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof B)&&typeof e[1]=="string"){let[r,n]=e;return super.select(r,n),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}countDistinct(e,r){return super.countDistinct(e,r),this}sumDistinct(e,r){return super.sumDistinct(e,r),this}avgDistinct(e,r){return super.avgDistinct(e,r),this}rank(e,r){return super.rank(e,r),this}denseRank(e,r){return super.denseRank(e,r),this}rowNumber(e,r){return super.rowNumber(e,r),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}load(e,r,n){let o,s={strategy:"auto"};typeof r=="function"?(o=r,n&&(s=n)):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,o?.(l),this.relationQueryBuilders.push(l),this}clearRelations(){return this.relationQueryBuilders=[],this}havingRelated(e,r,n){return this.andHavingRelated(e,r,n)}andHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.whereExists(d),this}orHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.orWhereExists(d),this}notHavingRelated(e,r,n){return this.andNotHavingRelated(e,r,n)}andNotHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.whereNotExists(d),this}orNotHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.orWhereNotExists(d),this}clone(){let e=super.clone();return e.relationQueryBuilders=W(this.relationQueryBuilders),e}async processRelationsRecursively(e){await Promise.all(this.relationQueryBuilders.filter(r=>r.isRelationQueryBuilder).map(async r=>{let n=await this.getRelatedModelsForRelation(r,r.relation,e);this.mapRelatedModelsToModels(r.relation,e,n);}));}async processRelationsWithStrategy(e){let r=e.length,n=this.relationQueryBuilders.filter(s=>s.isRelationQueryBuilder),o=async s=>{let a=Xf({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 n)await o(s);return}await Promise.all(n.map(o));}async loadRelationViaJoin(e,r){let n=e.relation,o=e.loadOptions.joinSeparator||"__",a=await this.buildJoinQuery(e,n,o).many();this.mapJoinedResultsToModels(a,r,n,o);}buildJoinQuery(e,r,n){let o=new i(this.model,this.sqlDataSource);if(this.modelSelectedColumns.length>0)for(let s of this.selectNodes)o.selectNodes.push(W(s));else for(let[s,a]of this.model.getColumnsByDatabaseName())a.expression||o.selectNodes.push(new J(`${this.model.table}.${s}`,void 0,void 0,true));for(let s of this.whereNodes){let a=W(s);this.qualifyWhereNodeColumns(a,this.model.table),o.whereNodes.push(a);}for(let s of this.groupByNodes)o.groupByNodes.push(W(s));for(let s of this.orderByNodes)o.orderByNodes.push(W(s));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(o.limitNode=W(this.limitNode)),this.offsetNode&&(o.offsetNode=W(this.offsetNode))),r.type){case "hasOne":case "hasMany":o.leftJoin(r.model.table,`${this.model.table}.${this.model.primaryKey}`,`${r.model.table}.${r.foreignKey}`);break;case "belongsTo":o.leftJoin(r.model.table,`${this.model.table}.${r.foreignKey}`,`${r.model.table}.${r.model.primaryKey}`);break;case "manyToMany":{let s=r;o.leftJoin(s.throughModel,`${this.model.table}.${this.model.primaryKey}`,`${s.throughModel}.${s.leftForeignKey}`),o.leftJoin(s.model.table,`${s.throughModel}.${s.rightForeignKey}`,`${s.model.table}.${s.model.primaryKey}`);break}}this.selectRelationColumnsWithAlias(o,r,e,n);for(let s of e.whereNodes)o.whereNodes.push(W(s));for(let s of e.orderByNodes)o.orderByNodes.push(W(s));return o}selectRelationColumnsWithAlias(e,r,n,o){let s=r.columnName,a=r.model,l=a.getColumnsByName(),u=a.getColumnsByDatabaseName(),d=n.selectNodes.filter(m=>typeof m.column=="string"),c=d.some(m=>m.column==="*"||m.column.endsWith(".*"));if(d.length===0||c)for(let[m,p]of u)e.selectRaw(`${a.table}.${m} as ${s}${o}${p.columnName}`);else for(let m of d){let p=m.column,h=p.includes(".")?p.split(".").pop():p,f=u.get(h)||l.get(h),w=f?.databaseName??h,S=m.alias??f?.columnName??h;e.selectRaw(`${a.table}.${w} as ${s}${o}${S}`);}}mapJoinedResultsToModels(e,r,n,o){let{columnName:s,type:a}=n,l=n.model.getColumnsByName();if(a==="hasMany"||a==="manyToMany"){let u=new Map;e.forEach(d=>{let c=d[this.model.primaryKey];u.has(c)||u.set(c,[]);let m=this.extractRelationDataFromRow(d,s,o);m&&(this.serializeRelationData(m,l),u.get(c).push(m));}),r.forEach(d=>{let c=d[this.model.primaryKey];d[s]=u.get(c)||[];});}else {let u=new Map;e.forEach(d=>{let c=d[this.model.primaryKey];if(!u.has(c)){let m=this.extractRelationDataFromRow(d,s,o);m&&(this.serializeRelationData(m,l),u.set(c,m));}}),r.forEach(d=>{let c=d[this.model.primaryKey];d[s]=u.get(c)||null;});}}extractRelationDataFromRow(e,r,n){let o=`${r}${n}`,s={},a=false,l=false;for(let u of Object.keys(e))if(u.startsWith(o)){let d=u.substring(o.length);s[d]=e[u],a=true,e[u]!==null&&e[u]!==void 0&&(l=true);}return a&&l?s:null}qualifyWhereNodeColumns(e,r){if(e instanceof x)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof Ce)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof Ae)for(let n of e.nodes)this.qualifyWhereNodeColumns(n,r);}serializeRelationData(e,r){for(let n of Object.keys(e)){let o=r.get(n);o?.serialize&&e[n]!==null&&e[n]!==void 0&&(e[n]=o.serialize(e[n]));}}async loadRelationViaBatch(e,r){let n=await this.getRelatedModelsForRelation(e,e.relation,r);this.mapRelatedModelsToModels(e.relation,r,n);}mapRelatedModelsToModels(e,r,n){switch(e.type){case "hasOne":if(!this.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let o=new Map;n.forEach(m=>{let p=m[e.foreignKey];p&&o.set(String(p),m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=null;return}let h=o.get(String(p));m[e.columnName]=h||null;});break;case "belongsTo":let s=new Map;n.forEach(m=>{if(!e.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let p=m[e.model.primaryKey];p&&s.set(String(p),m);}),r.forEach(m=>{let p=m[e.foreignKey];if(!p){m[e.columnName]=null;return}let h=s.get(String(p));m[e.columnName]=h||null;});break;case "hasMany":if(!this.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;n.forEach(m=>{let p=m[e.foreignKey];if(!p)return;let h=String(p);a.has(h)||a.set(h,[]),a.get(h).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let h=a.get(String(p))||[];m[e.columnName]=h;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::manyToMany","MODEL_HAS_NO_PRIMARY_KEY");let l=e,u=new Map,d=l.leftForeignKey,c=this.modelColumnsMap.get(d)||this.modelColumnsDatabaseNames.get(d)||H(d,this.model.modelCaseConvention);n.forEach(m=>{let p=m[c];if(p==null)return;let h=String(p);u.has(h)||u.set(h,[]),delete m[c],u.get(h).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let h=u.get(String(p))||[];m[e.columnName]=h;});break;default:throw new T(this.model.name+"::mapRelatedModelsToModels","UNSUPPORTED_RELATION_TYPE")}}async getRelatedModelsForRelation(e,r,n){return this.getRelatedModelsQueryForRelation(e,r,n).many()}getRelatedModelsQueryForRelation(e,r,n){let o=this.getFilterValuesFromModelsForRelation(r,n);switch(r.type){case "belongsTo":case "hasOne":return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,o);case "hasMany":let s=e.limitNode?.limit,a=e.offsetNode?.offset;if(!s&&!a)return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,o);let l=Le(Gl.crypto.randomBytes(6)),u=`${r.model.table}_cte_${l}`,d=e.orderByNodes.map(D=>D.isRawValue?D.column:`${this.interpreterUtils.formatStringColumn(this.dbType,D.column)} ${D.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let c=e.with(u,D=>D.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${d}) as rn_${l}`).whereIn(r.foreignKey,o));s&&c.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&c.whereRaw(`rn_${l} > ${a}`);let m=e.modelSelectedColumns.map(D=>yo(D,u,e.model.table));return c.select(...m).table(u);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new T(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!n.length)return e;let h=e.limitNode?.limit,f=e.offsetNode?.offset,w=e.modelSelectedColumns.length?e.modelSelectedColumns.map(D=>D.includes(".")?D:`${r.model.table}.${D}`):[`${r.model.table}.*`];if(!h&&!f)return e.select(...w).select([`${p.throughModel}.${p.leftForeignKey}`,p.leftForeignKey]).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o);let S=Le(Gl.crypto.randomBytes(6)),q=`${r.model.table}_cte_${S}`,M=e.orderByNodes.map(D=>{if(D.isRawValue)return D.column;let Q=D.column.includes(".")?D.column:`${r.model.table}.${D.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,Q)} ${D.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let R=`${Le(Gl.crypto.randomBytes(6))}_left_foreign_key`,$=e.with(q,D=>D.select(...w).select([`${p.throughModel}.${p.leftForeignKey}`,R]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${M}) as rn_${S}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o));h&&$.whereRaw(`rn_${S} <= ${h+(f||0)}`),f&&$.whereRaw(`rn_${S} > ${f}`);let A=w.map(D=>yo(D,q,e.model.table));return $.select(...A).select([`${q}.${R}`,p.leftForeignKey]).table(q);default:throw new T(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new T(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);case "belongsTo":return r.map(n=>n[e.foreignKey]);case "manyToMany":if(!this.model.primaryKey)throw new T(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);default:throw new T(this.model.name+"::getFilterValuesFromModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}applyHavingRelatedFilter(e,r,n,o){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 T(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");let u=s.formatStringColumn(l,`${r.model.table}.${r.foreignKey}`),d=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${u} = ${d}`),n&&typeof o=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${n} ${o}`);return}case "belongsTo":{if(!r.model.primaryKey||!r.foreignKey)throw new T(this.model.name+"::applyHavingRelatedFilter",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${r.model.name}`);let u=s.formatStringColumn(l,`${r.model.table}.${r.model.primaryKey}`),d=a.formatStringColumn(l,`${this.model.table}.${r.foreignKey}`);e.whereRaw(`${u} = ${d}`),n&&typeof o=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${n} ${o}`);return}case "manyToMany":{let u=r;if(!this.model.primaryKey||!r.model.primaryKey)throw new T(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");e.joinNodes?.some(p=>!p.isRawValue&&p.table===u.throughModel&&p.type==="left")||e.leftJoin(u.throughModel,`${u.relatedModel}.${r.model.primaryKey}`,`${u.throughModel}.${u.rightForeignKey}`);let c=a.formatStringColumn(l,`${u.throughModel}.${u.leftForeignKey}`),m=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${c} = ${m}`),n&&typeof o=="number"&&e.groupByRaw(c).andHavingRaw(`count(*) ${n} ${o}`);return}default:throw new T(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}};function ey(){return {}}var it=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=ey(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new b(this.model,this.sqlType),this.interpreterUtils=new y(this.model);}setReplicationMode(t){return this.replicationMode=t,this}async find(t){if(!t)return this.query().many();let e=this.query();return t.select&&e.select(...t.select),t.relations&&t.relations.forEach(r=>{e.load(r);}),t.where&&this.handleWhereCondition(e,t.where),t.orderBy&&Object.entries(t.orderBy).forEach(([r,n])=>{e.orderBy(r,n);}),t.limit&&e.limit(t.limit),t.offset&&e.offset(t.offset),t.groupBy&&e.groupBy(...t.groupBy),e.many()}async findOne(t){let e=await this.find({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,offset:t.offset,limit:1});return e.length?e[0]:null}async findOneOrFail(t){let e=await this.findOne({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,offset:t.offset});if(e===null)throw t.customError?t.customError:new T(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new T(this.model.name+"::findOneByPrimaryKey","MODEL_HAS_NO_PRIMARY_KEY");return this.query().select(...e||[]).where(this.model.primaryKey,t).one()}withInsertNodes(t,e,r){let n=this.sqlType==="mysql"||this.sqlType==="mariadb";return t.withNodes=n&&r?.length?r:void 0,[...n?[]:r??[],t,e].filter(Boolean)}insert(t,e={}){let r=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(t).map(c=>[c,t[c]]))),n=!e.returning||e.returning.length===0,o=new re(new V(this.model.table),[r],e.returning,n,false),s=null,a=null,l=()=>{let c=this.astParser.parse(this.withInsertNodes(o,s,e.withNodes));return {sql:c.sql,bindings:c.bindings}},u=()=>{let c=this.astParser.parse(this.withInsertNodes(o,s,e.withNodes));return {sql:vt(this.sqlDataSource,c.sql),bindings:c.bindings}},d=()=>{let{sql:c,bindings:m}=u();return It(c,m)};return new $e(l,u,d,async()=>{try{await this.model.validate?.(t);}catch(R){throw R}let{columns:c,values:m}=this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert",this.sqlType),p={};if(c.forEach((R,$)=>{let A=m[$];p[R]=A,t[R]??(t[R]=A);}),a)return (await this.executeInsertConflict([p],[t],a,e.returning,e.withNodes))[0];let h=!e.returning||e.returning.length===0,{sql:f,bindings:w}=this.astParser.parse(this.withInsertNodes(new re(new V(this.model.table),[p],e.returning,h,false),null,e.withNodes)),S=await G(f,w,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(h)return;if(this.sqlType==="mysql")return this.handleMysqlInsert(S,[t],"one",e.returning);let q=S[0];return q?he([q],this.model,e.returning):t},c=>{if(a=c,c.conflictColumns.length===0&&this.sqlType==="mssql")throw new T("ModelManager::onConflict","NOT_SUPPORTED_IN_MSSQL",new Error("MSSQL cannot express a target-less ON CONFLICT; provide the conflict columns"));o=new re(new V(this.model.table),o.records,void 0,true,false),s=this.sqlType==="mssql"?null:new Ee(this.model.table,c.conflictColumns,c.columnsToUpdate,c.mode,e.returning);},this.interpreterUtils.filterComputedColumns(Object.keys(t)),"ModelManager::insert")}insertMany(t,e={}){return this.insertManyInternal(t,e,true)}insertManyInternal(t,e,r){let n=t.map(m=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(m).map(p=>[p,m[p]])))),o=!e.returning||e.returning.length===0,s=new re(new V(this.model.table),n,e.returning,o,false),a=null,l=null,u=()=>{let m=this.astParser.parse(this.withInsertNodes(s,a,e.withNodes));return {sql:m.sql,bindings:m.bindings}},d=()=>{let m=this.astParser.parse(this.withInsertNodes(s,a,e.withNodes));return {sql:vt(this.sqlDataSource,m.sql),bindings:m.bindings}},c=()=>{let{sql:m,bindings:p}=d();return It(m,p)};return new $e(u,d,c,async()=>{if(r)try{await this.model.validate?.(t);}catch(M){throw M}let m=t.map(M=>{let{columns:R,values:$}=this.interpreterUtils.prepareColumns(Object.keys(M),Object.values(M),"insert",this.sqlType),A={};return R.forEach((D,Q)=>{let pe=$[Q];A[D]=pe,M[D]??(M[D]=pe);}),A});if(l)return this.executeInsertConflict(m,t,l,e.returning,e.withNodes);let p=!e.returning||e.returning.length===0,{sql:h,bindings:f}=this.astParser.parse(this.withInsertNodes(new re(new V(this.model.table),m,e.returning,p,false),null,e.withNodes)),w=await G(h,f,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(p)return [];if(this.sqlType==="mysql")return await this.handleMysqlInsert(w,t,"many",e.returning)||[];let S=w;return S.length?he(S,this.model,e.returning)||[]:[]},m=>{if(l=m,m.conflictColumns.length===0&&this.sqlType==="mssql")throw new T("ModelManager::onConflict","NOT_SUPPORTED_IN_MSSQL",new Error("MSSQL cannot express a target-less ON CONFLICT; provide the conflict columns"));s=new re(new V(this.model.table),s.records,void 0,true,false),a=this.sqlType==="mssql"?null:new Ee(this.model.table,m.conflictColumns,m.columnsToUpdate,m.mode,e.returning);},t.length?this.interpreterUtils.filterComputedColumns(Object.keys(t[0])):[],"ModelManager::insertMany")}upsertMany(t,e,r,n={updateOnConflict:true}){let o=this.insertManyInternal(r,n,false).onConflict(t);return n.updateOnConflict??true?o.merge(this.interpreterUtils.filterComputedColumns(e)):o.ignore()}async executeInsertConflict(t,e,r,n,o){let s=r.mode==="update";if(this.sqlType==="mssql")return this.executeMssqlMerge(t,r.conflictColumns,r.columnsToUpdate,{updateOnConflict:s,returning:n},e);let a=!n||n.length===0,l=!a&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?n:void 0,{sql:u,bindings:d}=this.astParser.parse(this.withInsertNodes(new re(new V(this.model.table),t,void 0,true,false),new Ee(this.model.table,r.conflictColumns,r.columnsToUpdate,r.mode,l),o)),c=await G(u,d,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:e}});if(a)return [];if(this.sqlType==="postgres"||this.sqlType==="cockroachdb"){if(c.length<e.length&&!s)return this.refetchByConflictColumn(r.conflictColumns[0],e,n);let p=he(c,this.model,n);return p?Array.isArray(p)?p:[p]:[]}return this.refetchByConflictColumn(r.conflictColumns[0],e,n)}async refetchByConflictColumn(t,e,r){if(!t)return [];let n=e.map(s=>s[t]);return await this.query().select(...r?.length?r:["*"]).whereIn(t,n).many()}async executeMssqlMerge(t,e,r,n,o){if(!t.length)return [];let s=Object.keys(t[0]),a=this.interpreterUtils.formatStringColumn("mssql",this.model.table),l=A=>this.interpreterUtils.formatStringColumn("mssql",A),u=[],d=t.map(A=>`select ${s.map(Q=>(u.push(A[Q]),`@${u.length}`)).join(", ")}`),c=s.map(l).join(", "),m=d.join(" union all "),p=e.map(A=>`target.${l(A)} = source.${l(A)}`).join(" and "),h=r.filter(A=>!e.includes(A)).map(A=>`target.${l(A)} = source.${l(A)}`).join(", "),f=s.map(l).join(", "),w=s.map(A=>`source.${l(A)}`).join(", "),S=n.returning&&n.returning.length?n.returning.map(A=>`inserted.${l(A)}${this.interpreterUtils.resolveColumnAlias("mssql",A)}`).join(", "):s.map(A=>`inserted.${l(A)}${this.interpreterUtils.resolveColumnAlias("mssql",A)}`).join(", "),M=(n.updateOnConflict??true)&&h?`when matched then update set ${h}`:"",R=`merge into ${a} as target using (${m}) as source (${c}) on ${p} ${M} when not matched then insert (${f}) values (${w}) output ${S};`,$=await G(R,u,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});if($.length===0&&!(n.updateOnConflict??true)){let A=e[0],D=o.map(pe=>pe[A]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(A,D).many()}return $}async updateRecord(t,e,r){let n=new Set(this.model.getColumns().map(S=>S.columnName)),o=Object.keys(e).filter(S=>n.has(S)),s=o.map(S=>e[S]),{columns:a,values:l}=this.interpreterUtils.prepareColumns(o,s,"update",this.sqlType),{primaryKey:u}=this.model;if(!u)throw new T(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let d=a.indexOf(u);d!==-1&&(a.splice(d,1),l.splice(d,1));let c=r?.returning??[],m=c.length>0&&!this.interpreterUtils.hasComputedColumn(c)&&this.interpreterUtils.shouldFetchNatively(this.sqlType,"update"),{sql:p,bindings:h}=this.astParser.parse([new Be(new V(this.model.table),a,l),new x(u,"and",false,"=",t),...m?[new Mt(c)]:[]]),f=await G(p,h,this.sqlDataSource,this.sqlType,m?"rows":"affectedRows",m?{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}:void 0);if(!c.length)return;if(m){if(!f.length)throw new T(this.model.name+"::updateRecord","ROW_NOT_FOUND");return he([f[0]],this.model,c)}let w=await this.findOneByPrimaryKey(t,r?.returning);if(!w)throw new T(this.model.name+"::updateRecord","ROW_NOT_FOUND");return w}async deleteRecord(t){if(!this.model.primaryKey)throw new T(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new x(this.model.primaryKey,"and",false,"=",t),{sql:r,bindings:n}=this.astParser.parse([new _t(new V(this.model.table)),e]);await G(r,n,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new st(this.model,this.sqlDataSource);return this.replicationMode&&t.setReplicationMode(this.replicationMode),t}async handleMysqlInsert(t,e,r,n){if(!this.model.primaryKey){if(r==="one"){let a=e.length?e[0]:null;return a?he([a],this.model):null}return he(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(d=>d[this.model.primaryKey]),l=a.map(d=>`'${d}'`).join(","),u=await this.query().select(...n??["*"]).whereIn(this.model.primaryKey,a).orderByRaw(`FIELD(${this.model.primaryKey}, ${l})`).many();return r==="one"?u.length?u[0]:null:u}let o=Array.from({length:t.affectedRows},(a,l)=>l+t.insertId),s=await this.query().select(...n||["*"]).whereIn(this.model.primaryKey,o).many();return r==="one"?s.length?s[0]:null:s}handleWhereCondition(t,e,r=false){if(e)for(let[n,o]of Object.entries(e))n==="$and"&&Array.isArray(o)?t[r?"orWhere":"where"](a=>{for(let l of o)this.handleWhereCondition(a,l,false);}):n==="$or"&&Array.isArray(o)?t[r?"orWhere":"where"](a=>{let l=true;for(let u of o)this.handleWhereCondition(a,u,!l),l=false;}):this.applyFieldCondition(t,n,o,r);}applyFieldCondition(t,e,r,n=false){if(r==null||typeof r!="object"){r===null?n?t.orWhereNull(e):t.whereNull(e):n?t.orWhere(e,"=",r):t.where(e,"=",r);return}let o=r,s=o.op,a=o.value;switch(s){case "$eq":a===null?n?t.orWhereNull(e):t.whereNull(e):n?t.orWhere(e,"=",a):t.where(e,"=",a);break;case "$ne":a===null?n?t.orWhereNotNull(e):t.whereNotNull(e):n?t.orWhere(e,"!=",a):t.where(e,"!=",a);break;case "$gt":n?t.orWhere(e,">",a):t.where(e,">",a);break;case "$gte":n?t.orWhere(e,">=",a):t.where(e,">=",a);break;case "$lt":n?t.orWhere(e,"<",a):t.where(e,"<",a);break;case "$lte":n?t.orWhere(e,"<=",a):t.where(e,"<=",a);break;case "$between":{let[l,u]=a;n?t.orWhereBetween(e,l,u):t.whereBetween(e,l,u);break}case "$not between":{let[l,u]=a;n?t.orWhereNotBetween(e,l,u):t.whereNotBetween(e,l,u);break}case "$regexp":n?t.orWhereRegexp(e,a):t.whereRegexp(e,a);break;case "$not regexp":n?t.orWhereNotRegexp(e,a):t.whereNotRegexp(e,a);break;case "$is null":n?t.orWhereNull(e):t.whereNull(e);break;case "$is not null":n?t.orWhereNotNull(e):t.whereNotNull(e);break;case "$like":n?t.orWhereLike(e,a):t.whereLike(e,a);break;case "$not like":n?t.orWhereNotLike(e,a):t.whereNotLike(e,a);break;case "$ilike":n?t.orWhereILike(e,a):t.whereILike(e,a);break;case "$not ilike":n?t.orWhereNotILike(e,a):t.whereNotILike(e,a);break;case "$in":n?t.orWhereIn(e,a):t.whereIn(e,a);break;case "$nin":n?t.orWhereNotIn(e,a):t.whereNotIn(e,a);break;default:n?t.orWhere(e,"=",r):t.where(e,"=",r);}}};var Yl=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??gt()});Ot();var be=class{constructor(t){this.options=t;}static async createDriver(t){throw new T("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};le();var zt=class zt extends be{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new zt(this.mongoClient);let e=await import('mongodb').catch(()=>{throw new L("mongodb")});if(this.mongoClient=e.default??e,!this.mongoClient)throw new L("mongodb");return new zt(this.mongoClient)}};zt.mongoClient=null;var bn=zt;le();var Gt=class Gt extends be{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new Gt(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new L("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new L("mssql");return new Gt(this.mssqlClient)}};Gt.mssqlClient=null;var Tn=Gt;le();var Yt=class Yt extends be{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new Yt(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new L("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new L("mysql2");return new Yt(this.mysqlClient)}};Yt.mysqlClient=null;var wn=Yt;le();var Zt=class Zt extends be{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new Zt(this.pgClient);let e=await import('pg').catch(()=>{throw new L("pg")});if("default"in e&&(e.default,this.pgClient=e.default??e),!this.pgClient)throw new L("pg");return new Zt(this.pgClient)}};Zt.pgClient=null;var Sn=Zt;le();var Xt=class Xt extends be{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new Xt(this.sqlite3Client);let e=await import('sqlite3').catch(()=>{throw new L("sqlite3")});if(this.sqlite3Client=e.default??e,!this.sqlite3Client)throw new L("sqlite3");return new Xt(this.sqlite3Client)}};Xt.sqlite3Client=null;var Nn=Xt;var ce=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await wn.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await Sn.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await Nn.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await bn.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await Tn.createDriver(),this.mssqlDriver;default:throw new T(`DriverFactory::getDriver Driver ${t} not supported`,"DRIVER_NOT_FOUND")}}static getExistingDriver(t){switch(t){case "mysql":case "mariadb":return this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver;case "sqlite":return this.sqliteDriver;case "mongo":return this.mongodbDriver;case "mssql":return this.mssqlDriver;default:return null}}};ce.mysqlDriver=null,ce.pgDriver=null,ce.sqliteDriver=null,ce.mssqlDriver=null,ce.mongodbDriver=null;Ot();le();var qn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;let n=e.coerceNumericTypes&&!e.driverOptions?.types?{getTypeParser:(o,s)=>{let a=!s||s==="text";return a&&o===20?l=>BigInt(l):a&&o===1700?l=>Number.parseFloat(l):r.types.getTypeParser(o,s)}}:void 0;this.pool=new r.Pool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions,...n?{types:n}:{}});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.connect()}releaseConnection(t){t?.release();}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION"),e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=0,o=t.replace(/\?/g,()=>`$${++n}`);if(!r.signal)return (r.connection??this.pool).query(o,e);let s=r.connection??await this.pool.connect(),a=!r.connection,l=()=>{let u=s.processID;u!=null&&this.pool.query("SELECT pg_cancel_backend($1)",[u]).catch(()=>{});};r.signal.addEventListener("abort",l,{once:true});try{return await s.query(o,e)}finally{r.signal.removeEventListener("abort",l),a&&s.release();}}extract(t,e){return e==="rows"?t.rows:e==="raw"?t:t.rowCount}async stream(t,e,r,n){let o=r.connection,s=!o,a=o??await this.pool.connect(),l=await import('pg-query-stream').catch(()=>{throw new L("pg-query-stream")}),u=new PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),d=0,c=t.replace(/\?/g,()=>`$${++d}`),m=new l.default(c,e,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),p=a.query(m),h=0,f=false,w=false,S=q=>{if(s)try{a.release(q);}catch{}};return p.on("data",q=>{if(n.onData){h++,Promise.resolve(n.onData(u,q)).then(()=>{h--,f&&h===0&&!w&&(S(),u.end());}).catch(M=>{w=true,S(M),u.destroy(M);});return}u.write(q);}),p.on("end",()=>{f=true,h===0&&!w&&(S(),u.end());}),p.on("error",q=>{w=true,S(q),u.destroy(q);}),u}};var Cn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=r.createPool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.getConnection()}releaseConnection(t){t?.release();}async beginTransaction(t,e){e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await t.beginTransaction();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){if(!r.signal)return (r.connection??this.pool).query(t,e);let n=r.connection??await this.pool.getConnection(),o=!r.connection,s=()=>{let a=n.threadId;a!=null&&this.pool.query(`KILL QUERY ${Number(a)}`).catch(()=>{});};r.signal.addEventListener("abort",s,{once:true});try{return await n.query(t,e)}finally{r.signal.removeEventListener("abort",s),o&&n.release();}}extract(t,e){let r=t;return e==="affectedRows"?r[0]?.affectedRows??0:e==="raw"?t:r[0]}async stream(t,e,r,n){let o=this.pool,s=r.connection??await o.getConnection(),a=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),u=s.connection.query(t,e).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),d=0,c=false,m=false,p=()=>{try{s.release();}catch{}};return u.on("data",h=>{if(n.onData){d++,Promise.resolve(n.onData(a,h)).then(()=>{d--,c&&d===0&&!m&&(p(),a.end());}).catch(f=>{m=true,p(),a.destroy(f);});return}a.write(h);}),u.on("end",()=>{c=true,d===0&&!m&&(p(),a.end());}),u.on("error",h=>{m=true,p(),a.destroy(h);}),a.on("close",()=>{p();}),a}};var Rn=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=new r.Database(String(e.database??":memory:"),e.driverOptions?.mode??void 0,n=>{if(n)throw new T("SqliteDataSource::createSqlPool","CONNECTION_NOT_ESTABLISHED")});}createPool(){}async closePool(){await new Promise((t,e)=>{this.pool.close(r=>{r&&e(r),t();});});}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){return await this.promisify(t,e,r)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.pool;return new Zl(o,t,e,{onData:n.onData})}promisify(t,e,r){let n=r.sqlLiteOptions??{},o=n.mode||"fetch",s=n.customConnection??r.connection??this.pool;if(["begin","begin transaction","commit","rollback"].includes(t.trim().toLowerCase()))return new Promise((u,d)=>{s.run(t,e,function(c){c&&d(c),u(this.changes);});});if(o==="fetch")return new Promise((u,d)=>{s.all(t,e,(c,m)=>{c&&d(c),u(m||[]);});});if(!n?.typeofModel)return new Promise((u,d)=>{s.run(t,e,function(c){c?d(new Error(c.message)):u(this.changes);});});if(o==="insertOne"||o==="insertMany"){let u=`${t} returning *`;return new Promise((d,c)=>{s.all(u,e,(m,p)=>{if(m)return c(m);d(p||[]);});})}return new Promise((u,d)=>{s.run(t,e,function(c){c?d(new Error(c.message)):u(this.changes);});})}},Zl=class extends Readable{constructor(t,e,r=[],n){super({objectMode:true}),this.db=t,this.query=e,this.params=r,this.started=false,this.events=n;}_read(){this.started||(this.started=true,this.readRows());}readRows(){let t=0,e=false,r=false;this.db.each(this.query,this.params,(n,o)=>{if(n){r=true,this.emit("error",n);return}t++;let s=false,a,l={write:u=>{s=true,a=u;}};Promise.resolve(this.events.onData?.(l,o)).then(()=>{if(!r){if(s){this.push(a);return}this.push(o);}}).catch(u=>{r=true,this.emit("error",u);}).finally(()=>{t--,e&&t===0&&!r&&this.push(null);});},n=>{if(n){r=true,this.emit("error",n);return}e=true,t===0&&!r&&this.push(null);});}};le();var _n=class{constructor(t,e,r){this.dialect="mssql";this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;let n=e.driverOptions,{options:o,...s}=n??{};this.pool=new r.ConnectionPool({server:e.host??"localhost",port:e.port,database:e.database,user:e.username,password:e.password,...s,options:{trustServerCertificate:E.MSSQL_TRUST_SERVER_CERTIFICATE??void 0,...o,abortTransactionOnError:false,enableImplicitTransactions:false}});}async createPool(){await this.pool.connect();}async closePool(){await this.pool.close();}async reserveConnection(){return this.pool.transaction()}releaseConnection(){}async beginTransaction(t,e){if(e.isolationLevel){let r=await this.getMssqlTransactionLevel(e.isolationLevel);await t.begin(r);return}await t.begin();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){let n=this.pool,o=r.connection?r.connection.request():n.request();e.forEach((l,u)=>{o.input(`p${u}`,l);});let s=0,a=t.replace(/\?|@(\d+)/g,()=>`@p${s++}`);if(r.signal){let l=()=>{try{o.cancel();}catch{}};r.signal.addEventListener("abort",l,{once:true});try{return await o.query(a)}finally{r.signal.removeEventListener("abort",l);}}return o.query(a)}extract(t,e){return e==="affectedRows"?t.rowsAffected[0]:e==="raw"?t:t.recordset}async stream(t,e,r,n){let o=r.connection??this.pool,s=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),a=o.request();a.stream=true,e.forEach((p,h)=>{a.input(`p${h}`,p);});let l=0,u=t.replace(/\?|@(\d+)/g,()=>`@p${l++}`),d=0,c=false,m=false;return a.on("row",p=>{if(!m){if(n.onData){d++,Promise.resolve(n.onData(s,p)).then(()=>{d--,c&&d===0&&!m&&s.end();}).catch(h=>{m=true,s.destroy(h);});return}s.write(p);}}),a.on("error",p=>{m=true,s.destroy(p);}),a.on("done",()=>{c=true,d===0&&!m&&s.end();}),a.query(u),s}async getMssqlTransactionLevel(t){let e=await import('mssql').then(r=>r.default.ISOLATION_LEVEL).catch(r=>{throw g.error(r),new L("mssql")});switch(t){case "READ UNCOMMITTED":return e.READ_UNCOMMITTED;case "READ COMMITTED":return e.READ_COMMITTED;case "REPEATABLE READ":return e.REPEATABLE_READ;case "SERIALIZABLE":return e.SERIALIZABLE;default:throw new T("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${t}`)}}};var Sg=()=>{ge({name:"pg",dialects:["postgres","cockroachdb"],create:async({dialect:i,input:t})=>{let e=(await ce.getDriver(i)).client;return new qn(i,t,e)}}),ge({name:"mysql2",dialects:["mysql","mariadb"],create:async({dialect:i,input:t})=>{let e=(await ce.getDriver(i)).client;return new Cn(i,t,e)}}),ge({name:"sqlite3",dialects:["sqlite"],create:async({dialect:i,input:t})=>{let e=(await ce.getDriver(i)).client;return new Rn(i,t,e)}}),ge({name:"mssql",dialects:["mssql"],create:async({dialect:i,input:t})=>{let e=(await ce.getDriver(i)).client;return new _n(i,t,e)}});};Sg();var Mg=async i=>{if(i==="bun"){await(await Promise.resolve().then(()=>(uy(),ly))).registerBunDrivers();return}if(i==="web"){(await Promise.resolve().then(()=>(nu(),ru))).registerWebDrivers();return}if(i==="react-native"){await(await Promise.resolve().then(()=>(nu(),ru))).registerReactNativeDrivers();return}},An=async(i,t)=>{let e=dr(t?.jsEnvironment);await Mg(e);let r=await ry(i,e,t?.driver,t);return await r.createPool(),r};var tr=class tr{constructor(){}static run(t,e){return tr.storage.run(t,e)}static getTransaction(){return tr.storage.getStore()}};tr.storage=new AsyncLocalStorage;var ze=tr;var rr=class i{constructor(t,e,r=false,n=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=Le(oe().crypto.randomBytes(16)),this.isolationLevel=e,this.isNested=r,this.nestingDepth=n;}async nestedTransaction(t){let e=new i(this.sql,this.isolationLevel,true,this.nestingDepth+1);if(await e.transaction(),t)try{let r=await ze.run(e,()=>t(e));return await e.commit(),r}catch(r){throw await e.rollback(),r}return e}async transaction(){if(this.getIsolationLevelQuery(),this.isNested){let r=this.getSavePointName();this.sql.type==="mssql"?await this.sql.rawQuery(`SAVE TRANSACTION ${r}`):await this.sql.rawQuery(`SAVEPOINT ${r}`),this.isActive=true;return}(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&dt("BEGIN TRANSACTION",this.sql.logs);let t=this.sql.driverAdapter,e=this.sql.sqlConnection;if(!t||!e)throw new T("TRANSACTION::transaction","CONNECTION_NOT_ESTABLISHED");await t.beginTransaction(e,{isolationLevel:this.isolationLevel,rawQuery:(r,n)=>this.sql.rawQuery(r,n??[])}),this.isActive=true;}async commit(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new T("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "sqlite":await this.sql.rawQuery(`RELEASE SAVEPOINT ${e}`);break}this.isActive=false;return}try{let e=this.sql.driverAdapter,r=this.sql.sqlConnection;(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&dt("COMMIT",this.sql.logs),e&&r&&await e.commitTransaction(r,{rawQuery:(n,o)=>this.sql.rawQuery(n,o??[])});}catch(e){throw g.error(e),e}finally{await this.releaseConnection(),this.isActive=false;}}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new T("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":await this.sql.rawQuery(`ROLLBACK TRANSACTION ${e}`);break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":await this.sql.rawQuery(`ROLLBACK TO SAVEPOINT ${e}`);break;case "sqlite":await this.sql.rawQuery(`ROLLBACK TO ${e}`);break;default:throw new T("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}this.isActive=false;return}try{let e=this.sql.driverAdapter,r=this.sql.sqlConnection;(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&dt("ROLLBACK",this.sql.logs),e&&r&&await e.rollbackTransaction(r,{rawQuery:(n,o)=>this.sql.rawQuery(n,o??[])});}catch(e){throw g.error(e),e}finally{await this.releaseConnection(),this.isActive=false;}}async releaseConnection(){if(this.connectionReleased)return;let t=null;try{this.sql.driverAdapter?.releaseConnection(this.sql.sqlConnection);}catch(e){t=e,g.error(e);}this.sql.sqlConnection=null;try{await this.sql.disconnect();}catch(e){g.warn(`Transaction::releaseConnection - disconnect failed: ${e?.message??e}`);}if(this.connectionReleased=true,t)throw t}getIsolationLevelQuery(){if(!this.isolationLevel||this.sql.type==="mssql")return "";if(this.sql.type==="sqlite"&&this.isolationLevel!=="SERIALIZABLE")throw new T("TRANSACTION::getIsolationLevelQuery","SQLITE_ONLY_SUPPORTS_SERIALIZABLE_ISOLATION_LEVEL");if(this.sql.type==="mysql"||this.sql.type==="mariadb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="postgres"||this.sql.type==="cockroachdb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="sqlite")return "";throw new T("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}};var ou=Symbol.for("hysteria.orm.SqlDataSource"),fy,yy,ke=class i extends(yy=Qt,fy=ou,yy){constructor(e){super(e);this[fy]=true;this.globalTransaction=null;this.globalTransactionLock=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.lockConnection=null;this.lockKeyToId=new Map;this.driverAdapter=null;this.id=oe().crypto.randomUUID();this.logicalSourceId=oe().crypto.randomUUID();this.cacheAdapter=new gr;this.migrationConfig={path:E.MIGRATION_PATH||"database/migrations",lock:true,transactional:true,lockTimeout:3e4};this.seederConfig={path:"database/seeders"};this.zodEngine=null;this.lazyLoad=false;this.connecting=null;this.sqlType=e?.type||this.type;let r=e;this.inputDetails={...e,type:this.sqlType,host:r?.host??this.host,port:r?.port??this.port,username:r?.username??this.username,password:r?.password??this.password,database:r?.database??this.database,logs:r?.logs??this.logs},this.inputDetails.connectionPolicies=e?.connectionPolicies||{retry:{maxRetries:0,delay:0}},this.inputDetails.queryFormatOptions=e?.queryFormatOptions||{language:$t(this.sqlType),keywordCase:"lower",dataTypeCase:"lower",functionCase:"lower"},this.cacheKeys=e?.cacheStrategy?.keys??{},this.cacheAdapter=e?.cacheStrategy?.cacheAdapter??this.cacheAdapter,this.adminJsOptions=e?.adminJs,e?.migrations&&(this.migrationConfig={path:e.migrations.path||this.migrationConfig.path,tsconfig:e.migrations.tsconfig,lock:e.migrations.lock??this.migrationConfig.lock,transactional:"transactional"in e.migrations?e.migrations.transactional??this.migrationConfig.transactional:this.migrationConfig.transactional}),e?.seeders&&(this.seederConfig={path:e.seeders.path||this.seederConfig.path,tsconfig:e.seeders.tsconfig}),this._models=e?.models||{},this.slaves=(e?.replication?.slaves||[]).map(n=>new i(n)),this.slaveAlgorithm=e?.replication?.slaveAlgorithm||"roundRobin",this.onSlaveServerFailure=e?.replication?.onSlaveServerFailure,this.lazyLoad=e?.lazyLoad??false,this.clsEnabled=e?.clsEnabled??true;}static isSqlDataSource(e){return typeof e=="object"&&e!==null&&ou in e&&e[ou]===true}get isClsEnabled(){return this.clsEnabled}getOnSlaveServerFailure(){return this.onSlaveServerFailure}addObserver(e){return this.observerChain||(this.observerChain=new Ut([])),this.observerChain.add(e),this}static async useConnection(e,r){let n=new i(e);await n.connect();try{await r(n),n.isConnected&&await n.disconnect();}catch(o){throw n.isConnected&&await n.disconnect(),o}}async connect(){if(this.isConnected)throw new T("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");try{this.driverAdapter=await An(this.sqlType,this.inputDetails),this.sqlPool=this.driverAdapter.pool??null,this.ownsPool=!0,this.slaves.length&&await Promise.all(this.slaves.map(async e=>{e.driverAdapter=await An(e.sqlType,e.inputDetails),e.sqlPool=e.driverAdapter.pool??null,e.ownsPool=!0;}));}catch(e){this.sqlPool=null,this.ownsPool=false;for(let r of this.slaves)r.ownsPool&&(r.sqlPool=null,r.ownsPool=false);throw e}}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new T("SqlDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.connect().finally(()=>{this.connecting=null;})),await this.connecting;}}get isInGlobalTransaction(){return !!this.globalTransaction}get models(){let e=this;return new Proxy(this._models,{get(r,n){if(typeof n=="string"&&n in r)return e.from(r[n])}})}getSlave(){if(!this.slaves.length)return null;if(this.slaveAlgorithm==="random")return this.slaves[Math.floor(Math.random()*this.slaves.length)];let e=this.slaves[this.roundRobinIndex%this.slaves.length];return this.roundRobinIndex=(this.roundRobinIndex+1)%this.slaves.length,e}getTransactionBoundSqlDataSource(){if(this.globalTransaction?.isActive)return this.globalTransaction.sql;if(this.clsEnabled){let e=ze.getTransaction();if(e?.isActive&&e.sql.logicalSourceId===this.logicalSourceId)return e.sql}return null}async useCache(e,r,...n){if(!this.cacheAdapter)throw new T("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new T("SqlDataSource::useCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);let s=o.length,a=typeof r=="number"&&s===n.length,l,u=[];a?(l=r,u=n):(l=void 0,u=r!==void 0?[r,...n]:n);let d=zn(JSON.stringify(u)),c=d?`${e}:${d}`:e,m=await this.cacheAdapter.get(c);if(m!==void 0)return m;let p=await o(...u);return await this.cacheAdapter.set(c,p,l),p}async invalidCache(e,...r){if(!this.cacheAdapter)throw new T("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new T("SqlDataSource::invalidCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);if(n.length>0&&r.length===0){let l=e;await this.cacheAdapter.invalidate(l);return}let s=zn(JSON.stringify(r)),a=s?`${e}:${s}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new T("SqlDataSource::invalidateAllCache","CACHE_ADAPTER_NOT_CONFIGURED");await this.cacheAdapter.invalidateAll(e);}async clone(e){let r=new i(this.inputDetails);return r.id=this.id,r.logicalSourceId=this.logicalSourceId,r.sqlType==="sqlite"||!!e?.shouldRecreatePool?(r.driverAdapter=await An(r.sqlType,this.inputDetails),r.sqlPool=r.driverAdapter.pool,r.ownsPool=true):(r.driverAdapter=this.driverAdapter,r.sqlPool=this.sqlPool,r.ownsPool=false),r}getDbType(){return this.sqlType}from(e,r){let n=this.getTransactionBoundSqlDataSource()??this;if(typeof e=="string"){let o=new B(Yl(e,r),n);return r?.alias&&o.table(e,r.alias),o}return new st(e,n)}fromRaw(e,r=[],n){let o=this.getTransactionBoundSqlDataSource()??this;return new B(Yl("",n),o).fromRaw(e,r)}schema(){if(!this.isConnected&&!this.lazyLoad)throw new T("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new jt(this,this.getDbType())}async startGlobalTransaction(e){for(;this.globalTransactionLock;)await this.globalTransactionLock;if(this.globalTransaction?.isActive)throw new T("SqlDataSource::startGlobalTransaction","GLOBAL_TRANSACTION_ALREADY_STARTED");let r=()=>{};this.globalTransactionLock=new Promise(n=>{r=n;});try{let n=await this.clone();return n.sqlConnection=await n.getConnection(),this.globalTransaction=new rr(n,e?.isolationLevel),await this.globalTransaction.transaction(),this.globalTransaction}finally{r(),this.globalTransactionLock=null;}}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new T("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");try{await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async rollbackGlobalTransaction(e){if(!this.globalTransaction){g.warn("SqlDataSource::rollbackGlobalTransaction - GLOBAL_TRANSACTION_NOT_STARTED");return}try{await this.globalTransaction.rollback({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async transaction(e,r){let n=typeof e=="function"?r:e;if(this.globalTransaction?.isActive)return typeof e=="function"?this.globalTransaction.nestedTransaction(e):this.globalTransaction.nestedTransaction();let o=this.clsEnabled?ze.getTransaction():void 0;if(o?.isActive&&o.sql.logicalSourceId===this.logicalSourceId)return typeof e=="function"?o.nestedTransaction(e):o.nestedTransaction();let s=await this.clone();s.sqlConnection=await s.getConnection();let a=new rr(s,n?.isolationLevel);if(await a.transaction(),typeof e=="function")try{let l=this.clsEnabled?await ze.run(a,()=>e(a)):await e(a);return await a.commit({throwErrorOnInactiveTransaction:!1}),l}catch(l){throw await a.rollback({throwErrorOnInactiveTransaction:false}),l}return a}getModelManager(e){if(!this.isConnected&&!this.lazyLoad)throw new T("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");let r=this.getTransactionBoundSqlDataSource()??this;return new it(e,r)}getPool(){if(!this.sqlPool)throw this.lazyLoad?new T("SqlDataSource::getPool - call ensureConnected() or connect() first when using lazyLoad","CONNECTION_NOT_ESTABLISHED"):new T("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(){if(this.sqlConnection)return this.sqlConnection;await this.ensureConnected();let e=this.driverAdapter;if(!e)throw new T("SqlDataSource::getConnection","CONNECTION_NOT_ESTABLISHED");return e.reserveConnection()}async disconnect(){if(!this.isConnected){g.warn("Connection already closed or not established");return}if(!this.ownsPool){if(this.sqlConnection)try{this.driverAdapter?.releaseConnection(this.sqlConnection);}catch(e){g.warn(`SqlDataSource::disconnect - releasing borrowed connection failed: ${e?.message??e}`);}this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{g.warn("SqlDataSource::disconnect - Error while rolling back global transaction");}if(this.lockConnection){try{this.driverAdapter?.releaseConnection(this.lockConnection);}catch(e){g.warn(`SqlDataSource::disconnect - releasing lock connection failed: ${e?.message??e}`);}this.lockConnection=null,this.lockKeyToId.clear();}await this.cacheAdapter?.disconnect?.(),this.slaves.length&&await Promise.all(this.slaves.map(async e=>{try{await e.disconnect();}catch(r){g.warn(`SqlDataSource::disconnect - Error while closing slave connection: ${r.message}`);}})),g.warn("Closing connection"),await this.driverAdapter?.closePool(),this.sqlPool=null,this.driverAdapter=null,this.sqlConnection=null;}getConnectionDetails(){return {type:this.getDbType(),host:this.host,port:this.port,username:this.username,password:this.password,database:this.database,connectionPolicies:this.inputDetails.connectionPolicies,queryFormatOptions:this.inputDetails.queryFormatOptions,jsEnvironment:this.inputDetails.jsEnvironment,driver:this.inputDetails.driver}}async introspectSchema(){let e=this.getDbType(),r;e==="postgres"||e==="cockroachdb"?r=`
|
|
258
|
+
ORDER BY pk`,bindings:[]}}},Ty=new Dl;var $l=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},wy=new $l;var Il=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("sqlite",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"sqlite").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"sqlite").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new f(this.model).formatStringColumn("sqlite",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"sqlite").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},Sy=new Il;var vl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("sqlite",e.column),n=ee.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toSqlite();return r==="$"?t:`json_extract(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toSqlite();return r==="$"?`json_array_length(${t})`:`json_array_length(${t}, '${r}')`}buildObjectKeysSql(t,e){return `json_each.key FROM json_each(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},Ny=new vl;var Pl=class{toSql(t){let e=t,r=Fe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof x?s.rawValue:s instanceof I?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "lower(hex(randomblob(16)))";case "$now":case "$currentTimestamp":return "current_timestamp";default:return}}},qy=new Pl;var El=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return e.keyword="",{sql:e.fromNode,bindings:[]};if(e.options&&Object.values(e.options).some(Boolean))throw new T("SqliteTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("SQLite does not support TRUNCATE options"));let r=new f(this.model).getFromForWriteOperations("sqlite",e.fromNode);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},Cy=new El;var Bl=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new f(this.model).formatRawPlaceholders("sqlite",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:e.wrap?`(${o.sql})`:o.sql,bindings:o.bindings}}},Ry=new Bl;var kl=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((l,u)=>{let d=e.values[u],m=r.formatStringColumn("sqlite",l);if(d instanceof x)return `${m} = ${d.rawValue}`;if(d instanceof N){let c=new b(this.model,"sqlite").parse([d],s,true);return o.push(...c.bindings),s+=c.bindings.length,`${m} = ${c.sql}`}return o.push(d),`${m} = ?`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},_y=new kl;var Ql=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",n=[],o=e.operator.toLowerCase(),s=o==="ilike"||o==="not ilike",a=o==="not ilike"?"not like":s?"like":e.operator,l=u=>s?`lower(${u})`:u;if(this.isRawNode(e.value)){let u=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${l(new f(this.model).formatStringColumn("sqlite",e.column))} ${a} ${l(u)}`,n=[];}else if(e.tupleColumns?.length){let u=e.tupleColumns.map(c=>new f(this.model).formatStringColumn("sqlite",c)).join(", "),d=e.value,m=d.map(c=>`(${c.map(()=>"?").join(", ")})`).join(", ");r=`(${u}) ${e.operator} (${m})`,n=d.flat();}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new f(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,n=e.value;else {let u=e.value.map(d=>"?").join(", ");r=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${u})`,n=e.value;}else if(e.value instanceof I){let u=new b(this.model,"sqlite").parse([e.value],1,true).sql;r=`${l(new f(this.model).formatStringColumn("sqlite",e.column))} ${a} ${l(u)}`,n=[];}else if(e.operator.includes("null"))r=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${l(new f(this.model).formatStringColumn("sqlite",e.column))} ${a} ${s?"lower(?)":"?"}`,n=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new f(this.model).formatStringColumn("sqlite",t):t}},My=new Ql;var Kl=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"sqlite"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:e.isNegated?`not (${n})`:`(${n})`,bindings:o}}},xy=new Kl;var Ll=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new f(this.model).formatStringColumn("sqlite",e.column);switch(e.jsonOperator){case "=":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "path":{let s=ee.from(e.path??"");r=`json_extract(${o}, '${s.toSqlite()}') ${e.comparisonOperator??"="} ?`,n=[e.value];break}case "subset":case "has none":throw new T("WhereJsonInterpreter::unsupported","NOT_SUPPORTED_IN_SQLITE");case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},Oy=new Ll;var Wl=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"sqlite"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"sqlite"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},Ay=new Wl;var jl=class{toSql(t){let e=t,r=new f(this.model),n=s=>r.formatStringColumn("sqlite",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},Dy=new jl;var Fl=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" materialized":e.clause==="not materialized"?" not materialized":"",a=e.columns?.length?` (${e.columns.map(l=>new f(this.model).formatStringColumnBare("sqlite",l)).join(", ")})`:"";return {sql:`${e.alias}${a} as${s} (${o.sql})`,bindings:o.bindings}}},$y=new Fl;var Ul={mssql:{alter_table:{add_column:Lu,add_constraint:Wu,add_primary_key:ju,alter_column_type:Fu,alter_table:Vu,drop_column:Ju,drop_constraint:Hu,drop_default:zu,drop_not_null:Gu,drop_primary_key:Yu,rename_column:Zu,rename_table:Xu,set_default:td,set_not_null:rd,set_table_options:nd},column:{column_type:od},comment:{comment:sd},constraint:{after:id,constraint:ad},create_table:{create_table:ld},delete:{delete:ud},distinct:{distinct:dd,distinct_on:cd},drop_table:{drop_table:md},extension:{create_extension:pd},from:{from:yd},group_by:{group_by:fd},having:{having:hd},index_op:{create_index:gd,drop_index:bd},insert:{insert:Td},join:{join:wd},json_mutation:{json_mutation:_d},limit:{limit:Md},lock:{lock:xd},offset:{offset:Od},on_duplicate:{on_duplicate:Ad},order_by:{order_by:Dd},raw:{raw:$d},returning:{returning:Id},schema:{check_constraint_info:vd,foreign_key_info:Pd,get_column_listing:Ed,get_tables:Bd,has_check_constraint:kd,has_column:Qd,has_index:Kd,has_primary_key:Ld,has_table:Wd,index_info:jd,primary_key_info:Fd,table_info:Ud},select:{select:Vd,select_json:Jd},sqlfunc:{sqlfunc:Hd},truncate:{truncate:zd},union:{union:Gd},update:{update:Yd},where:{where:Zd,where_group:Xd,where_json:ec,where_subquery:tc},window:{window:rc},with:{with:nc}},mysql:{alter_table:{add_column:oc,add_constraint:sc,add_primary_key:ic,alter_column_type:ac,alter_table:lc,drop_column:uc,drop_constraint:dc,drop_default:cc,drop_not_null:mc,drop_primary_key:pc,rename_column:yc,rename_table:fc,set_default:hc,set_not_null:gc,set_table_options:bc},column:{column_type:Tc},comment:{comment:wc},constraint:{after:Sc,constraint:Nc},create_table:{create_table:qc},delete:{delete:Cc},distinct:{distinct:Rc,distinct_on:_c},drop_table:{drop_table:Mc},extension:{create_extension:xc},from:{from:Oc},group_by:{group_by:Ac},having:{having:Dc},index_op:{create_index:$c,drop_index:Ic},insert:{insert:vc},join:{join:Pc},json_mutation:{json_mutation:Ec},limit:{limit:Bc},lock:{lock:kc},offset:{offset:Qc},on_duplicate:{on_duplicate:Kc},order_by:{order_by:Lc},raw:{raw:Wc},returning:{returning:jc},schema:{check_constraint_info:Fc,foreign_key_info:Uc,get_column_listing:Vc,get_tables:Jc,has_check_constraint:Hc,has_column:zc,has_index:Gc,has_primary_key:Yc,has_table:Zc,index_info:Xc,primary_key_info:em,table_info:tm},select:{select:rm,select_json:nm},sqlfunc:{sqlfunc:om},truncate:{truncate:sm},union:{union:im},update:{update:am},where:{where:lm,where_group:um,where_json:dm,where_subquery:cm},window:{window:mm},with:{with:pm}},postgres:{alter_table:{add_column:ym,add_constraint:fm,add_primary_key:hm,alter_column_type:gm,alter_table:bm,drop_column:Tm,drop_constraint:wm,drop_default:Sm,drop_not_null:Nm,drop_primary_key:qm,rename_column:Cm,rename_table:Rm,set_default:_m,set_not_null:Mm,set_table_options:xm},column:{column_type:Om},comment:{comment:Am},constraint:{after:Dm,constraint:$m},create_table:{create_table:Im},delete:{delete:vm},distinct:{distinct:Pm,distinct_on:Em},drop_table:{drop_table:Bm},extension:{create_extension:km},from:{from:Qm},group_by:{group_by:Km},having:{having:Lm},index_op:{create_index:Wm,drop_index:jm},insert:{insert:Fm},join:{join:Um},json_mutation:{json_mutation:Vm},limit:{limit:Jm},lock:{lock:Hm},offset:{offset:zm},on_duplicate:{on_duplicate:Gm},order_by:{order_by:Ym},raw:{raw:Zm},returning:{returning:Xm},schema:{check_constraint_info:ep,foreign_key_info:tp,get_column_listing:rp,get_tables:np,has_check_constraint:op,has_column:sp,has_index:ip,has_primary_key:ap,has_table:lp,index_info:up,primary_key_info:dp,table_info:cp},select:{select:mp,select_json:pp},sqlfunc:{sqlfunc:yp},truncate:{truncate:fp},union:{union:hp},update:{update:gp},where:{where:bp,where_group:Tp,where_json:wp,where_subquery:Sp},window:{window:Np},with:{with:qp}},sqlite:{alter_table:{add_column:Cp,add_constraint:Rp,alter_column_type:_p,alter_table:Mp,drop_column:xp,drop_constraint:Op,drop_default:Ap,drop_not_null:Dp,drop_primary_key:$p,rename_column:Ip,rename_table:vp,set_default:Pp,set_not_null:Ep,set_table_options:Bp},column:{column_type:kp},comment:{comment:Qp},constraint:{after:Kp,constraint:Lp},create_table:{create_table:Wp},delete:{delete:jp},distinct:{distinct:Fp,distinct_on:Up},drop_table:{drop_table:Vp},extension:{create_extension:Jp},from:{from:Hp},group_by:{group_by:zp},having:{having:Gp},index_op:{create_index:Yp,drop_index:Zp},insert:{insert:Xp},join:{join:ey},json_mutation:{json_mutation:ty},limit:{limit:ry},lock:{lock:ny},offset:{offset:oy},on_duplicate:{on_duplicate:sy},order_by:{order_by:iy},raw:{raw:ay},returning:{returning:ly},schema:{check_constraint_info:uy,foreign_key_info:dy,get_column_listing:cy,get_tables:my,has_check_constraint:py,has_column:yy,has_index:fy,has_primary_key:hy,has_table:gy,index_info:by,primary_key_info:Ty,table_info:wy},select:{select:Sy,select_json:Ny},sqlfunc:{sqlfunc:qy},truncate:{truncate:Cy},union:{union:Ry},update:{update:_y},where:{where:My,where_group:xy,where_json:Oy,where_subquery:Ay},window:{window:Dy},with:{with:$y}}};var b=class{constructor(t,e){this.dbType=e,this.model=t;}parse(t,e=1,r=false){if(!t.length)return {sql:"",bindings:[]};let n=t.find(R=>!!R&&R.folder==="distinctOn"),o=!n&&t.find(R=>!!R&&R.folder==="distinct"),s=t.filter(R=>!!R&&R.folder==="comment"&&R.isHint).map(R=>this.renderNode(R)).filter(R=>R.length>0).join(" "),a=this.dbType==="mssql"?t.find(R=>!!R&&R.folder==="lock")??null:null,l=a?this.getMssqlTableHints(a):"",u=t.filter(R=>R!==null&&R.folder!=="distinct"&&R.folder!=="distinctOn"&&!(R.folder==="comment"&&R.isHint)),d=u.some(R=>R.folder==="offset"),m=u.some(R=>R.folder==="order_by"),c=u.find(R=>R.folder==="limit"),p=u.find(R=>R.folder==="offset"),h=this.dbType==="mssql"&&c&&!d&&!m,y=this.dbType==="mssql"&&!h&&(c||p),w=[],S=[],q=null;h&&c&&!c.skipBinding&&S.push(c.limit);for(let R=0;R<u.length;R++){let D=u[R];if(h&&D.folder==="limit"||y&&(D.folder==="limit"||D.folder==="offset"))continue;D.currParamIndex=e+S.length;let $=Ul[this.mapCommonDbType(this.dbType)][D.folder][D.file];if(!$)throw new Error(`Interpreter not found for ${this.dbType} ${D.keyword}`);$.model=this.model,$.dbType=this.dbType;let A=$.toSql(D);if(!A.sql||!A.sql.trim().length)continue;let Q=u[R+1],E=!Q||Q.keyword!==D.keyword?"":Q.chainsWith;if(D.folder==="lock"||D.folder==="on_duplicate"||D.folder==="returning"||D.folder==="schema"||D.folder==="comment"){w.push(`${A.sql}${E}`),S.push(...A.bindings),q=D.keyword;continue}if(q!==D.keyword||D.canKeywordBeSeenMultipleTimes){if(r)w.push(`${A.sql}${E}`);else {let se=D.keyword;if(D.folder==="with"&&this.dbType!=="mssql"){let Re=R,_e=false;for(;Re<u.length&&u[Re].keyword===D.keyword;){let gu=u[Re];if(gu.folder==="with"&&gu.clause==="recursive"){_e=true;break}Re++;}_e&&(se=`${se} recursive`);}let Xe=s?`${s} `:"";if(se==="select"){let Re=h?c?.skipBinding?`top ${c.limit} `:`top (@${e}) `:"";if(n){let _e=Array.isArray(n.columns)?n.columns.join(", "):"";w.push(`select ${Re}${Xe}distinct on (${_e}) ${A.sql}${E}`);}else o?w.push(`select ${Re}${Xe}distinct ${A.sql}${E}`):w.push(`select ${Re}${Xe}${A.sql}${E}`);}else se==="from"&&l?w.push(`${se} ${A.sql}${l}${E}`):w.push(`${se} ${A.sql}${E}`);}q=D.keyword;}else w.push(`${A.sql}${E}`);S.push(...A.bindings);}if(y){m||w.push("order by (select null)");let R=p?.offset??0,D="";p?.skipBinding?D=`offset ${R} rows`:(S.push(R),D=`offset @${e+S.length-1} rows`),c&&(c.skipBinding?D+=` fetch next ${c.limit} rows only`:(S.push(c.limit),D+=` fetch next @${e+S.length-1} rows only`)),w.push(D);}return {sql:w.join(" "),bindings:S}}renderNode(t){let e=Ul[this.mapCommonDbType(this.dbType)][t.folder][t.file];if(!e)throw new Error(`Interpreter not found for ${this.dbType} ${t.keyword}`);return e.model=this.model,e.dbType=this.dbType,e.toSql(t).sql}mapCommonDbType(t){switch(t){case "mariadb":return "mysql";case "cockroachdb":return "postgres";default:return t}}getMssqlTableHints(t){let e=[];switch(t.lockType){case "for_update":e.push("UPDLOCK");break;case "for_share":e.push("HOLDLOCK");break;case "for_no_key_update":e.push("UPDLOCK");break;case "for_key_share":e.push("HOLDLOCK");break}return t.skipLocked&&e.push("READPAST"),t.noWait&&e.push("NOWAIT"),e.length>0?` with (${e.join(", ")})`:""}};var qr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var Cr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var Rr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var _r=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var Mr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var xr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_table";this.table=e;}};var Or=class extends N{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_column";this.table=e,this.column=r;}};var Ar=class extends N{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_index";this.table=e,this.index=r;}};var Dr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_primary_key";this.table=e;}};var $r=class extends N{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_check_constraint";this.table=e,this.constraint=r;}};var Ir=class extends N{constructor(){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_tables";}};var vr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_column_listing";this.table=e;}};var Pr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var Se=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var wt=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var Er=class extends N{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="alter_column_type";this.column=e,this.newType=r,this.options=n;}};var fe=class extends N{constructor(e,r=[],n=false){super("alter table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="alter_table";this.table=e,this.children=r,this.ifExists=n;}};var Br=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var Ne=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var Ft=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var kr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var St=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var Qr=class extends N{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var Kr=class extends N{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_default";this.column=e,this.defaultValue=r;}};var Lr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var Nt=class extends N{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 N{constructor(e,r={},n=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="constraint";this.constraintType=e,this.columns=r.columns,this.references=r.references,this.constraintName=r.constraintName,this.onDelete=r.onDelete,this.onUpdate=r.onUpdate,this.defaultValue=r.defaultValue,this.checkExpression=r.checkExpression,this.isRawValue=n;}};var Wr=class extends N{constructor(e,r=[],n=[],o=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=n,this.ifNotExists=o,s&&Object.assign(this,s);}};var jr=class extends N{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 Fr=class extends N{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 Ur=class extends N{constructor(e,r,n,o=false){super("create index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="index_op";this.file="create_index";this.table=e,this.columns=r,this.indexName=n,this.unique=o;}};var Vr=class extends N{constructor(e,r,n){super("drop index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.cascade=false;this.folder="index_op";this.file="drop_index";this.indexName=e,this.table=r,this.cascade=n??false;}};var qt=class extends N{constructor(e,r=false,n){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e,this.options=n;}};function vh(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 Jr=Symbol("columns"),Ct=Symbol("primaryKey"),Vl=Symbol("relations"),Iy=Symbol("indexes"),vy=Symbol("uniques"),Py=Symbol("checks"),Jl=i=>`${vh(i)}_id`,Hl=(i,t)=>`idx_${i}_${t}`,qe=(i,t)=>`uq_${i}_${t}`,Y=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,Ce=(i,t)=>`pk_${i}_${t}`;var k=class extends N{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="column";this.file="column_type";this.isRawValue=false;this.column=e,this.dataType=r,this.length=n.length,this.precision=n.precision,this.scale=n.scale,this.enumValues=n.enumValues,this.withTimezone=n.withTimezone,this.autoIncrement=n.autoIncrement,this.autoCreate=n.autoCreate,this.autoUpdate=n.autoUpdate,this.collate=n.collate,this.isRawValue=n.isRawValue??false,this.unsigned=n.unsigned,this.zerofill=n.zerofill;}};var Ut=class extends N{constructor(e,r=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="comment";this.file="comment";this.value=e,this.isHint=r;}};var tt=class extends N{constructor(e,r=false,n=false){super("lock");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="lock";this.file="lock";this.lockType=e,this.skipLocked=r,this.noWait=n;}};var Hr=class extends N{constructor(e,r=[],n=[]){super("window");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="window";this.file="window";this.fn=e,this.partitionBy=r,this.orderBy=n;}};function Ey(i){return i?Array.isArray(i)?i:[i]:[]}function By(i){return i?(Array.isArray(i)?i:[i]).map(e=>typeof e=="string"?{column:e}:e):[]}var ve=class extends N{constructor(e,r=false,n="union",o){super(r?`${n} all`:n);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="union";this.file="union";this.query=e,this.isAll=r,this.type=n,this.bindings=o;}};var rt=class extends N{constructor(e,r,n,o){e==="normal"&&(e="");super("with");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="with";this.file="with";this.alias=r,this.body=n,this.clause=e,this.columns=o;}};var Ue=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var zr=class extends N{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var Gr=class extends Ue{constructor(t,e,r,n,o=[],s="create_table"){super(e),this.columnNode=r,this.tableName=n,this.namedConstraints=o,this.context=s,this.sqlType=t;}primaryKey(t){let e=Ce(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){this.columnNode.isForeignKey=true;let[r,n]=t.split("."),o=n.split(","),s=e?.constraintName??Y(this.tableName??"",C(this.columnNode.column),o[0]);return this.context==="alter_table"?(this.nodes.push(new U("foreign_key",{columns:[C(this.columnNode.column)],references:{table:r,columns:o},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:o},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 x||t instanceof I?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??qe(this.tableName??"",C(this.columnNode.column))})),this):(this.namedConstraints.push(new U("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName||qe(this.tableName??"",C(this.columnNode.column))})),this)}check(t,e){let r=C(this.columnNode.column),n=e?.constraintName??`chk_${this.tableName}_${r}`.substring(0,63);return this.context==="alter_table"?(this.nodes.push(new U("check",{columns:[r],checkExpression:t,constraintName:n})),this):(this.namedConstraints.push(new U("check",{columns:[r],checkExpression:t,constraintName:n})),this)}after(t){return this.sqlType!=="mysql"?this:(this.nodes.push(new zr(t)),this)}collate(t){return this.columnNode.collate=t,this}handleSqliteAutoIncrement(t){return this.isInlineSqlitePrimaryKey()?this:(this.nodes.push(new U("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this)}isInlineSqlitePrimaryKey(){let t=(this.columnNode.dataType??"").toLowerCase();return t==="bigincrement"?true:(t==="integer"||t==="bigint"||t==="int")&&!!this.columnNode.autoIncrement}};var nt=class extends Ue{constructor(e,r,n,o){super(r);this.context="create_table";this.tableName=n,this.namedConstraints=[],this.context=o??"create_table",this.sqlType=e;}mysqlOptions(e){return this._mysqlOptions=e,this}getMysqlOptions(){return this._mysqlOptions}build(e){return this.nodes.push(e),new Gr(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new x(e)}char(e,r=1){let n=new k(e,"char",{length:r});return this.build(n)}varchar(e,r=255){let n=new k(e,"varchar",{length:r});return this.build(n)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let n=new k(e,r);return this.build(n)}longtext(e){return this.text(e,"longtext")}mediumtext(e){return this.text(e,"mediumtext")}tinytext(e){return this.text(e,"tinytext")}uuid(e){let r=new k(e,"uuid");return this.build(r)}ulid(e){let r=new k(e,"ulid");return this.build(r)}integer(e,r=255){let n=new k(e,"integer",{length:r});return this.build(n)}tinyint(e,r=255){let n=new k(e,"tinyint",{length:r});return this.build(n)}smallint(e,r=255){let n=new k(e,"smallint",{length:r});return this.build(n)}mediumint(e,r=255){let n=new k(e,"mediumint",{length:r});return this.build(n)}biginteger(e,r=255){let n=new k(e,"bigint",{length:r});return this.build(n)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let n=new k(e,"float",{precision:r});return this.build(n)}double(e,r=10){let n=new k(e,"double",{precision:r});return this.build(n)}real(e,r=10){let n=new k(e,"real",{precision:r});return this.build(n)}decimal(e,r=10,n=2){let o=new k(e,"decimal",{precision:r,scale:n});return this.build(o)}numeric(e,r=10,n=2){let o=new k(e,"numeric",{precision:r,scale:n});return this.build(o)}increment(e,r=255){return this.integer(e,r).increment()}bigIncrement(e,r=255){return this.biginteger(e,r).increment()}date(e,r){let n=new k(e,"date",{precision:r});return this.build(n)}time(e,r){let n=new k(e,"time",{precision:r});return this.build(n)}year(e){let r=new k(e,"year");return this.build(r)}datetime(e,r){let n=new k(e,"datetime",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}timestamp(e,r){let n=new k(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}boolean(e){let r=new k(e,"boolean");return this.build(r)}binary(e){let r=new k(e,"binary");return this.build(r)}varbinary(e,r=255){let n=new k(e,"varbinary",{length:r});return this.build(n)}blob(e){let r=new k(e,"blob");return this.build(r)}tinyblob(e){let r=new k(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new k(e,"mediumblob");return this.build(r)}longblob(e){let r=new k(e,"longblob");return this.build(r)}json(e){let r=new k(e,"json");return this.build(r)}jsonb(e){let r=new k(e,"jsonb");return this.build(r)}enum(e,r){let n=new k(e,"enum",{enumValues:r});return this.build(n)}custom(e,r,n){let o=new k(e,r,{length:n});return this.build(o)}rawColumn(e){let r=new k(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new k(e,"geometry");return this.build(r)}point(e){let r=new k(e,"point");return this.build(r)}linestring(e){let r=new k(e,"linestring");return this.build(r)}polygon(e){let r=new k(e,"polygon");return this.build(r)}multiPoint(e){let r=new k(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var Yr=class extends Ue{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new x(t)}addColumn(t){let e=[],r=new nt(this.sqlType,e,this.table,"alter_table"),n=t(r);if(!e.length)return;let o=r.getNamedConstraints(),s=e.filter(m=>m.folder==="column");if(e=e.concat(o),s.length!==1)throw new Error("addColumn callback must define exactly one column");let a=s[0],l=n.getNodes().filter(m=>{let c=m;return c.constraintType==="not_null"||c.constraintType==="null"||c.constraintType==="default"}),u=new Pr(a);u.inlineConstraints=l,this.nodes.push(u),n.getNodes().filter(m=>{let c=m;return c.constraintType==="unique"||c.constraintType==="foreign_key"||c.constraintType==="primary_key"}).forEach(m=>{this.nodes.push(new Se(m));});}alterColumn(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new nt(this.sqlType,e,this.table,"alter_table"),n=t(r);if(!e.length)return;let o=e.filter(p=>p.folder==="column");if(o.length!==1)throw new Error("alterColumn callback must define exactly one column");let s=o[0],a=C(s.column),l=n.getNodes().find(p=>p.constraintType==="null"),d=n.getNodes().find(p=>p.constraintType==="not_null")||l,m=n.getNodes().find(p=>p.constraintType==="default"),c={};d&&(c.nullable=d.constraintType==="null"),m&&(m.defaultValue===void 0||m.defaultValue===null||m.defaultValue==="NULL"?c.dropDefault=true:c.default=m.defaultValue),s.collate&&(this.sqlType==="mysql"||this.sqlType==="mariadb")&&(c.collate=s.collate),this.nodes.push(new Er(C(a),s,c)),d&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(d.constraintType==="not_null"?this.nodes.push(new Lr(C(a))):d.constraintType==="null"&&this.nodes.push(new kr(C(a)))),m&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(m.defaultValue===void 0||m.defaultValue===null||m.defaultValue==="NULL"?this.nodes.push(new Ft(C(a))):this.nodes.push(new Kr(C(a),m.defaultValue))),n.getNodes().forEach(p=>{let h=p;switch(h.constraintType){case "primary_key":this.addPrimaryKey(C(a));break;case "unique":this.unique(C(a),{constraintName:h.constraintName});break;case "foreign_key":this.foreignKey(C(a),h.references?.table??"",C(h.references?.columns?.[0]??""),{constraintName:h.constraintName,onDelete:h.onDelete,onUpdate:h.onUpdate});break}});}dropColumn(t){this.nodes.push(new Br(t));}renameColumn(t,e){this.nodes.push(new Qr(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Ft(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new wt([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Se(new U(...t)));}foreignKey(t,e,r,n){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Se(new U("foreign_key",{columns:[t],references:{table:e,columns:[r]},constraintName:n?.constraintName??Y(this.table,t,r),onDelete:n?.onDelete,onUpdate:n?.onUpdate})));}unique(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Se(new U("unique",{columns:[t],constraintName:e?.constraintName??qe(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let r=Y(this.table,t,e);this.nodes.push(new Ne(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new T("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??qe(this.table,t);this.nodes.push(new Ne(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Ne(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new T("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new St(t));}setTableOptions(t){let e=this.sqlType==="mysql"||this.sqlType==="mariadb",r=this.sqlType==="postgres"||this.sqlType==="cockroachdb",n=this.sqlType==="mssql";return this.sqlType==="sqlite"?this:(e?this.nodes.push(new Nt(t)):r?this.nodes.push(new Nt(t)):n&&this.nodes.push(new Nt(t)),this)}};var de=class{constructor(t){if(this.sqlType=t||B.DB_TYPE,!this.sqlType)throw new T("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new x(t)}rawQuery(t){this.queryStatements.push(t);}async execute(){for(let t of this.queryStatements)this.rawQuery(t);}runFile(t){if(!ae.existsSync(t))throw new T("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=ft.basename(t),r=ft.extname(e);if(r!==".sql"&&r!==".txt")throw new T("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let o=ae.readFileSync(t,"utf-8").split(";").map(s=>s.trim()).filter(s=>s.length>0&&!s.startsWith("--"));for(let s of o)this.rawQuery(s);}createTable(t,e,r){let n=new nt(this.sqlType,[],t);e(n);let o=n.getNodes(),s=new b({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a={...r,...this.sqlType==="mysql"||this.sqlType==="mariadb"?n.getMysqlOptions()||{}:{}},l=new Wr(t,o,n.getNamedConstraints(),r?.ifNotExists,a),u=s.parse([l]).sql,d=u.startsWith("create table")?u:`create table ${u}`;this.rawQuery(d),this.generateAutoUpdateTriggers(t,o);}alterTable(t,e){let r=[],n=new Yr(t,r,this.sqlType);if(e(n),!r.length)return;let o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"}),s=[],a=()=>{if(!s.length)return;let u=new fe(t,s),d=o.parse([u]).sql;if(!d||!d.trim())return;let m=d.startsWith("alter table")?d:`alter table ${d}`;this.rawQuery(m),s=[];};for(let u of r)u.file==="add_constraint"&&s.length&&s[0].file==="add_column"||a(),s.push(u);a();let l=r.filter(u=>u.file==="add_column").map(u=>u.column);this.generateAutoUpdateTriggers(t,l);}dropTable(t,e=false){let r=new jr(t,e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}renameTable(t,e){let r=new fe(t,[new gt(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}truncateTable(t){let e=new qt(t,true),r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}createIndex(t,e,r={}){Array.isArray(e)||(e=[e]);let n=r.constraintName||Hl(t,e.join("_")),o=new Ur(t,e,n),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([o]).sql);}dropIndex(t,e){let r=new Vr(t,e),n=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addPrimaryKey(t,e){if(this.sqlType==="sqlite")throw new T("Schema::addPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite cannot add a primary key to an existing table"));let r=new fe(t,[new wt(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addUnique(t,e,r){let n=Array.isArray(e)?e:[e],o=r?.constraintName??qe(t,n.join("_")),s=new U("unique",{columns:n,constraintName:o}),a=new fe(t,[new Se(s)]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropForeignKey(t,e,r){let n=Y(t,e,r),o=new Ne(n),s=new fe(t,[o]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropUnique(t,e,r){let n=Array.isArray(e)?qe(t,e.join("_")):qe(t,e),o=r?.constraintName??n,s=new Ne(o),a=new fe(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new St,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new U(...e),n=new fe(t,[new Se(r)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}dropConstraint(t,e){let r=new Ne(e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addCheck(t,e,r){let n=r?.constraintName??`chk_${t}_custom`.substring(0,63),o=new U("check",{checkExpression:e,constraintName:n}),s=new fe(t,[new Se(o)]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropCheck(t,e){if(this.sqlType==="mysql"){this.rawQuery(`ALTER TABLE \`${t}\` DROP CHECK \`${e}\``);return}let r=new Ne(e),n=new fe(t,[r]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}createExtension(t,e=true){let r=new Fr(t,e),n=this.generateAstInstance({table:"",databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}generateAutoUpdateTriggers(t,e){if(this.sqlType==="mysql"||this.sqlType==="mariadb")return;let r=e.filter(n=>n.folder==="column"&&n.autoUpdate===true).map(n=>C(n.column));for(let n of r){let o=this.getAutoUpdateTriggerSql(t,n);for(let s of o)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`];default:return []}}generateAstInstance(t){return new b(t,this.sqlType)}};var Zr,Ky,Vt=class{constructor(t,e){Nu(this,Zr);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new de(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=qu(this,Zr,Ky).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(`;
|
|
259
|
+
`)}async execute(){if(this.state!=="executed"){if(this.state==="failed")throw this.executionError;return this.then()}}isExecuted(){return this.state==="executed"}isPending(){return this.state==="pending"}hasFailed(){return this.state==="failed"}async hasTable(t){return this.dataSource.hasTable(t)}async hasColumn(t,e){return this.dataSource.hasColumn(t,e)}async hasColumns(t,...e){return this.dataSource.hasColumns(t,...e)}async hasIndex(t,e){return this.dataSource.hasIndex(t,e)}async hasPrimaryKey(t){return this.dataSource.hasPrimaryKey(t)}async hasUnique(t,e){return this.dataSource.hasUnique(t,e)}async hasForeignKey(t,e){return this.dataSource.hasForeignKey(t,e)}async hasCheckConstraint(t,e){return this.dataSource.hasCheckConstraint(t,e)}async getTables(){return this.dataSource.getTables()}async getColumnListing(t){return this.dataSource.getColumnListing(t)}dropTableIfExists(t){return this.schema.dropTable(t,true),this}async dropIndexIfExists(t,e){if(await this.dataSource.hasIndex(e,t)){let n=new de(this.dataSource.getDbType());n.dropIndex(t,e);let o=n.queryStatements[0];o&&await this.dataSource.rawQuery(o);}}renameColumn(t,e,r){return this.schema.alterTable(t,n=>{n.renameColumn(e,r);}),this}};Zr=new WeakSet,Ky=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 xe=class{constructor(t,e){this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var Xr=class{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}buildDropDependencies(t){let e=new Map,r=new Map,n=new Map;for(let o of t.relationsToDrop||[]){let s=`${o.table}.${o.relation.name}`,a=[];if(o.relation.referencedTable&&a.push(`table.${o.relation.referencedTable}`),o.relation.referencedColumns)for(let l of o.relation.referencedColumns)a.push(`column.${o.relation.referencedTable}.${l}`);e.set(s,a);}for(let o of t.tablesToDrop||[]){let s=`table.${o.table}`,a=[];for(let l of this.models){let u=l.getRelations();for(let d of u)d.type==="belongsTo"&&d.model().table===o.table&&a.push(`fk.${l.table}.${d.constraintName}`);}r.set(s,a);}for(let o of t.columnsToDrop||[]){let s=`column.${o.table}.${o.column}`,a=[],l=this.models.find(u=>u.table===o.table);if(l){let u=l.getColumns().find(d=>d.databaseName===o.column);if(u){u.isPrimary&&a.push(`pk.${o.table}`);let d=l.getRelations();for(let m of d)m.columnName===u.columnName&&a.push(`fk.${o.table}.${m.constraintName}`);}}n.set(s,a);}return {foreignKeys:e,tables:r,constraints:n}}topologicalSortReverse(t,e){let r=new Set,n=new Set,o=[],s=a=>{if(n.has(a))throw new Error(`Circular dependency detected: ${a}`);if(r.has(a))return;n.add(a);let l=e(a);for(let u of l)s(u);n.delete(a),r.add(a),o.push(a);};for(let a of t.keys())r.has(a)||s(a);return o}generateDropOperations(t){let e=this.buildDropDependencies(t),r=[],n=this.topologicalSortReverse(e.foreignKeys,s=>e.foreignKeys.get(s)||[]);for(let s of n){let[a,l]=s.split("."),u=t.relationsToDrop?.find(d=>d.table===a&&d.relation.name===l);u&&r.push({type:"DROP_FOREIGN_KEY",phase:"DESTRUCTIVE_OPERATIONS",table:a,constraint:l,data:u,dependencies:e.foreignKeys.get(s)||[],sqlStatements:this.generateDropForeignKeySql(u)});}let o=this.topologicalSortReverse(e.tables,s=>e.tables.get(s)||[]);for(let s of t.columnsToDrop||[]){let a=`column.${s.table}.${s.column}`,l=e.constraints.get(a)||[];for(let u of l)u.startsWith("pk.")?r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:"PRIMARY KEY",data:{type:"primary_key",table:s.table},dependencies:[a],sqlStatements:this.generateDropPrimaryKeySql(s.table)}):u.startsWith("unique.")&&r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:`UNIQUE_${s.column}`,data:{type:"unique",table:s.table,column:s.column},dependencies:[a],sqlStatements:this.generateDropUniqueConstraintSql(s.table,s.column)});}for(let s of t.columnsToDrop||[])r.push({type:"DROP_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,column:s.column,data:s,dependencies:[],sqlStatements:this.generateDropColumnSql(s)});for(let s of o){let a=s.replace("table.",""),l=t.tablesToDrop?.find(u=>u.table===a);l&&r.push({type:"DROP_TABLE",phase:"DESTRUCTIVE_OPERATIONS",table:a,data:l,dependencies:e.tables.get(s)||[],sqlStatements:this.generateDropTableSql(l)});}return r}analyzeConstraintImpact(t){let e=new Map;for(let r of t.columnsToDrop||[]){let n=[],o=this.models.find(s=>s.table===r.table);if(o){let s=o.getColumns().find(a=>a.databaseName===r.column);if(s){s.isPrimary&&n.push(`PRIMARY KEY on ${r.table}`);let a=o.getRelations();for(let l of a)l.columnName===s.columnName&&n.push(`FOREIGN KEY ${l.constraintName} on ${r.table}`);}}e.set(`${r.table}.${r.column}`,n);}return e}detectMixedOperations(t){let e=[];for(let r of t.columnsToModify||[]){let n=this.models.find(o=>o.table===r.table);n&&n.getColumns().find(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,n=>{n.dropConstraint(t.relation.name);}).toQueries(),r=this.sql.getDbType();return (r==="mysql"||r==="mariadb")&&e.push(`DROP INDEX \`${t.relation.name}\` ON \`${t.table}\``),e}generateDropPrimaryKeySql(t){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,e=>{e.dropPrimaryKey();}).toQueries()}generateDropUniqueConstraintSql(t,e){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,r=>{r.dropConstraint(`UNIQUE_${e}`);}).toQueries()}generateDropColumnSql(t){return this.sql.schema().alterTable(t.table,e=>{e.dropColumn(t.column);}).toQueries()}generateDropTableSql(t){return [`DROP TABLE ${t.table}`]}};var Gl=i=>String(i??"").replace(/::[a-z_ ]+$/i,"").replace(/[()\s]/g,"").toLowerCase(),Ph=/^(current[ _]?timestamp\d*|now\d*|getdate\d*|localtimestamp\d*|localtime\d*)$/,Eh={postgres:i=>i.includes("nextval"),cockroachdb:i=>i.includes("unique_rowid")},Bh={postgres:["gen_random_uuid"],cockroachdb:["gen_random_uuid"],mysql:["uuid"],mariadb:["uuid"],mssql:["newid"],sqlite:["lower(hex(randomblob(16)))"]},Wy=(i,t)=>(Bh[i]??[]).includes(Gl(t)),Rt=(i,t)=>!!i.autoCreate&&Ph.test(Gl(t)),_t=(i,t,e)=>{if(t.type!=="increment"&&t.type!=="bigIncrement")return false;let r=Eh[i];return r?r(Gl(e)):false};var en=class en{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new Xr(t);}generateOperations(t){let e=[];e.push(...this.generateStructureCreationOperations(t)),e.push(...this.generateConstraintCreationOperations(t)),e.push(...this.generateDestructiveOperations(t)),e.push(...this.generateColumnModificationOperations(t));let r=l=>l.table&&l.constraint?`${l.table}::${l.constraint}`:void 0,n=new Set(e.filter(l=>l.type==="ADD_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),o=new Set(e.filter(l=>l.type==="DROP_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),s=new Set([...n].filter(l=>o.has(l)));return e.filter(l=>{let u=r(l);return u?!(s.has(u)&&(l.type==="ADD_FOREIGN_KEY"||l.type==="DROP_FOREIGN_KEY")):true})}generateStructureCreationOperations(t){let e=[];for(let r of t.tablesToAdd){let n=this.sql.schema().createTable(r.table,o=>{for(let s of r.columns){if(Array.isArray(s.type)){o.enum(s.databaseName,s.type);continue}s.type&&this.executeBuilderMethod(r.table,o,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:[n]});}for(let r of t.columnsToAdd){let n=this.generateAddColumnViaAlter(r);e.push({type:"ADD_COLUMN",phase:"STRUCTURE_CREATION",table:r.table,column:r.column.databaseName,data:r,dependencies:[`table.${r.table}`],sqlStatements:n});}return e}generateConstraintCreationOperations(t){let e=[];for(let n of t.uniquesToDrop||[]){let o=this.sql.schema().alterTable(n.table,s=>{s.dropConstraint(n.name);}).toQueries();e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:o});}let r=new Set((t.uniquesToDrop||[]).map(n=>n.name));for(let n of t.indexesToDrop){if(r.has(n.index))continue;let o=new de(this.sql.getDbType());o.dropIndex(n.index,n.table);let s=o.queryStatements[0];e.push({type:"DROP_INDEX",phase:"CONSTRAINT_CREATION",table:n.table,index:n.index,data:n,dependencies:[`table.${n.table}`],sqlStatements:[s]});}for(let n of t.primaryKeysToAdd){let a=this.models.find(u=>u.table===n.table)?.getColumns().find(u=>u.columnName===n.columns[0])?.primaryKeyConstraintName||Ce(n.table,n.columns[0]),l=this.sql.schema().alterTable(n.table,u=>{let d=a||Ce(n.table,n.columns[0]);u.addConstraint("primary_key",{columns:[n.columns[0]],constraintName:d});}).toQueries();e.push({type:"ADD_PRIMARY_KEY",phase:"CONSTRAINT_CREATION",table:n.table,constraint:a,data:n,dependencies:[`table.${n.table}`],sqlStatements:l});}for(let n of t.relationsToAdd){if(n.relation.type==="manyToMany")continue;let o=this.generateAddRelationViaAlter(n),s=this.computeFkConstraintName(n);e.push({type:"ADD_FOREIGN_KEY",phase:"CONSTRAINT_CREATION",table:n.table,constraint:s,data:n,dependencies:this.getForeignKeyDependencies(n),sqlStatements:o});}for(let n of t.uniquesToAdd||[]){let o=this.models.find(l=>l.table===n.table),s=(n.columns||[]).map(l=>o?.getColumns().find(d=>d.columnName===l)?.databaseName||l),a=this.sql.schema().alterTable(n.table,l=>{l.addConstraint("unique",{columns:s,constraintName:n.name||"mandatory"});}).toQueries();e.push({type:"ADD_UNIQUE_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name||"mandatory",data:n,dependencies:[`table.${n.table}`],sqlStatements:a});}for(let n of t.indexesToAdd){let o=this.generateCreateIndexSql(n);e.push({type:"CREATE_INDEX",phase:"CONSTRAINT_CREATION",table:n.table,index:n.index,data:n,dependencies:[`table.${n.table}`],sqlStatements:[o]});}for(let n of t.checksToDrop||[]){let o=new de(this.sql.getDbType());o.dropCheck(n.table,n.name);let s=o.queryStatements;e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:s});}for(let n of t.checksToAdd||[]){let o=new de(this.sql.getDbType());o.addCheck(n.table,n.expression,{constraintName:n.name});let s=o.queryStatements;e.push({type:"ADD_CHECK_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.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 o=this.models.find(a=>a.table===t.table)?.getColumns()||[],s=t.relation.columnName;return t.relation.type==="belongsTo"?s=o.find(l=>l.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey:s=o.find(l=>l.columnName===s)?.databaseName||s,Y(t.table,s,r)}generateDestructiveOperations(t){return this.dropResolver.generateDropOperations(t)}generateColumnModificationOperations(t){let e=[];for(let r of t.columnsToModify||[]){let n=this.generateModifyColumnViaAlter(r);e.push({type:"MODIFY_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:r.table,column:r.dbColumns.name,data:r,dependencies:[],sqlStatements:n});}return e}getForeignKeyDependencies(t){let e=[];if(t.relation.type==="belongsTo"){let n=t.relation.model();e.push(`table.${n.table}`);let o=n.primaryKey||"id",s=n.getColumns().find(a=>a.columnName===o);s&&e.push(`column.${n.table}.${s.databaseName}`);}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let n=C(t.relation.manyToManyOptions.throughModel);e.push(`table.${n}`);}e.push(`table.${t.table}`);let r=this.models.find(n=>n.table===t.table);if(r){let n=r.getColumns().find(o=>o.columnName===t.relation.columnName||o.databaseName===t.relation.columnName);n&&e.push(`column.${t.table}.${n.databaseName}`);}return e}applyNullableConstraint(t,e){return e===false?t.notNullable():e===true||this.sql.getDbType()==="mariadb"?t.nullable():t}executeBuilderMethod(t,e,r,n,o=true){let s;if(Array.isArray(r.type))s=e.enum(n[0],r.type);else if(typeof r.type=="string"&&en.BUILTIN_COLUMN_TYPES.has(r.type))s=e[r.type](...n);else if(typeof r.type=="string")s=e.custom(n[0],r.type,r.length);else throw new Error(`Unknown column type: ${String(r.type)} for column ${r.columnName}`);return o&&(r.isPrimary&&s.primaryKey({constraintName:r.primaryKeyConstraintName||Ce(t,r.columnName)}),r.unsigned&&s.unsigned(),r.zerofill&&s.zerofill(),r.constraints?.default!==void 0&&s.default(r.constraints.default),this.applyNullableConstraint(s,r.constraints?.nullable)),s}generateAddColumnViaAlter(t){let e=[t.column.databaseName,t.column.length,t.column.precision&&!t.column.withTimezone?t.column.precision:void 0,t.column.scale,t.column.withTimezone?{withTimezone:t.column.withTimezone,precision:t.column.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,r=>{r.addColumn(n=>{let o=this.executeBuilderMethod(t.table,n,t.column,e,false);return t.column.constraints?.default!==void 0&&o.default(t.column.constraints.default),this.applyNullableConstraint(o,t.column.constraints?.nullable),o});}).toQueries()}generateModifyColumnViaAlter(t){if(this.sql.getDbType()==="sqlite")return [];let e=[t.modelColumn.databaseName,t.modelColumn.length,t.modelColumn.precision&&!t.modelColumn.withTimezone?t.modelColumn.precision:void 0,t.modelColumn.scale,t.modelColumn.withTimezone?{withTimezone:t.modelColumn.withTimezone,precision:t.modelColumn.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,n=>{n.alterColumn(o=>{let s=this.executeBuilderMethod(t.table,o,t.modelColumn,e,false);return t.modelColumn.constraints?.default!==void 0?s.default(t.modelColumn.constraints.default):t.dbColumns.defaultValue!=null&&t.dbColumns.defaultValue!==""&&!Rt(t.modelColumn,t.dbColumns.defaultValue)&&!_t(this.sql.getDbType(),t.modelColumn,t.dbColumns.defaultValue)&&s.default(null),this.applyNullableConstraint(s,t.modelColumn.constraints?.nullable),s});}).toQueries()}generateCreateIndexSql(t){let e=this.models.find(s=>s.table===t.table),n=(e?.getIndexes().find(s=>s.name===t.index)?.columns||[]).map(s=>e?.getColumns().find(l=>l.columnName===s)?.databaseName||s),o=new de(this.sql.getDbType());return o.createIndex(t.table,n,{constraintName:t.index}),o.queryStatements[0]||""}generateAddRelationViaAlter(t){let e=t.table,r=t.relation.foreignKey;t.relation.type==="belongsTo"?(e=t.relation.model().table,r=t.relation.model().primaryKey||"id"):t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(e=C(t.relation.manyToManyOptions.throughModel),r=C(t.relation.manyToManyOptions.rightForeignKey),(!r||r==="undefined")&&(r=t.relation.model().primaryKey||"id"));let n=typeof t.relation.constraintName=="string"?t.relation.constraintName:void 0,o=C(r);if(t.relation.type==="belongsTo"){let c=t.relation.model(),p=c.primaryKey,y=c.getColumns().find(w=>w.columnName===p);if(y)o=y.databaseName;else {let w=c?.databaseCaseConvention||"preserve";o=H(p,w);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let c=t.relation.model();if(typeof o=="string"&&o){let p=c.getColumns(),h=p.find(y=>y.columnName===o);if(h)o=h.databaseName;else {let y=c.primaryKey||"id",w=p.find(S=>S.columnName===y);if(w)o=w.databaseName;else {let S=c?.databaseCaseConvention||"preserve";o=H(o||y,S);}}}else {let p=c.primaryKey||"id",y=c.getColumns().find(w=>w.columnName===p);if(y)o=y.databaseName;else {let w=c?.databaseCaseConvention||"preserve";o=H(p,w);}}}let s=this.models.find(c=>c.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,u=a.find(c=>c.columnName===l);if(u)l=u.databaseName;else {let c=s?.databaseCaseConvention||"preserve";l=H(l,c);}if(t.relation.type==="belongsTo"){let c=a.find(p=>p.columnName===t.relation.foreignKey);if(c)l=c.databaseName;else {let p=s?.databaseCaseConvention||"preserve";l=H(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let c=t.relation.manyToManyOptions.leftForeignKey,p=C(c),h=a.find(y=>y.columnName===p);if(h)l=h.databaseName;else {let y=s?.databaseCaseConvention||"preserve";l=H(p,y);}}let d=t.relation.onDelete?.toLowerCase(),m=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,c=>{let p=n||Y(t.table,l,e);c.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[o]},constraintName:p,onDelete:d,onUpdate:m});}).toQueries()}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};en.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 Jt=en;var rn=class rn{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}generateCode(t){let e=[],r=[],n=null,o={STRUCTURE_CREATION:"Structure creation",CONSTRAINT_CREATION:"Constraints and indexes",DESTRUCTIVE_OPERATIONS:"Destructive operations"};for(let s of t){s.phase!==n&&(n=s.phase,e.length>0&&e.push(""),e.push(`// ${o[n]}`));let{up:a,down:l}=this.generateOperationCode(s);a&&e.push(...a),l&&r.push(...l);}return {up:e,down:r}}generateOperationCode(t){switch(t.type){case "CREATE_TABLE":return this.generateCreateTableCode(t);case "ADD_COLUMN":return this.generateAddColumnCode(t);case "MODIFY_COLUMN":return this.generateModifyColumnCode(t);case "DROP_COLUMN":return this.generateDropColumnCode(t);case "CREATE_INDEX":return this.generateCreateIndexCode(t);case "DROP_INDEX":return this.generateDropIndexCode(t);case "ADD_FOREIGN_KEY":return this.generateAddForeignKeyCode(t);case "DROP_FOREIGN_KEY":return this.generateDropForeignKeyCode(t);case "ADD_UNIQUE_CONSTRAINT":return this.generateAddUniqueCode(t);case "DROP_CONSTRAINT":return this.generateDropConstraintCode(t);case "ADD_CHECK_CONSTRAINT":return this.generateAddCheckCode(t);case "ADD_PRIMARY_KEY":return this.generateAddPrimaryKeyCode(t);case "DROP_TABLE":return this.generateDropTableCode(t);case "MODIFY_PRIMARY_KEY":return this.generateModifyPrimaryKeyCode(t);default:return {up:null,down:null}}}generateCreateTableCode(t){let e=t.data,r=[];r.push(`this.schema.createTable(${this.quote(e.table)}, (table) => {`);for(let o of e.columns){let s=this.generateColumnCode(e.table,o,true);r.push(` ${s}`);}r.push("});");let n=[`this.schema.dropTable(${this.quote(e.table)});`];return {up:r,down:n}}generateAddColumnCode(t){let{table:e,column:r}=t.data,n=this.generateColumnCode(e,r,false),o=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.addColumn((col) => ${n.replace(/^table\./,"col.")});`,"});"],s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r.databaseName)});`,"});"];return {up:o,down:s}}generateModifyColumnCode(t){let{table:e,modelColumn:r,dbColumns:n}=t.data,o=this.generateColumnCodeForModify(e,r,n),s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.alterColumn((col) => ${o.replace(/^table\./,"col.")});`,"});"],a=[`// TODO: reverse column modification for ${this.quote(n.name)} on ${this.quote(e)}`];return {up:s,down:a}}generateDropColumnCode(t){let{table:e,column:r}=t.data,n=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r)});`,"});"],o=[`// TODO: reverse column drop for ${this.quote(r)} on ${this.quote(e)}`];return {up:n,down:o}}generateCreateIndexCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=(r?.getIndexes().find(u=>u.name===e.index)?.columns||[]).map(u=>r?.getColumns().find(m=>m.columnName===u)?.databaseName||u),s=o.length===1?this.quote(o[0]):`[${o.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.createIndex(${this.quote(e.table)}, ${s}, { constraintName: ${this.quote(e.index)} });`],l=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`];return {up:a,down:l}}generateDropIndexCode(t){let e=t.data,r=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`],n=[`// TODO: reverse index drop for ${this.quote(e.index)} on ${this.quote(e.table)}`];return {up:r,down:n}}generateAddForeignKeyCode(t){let e=t.data,{sourceColumn:r,referencedTable:n,referencedColumn:o,constraintName:s}=this.resolveRelationDetails(e),a=e.relation.onDelete?.toLowerCase(),l=e.relation.onUpdate?.toLowerCase(),u=[];s&&u.push(`constraintName: ${this.quote(s)}`),a&&u.push(`onDelete: ${this.quote(a)}`),l&&u.push(`onUpdate: ${this.quote(l)}`);let d=u.length>0?`, { ${u.join(", ")} }`:"",m=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.foreignKey(${this.quote(r)}, ${this.quote(n)}, ${this.quote(o)}${d});`,"});"],c=s||Y(e.table,r,n),p=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.dropConstraint(${this.quote(c)});`,"});"];return {up:m,down:p}}generateDropForeignKeyCode(t){let e=t.constraint||t.data?.relation?.name;if(!e)return {up:null,down:null};let r=t.table||t.data?.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(e)});`,"});"],o=[`// TODO: reverse FK drop for ${this.quote(e)} on ${this.quote(r)}`];return {up:n,down:o}}generateAddUniqueCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=`[${(e.columns||[]).map(u=>r?.getColumns().find(m=>m.columnName===u)?.databaseName||u).map(u=>this.quote(u)).join(", ")}]`,s=e.name||"mandatory",a=[`this.schema.addUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(s)} });`],l=[`this.schema.dropUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(s)} });`];return {up:a,down:l}}generateDropConstraintCode(t){let e=t.data,r=t.table||e.table,n=t.constraint||e.name;if(!n||!r)return {up:null,down:null};if(e.type==="primary_key"){let a=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});"],l=[`// TODO: reverse primary key drop on ${this.quote(r)}`];return {up:a,down:l}}if(e.type==="unique"){let a=e.column,l=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],u=[`// TODO: reverse unique constraint drop for ${this.quote(a)} on ${this.quote(r)}`];return {up:l,down:u}}if(e.expression!==void 0){let a=[`this.schema.dropCheck(${this.quote(r)}, ${this.quote(n)});`],l=[`// TODO: reverse check constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:a,down:l}}let o=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],s=[`// TODO: reverse constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:o,down:s}}generateAddCheckCode(t){let e=t.data,r=[`this.schema.addCheck(${this.quote(e.table)}, ${this.quote(e.expression)}, { constraintName: ${this.quote(e.name)} });`],n=[`this.schema.dropCheck(${this.quote(e.table)}, ${this.quote(e.name)});`];return {up:r,down:n}}generateAddPrimaryKeyCode(t){let e=t.data,o=this.models.find(u=>u.table===e.table)?.getColumns().find(u=>u.columnName===e.columns[0])?.primaryKeyConstraintName||Ce(e.table,e.columns[0]),s=`[${e.columns.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.addConstraint("primary_key", { columns: ${s}, constraintName: ${this.quote(o)} });`,"});"],l=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`," table.dropPrimaryKey();","});"];return {up:a,down:l}}generateDropTableCode(t){let e=t.table||t.data?.table,r=[`this.schema.dropTable(${this.quote(e)});`],n=[`// TODO: reverse table drop for ${this.quote(e)}`];return {up:r,down:n}}generateModifyPrimaryKeyCode(t){let e=t.data,r=e.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});",`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.addPrimaryKey(${this.quote(e.modelPrimaryKey)});`,"});"],o=[`// TODO: reverse primary key modification on ${this.quote(r)}`];return {up:n,down:o}}generateColumnCode(t,e,r){let n=this.generateColumnTypeCode(e);if(!r)return n;if(e.isPrimary){let o=e.primaryKeyConstraintName||Ce(t,e.columnName);n+=`.primaryKey({ constraintName: ${this.quote(o)} })`;}return e.unsigned&&(n+=".unsigned()"),e.zerofill&&(n+=".zerofill()"),e.constraints?.default!==void 0&&(n+=`.default(${this.formatDefaultValue(e.constraints.default)})`),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n+";"}generateColumnCodeForModify(t,e,r){let n=this.generateColumnTypeCode(e);return e.constraints?.default!==void 0?n+=`.default(${this.formatDefaultValue(e.constraints.default)})`:r.defaultValue!=null&&r.defaultValue!==""&&!Rt(e,r.defaultValue)&&!_t(this.sql.getDbType(),e,r.defaultValue)&&(n+=".default(null)"),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n}generateColumnTypeCode(t){let e=t.databaseName;if(Array.isArray(t.type)){let s=t.type.map(a=>this.quote(a)).join(", ");return `table.enum(${this.quote(e)}, [${s}])`}let r=t.type;if(new Set(["uuid","ulid","boolean","year","json","jsonb","binary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]).has(r))return `table.${r}(${this.quote(e)})`;if(r==="timestamp"||r==="datetime"){let s=[];return t.withTimezone&&s.push("withTimezone: true"),t.precision!=null&&s.push(`precision: ${t.precision}`),s.length>0?`table.${r}(${this.quote(e)}, { ${s.join(", ")} })`:`table.${r}(${this.quote(e)})`}return r==="date"||r==="time"?t.precision!=null?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="increment"||r==="bigIncrement"?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:r==="decimal"||r==="numeric"?t.precision!=null?t.scale!=null?`table.${r}(${this.quote(e)}, ${t.precision}, ${t.scale})`:`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="float"||r==="double"||r==="real"?t.precision!=null&&t.precision!==10?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="longtext"||r==="mediumtext"||r==="tinytext"?`table.${r}(${this.quote(e)})`:new Set(["varchar","char","string","integer","tinyint","smallint","mediumint","bigint","biginteger","varbinary"]).has(r)?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:rn.BUILTIN_COLUMN_TYPES.has(r)?`table.${r}(${this.quote(e)})`:t.length!=null?`table.custom(${this.quote(e)}, ${this.quote(r)}, ${t.length})`:`table.custom(${this.quote(e)}, ${this.quote(r)})`}resolveRelationDetails(t){let e=t.table,r="id";if(t.relation.type==="belongsTo"){let l=t.relation.model();e=l.table;let u=l.primaryKey||"id";r=l.getColumns().find(c=>c.columnName===u)?.databaseName||u;}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){e=C(t.relation.manyToManyOptions.throughModel);let l=C(t.relation.manyToManyOptions.rightForeignKey);l&&l!=="undefined"?r=l:r=t.relation.model().primaryKey||"id";}let o=this.models.find(l=>l.table===t.table)?.getColumns()||[],s=t.relation.columnName;if(t.relation.type==="belongsTo")s=o.find(u=>u.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey;else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let l=C(t.relation.manyToManyOptions.leftForeignKey);s=o.find(d=>d.columnName===l)?.databaseName||l;}else s=o.find(u=>u.columnName===s)?.databaseName||s;let a=typeof t.relation.constraintName=="string"?t.relation.constraintName:C(t.relation.constraintName)||void 0;return {sourceColumn:s,referencedTable:e,referencedColumn:r,constraintName:a}}quote(t){return `"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}formatDefaultValue(t){return t==null?"null":t==="NULL"?'"NULL"':typeof t=="boolean"||typeof t=="number"?t.toString():t==="TRUE"||t==="true"?"true":t==="FALSE"||t==="false"?"false":this.quote(String(t))}};rn.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 tn=rn;function Qh(i){return i.replace(/\s+/g," ").trim()}function Kh(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function Lh(i){let t=i.split(/\s+/).filter(n=>n.length>0),e=[],r=[];for(let n of t)n==="unsigned"||n==="zerofill"?e.push(n):r.push(n);return {bareBase:r.join(" "),modifiers:e}}function Wh(i,t){return t.length===0?i:`${i} ${t.join(" ")}`}function Ve(i,t){let e=Qh(t.toLowerCase()),r=Kh(e);switch(i){case "sqlite":{let n=[{test:o=>o==="increment",normalized:"integer"},{test:o=>o==="bigincrement",normalized:"integer"},{test:o=>o.includes("int"),normalized:"integer"},{test:o=>o==="string",normalized:"varchar"},{test:o=>o.includes("char"),normalized:"varchar"},{test:o=>o.includes("text"),normalized:"text"},{test:o=>o.includes("clob"),normalized:"text"},{test:o=>o.includes("date"),normalized:"text"},{test:o=>o.includes("time"),normalized:"text"},{test:o=>o.includes("timestamp"),normalized:"text"},{test:o=>o.includes("datetime"),normalized:"text"},{test:o=>o.includes("blob"),normalized:"blob"},{test:o=>o.includes("real")||o.includes("floa")||o.includes("doub"),normalized:"real"},{test:o=>o.includes("numeric"),normalized:"numeric"},{test:o=>o.includes("bool"),normalized:"integer"},{test:o=>o.includes("uuid"),normalized:"varchar"},{test:o=>o.includes("ulid"),normalized:"varchar"},{test:o=>o.includes("jsonb"),normalized:"text"},{test:o=>o.includes("json"),normalized:"text"}];for(let o of n)if(o.test(r))return o.normalized;return r}case "mysql":case "mariadb":{let{bareBase:n,modifiers:o}=Lh(r),a=new Set(["int","integer","increment","tinyint","smallint","mediumint","bigint","bigincrement","float","double","double precision","real","decimal","numeric","year","bool","boolean"]).has(n);if(n.endsWith("text")||n==="text")return "text";let l;switch(n){case "int":case "integer":case "increment":l="integer";break;case "tinyint":l="boolean";break;case "smallint":l="smallint";break;case "mediumint":l="mediumint";break;case "bigint":case "bigincrement":l="bigint";break;case "float":l="float";break;case "double":case "double precision":l="double";break;case "real":l="double";break;case "decimal":case "numeric":l="numeric";break;case "string":case "varchar":case "character varying":l="varchar";break;case "char":case "character":l="char";break;case "uuid":l="varchar";break;case "ulid":l="varchar";break;case "date":l="date";break;case "datetime":l="datetime";break;case "timestamp":l="timestamp";break;case "time":l="time";break;case "year":l="year";break;case "jsonb":case "json":l=i==="mariadb"?"text":"json";break;case "enum":l="enum";break;case "binary":l="binary";break;case "varbinary":l="varbinary";break;case "tinyblob":l="tinyblob";break;case "mediumblob":l="mediumblob";break;case "longblob":l="longblob";break;case "blob":l="blob";break;case "boolean":case "bool":l="boolean";break;default:l=n;break}return a&&o.length>0?Wh(l,o):l}case "postgres":case "cockroachdb":{if(r.endsWith("text")||r==="text")return "text";if(r.startsWith("timestamp"))return "timestamp";if(r.startsWith("time"))return "time";if(r==="datetime")return "timestamp";switch(r){case "string":case "varchar":case "character varying":return "varchar";case "char":case "character":return "char";case "ulid":return "varchar";case "double precision":return "double";case "real":return "real";case "float":return "real";case "integer":case "int4":case "int":case "increment":case "serial":return "integer";case "mediumint":return "integer";case "bigint":case "int8":case "bigincrement":case "bigserial":return "bigint";case "smallint":case "int2":return "smallint";case "tinyint":return "smallint";case "uuid":return "uuid";case "year":return "smallint";case "bytea":return "bytea";case "binary":case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":return "bytea";case "boolean":case "bool":return "boolean";case "numeric":case "decimal":return "numeric";case "jsonb":return "jsonb";case "json":return "json";case "date":return "date";default:return r}}case "mssql":{if(r.endsWith("text")||r==="text"||r==="ntext")return "text";if(r.startsWith("datetime2"))return "datetime2";if(r.startsWith("datetimeoffset"))return "datetimeoffset";switch(r){case "int":case "integer":case "increment":return "int";case "tinyint":return "tinyint";case "smallint":return "smallint";case "bigint":case "bigincrement":return "bigint";case "float":return "float";case "real":return "real";case "double":case "double precision":return "float";case "decimal":case "numeric":return "decimal";case "money":return "money";case "smallmoney":return "smallmoney";case "string":case "varchar":case "character varying":return "varchar";case "nvarchar":return "nvarchar";case "char":case "character":return "char";case "nchar":return "nchar";case "uuid":case "uniqueidentifier":return "uniqueidentifier";case "ulid":return "varchar";case "date":return "date";case "datetime":return "datetime";case "smalldatetime":return "smalldatetime";case "time":return "time";case "timestamp":return "datetime2";case "binary":return "binary";case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":case "bytea":return "varbinary";case "image":return "image";case "bit":case "boolean":case "bool":return "bit";case "json":case "jsonb":return "nvarchar";case "xml":return "xml";case "sql_variant":return "sql_variant";default:return r}}default:return r}}var ot=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 n=await e.sql.getTableSchema(r.table),o={columns:r.getColumns().filter(y=>y?.type!==void 0&&y?.type!==null),indexes:r.getIndexes(),relations:r.getRelations()};if(!n.columns.length){e.data.tablesToAdd.push({table:r.table,columns:o.columns});for(let S of o.indexes)n.indexes.map(q=>q.name).includes(S.name)||e.data.indexesToAdd.push({table:r.table,index:S.name});let y=r.getUniques?.()||[];for(let S of y)e.data.uniquesToAdd.push({table:r.table,name:S.name||"mandatory",columns:S.columns});let w=r.getChecks?.()||[];for(let S of w)e.data.checksToAdd.push({table:r.table,name:S.name,expression:S.expression});for(let S of o.relations){if(S.type!=="belongsTo")continue;let q=C(S.constraintName);n.foreignKeys.find(R=>R.name===q)||e.data.relationsToAdd.push({table:r.table,relation:S,onDelete:S.onDelete,onUpdate:S.onUpdate});}return}for(let y of o.columns)n.columns.some(S=>S.name===y.databaseName||S.name===y.columnName)||e.data.columnsToAdd.push({table:r.table,column:y});let s=r.getColumns();for(let y of n.columns)s.some(S=>S.databaseName===y.name||S.columnName===y.name)||e.data.columnsToDrop.push({table:r.table,column:y.name});for(let y of o.indexes)n.indexes.map(w=>w.name).includes(y.name)||e.data.indexesToAdd.push({table:r.table,index:y.name});let a=r.getUniques?.()||[];for(let y of a)n.indexes.some(S=>S.name===y.name&&S.isUnique)||e.data.uniquesToAdd.push({table:r.table,name:y.name||"mandatory",columns:y.columns});let l=n.foreignKeys.map(y=>y.name);for(let y of n.indexes)y.isUnique||l.includes(y.name)||o.indexes.map(S=>S.name).includes(y.name)||e.data.indexesToDrop.push({table:r.table,index:y.name});for(let y of n.indexes){if(!y.isUnique||y.name==="PRIMARY")continue;(r.getUniques?.()||[]).map(S=>S.name).includes(y.name)||e.data.uniquesToDrop.push({table:r.table,name:y.name});}let u=r.getChecks?.()||[];for(let y of u)n.checkConstraints.some(S=>S.name===y.name)||e.data.checksToAdd.push({table:r.table,name:y.name,expression:y.expression});let d=new Set(u.map(y=>y.name)),m=o.columns.filter(y=>Array.isArray(y.type)),c=new Set(m.map(y=>y.databaseName||y.columnName));for(let y of n.checkConstraints)if(!d.has(y.name)){let w=[...c].find(S=>{let q=S.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),M=new RegExp(`[\\["\\[]?${q}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),R=new RegExp(`[\\("\\[]?${q}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return M.test(y.expression)||R.test(y.expression)});if(w){let S=m.find(M=>(M.databaseName||M.columnName)===w),q=n.columns.find(M=>M.name===w);if(S&&q?.enumValues&&Array.isArray(S.type)){let M=[...S.type].sort(),R=[...q.enumValues].sort();if(!(M.length===R.length&&M.every(($,A)=>$===R[A]))){e.data.checksToDrop.push({table:r.table,name:y.name});let $=e.sql.getDbType(),A=$==="mssql"?"[":'"',Q=$==="mssql"?"]":'"',ye=S.type.map(E=>`'${E.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:y.name,expression:`${A}${w}${Q} IN (${ye})`});}}}else e.data.checksToDrop.push({table:r.table,name:y.name});}for(let y of o.columns){let w=n.columns.find(M=>M.name===y.databaseName||M.name===y.columnName);if(!w)continue;let S=!e.areColumnsEqual(w,y,n.indexes),q=e.getDefaultChange({table:r.table,dbColumns:w,modelColumn:y});(S||q)&&e.data.columnsToModify.push({table:r.table,dbColumns:w,modelColumn:y});}for(let y of o.relations){if(y.type!=="belongsTo"&&y.type!=="manyToMany")continue;if(y.type==="manyToMany"&&y.manyToManyOptions){let q=C(y.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:q,relation:{type:"belongsTo",model:()=>r,columnName:C(y.manyToManyOptions.leftForeignKey),foreignKey:y.manyToManyOptions.leftForeignKey,constraintName:y.constraintName?C(y.constraintName):Y(q,C(y.manyToManyOptions.leftForeignKey||Jl(r.table)),r.table),onDelete:y.onDelete,onUpdate:y.onUpdate},onDelete:y.onDelete,onUpdate:y.onUpdate});continue}let w=C(y.constraintName);if(w&&n.foreignKeys.some(q=>q.name===w))continue;n.foreignKeys.find(q=>e.relationMatchesDbRelation(r,y,q))||e.data.relationsToAdd.push({table:r.table,relation:y,onDelete:y.onDelete,onUpdate:y.onUpdate});}let p=new Set(o.relations.filter(y=>y.type==="belongsTo").map(y=>{let w=C(y.foreignKey)||y.columnName,q=r.getColumns().find(M=>M.columnName===w)?.databaseName||w;return C(y.constraintName)||Y(r.table,q,y.model().table)}));for(let y of n.foreignKeys){if(y.name&&p.has(y.name))continue;o.relations.find(S=>S.type!=="belongsTo"&&S.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,S,y))||e.data.relationsToDrop.push({table:r.table,relation:y});}for(let y of o.relations){if(y.type!=="belongsTo"&&y.type!=="manyToMany")continue;let w=n.foreignKeys.find(S=>e.relationMatchesDbRelation(r,y,S));w&&!e.areRelationsEqual(w,y)&&e.data.relationsToModify.push({table:r.table,dbRelation:w,modelRelation:y,onDelete:y.onDelete,onUpdate:y.onUpdate});}let h=r.primaryKey;if(h&&!n.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[h]}),n.primaryKey&&!h&&e.data.primaryKeysToDrop.push({table:r.table,columns:n.primaryKey.columns,name:n.primaryKey.name}),h&&n.primaryKey){let y=r.getColumns().find(w=>w.columnName===h);y&&!e.arePrimaryKeysEqual(n.primaryKey,y)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:n.primaryKey,modelPrimaryKey:h});}})),await e.processManyToMany(),await e.removeFkChurnByName(),e}getSqlStatements(){let t=this.getSqlStatementsByPhase();return Object.values(t).flat().filter(r=>{let n=r.trim();return n?!this.emptyStatements.some(o=>o.test(n)):false})}getCodeStatements(){let e=new Jt(this.sql).generateOperations(this.data);return new tn(this.sql).generateCode(e)}getSqlStatementsByPhase(){let t=new Jt(this.sql),e=t.generateOperations(this.data),r=t.formatSqlStatements(e),n={STRUCTURE_CREATION:[],CONSTRAINT_CREATION:[],DESTRUCTIVE_OPERATIONS:[]};for(let o of r)n[o.phase].push(...o.sqlStatements);return n}areColumnsEqual(t,e,r=[]){let n=t.name===e.databaseName,o=this.sql.getDbType(),s=Ve(o,t.dataType),a=typeof e.type=="string"?Ve(o,e.type):void 0,l=s.split(" ").filter(d=>d!=="unsigned"&&d!=="zerofill").join(" ");if(a&&n&&(n=l===a),Array.isArray(e.type)&&(o==="mysql"||o==="mariadb")){let d=[...e.type].sort(),m=t.enumValues?[...t.enumValues].sort():null;m&&n&&(n=d.length===m.length&&d.every((c,p)=>c===m[p]));}e.length!=null&&t.length!=null&&n&&(n=t.length===e.length);let u=a==="real"||a==="double"||a==="float";if(e.precision!=null&&t.precision!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.precision===e.precision)),e.scale!=null&&t.scale!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.scale===e.scale)),typeof e.type=="string"&&(a==="timestamp"||a==="time")&&(o==="postgres"||o==="cockroachdb")&&e.withTimezone!==void 0&&t.withTimezone!==void 0&&n&&(n=!!t.withTimezone==!!e.withTimezone),e.constraints?.nullable!==void 0){let d=e.constraints.nullable,m=t.isNullable;n=n&&d===m;}if(o==="mysql"||o==="mariadb"){if(e.unsigned!==void 0){let d=e.unsigned??false,m=t.unsigned??false;n&&(n=d===m);}if(e.zerofill!==void 0){let d=e.zerofill??false,m=t.zerofill??false;n&&(n=d===m);}}if(e.stringMode!==void 0){let d=e.stringMode??false,m=t.stringMode??false;n&&(n=d===m);}return n}areRelationsEqual(t,e){let r=C(e.constraintName),n=r?t.name===r:true;if(e.type==="belongsTo"){let u=e.model(),d=u.primaryKey||"id",m=u.getColumns().find(h=>h.columnName===d),c=u.table,p=m?.databaseName||d;n=n&&t.referencedTable===c&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===p;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let u=C(e.manyToManyOptions.throughModel);n=n&&t.referencedTable===u;}let o=t.onDelete?.toLowerCase(),s=t.onUpdate?.toLowerCase(),a=e.onDelete?.toLowerCase(),l=e.onUpdate?.toLowerCase();return a&&n&&(n=o===a),l&&n&&(n=s===l),n}relationMatchesDbRelation(t,e,r){let n,o=e;if(o&&o.model){if(typeof o.model=="function"&&o.model.table)n=o.model;else if(typeof o.model=="function")try{let y=o.model();y&&y.table&&(n=y);}catch{}}if(!n)return false;let s=e.type==="belongsTo"?n.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(),d=(o.type||"belongsTo")==="belongsTo"?C(o.foreignKey):o.columnName,m=l.find(y=>y.columnName===d);m&&(d=m.databaseName);let c=n.primaryKey||"id",h=n.getColumns().find(y=>y.columnName===c)?.databaseName||c;return r.columns.length===1&&r.columns[0]===d&&r.referencedColumns.length===1&&r.referencedColumns[0]===h}arePrimaryKeysEqual(t,e){if(t.columns.length!==1)return false;let n=t.columns[0]===e.databaseName,o=this.sql.getDbType();if(["mysql","mariadb"].includes(o))return n;let a=!t.name||!e.primaryKeyConstraintName||t.name===e.primaryKeyConstraintName;return n&&a}getDefaultChange(t){let e=this.sql.getDbType(),r=Ve(e,t.dbColumns.dataType),n=typeof t.modelColumn.type=="string"?Ve(e,t.modelColumn.type):void 0;if(n&&r!==n||t.modelColumn.length!=null&&t.dbColumns.length!=null&&t.dbColumns.length!==t.modelColumn.length||t.modelColumn.precision!=null&&t.dbColumns.precision!=null&&t.dbColumns.precision!==t.modelColumn.precision||t.modelColumn.scale!=null&&t.dbColumns.scale!=null&&t.dbColumns.scale!==t.modelColumn.scale||(this.sql.getDbType()==="postgres"||this.sql.getDbType()==="cockroachdb")&&typeof t.modelColumn.type=="string"&&(n==="timestamp"||n==="time")&&t.modelColumn.withTimezone!==void 0&&t.dbColumns.withTimezone!==void 0&&!!t.dbColumns.withTimezone!=!!t.modelColumn.withTimezone)return false;let s=t.modelColumn.constraints?.default!==void 0,a=t.dbColumns.defaultValue!==null&&t.dbColumns.defaultValue!==void 0;if(s&&!a)return "set";if(!s&&a){let l=t.dbColumns.defaultValue;return _t(e,t.modelColumn,l)||Rt(t.modelColumn,l)||t.modelColumn.type==="uuid"&&Wy(e,l)?false:"drop"}if(s&&a){let l=String(t.dbColumns.defaultValue),u=String(t.modelColumn.constraints?.default),d=this.normalizeDefaultValue(e,r,l),m=this.normalizeDefaultValue(e,n||r,u);return d!==m?"set":false}return false}normalizeDefaultValue(t,e,r){let n=String(r).trim();if(!n)return n;if(t==="postgres"||t==="cockroachdb"){if(e==="json"||e==="jsonb")try{n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::(jsonb?|[a-zA-Z_ ]+[\[\]]*)/g,"");let s=n.match(/^'(.*)'$/s);if(s&&(n=s[1]),n==="{}"||n==="")return "{}";let a=JSON.parse(n);return JSON.stringify(a)}catch{}n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::[a-zA-Z_ ]+[\[\]]*/g,"");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),/^true$/i.test(n)?"true":/^false$/i.test(n)?"false":/^null$/i.test(n)?"null":(n)}if(t==="mysql"||t==="mariadb"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);if(o&&(n=o[1]),/^current_timestamp(?:\(\d+\))?$/i.test(n))return "current_timestamp";if(e==="boolean"){if(/^1$/.test(n))return "true";if(/^0$/.test(n))return "false"}return n}if(t==="sqlite"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),n.toLowerCase()}return n}async processManyToMany(){let t=new Set;for(let e of this.models){let r=e.getRelations();for(let n of r){if(n.type!=="manyToMany"||!n.manyToManyOptions||n.manyToManyOptions.wasModelProvided)continue;let o=C(n.manyToManyOptions.throughModel);if(t.has(o))continue;t.add(o);let s=this.models.find(E=>E.table===n?.manyToManyOptions?.primaryModel),a=n.model();if(!s||!a)continue;let l=s.primaryKey||"id",u=a.primaryKey||"id",d=s.getColumns().find(E=>E.columnName===l),m=a.getColumns().find(E=>E.columnName===u);if(!d||!m)continue;let c=C(n.manyToManyOptions.leftForeignKey)||l,p=C(n.manyToManyOptions.rightForeignKey)||u,h=await this.sql.getTableSchema(o);if(!h.columns.length){this.data.tablesToAdd.push({table:o,columns:[this.clonePkAsColumn(d,c),this.clonePkAsColumn(m,p)]}),this.pushM2mFkRelations({throughTable:o,leftModel:s,rightModel:a,leftFkName:c,rightFkName:p,onDelete:n.onDelete,onUpdate:n.onUpdate,constraintName:void 0});continue}let y=this.clonePkAsColumn(d,c),w=this.clonePkAsColumn(m,p),S=h.columns.find(E=>E.name===c),q=h.columns.find(E=>E.name===p),M=S?this.areColumnsEqual(S,y,h.indexes):false,R=q?this.areColumnsEqual(q,w,h.indexes):false;for(let E of h.foreignKeys){let se=E.referencedTable===s.table,Xe=E.referencedTable===a.table;if(!se&&!Xe)continue;let Re=se?c:p,_e=E.columns[0];_e&&_e!==Re&&(this.data.relationsToDrop.push({table:o,relation:E}),_e!==c&&_e!==p&&this.data.columnsToDrop.push({table:o,column:_e}));}let D={};M||(D[y.databaseName]=y),R||(D[w.databaseName]=D[w.databaseName]||w);for(let E of Object.keys(D))this.data.columnsToAdd.push({table:o,column:D[E]});let $=this.buildBelongsToRelation(o,()=>s,c,l,void 0,n.onDelete,n.onUpdate),A=this.buildBelongsToRelation(o,n.model,p,u,void 0,n.onDelete,n.onUpdate),Q=h.foreignKeys.find(E=>E.referencedTable===s.table&&E.columns.length===1&&E.columns[0]===c),ye=h.foreignKeys.find(E=>E.referencedTable===a.table&&E.columns.length===1&&E.columns[0]===p);if(!Q){let E=h.foreignKeys.find(se=>se.referencedTable===s.table);E&&this.data.relationsToDrop.push({table:o,relation:E}),this.data.relationsToAdd.push($);}if(!ye){let E=h.foreignKeys.find(se=>se.referencedTable===a.table);E&&this.data.relationsToDrop.push({table:o,relation:E}),this.data.relationsToAdd.push(A);}}}}async removeFkChurnByName(){let t=new Set;for(let n of this.data.relationsToAdd)t.add(n.table);for(let n of this.data.relationsToDrop)t.add(n.table);let e=new Map;for(let n of t){let o=await this.sql.getTableSchema(n),s=new Set((o.foreignKeys||[]).map(a=>a.name).filter(Boolean));e.set(n,s);}let r=new Map;for(let n of this.models){let o=n.getRelations(),s=new Set;for(let a of o){if(a.type!=="belongsTo")continue;let l=a.foreignKey||a.columnName,d=n.getColumns().find(c=>c.columnName===l)?.databaseName||l,m=C(a.constraintName)||Y(n.table,d,a.model().table);s.add(m);}r.set(n.table,s);}this.data.relationsToAdd=await Promise.all(this.data.relationsToAdd.map(async n=>{let o=await this.sql.getTableSchema(n.table),s=this.models.find(y=>y.table===n.table),a=s?.getColumns()||[],l=n.relation.columnName;n.relation.type==="belongsTo"?l=a.find(w=>w.columnName===n.relation.foreignKey)?.databaseName||n.relation.foreignKey:l=a.find(w=>w.columnName===l)?.databaseName||l;let u=n.table,d=n.relation.foreignKey;if(n.relation.type==="belongsTo"){let y=n.relation.model();u=y.table;let w=y.primaryKey||"id";d=y.getColumns().find(q=>q.columnName===w)?.databaseName||w;}let m=new Set([l,n.relation.columnName].filter(Boolean)),c=o.foreignKeys.some(y=>{if(y.columns.length!==1||y.referencedColumns.length!==1)return false;let w=m.has(y.columns[0]),S=y.referencedTable===u,q=y.referencedColumns[0]===d;return w&&S&&q}),p=C(n.relation.constraintName)||Y(n.table,l,u),h=e.get(n.table)||new Set;if(c||p&&h.has(p))return null;if(n.relation.type==="manyToMany"&&n.relation.manyToManyOptions){let y=C(n.relation.manyToManyOptions.throughModel),w=C(n.relation.manyToManyOptions.leftForeignKey),S=C(n.relation.manyToManyOptions.rightForeignKey),q=n.table===y&&n.relation.columnName===w&&n.relation.model().table===s?.table,M=n.table===y&&n.relation.columnName===S&&n.relation.model().table!==s?.table,R=await this.sql.getTableSchema(y),D=R.foreignKeys.some(A=>A.columns.length===1&&A.columns[0]===w&&A.referencedTable===(s?.table||"")),$=R.foreignKeys.some(A=>A.columns.length===1&&A.columns[0]===S&&A.referencedTable===n.relation.model().table);if(q&&D||M&&$)return null}return n})).then(n=>n.filter(Boolean)),this.data.relationsToDrop=await Promise.all(this.data.relationsToDrop.map(async n=>{let o=this.models.find(u=>u.table===n.table);if(!o)return n;let s=o.getRelations(),a=o.getColumns();return s.some(u=>{if(u.type!=="belongsTo")return false;let m=a.find(w=>w.columnName===u.foreignKey)?.databaseName||u.foreignKey,c=u.model(),p=c.primaryKey||"id",y=c.getColumns().find(w=>w.columnName===p)?.databaseName||p;return n.relation.columns.length===1&&n.relation.columns[0]===m&&n.relation.referencedTable===c.table&&n.relation.referencedColumns.length===1&&n.relation.referencedColumns[0]===y})?null:n})).then(n=>n.filter(Boolean));}clonePkAsColumn(t,e){let r=t.type;return r==="bigIncrement"?r="bigint":r==="increment"&&(r="integer"),{columnName:e,databaseName:e,isPrimary:false,type:r,length:t.length,precision:t.precision,scale:t.scale,withTimezone:t.withTimezone,constraints:{nullable:false}}}pushM2mFkRelations(t){let e=this.buildBelongsToRelation(t.throughTable,()=>t.leftModel,t.leftFkName,t.leftModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate),r=this.buildBelongsToRelation(t.throughTable,()=>t.rightModel,t.rightFkName,t.rightModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate);this.data.relationsToAdd.push(e),this.data.relationsToAdd.push(r);}buildBelongsToRelation(t,e,r,n,o,s,a){let l=o?C(o):Y(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 Je=class{};Je.modelCaseConvention="camel",Je.databaseCaseConvention="snake";var jy=(i,t)=>{try{let e=Pe.createHash("sha256").update(i).digest(),r=Pe.randomBytes(16),n=Pe.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");return o+=n.final("hex"),`${r.toString("hex")}:${o}`}catch(e){throw new T("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Fy=(i,t)=>{try{let e=Pe.createHash("sha256").update(i).digest(),r=String(t).trim(),[n,o]=r.split(":");if(!n||!o)throw new Error(`Invalid encrypted value format: expected "iv:data" but got "${r.substring(0,50)}..."`);let s=n.toLowerCase(),a=o.toLowerCase(),l=Pe.createDecipheriv("aes-256-cbc",e,Buffer.from(s,"hex")),u=l.update(a,"hex","utf8");return u+=l.final("utf8"),u}catch(e){throw new T("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Uy=(i,t)=>{try{let e=Pe.randomBytes(32),r=Pe.randomBytes(16),n=Pe.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");o+=n.final("hex");let s=publicEncrypt(i,e);return `${r.toString("hex")}:${s.toString("hex")}:${o}`}catch(e){throw new T("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},Vy=(i,t)=>{try{let e=String(t).trim(),[r,n,o]=e.split(":");if(!r||!n||!o)throw new Error(`Invalid encrypted value format: expected "iv:key:data" but got "${e.substring(0,50)}..."`);let s=privateDecrypt(i,Buffer.from(n,"hex")),a=Pe.createDecipheriv("aes-256-cbc",s,Buffer.from(r,"hex")),l=a.update(o,"hex","utf8");return l+=a.final("utf8"),l}catch(e){throw new T("Encryption::decryptAsymmetric","FAILED_TO_DECRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}};var z=class{static defineMetadata(t,e,r,n){if((typeof r!="object"||r===null)&&typeof r!="function")throw new TypeError("target must be an object or function");let o=this.store.get(r);o||(o=new Map,this.store.set(r,o));let s=o.get(n);s||(s=new Map,o.set(n,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 n=e;for(;n;){let o=this.store.get(n);if(o){let s=o.get(r);if(s&&s.has(t))return s.get(t)}n=Object.getPrototypeOf(n);}}};z.store=new WeakMap;var Zl="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Yl=Zl.length,Uh=10,Vh=16,Jh=(i,t)=>{let e="";for(let r=0;r<t;r++){let n=i%Yl;e=Zl.charAt(n)+e,i=(i-n)/Yl;}return e},Hh=i=>{let t=oe().crypto.randomBytes(i),e="";for(let r=0;r<i;r++){let n=t[r];e+=Zl.charAt(n%Yl);}return e},Jy=()=>{let i=Math.floor(Date.now()/1e3),t=Jh(i,Uh),e=Hh(Vh);return t+e};var nn=class extends xe{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var on=class extends xe{constructor(e,r,n){super(e,r);this.type="hasMany";this.foreignKey=n,this.type="hasMany";}};var sn=class extends xe{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var an=class extends xe{constructor(e,r,n){super(e,r);this.type="manyToMany";this.primaryModel=n.primaryModel,this.relatedModel=e.table,this.throughModel=n.throughModel,this.leftForeignKey=n.leftForeignKey,this.rightForeignKey=n.rightForeignKey;}};function _(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let n=e.constructor;if(t){if(z.getMetadata(Ct,e))throw new T("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");z.defineMetadata(Ct,r,e),z.defineMetadata(Ct,r,e.constructor);}let o=i.databaseName??H(r,n.databaseCaseConvention),s={columnName:r,serialize:i.serialize,prepare:i.prepare,isPrimary:t,primaryKeyConstraintName:i.primaryKeyConstraintName??Ce(n.table,r),autoUpdate:i.autoUpdate,autoCreate:i.autoCreate,databaseName:o,openApi:i.openApi,type:i.type,length:i?.length,precision:i?.precision,scale:i?.scale,withTimezone:i?.withTimezone,unsigned:i.unsigned,zerofill:i.zerofill,stringMode:i.stringMode,expression:i.expression,constraints:{nullable:i.nullable,default:i.default}};s.validate=i.validate;let a=z.getMetadata(Jr,e)||[];a.push(s),z.defineMetadata(Jr,a,e);}}_.primary=zh;_.date=cg;_.datetime=mg;_.timestamp=pg;_.time=yg;_.boolean=dg;_.json=fg;_.uuid=eg;_.ulid=tg;_.integer=Yh;_.bigInteger=og;_.float=Gh;_.decimal=sg;_.increment=Zh;_.bigIncrement=Xh;_.string=rg;_.text=ng;_.binary=ig;_.enum=ag;_.encryption={symmetric:lg,asymmetric:ug};_.computed=hg;function zh(i={}){return _({...i,primaryKey:true})}function Gh(i={}){return _({type:"float",...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?Number.parseInt(t):Number.parseFloat(t)},openApi:{type:"number",format:"float",description:"A floating point number",...i.openApi||{}}})}function Yh(i={}){return _({type:"integer",...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?+t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An integer number",...i.openApi||{}}})}function Zh(i={}){return _({type:"increment",...i,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An auto-incrementing integer number",...i.openApi||{}}})}function Xh(i={}){return _({type:"bigIncrement",...i,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An auto-incrementing bigint number",...i.openApi||{}}})}function eg(i={}){return _({type:"uuid",...i,prepare:t=>t||oe().crypto.randomUUID(),openApi:{type:"string",format:"uuid",description:"uuid (Universally Unique Identifier)",...i.openApi||{}}})}function tg(i={}){return _({type:"ulid",...i,prepare:t=>t||Jy(),openApi:{type:"string",format:"ulid",description:"ulid (Universally Unique Lexicographically Sortable Identifier)",...i.openApi||{}}})}function rg(i={}){return _({type:"string",...i,openApi:{type:"string",description:"A string value",...i.openApi||{}}})}function ng(i={}){return _({type:"longtext",...i,openApi:{type:"string",description:"A text value",...i.openApi||{}}})}function og(i={}){return _({type:"bigint",...i,serialize:t=>{if(t!==void 0){if(t===null)return null;if(typeof t=="number")return t;if(typeof t=="string")return Number.parseInt(t);if(typeof t=="bigint")return Number(t)}},openApi:{type:"integer",format:"int64",description:"A bigint number",...i.openApi||{}}})}function sg(i={}){return _({type:"decimal",precision:i.precision??10,scale:i.scale??2,...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseFloat(t)},openApi:{type:"number",format:"double",description:"A decimal number",...i.openApi||{}}})}function ig(i={}){return _({type:"binary",...i,openApi:{type:"string",format:"binary",description:"Binary data",...i.openApi||{}}})}function ag(i,t={}){return _({type:i,...t,openApi:{type:"string",enum:i,description:"An enum value",...t.openApi||{}}})}function lg(i){return _({...i,prepare:t=>t&&jy(i.key,t),serialize:t=>t&&Fy(i.key,t)})}function ug(i){return _({...i,prepare:t=>t&&Uy(i.publicKey,t),serialize:t=>t&&Vy(i.privateKey,t)})}function dg(i={}){return _({type:"boolean",...i,serialize:t=>!!t,prepare:t=>{if(t!=null)return !!t},openApi:{type:"boolean",description:"A boolean value",...i.openApi||{}}})}function cg(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=i,s=!!n,a=!!r,l=typeof n=="function"?"js":s?true:void 0,u=()=>new Date,d=()=>ue(new Date,"DATE_ONLY",e),m=t?typeof n=="function"?n:d:typeof n=="function"?n:u,c=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return _({type:"date",...o,autoUpdate:a,autoCreate:l,prepare:t?y=>y?a?c():y:s?m():null:y=>y?a?c():y:s?m():null,serialize:t?y=>{if(y!==void 0)return y===null?null:y instanceof Date?ue(y,"DATE_ONLY",e):String(y)}:y=>{if(y!==void 0)return y===null?null:y instanceof Date?y:new Date(y)},openApi:{type:"string",format:"date",description:"YYYY-MM-DD",...o.openApi||{}}})}function mg(i={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...s}=i,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,m=typeof o=="function"?"js":u?true:void 0,c=()=>new Date,p=()=>ue(new Date,"ISO",a),h=t?typeof o=="function"?o:p:typeof o=="function"?o:c,y=t?typeof n=="function"?n:p:typeof n=="function"?n:c;return _({type:"datetime",...s,withTimezone:l,autoUpdate:d,autoCreate:m,prepare:t?q=>q?d?y():q:u?h():null:q=>q?d?y():q:u?h():null,serialize:t?q=>{if(q!==void 0)return q===null?null:q instanceof Date?ue(q,"ISO",a):String(q)}:q=>{if(q!==void 0)return q===null?null:q instanceof Date?q:new Date(q)},stringMode:t,openApi:{type:"string",format:"date-time",description:"YYYY-MM-DD HH:mm:ss",...s.openApi||{}}})}function pg(i={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...s}=i,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,m=typeof o=="function"?"js":u?true:void 0,c=()=>new Date,p=()=>ue(new Date,"TIMESTAMP",a),h=t?typeof o=="function"?o:p:typeof o=="function"?o:c,y=t?typeof n=="function"?n:p:typeof n=="function"?n:c;return _({type:"timestamp",...s,withTimezone:l,autoUpdate:d,autoCreate:m,prepare:t?q=>q?d?y():q:u?h():null:q=>q?d?y():q:u?h():null,serialize:t?q=>{if(q!==void 0)return q===null?null:q instanceof Date?ue(q,"TIMESTAMP",a):String(q)}:q=>{if(q!==void 0)return q===null?null:q instanceof Date?q:new Date(q)},stringMode:t,openApi:{type:"string",format:"date-time",description:"Unix timestamp",...s.openApi||{}}})}function yg(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=i,s=!!n,a=!!r,l=typeof n=="function"?"js":s?true:void 0,u=()=>new Date,d=()=>ue(new Date,"TIME_ONLY",e),m=t?typeof n=="function"?n:d:typeof n=="function"?n:u,c=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return _({type:"time",...o,autoUpdate:a,autoCreate:l,prepare:t?y=>y?a?c():y:s?m():null:y=>y?a?c():y:s?m():null,serialize:t?y=>{if(y!==void 0)return y===null?null:y instanceof Date?ue(y,"TIME_ONLY",e):String(y)}:y=>{if(y!==void 0)return y===null?null:y instanceof Date?y:new Date(y)},stringMode:t,openApi:{type:"string",format:"time",description:"HH:mm:ss",...o.openApi||{}}})}function fg(i={}){return _({type:"jsonb",...i,serialize:t=>typeof t=="string"?JSON.parse(t):t,prepare:t=>typeof t!="string"?JSON.stringify(t):t,openApi:{type:"object",description:"A JSON object",...i.openApi||{}}})}function hg(i,t={}){return _({...t,expression:i})}function Hy(i){try{return z.getMetadata(Jr,i.prototype)||[]}catch{return []}}function zy(i){return z.getMetadata(Vl,i.prototype)||[]}function Gy(i){return (z.getMetadata(Vl,i.prototype)||[]).map(e=>{let{type:r,model:n,columnName:o,foreignKey:s}=e,a=C(s),l=n();switch(r){case "belongsTo":return new nn(l,o,a);case "hasOne":return new sn(l,o,a);case "hasMany":return new on(l,o,a);case "manyToMany":if(!e.manyToManyOptions)throw new T("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let u=n();return new an(u,o,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:C(e.manyToManyOptions.throughModel),leftForeignKey:C(e.manyToManyOptions.leftForeignKey),rightForeignKey:C(e.manyToManyOptions.rightForeignKey)});default:throw new T("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function Yy(i){return z.getMetadata(Ct,i)||z.getMetadata(Ct,i.prototype)}function Zy(i){return z.getMetadata(Iy,i.prototype)||[]}function Xy(i){return z.getMetadata(vy,i.prototype)||[]}function ef(i){return z.getMetadata(Py,i.prototype)||[]}var he=class{};he.columns=new WeakMap,he.byName=new WeakMap,he.byDatabaseName=new WeakMap;var Ae=class extends Je{static get table(){let t=Object.getOwnPropertyDescriptor(this,"table");if(t&&"value"in t)return t.value;throw new Error(`Table name not set for model "${this.name}". Use defineModel() to create models.`)}static set table(t){Object.defineProperty(this,"table",{value:t,writable:true,enumerable:true,configurable:true});}static get primaryKey(){return Yy(this)}constructor(t){if(super(),t)for(let e in t)Object.assign(this,{[e]:t[e]});}static getColumns(){let t=he.columns.get(this);return t||(t=Hy(this),he.columns.set(this,t)),t}static getColumnsByName(){let t=he.byName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.columnName,e])),he.byName.set(this,t)),t}static getColumnsByDatabaseName(){let t=he.byDatabaseName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.databaseName,e])),he.byDatabaseName.set(this,t)),t}static getRelations(){return zy(this)}static getIndexes(){return Zy(this)}static getUniques(){return Xy(this)}static getChecks(){return ef(this)}static async validate(t){var s,a;let e=this.getColumns(),r={},n=this.primaryKey,o=n&&t?.[n]!==void 0?"update":"insert";for(let l of e){if(l.expression)continue;let u=l.validate;if(!u)continue;let d=t?t[l.columnName]:void 0,m=Array.isArray(u)?u:[u];for(let c of m)try{let p=await c(d,{model:this,column:l.columnName,operation:o,data:t});if(!(p&&p.valid)){let h=p&&p.message||"Validation failed";(r[s=l.columnName]||(r[s]=[])).push(h);}}catch{(r[a=l.columnName]||(r[a]=[])).push("Validation error");}}if(Object.keys(r).length>0)throw new Qt(r);return {valid:true}}};Ae.zodEngine=null,Ae.softDeleteColumn="deletedAt",Ae.softDeleteValue=bt();var Mt=class extends N{constructor(e,r=false){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.fromNode=e;}};var V=class extends N{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var ne=class extends N{constructor(e,r=[],n,o=false,s=false,a={}){super(a.ignoreInto?"insert ignore into":"insert into",s);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="insert";this.file="insert";this.fromNode=e,this.records=r,this.returning=n,this.disableReturning=o,this.withNodes=a.withNodes,this.source=a.source,this.targetColumns=a.targetColumns,this.ignoreInto=a.ignoreInto??false,this.disambiguateSource=a.disambiguateSource??false;}};var Ee=class extends N{constructor(e,r,n,o="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=n,this.mode=o,this.returning=s;}};var xt=class extends N{constructor(e=[],r="inserted"){super("returning");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="returning";this.file="returning";this.columns=e,this.prefix=r;}};var Be=class extends N{constructor(e,r=[],n=[],o=false){super("update",o);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="update";this.file="update";this.fromNode=e,this.columns=r,this.values=n;}};var O=class extends N{constructor(e,r,n=false,o,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=n,this.operator=o,this.value=s;}};var De=class extends N{constructor(e,r="and",n=false){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`,this.isNegated=n;}};var j=class extends O{constructor(e,r,n=false,o,s,a=false,l,u){super(e,r,n,"=",s,a);this.file="where_json";this.jsonOperator=o,this.value=s,this.path=l,this.comparisonOperator=u;}};var ce=class extends N{constructor(e,r,n,o="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_subquery";this.column=e,this.operator=r,this.subquery=n,this.chainsWith=` ${o}`;}};var ln=(i,t)=>t!==void 0||i===null||typeof i!="object"?false:!(Array.isArray(i)||i instanceof x||i instanceof I),tf=(i,t,e,r,n,o)=>{let s=i;if(r===null){n===null?t?s.orWhereNull(e):s.whereNull(e):t?s.orWhere(e,"=",n):s.where(e,"=",n);return}let a=(l,u)=>{t?s.orWhere(e,l,u):s.where(e,l,u);};switch(r){case "$eq":n===null?t?s.orWhereNull(e):s.whereNull(e):a("=",n);break;case "$ne":n===null?t?s.orWhereNotNull(e):s.whereNotNull(e):a("!=",n);break;case "$gt":a(">",n);break;case "$gte":a(">=",n);break;case "$lt":a("<",n);break;case "$lte":a("<=",n);break;case "$between":{let[l,u]=n;t?s.orWhereBetween(e,l,u):s.whereBetween(e,l,u);break}case "$not between":{let[l,u]=n;t?s.orWhereNotBetween(e,l,u):s.whereNotBetween(e,l,u);break}case "$regexp":t?s.orWhereRegexp(e,n):s.whereRegexp(e,n);break;case "$not regexp":t?s.orWhereNotRegexp(e,n):s.whereNotRegexp(e,n);break;case "$is null":t?s.orWhereNull(e):s.whereNull(e);break;case "$is not null":t?s.orWhereNotNull(e):s.whereNotNull(e);break;case "$like":t?s.orWhereLike(e,n):s.whereLike(e,n);break;case "$not like":t?s.orWhereNotLike(e,n):s.whereNotLike(e,n);break;case "$ilike":t?s.orWhereILike(e,n):s.whereILike(e,n);break;case "$not ilike":t?s.orWhereNotILike(e,n):s.whereNotILike(e,n);break;case "$in":t?s.orWhereIn(e,n):s.whereIn(e,n);break;case "$nin":t?s.orWhereNotIn(e,n):s.whereNotIn(e,n);break;default:a("=",o);}},gg=(i,t,e,r)=>{if(e==null||typeof e!="object"){tf(i,r,t,null,e,e);return}let n=e;tf(i,r,t,n.op,n.value,e);},He=(i,t,e=false)=>{if(t)for(let[r,n]of Object.entries(t))r==="$and"&&Array.isArray(n)?i[e?"orWhere":"where"](s=>{for(let a of n)He(s,a,false);}):r==="$or"&&Array.isArray(n)?i[e?"orWhere":"where"](s=>{let a=true;for(let l of n)He(s,l,!a),a=false;}):gg(i,r,n,e);};var rf;rf=Symbol.toStringTag;var ie=class{constructor(t,e,r,n){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=n;this[rf]="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 Xl=i=>{let t=i.lastIndexOf(".");return t===-1?i:i.slice(t+1)},$e=class extends ie{constructor(e,r,n,o,s,a,l){let u={requested:false,actionProvided:false};super(e,r,n,async()=>{if(u.requested&&!u.actionProvided)throw new T(l,"ON_CONFLICT_REQUIRES_MERGE_OR_IGNORE");return o()});this.conflictColumns=null;this.conflictTargetRaw=null;this.conflictConstraint=null;this.conflictState=u,this.commit=s,this.insertColumns=a.map(Xl),this.caller=l;}onConflict(e){if(e===void 0)return this.conflictColumns=[],this.conflictState.requested=true,this;if(e instanceof x)return this.conflictTargetRaw=e.rawValue,this.conflictColumns=[],this.conflictState.requested=true,this;if(!Array.isArray(e)&&typeof e=="object"){let n=e.constraint;if(!n)throw new T(this.caller,"ON_CONFLICT_COLUMNS_REQUIRED");return this.conflictConstraint=n,this.conflictColumns=[],this.conflictState.requested=true,this}let r=(Array.isArray(e)?e:[e]).map(Xl);if(!r.length)throw new T(this.caller,"ON_CONFLICT_COLUMNS_REQUIRED");return this.conflictColumns=r,this.conflictState.requested=true,this}merge(e){let r=this.requireConflictTarget("merge"),n=e!==null&&typeof e=="object"&&!Array.isArray(e)?e:void 0,o=n?n.columns:e,s=o===void 0?this.insertColumns.filter(a=>!r.includes(a)):(Array.isArray(o)?o:[o]).map(Xl);if(!s.length)throw new T(`${this.caller}::merge`,"MERGE_REQUIRES_COLUMNS");return this.commitConflict(r,"update",s,{conflictTargetRaw:this.conflictTargetRaw??void 0,conflictConstraint:this.conflictConstraint??void 0,mergeWhere:n?.where}),this}ignore(){if(!this.conflictState.requested)throw new T(`${this.caller}::ignore`,"MERGE_REQUIRES_ON_CONFLICT");return this.conflictState.actionProvided=true,this.commitConflict(this.conflictColumns??[],"ignore",[],{conflictTargetRaw:this.conflictTargetRaw??void 0,conflictConstraint:this.conflictConstraint??void 0}),this}requireConflictTarget(e){if(!(!!this.conflictColumns?.length||!!this.conflictTargetRaw||!!this.conflictConstraint))throw new T(`${this.caller}::${e}`,"MERGE_REQUIRES_ON_CONFLICT");return this.conflictColumns??[]}commitConflict(e,r,n,o){this.conflictState.actionProvided=true,this.commit({conflictColumns:e,mode:r,columnsToUpdate:n,...o});}};var bg=(i,t,e,r,n,o=false,s=new Set)=>{let a=Object.create(t.prototype);for(let l of Object.keys(i)){let u=i[l],d=s.has(l),m=e.get(l),c=l;!m&&!d&&(m=r.get(l),m&&(c=m.columnName));let p=m!==void 0,h=d||o?true:n?n.has(c):true;if(p){if(!h)continue;if(u===null){a[c]=null;continue}if(m?.serialize){let y=m.serialize(u);if(y!==null&&typeof y?.then=="function")throw new Error(`hysteria-orm: column "${c}" on model "${t.name}" has an async serialize function, but serializers must be synchronous. Move async work to prepare or a getter.`);a[c]=y;continue}a[c]=u;continue}(d||!o||n&&n.has(c))&&(a[c]=u);}if(n)for(let l of n)l in a||(a[l]=null);return a},ge=(i,t,e=[],r=[])=>{if(!i.length)return null;let n=t.getColumnsByName(),o=t.getColumnsByDatabaseName(),s=e.some(m=>m.includes("*")),a=[];for(let m of e){if(m.toLowerCase().includes(" as ")){let y=m.match(/\s+as\s+(.+)$/i);y&&a.push(y[1].trim());continue}let p=m;if(p.includes(".")&&(p=p.split(".").pop()),p==="*")continue;let h=n.get(p)?.columnName??p;a.push(h);}let l=a.length?new Set(a):null,u=new Set(r),d=i.map(m=>bg(m,t,n,o,l,s,u));return d.length===1?d[0]:d};var Ht=class{constructor(t){this.observers=t??[];}add(t){this.observers.push(t);}async notifyBefore(t){for(let e of this.observers)e?.onBeforeQuery&&await e.onBeforeQuery(t);}async notifyAfter(t,e){for(let r of this.observers)r?.onAfterQuery&&(t.result??(t.result=e),await r.onAfterQuery(t));}async notifyError(t){for(let e of this.observers)e?.onQueryError&&await e.onQueryError(t);}},nf=i=>{if(!i)return "OTHER";let t=i.trim().toUpperCase();return t.startsWith("SELECT")?"SELECT":t.startsWith("INSERT")?"INSERT":t.startsWith("UPDATE")?"UPDATE":t.startsWith("DELETE")?"DELETE":"OTHER"};var un=oe();function eu(i){let t=un.timing.now()-i;return Math.round(t*100)/100}function tu(i,t,e){Un(`Observer ${i} hook failed: ${t instanceof Error?t.message:String(t)}`,"warn",e);}var G=async(i,t,e,r,n="rows",o)=>{await e.ensureConnected();let s={...o?.queryContext,id:un.crypto.randomUUID(),sql:i,params:t,model:o?.queryContext?.model,operation:nf(i),timestamp:un.timing.now()};try{let u=e.observerChain;u&&typeof u.notifyBefore=="function"&&await u.notifyBefore(s);}catch(u){tu("before-query",u,e.logs);}let a=un.timing.now(),l=u=>{let d=o?.shouldLog??e.logs;ct(i,d,t,e.inputDetails.queryFormatOptions,r,u);};try{let u=e.driverAdapter;if(!u)throw new T("ExecSql","CONNECTION_NOT_ESTABLISHED");let d=o?.timeout,m=d?new AbortController:void 0,c,p=Tg(()=>u.execute(i,t,{returning:n,sqlLiteOptions:o?.sqlLiteOptions,signal:m?.signal,connection:e.sqlConnection}),e.inputDetails.connectionPolicies?.retry,e.logs),h;try{d&&m?(h=await Promise.race([p,new Promise((y,w)=>{c=setTimeout(()=>{let S=new T("ExecSql::timeout","QUERY_TIMEOUT",new Error(`Query exceeded the ${d.ms}ms timeout`));d.cancel&&m.abort(S),w(S);},d.ms);})]),p.catch(()=>{})):h=await p;}finally{c&&clearTimeout(c);}try{let y=eu(a),w=e.observerChain;if(w&&typeof w.notifyAfter=="function"){let S={...s,duration:y,result:h};await w.notifyAfter(S);}}catch(y){tu("after-query",y,e.logs);}return l(eu(a)),u.extract(h,n)}catch(u){try{let d=e.observerChain;d&&typeof d.notifyError=="function"&&await d.notifyError({...s,error:u instanceof Error?u:new Error(String(u))});}catch(d){tu("error",d,e.logs);}throw l(eu(a)),u}},dn=async(i,t,e,r={},n)=>{await e.ensureConnected();let o=e.driverAdapter;if(!o)throw new T("ExecSqlStreaming","CONNECTION_NOT_ESTABLISHED");return await o.stream(i,t,{...r,connection:e.sqlConnection??void 0},{onData:n.onData})};async function Tg(i,t={maxRetries:0,delay:0},e=false){let r=0,n=t.maxRetries||0,o=t.delay||0;async function s(){try{return await i()}catch(a){if(!Object.prototype.hasOwnProperty.call(a,"code")||a.code!=="ECONNREFUSED")throw a;if(r<n)return r++,Un(`Retrying sql in ${o}ms (attempt ${r}/${n})`,"info",e),await new Promise(l=>setTimeout(l,o)),s();throw a}}return s()}var J=class extends N{constructor(e,r,n,o,s){super("select");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="select";this.file="select";this.column=e,this.alias=r,this.sqlFunction=n,this.isRawValue=o??false,this.distinct=s;}};var zt=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=Gy(t),this.modelRelationsMap=new Map(this.modelRelations.map(n=>[n.columnName,n]));}getRelationFromModel(t){let e=this.modelRelationsMap.get(t.toString());if(!e)throw new T("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function cn(i,t,e){return {total:e,perPage:t,currentPage:i,firstPage:1,isEmpty:e===0,lastPage:Math.max(1,Math.ceil(e/t)),hasMorePages:i<Math.max(1,Math.ceil(e/t)),hasPages:e>t}}var Ot=i=>typeof i=="number"?i:parseFloat(i);var Z=class extends N{constructor(e,r,n=false,o,s,a=false,l,u){super("having",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="having";this.file="having";this.column=e,this.chainsWith=` ${r}`,this.isNegated=n,this.operator=o,this.value=s,this.subquery=l,this.group=u;}};var mn=class extends N{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var pn=class extends N{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var ze=class extends N{constructor(e,r,n,o="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=n,this.jsonOperator=o,this.isRawValue=s;}};var te=class extends N{constructor(e,r,n,o="inner",s,a=false,l){super(`${o} join`,a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="join";this.file="join";this.type="inner";this.table=e,this.left=r,this.right=n,this.type=o,this.on=s,this.additionalConditions=l;}};var Gt=class extends N{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 yn=class extends N{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var fn=class extends N{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var At=class extends N{constructor(e,r="asc",n=false){super("order by",n);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="order_by";this.file="order_by";this.column=e,this.direction=r;}};var gn=class gn{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=gn.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 Gt(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Gt(t,true)),this}orderBy(t,e){let r=typeof e=="string"?new At(t,e):new At(t,e.direction);return typeof e!="string"&&e.nulls&&(r.nulls=e.nulls),this.orderByNodes.push(r),this}orderByRaw(t){return this.orderByNodes.push(new At(t,"asc",true)),this}limit(t,e){return typeof t!="number"&&g.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new yn(t),this.limitNode.skipBinding=e?.skipBinding,this}offset(t,e){return typeof t!="number"&&g.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new fn(t),this.offsetNode.skipBinding=e?.skipBinding,this}};gn.EMPTY_MAP=new Map;var hn=gn;var st=class i{constructor(t,e,r=false){this.model=t;this.sqlDataSource=e;this.isNestedCondition=false;this.whereNodes=[],this.isNestedCondition=r;}getConditions(){return this.whereNodes}where(t,e,r){return typeof t=="function"?this.andWhereGroup(t):this.andWhere(t,e,r)}andWhere(t,e,r){if(typeof t=="function")return this.andWhereGroup(t);let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new O(t,"and",false,n,o)),this}orWhere(t,e,r){if(typeof t=="function")return this.orWhereGroup(t);let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new O(t,"or",false,n,o)),this}whereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new O(t,"and",true,n,o)),this}andWhereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new O(t,"and",true,n,o)),this}orWhereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new O(t,"or",true,n,o)),this}whereColumn(t,e,r){return this.pushColumnWhere("and",t,e,r,false)}andWhereColumn(t,e,r){return this.pushColumnWhere("and",t,e,r,false)}orWhereColumn(t,e,r){return this.pushColumnWhere("or",t,e,r,false)}whereNotColumn(t,e,r){return this.pushColumnWhere("and",t,e,r,true)}andWhereNotColumn(t,e,r){return this.pushColumnWhere("and",t,e,r,true)}orWhereNotColumn(t,e,r){return this.pushColumnWhere("or",t,e,r,true)}pushColumnWhere(t,e,r,n,o){let s=o?"!=":"=",a=false,l;return n!==void 0?(s=r,l=n,a=o):l=r,this.whereNodes.push(new O(e,t,a,s,new x(l))),this}whereBetween(t,e,r){return this.andWhereBetween(t,e,r)}andWhereBetween(t,e,r){return this.whereNodes.push(new O(t,"and",false,"between",[e,r])),this}orWhereBetween(t,e,r){return this.whereNodes.push(new O(t,"or",false,"between",[e,r])),this}whereNotBetween(t,e,r){return this.andWhereNotBetween(t,e,r)}andWhereNotBetween(t,e,r){return this.whereNodes.push(new O(t,"and",true,"between",[e,r])),this}orWhereNotBetween(t,e,r){return this.whereNodes.push(new O(t,"or",true,"between",[e,r])),this}whereLike(t,e){return this.andWhereLike(t,e)}andWhereLike(t,e){return this.where(t,"like",e),this}orWhereLike(t,e){return this.orWhere(t,"like",e),this}whereILike(t,e){return this.andWhereILike(t,e)}andWhereILike(t,e){return this.where(t,"ilike",e),this}orWhereILike(t,e){return this.orWhere(t,"ilike",e),this}whereNotLike(t,e){return this.andWhereNotLike(t,e)}andWhereNotLike(t,e){return this.where(t,"not like",e),this}orWhereNotLike(t,e){return this.orWhere(t,"not like",e),this}whereNotILike(t,e){return this.andWhereNotILike(t,e)}andWhereNotILike(t,e){return this.where(t,"not ilike",e),this}orWhereNotILike(t,e){return this.orWhere(t,"not ilike",e),this}whereIn(t,e){return this.andWhereIn(t,e)}andWhereIn(t,e){return e.length?(this.whereNodes.push(new O(t,"and",false,"in",e)),this):(this.whereNodes.push(new O("false","and",true,"=",[],true)),this)}orWhereIn(t,e){return e.length?(this.whereNodes.push(new O(t,"or",false,"in",e)),this):(this.whereNodes.push(new O("false","or",true,"=",[],true)),this)}whereNotIn(t,e){return this.andWhereNotIn(t,e)}andWhereNotIn(t,e){return e.length?(this.whereNodes.push(new O(t,"and",true,"in",e)),this):(this.whereNodes.push(new O("true","and",true,"=",[],true)),this)}orWhereNotIn(t,e){return e.length?(this.whereNodes.push(new O(t,"or",true,"in",e)),this):(this.whereNodes.push(new O("true","or",true,"=",[],true)),this)}whereNull(t){return this.andWhereNull(t)}andWhereNull(t){return this.whereNodes.push(new O(t,"and",false,"is null",void 0)),this}orWhereNull(t){return this.whereNodes.push(new O(t,"or",false,"is null",void 0)),this}whereNotNull(t){return this.andWhereNotNull(t)}andWhereNotNull(t){return this.whereNodes.push(new O(t,"and",false,"is not null",void 0)),this}orWhereNotNull(t){return this.whereNodes.push(new O(t,"or",false,"is not null",void 0)),this}whereRegexp(t,e){return this.andWhereRegexp(t,e)}andWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(t,"and",false,r?"~":"regexp",e.source)),this}orWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(t,"or",false,r?"~":"regexp",e.source)),this}whereNotRegexp(t,e){return this.andWhereNotRegexp(t,e)}andWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(t,"and",true,r?"~":"regexp",e.source)),this}orWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(t,"or",true,r?"~":"regexp",e.source)),this}whereGroup(t){return this.andWhereGroup(t)}andWhereGroup(t){let e=new i(this.model,this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new De(r,"and")),this}orWhereGroup(t){let e=new i(this.model,this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new De(r,"or")),this}whereRaw(t,e){return this.andWhereRaw(t,e)}andWhereRaw(t,e){return this.whereNodes.push(new O(t,"and",true,"=",e??[],true)),this}orWhereRaw(t,e){return this.whereNodes.push(new O(t,"or",true,"=",e??[],true)),this}whereExists(t){return this.pushExists("exists","and",t)}andWhereExists(t){return this.pushExists("exists","and",t)}orWhereExists(t){return this.pushExists("exists","or",t)}whereNotExists(t){return this.pushExists("not exists","and",t)}andWhereNotExists(t){return this.pushExists("not exists","and",t)}orWhereNotExists(t){return this.pushExists("not exists","or",t)}pushExists(t,e,r){let n=r instanceof v?r:new v(this.model,this.sqlDataSource);return n.isNestedCondition=true,typeof r=="function"&&r(n),this.whereNodes.push(new ce("",t,n.extractQueryNodes(),e)),this}whereJson(t,e){return this.pushJson("and",t,"contains",e)}andWhereJson(t,e){return this.pushJson("and",t,"contains",e)}orWhereJson(t,e){return this.pushJson("or",t,"contains",e)}whereNotJson(t,e){return this.pushJson("and",t,"contains",e,true)}andWhereNotJson(t,e){return this.pushJson("and",t,"contains",e,true)}orWhereNotJson(t,e){return this.pushJson("or",t,"contains",e,true)}whereJsonObject(t,e){return this.pushJson("and",t,"=",e)}andWhereJsonObject(t,e){return this.pushJson("and",t,"=",e)}orWhereJsonObject(t,e){return this.pushJson("or",t,"=",e)}whereNotJsonObject(t,e){return this.pushJson("and",t,"=",e,true)}andWhereNotJsonObject(t,e){return this.pushJson("and",t,"=",e,true)}orWhereNotJsonObject(t,e){return this.pushJson("or",t,"=",e,true)}whereJsonPath(t,e,r,n){return this.pushJson("and",t,"path",n,false,e,r)}andWhereJsonPath(t,e,r,n){return this.pushJson("and",t,"path",n,false,e,r)}orWhereJsonPath(t,e,r,n){return this.pushJson("or",t,"path",n,false,e,r)}whereJsonSubsetOf(t,e){return this.pushJson("and",t,"subset",e)}andWhereJsonSubsetOf(t,e){return this.pushJson("and",t,"subset",e)}orWhereJsonSubsetOf(t,e){return this.pushJson("or",t,"subset",e)}whereJsonNotSubsetOf(t,e){return this.pushJson("and",t,"subset",e,true)}andWhereJsonNotSubsetOf(t,e){return this.pushJson("and",t,"subset",e,true)}orWhereJsonNotSubsetOf(t,e){return this.pushJson("or",t,"subset",e,true)}whereJsonHasNone(t,e){return this.pushJson("and",t,"has none",e)}andWhereJsonHasNone(t,e){return this.pushJson("and",t,"has none",e)}orWhereJsonHasNone(t,e){return this.pushJson("or",t,"has none",e)}whereJsonRaw(t,e){return this.pushJson("and",t,"raw",e??[])}andWhereJsonRaw(t,e){return this.pushJson("and",t,"raw",e??[])}orWhereJsonRaw(t,e){return this.pushJson("or",t,"raw",e??[])}pushJson(t,e,r,n,o=false,s,a){return this.whereNodes.push(new j(e,t,o,r,n,false,s,a)),this}};var Dt=i=>typeof i=="function"&&!("table"in i),bn=class extends hn{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t,e=[]){let r=new te(t,"","","inner",{operator:"="},true);return r.bindings=e,this.joinNodes.push(r),this}leftJoinRaw(t,e=[]){let r=new te(t,"","","left",{operator:"="},true);return r.bindings=e,this.joinNodes.push(r),this}rightJoinRaw(t,e=[]){let r=new te(t,"","","right",{operator:"="},true);return r.bindings=e,this.joinNodes.push(r),this}fullJoinRaw(t,e=[]){let r=new te(t,"","","full",{operator:"="},true);return r.bindings=e,this.joinNodes.push(r),this}crossJoinRaw(t,e=[]){let r=new te(t,"","","cross",{operator:"="},true);return r.bindings=e,this.joinNodes.push(r),this}crossJoin(t,e){if(Dt(t))return this.derivedJoin(t,"cross",e);let r=typeof t=="string"?t:t.table;return this.joinNodes.push(new te(e?`${r} as ${e}`:r,"","","cross",{operator:"="})),this}using(...t){let e=this.joinNodes[this.joinNodes.length-1];if(!e||!t.length||e.isRawValue||e.type==="cross"||e.type==="natural")throw new T("JoinQueryBuilder::using","USING_REQUIRES_JOIN");if(e.additionalConditions?.length)throw new T("JoinQueryBuilder::using","USING_CONFLICTS_WITH_ON_CONDITIONS");return e.using=t.map(r=>String(r)),this}naturalJoinRaw(t,e=[]){let r=new te(t,"","","natural",{operator:"="},true);return r.bindings=e,this.joinNodes.push(r),this}innerJoin(t,e,r,n,o){if(Dt(t))return this.derivedJoin(t,"inner",e,r,n,o);if(e===void 0)return this.join(typeof t=="string"?t:t.table);let s=r,a=n,l=typeof n=="function"?n:o;if(!s){if(!this.model.primaryKey)throw new T("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,n,o){if(Dt(t))return this.derivedJoin(t,"inner",e,r,n,o);if(e===void 0)return this.joinNodes.push(new te(typeof t=="string"?t:t.table,"","","inner",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new st(this.model,this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new te(typeof t=="string"?t:t.table,e,s,"inner",{operator:a||"="},false,u)),this}leftJoin(t,e,r,n,o){if(Dt(t))return this.derivedJoin(t,"left",e,r,n,o);if(e===void 0)return this.joinNodes.push(new te(typeof t=="string"?t:t.table,"","","left",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new st(this.model,this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new te(typeof t=="string"?t:t.table,e,s,"left",{operator:a||"="},false,u)),this}rightJoin(t,e,r,n,o){if(Dt(t))return this.derivedJoin(t,"right",e,r,n,o);if(e===void 0)return this.joinNodes.push(new te(typeof t=="string"?t:t.table,"","","right",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new st(this.model,this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new te(typeof t=="string"?t:t.table,e,s,"right",{operator:a||"="},false,u)),this}fullJoin(t,e,r,n,o){if(Dt(t))return this.derivedJoin(t,"full",e,r,n,o);let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new st(this.model,this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new te(typeof t=="string"?t:t.table,e,s,"full",{operator:a||"="},false,u)),this}derivedJoin(t,e,r,n,o,s){let a=r?String(r):"";if(!a)throw new T("JoinQueryBuilder::join","MISSING_ALIAS_FOR_SUBQUERY");let l=new v(this.model,this.sqlDataSource),u=t(l),d=u!=null&&"extractQueryNodes"in u?u:l,m=o?String(o):"";if(n&&!m){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");m=`${this.model.table}.${this.model.primaryKey}`;}let c=new te(a,n?String(n):"",m,e,{operator:s||"="});return c.subquery=d.extractQueryNodes(),this.joinNodes.push(c),this}leftOuterJoin(t,e,r,n,o){return this.leftJoin(t,e,r,n,o)}rightOuterJoin(t,e,r,n,o){return this.rightJoin(t,e,r,n,o)}fullOuterJoin(t,e,r,n,o){return this.fullJoin(t,e,r,n,o)}};var wg=/\bas\s+"?([A-Za-z_][A-Za-z0-9_]*)"?\s*(?:,|$)/gi,Sg=/^[A-Za-z_][A-Za-z0-9_.]*$/,Ng=i=>{let t=[];for(let e of i.matchAll(wg))t.push(e[1]);if(!t.length){let e=i.trim();Sg.test(e)&&t.push(e.split(".").pop());}return t},Tn=class extends bn{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.userOutputColumns=[];this.dbType=r.getDbType(),this.fromNode=new V(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return e.forEach(r=>{if(Array.isArray(r)){let[a,l]=r;this.modelSelectedColumns.push(l),this.userOutputColumns.push(l);let u=this.resolveComputedColumn(a);if(u){this.selectNodes.push(new J(`(${u.expression}) as ${l}`,void 0,void 0,true));return}let d=H(a,this.model.databaseCaseConvention);this.selectNodes.push(new J(d,l));return}let n=r;this.modelSelectedColumns.push(n);let o=this.resolveComputedColumn(n);if(o){this.selectNodes.push(new J(`(${o.expression}) as ${o.alias}`,void 0,void 0,true));return}let s=H(n,this.model.databaseCaseConvention);this.selectNodes.push(new J(s));}),this}selectRaw(e){return this.selectNodes.push(new J(e,void 0,void 0,true)),this.userOutputColumns.push(...Ng(e)),this}collectUserOutputNames(){let e=new Set(this.userOutputColumns);for(let r of this.selectNodes)r.alias&&e.add(r.alias);return [...e]}selectFunc(e,r,n){return this.selectNodes.push(new J(r,n,e)),this}countDistinct(e,r){return this.selectNodes.push(new J(e,r,"count",false,true)),this}sumDistinct(e,r){return this.selectNodes.push(new J(e,r,"sum",false,true)),this}avgDistinct(e,r){return this.selectNodes.push(new J(e,r,"avg",false,true)),this}rank(e,r={}){return this.pushWindow("rank",e,r)}denseRank(e,r={}){return this.pushWindow("dense_rank",e,r)}rowNumber(e,r={}){return this.pushWindow("row_number",e,r)}pushWindow(e,r,n){return this.selectNodes.push(new J(new Hr(e,Ey(n.partitionBy),By(n.orderBy)),r)),this}clearSelect(){return this.modelSelectedColumns=[],this.userOutputColumns=[],this.selectNodes=[],this}resolveComputedColumn(e){let r=this.model.getColumnsByName?.();if(!r||r.size===0)return;let n=e.includes(".")?e.split(".").pop():e,o=r.get(n);if(o?.expression)return {expression:o.expression,alias:o.databaseName||n}}clearFrom(){return this.fromNode=new V(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new V(e),this}distinct(){return this.distinctNode=new mn,this}distinctOn(...e){return this.distinctOnNode=new pn(e),this}selectJson(e,r,n){return this.selectNodes.push(new ze(e,r,n,"extract")),this}selectJsonText(e,r,n){return this.selectNodes.push(new ze(e,r,n,"extract_text")),this}selectJsonArrayLength(e,r,n){return this.selectNodes.push(new ze(e,r,n,"array_length")),this}selectJsonKeys(e,r,n){return this.selectNodes.push(new ze(e,r,n,"object_keys")),this}selectJsonRaw(e,r){return this.selectNodes.push(new ze(e,"",r,"raw",true)),this}};var wn=class extends Tn{constructor(e,r,n=false){super(e,r);this.isNestedCondition=false;this.whereNodes=[],this.havingNodes=[],this.isNestedCondition=n;}clearWhere(){return this.whereNodes=[],this}clearHaving(){return this.havingNodes=[],this}strictWhen(e,r){return e==null?this:(r(this),this)}when(e,r){return e?(r(this),this):this}modify(e,...r){return e(this,...r),this}where(e,r,n){return typeof e=="function"?this.andWhereGroup(e):ln(e,r)?(He(this,e,false),this):typeof r=="function"&&n===void 0?this.andWhereSubQuery(e,"in",r):r instanceof v&&n===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof v||typeof n=="function")?this.andWhereSubQuery(e,r,n):this.andWhere(e,r,n)}andWhere(e,r,n){if(typeof e=="function")return this.andWhereGroup(e);if(ln(e,r))return He(this,e,false),this;if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(r instanceof v&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof v||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof v)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new O(e,"and",false,o,s)),this}orWhere(e,r,n){if(typeof e=="function")return this.orWhereGroup(e);if(ln(e,r))return He(this,e,true),this;if(typeof r=="function"&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(r instanceof v&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof v||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof v)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new O(e,"or",false,o,s)),this}whereColumn(e,r,n){return this.andWhereColumn(e,r,n)}andWhereColumn(e,r,n){let o="=",s;return n!==void 0?(o=r,s=n):s=r,this.whereNodes.push(new O(e,"and",false,o,new x(s))),this}orWhereColumn(e,r,n){let o="=",s;return n!==void 0?(o=r,s=n):s=r,this.whereNodes.push(new O(e,"or",false,o,new x(s))),this}whereNotColumn(e,r,n){return this.andWhereNotColumn(e,r,n)}andWhereNotColumn(e,r,n){return this.pushNotColumnWhere("and",e,r,n)}orWhereNotColumn(e,r,n){return this.pushNotColumnWhere("or",e,r,n)}pushNotColumnWhere(e,r,n,o){let s="!=",a=false,l;return o!==void 0?(s=n,l=o,a=true):l=n,this.whereNodes.push(new O(r,e,a,s,new x(l))),this}whereNot(e,r,n){if(typeof e=="function"&&r===void 0)return this.andWhereGroup(e,true);if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof v&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof v||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof v)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new O(e,"and",true,o,s)),this}andWhereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof v&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof v||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof v)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new O(e,"and",true,o,s)),this}orWhereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(r instanceof v&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof v||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof v)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new O(e,"or",true,o,s)),this}whereBetween(e,r,n){return this.andWhereBetween(e,r,n)}andWhereBetween(e,r,n){return this.whereNodes.push(new O(e,"and",false,"between",[r,n])),this}orWhereBetween(e,r,n){return this.whereNodes.push(new O(e,"or",false,"between",[r,n])),this}whereNotBetween(e,r,n){return this.andWhereNotBetween(e,r,n)}andWhereNotBetween(e,r,n){return this.whereNodes.push(new O(e,"and",true,"between",[r,n])),this}orWhereNotBetween(e,r,n){return this.whereNodes.push(new O(e,"or",true,"between",[r,n])),this}whereLike(e,r){return this.andWhereLike(e,r)}andWhereLike(e,r){return this.where(e,"like",r),this}orWhereLike(e,r){return this.orWhere(e,"like",r),this}whereILike(e,r){return this.andWhereILike(e,r)}andWhereILike(e,r){return this.where(e,"ilike",r),this}orWhereILike(e,r){return this.orWhere(e,"ilike",r),this}whereNotLike(e,r){return this.andWhereNotLike(e,r)}andWhereNotLike(e,r){return this.where(e,"not like",r),this}orWhereNotLike(e,r){return this.orWhere(e,"not like",r),this}whereNotILike(e,r){return this.andWhereNotILike(e,r)}andWhereNotILike(e,r){return this.where(e,"not ilike",r),this}orWhereNotILike(e,r){return this.orWhere(e,"not ilike",r),this}whereIn(e,r){return this.andWhereIn(e,r)}andWhereIn(e,r){return Array.isArray(e)?this.pushTupleIn(e,r,"and","in"):Array.isArray(r)?r.length?(this.whereNodes.push(new O(e,"and",false,"in",r)),this):(this.whereNodes.push(new O("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(e)?this.pushTupleIn(e,r,"or","in"):Array.isArray(r)?r.length?(this.whereNodes.push(new O(e,"or",false,"in",r)),this):(this.whereNodes.push(new O("false","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"in",r)}whereNotIn(e,r){return this.andWhereNotIn(e,r)}andWhereNotIn(e,r){return Array.isArray(e)?this.pushTupleIn(e,r,"and","not in"):Array.isArray(r)?r.length?(this.whereNodes.push(new O(e,"and",true,"in",r)),this):(this.whereNodes.push(new O("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(e)?this.pushTupleIn(e,r,"or","not in"):Array.isArray(r)?r.length?(this.whereNodes.push(new O(e,"or",true,"in",r)),this):(this.whereNodes.push(new O("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new O(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new O(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new O(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new O(e,"or",false,"is not null",void 0)),this}whereRegexp(e,r){return this.andWhereRegexp(e,r)}andWhereRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(e,"and",false,n?"~":"regexp",r.source)),this}orWhereRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(e,"or",false,n?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new O(e,"and",true,n?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new O(e,"and",true,n?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new O(e,"or",true,n?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof v?e:new v(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new ce("","exists",r.extractQueryNodes(),"and")),this}orWhereExists(e){let r=e instanceof v?e:new v(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new ce("","exists",r.extractQueryNodes(),"or")),this}whereNotExists(e){return this.andWhereNotExists(e)}andWhereNotExists(e){let r=e instanceof v?e:new v(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new ce("","not exists",r.extractQueryNodes(),"and")),this}orWhereNotExists(e){let r=e instanceof v?e:new v(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new ce("","not exists",r.extractQueryNodes(),"or")),this}whereRaw(e,r=[]){return this.andWhereRaw(e,r)}andWhereRaw(e,r=[]){return this.whereNodes.push(new O(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new O(e,"or",false,"=",r,true)),this}having(e,r,n){return this.andHaving(e,r,n)}andHaving(e,r,n){let o="=",s;return typeof r=="string"&&n?(o=r,s=n):(s=r,o="="),this.havingNodes.push(new Z(e,"and",false,o,s)),this}orHaving(e,r,n){let o="=",s;return typeof r=="string"&&n?(o=r,s=n):(s=r,o="="),this.havingNodes.push(new Z(e,"or",false,o,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Z(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Z(e,"or",false,"=",[],true)),this}havingNull(e){return this.andHavingNull(e)}andHavingNull(e){return this.havingNodes.push(new Z(e,"and",false,"is null",void 0)),this}orHavingNull(e){return this.havingNodes.push(new Z(e,"or",false,"is null",void 0)),this}havingNotNull(e){return this.andHavingNotNull(e)}andHavingNotNull(e){return this.havingNodes.push(new Z(e,"and",false,"is not null",void 0)),this}orHavingNotNull(e){return this.havingNodes.push(new Z(e,"or",false,"is not null",void 0)),this}havingIn(e,r){return this.andHavingIn(e,r)}andHavingIn(e,r){return this.pushHavingIn("and",e,r,false)}orHavingIn(e,r){return this.pushHavingIn("or",e,r,false)}havingNotIn(e,r){return this.andHavingNotIn(e,r)}andHavingNotIn(e,r){return this.pushHavingIn("and",e,r,true)}orHavingNotIn(e,r){return this.pushHavingIn("or",e,r,true)}havingBetween(e,r){return this.andHavingBetween(e,r)}andHavingBetween(e,r){return this.havingNodes.push(new Z(e,"and",false,"between",r)),this}orHavingBetween(e,r){return this.havingNodes.push(new Z(e,"or",false,"between",r)),this}havingNotBetween(e,r){return this.andHavingNotBetween(e,r)}andHavingNotBetween(e,r){return this.havingNodes.push(new Z(e,"and",false,"not between",r)),this}orHavingNotBetween(e,r){return this.havingNodes.push(new Z(e,"or",false,"not between",r)),this}havingExists(e){return this.andHavingExists(e)}andHavingExists(e){return this.pushHavingExists("and",e,false)}orHavingExists(e){return this.pushHavingExists("or",e,false)}havingNotExists(e){return this.andHavingNotExists(e)}andHavingNotExists(e){return this.pushHavingExists("and",e,true)}orHavingNotExists(e){return this.pushHavingExists("or",e,true)}havingWrapped(e){return this.andHavingWrapped(e)}andHavingWrapped(e){return this.pushHavingGroup("and",e)}orHavingWrapped(e){return this.pushHavingGroup("or",e)}pushHavingIn(e,r,n,o){let s=o?"not in":"in";if(Array.isArray(n))return this.havingNodes.push(new Z(r,e,false,s,n)),this;let a=this.buildSubQuery(n);return this.havingNodes.push(new Z(r,e,false,s,[],false,a.extractQueryNodes())),this}pushHavingExists(e,r,n){let o=r instanceof v?r:new v(this.model,this.sqlDataSource);return o.isNestedCondition=true,typeof r=="function"&&r(o),this.havingNodes.push(new Z("",e,false,n?"not exists":"exists",[],false,o.extractQueryNodes())),this}pushHavingGroup(e,r){let n=new v(this.model,this.sqlDataSource);return n.isNestedCondition=true,r(n),this.havingNodes.push(new Z("",e,false,"=",[],false,void 0,n.havingNodes)),this}buildSubQuery(e){if(e instanceof v)return e;let r=new v(this.model,this.sqlDataSource),n=e(r);return n!=null&&"extractQueryNodes"in n?n:r}andWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new ce(e,r,o.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new ce(e,r,o.extractQueryNodes(),"or")),this}pushTupleIn(e,r,n,o){if(!e.length)throw new T("QueryBuilder::whereIn","WHERE_TUPLE_COLUMNS_REQUIRED");if(!r.length)return this.whereNodes.push(new O(o==="in"?"false":"true",n,true,"=",[],true)),this;let s=new O(e.join(", "),n,o==="not in","in",r);return s.tupleColumns=e,this.whereNodes.push(s),this}andWhereGroup(e,r=false){let n=new v(this.model,this.sqlDataSource);n.isNestedCondition=true,e(n);let o=new De(n.whereNodes,"and",r);return this.whereNodes.push(o),this}orWhereGroup(e){let r=new v(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new De(r.whereNodes,"or");return this.whereNodes.push(n),this}};var Sn=class extends wn{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new j(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new j(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new j(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new j(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new j(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new j(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new j(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new j(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new j(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new j(t,"or",false,"raw",e)),this}whereJsonObject(t,e){return this.andWhereJsonObject(t,e)}andWhereJsonObject(t,e){return this.whereNodes.push(new j(t,"and",false,"=",e)),this}orWhereJsonObject(t,e){return this.whereNodes.push(new j(t,"or",false,"=",e)),this}whereNotJsonObject(t,e){return this.andWhereNotJsonObject(t,e)}andWhereNotJsonObject(t,e){return this.whereNodes.push(new j(t,"and",true,"=",e)),this}orWhereNotJsonObject(t,e){return this.whereNodes.push(new j(t,"or",true,"=",e)),this}whereJsonPath(t,e,r,n){return this.andWhereJsonPath(t,e,r,n)}andWhereJsonPath(t,e,r,n){return this.pushJsonPath("and",t,e,r,n,false),this}orWhereJsonPath(t,e,r,n){return this.pushJsonPath("or",t,e,r,n,false),this}whereJsonSupersetOf(t,e){return this.andWhereJsonSupersetOf(t,e)}andWhereJsonSupersetOf(t,e){return this.whereNodes.push(new j(t,"and",false,"contains",e)),this}orWhereJsonSupersetOf(t,e){return this.whereNodes.push(new j(t,"or",false,"contains",e)),this}whereJsonNotSupersetOf(t,e){return this.andWhereJsonNotSupersetOf(t,e)}andWhereJsonNotSupersetOf(t,e){return this.whereNodes.push(new j(t,"and",true,"contains",e)),this}orWhereJsonNotSupersetOf(t,e){return this.whereNodes.push(new j(t,"or",true,"contains",e)),this}whereJsonSubsetOf(t,e){return this.andWhereJsonSubsetOf(t,e)}andWhereJsonSubsetOf(t,e){return this.whereNodes.push(new j(t,"and",false,"subset",e)),this}orWhereJsonSubsetOf(t,e){return this.whereNodes.push(new j(t,"or",false,"subset",e)),this}whereJsonNotSubsetOf(t,e){return this.andWhereJsonNotSubsetOf(t,e)}andWhereJsonNotSubsetOf(t,e){return this.whereNodes.push(new j(t,"and",true,"subset",e)),this}orWhereJsonNotSubsetOf(t,e){return this.whereNodes.push(new j(t,"or",true,"subset",e)),this}whereJsonHasNone(t,e){return this.andWhereJsonHasNone(t,e)}andWhereJsonHasNone(t,e){return this.whereNodes.push(new j(t,"and",false,"has none",e)),this}orWhereJsonHasNone(t,e){return this.whereNodes.push(new j(t,"or",false,"has none",e)),this}pushJsonPath(t,e,r,n,o,s){let a=new j(e,t,s,"path",o,false,r,n);this.whereNodes.push(a);}};var qg=["postgres","cockroachdb","sqlite"],v=class i extends Sn{constructor(e,r){super(e,r);this.isNestedCondition=false;this._interpreterUtils=null;this.insertNode=null;this.insertNodeSource=void 0;this.onDuplicateNode=null;this.insertConflictConfig=null;this.updateNode=null;this.updateFromNode=null;this.deleteNode=null;this.deleteUsingNode=null;this.returningNode=null;this.truncateNode=null;this.replicationMode=null;this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.comments=[],this.hints=[],this.astParser=new b(this.model,this.dbType);}get interpreterUtils(){return this._interpreterUtils||(this._interpreterUtils=new f(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,n]=e;if(typeof r=="function"){let o=new i(this.model,this.sqlDataSource),s=r(o),a=s!=null&&"extractQueryNodes"in s?s:o;return this.selectNodes.push(new J(a.extractQueryNodes(),n)),this}return this.selectNodes.push(new J(r.extractQueryNodes(),n)),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}clearSelect(){return super.clearSelect(),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}countDistinct(e,r){return super.countDistinct(e,r),this}sumDistinct(e,r){return super.sumDistinct(e,r),this}avgDistinct(e,r){return super.avgDistinct(e,r),this}rank(e,r){return super.rank(e,r),this}denseRank(e,r){return super.denseRank(e,r),this}rowNumber(e,r){return super.rowNumber(e,r),this}async exists(){return !!await this.one()}async many(){let{sql:e,bindings:r}=this.unWrap();return this.execSqlWithSlaveHandling("read",n=>G(e,r,n,this.dbType,"rows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery,sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}))}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async pluck(e){return (await this.many()).map(n=>n[e])}async value(e){let r=await this.limit(1).many();if(!(!r||!r.length))return r[0][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 T("SqlDataSource::query::oneOrFail","ROW_NOT_FOUND");return e}async stream(e={}){let{sql:r,bindings:n}=this.unWrap();return this.execSqlWithSlaveHandling("read",async o=>await dn(r,n,o,e,{onData:(a,l)=>{a.write(l);}}))}async*chunk(e){let r=0;for(;;){let n=await this.limit(e).offset(r).many();if(!n.length)break;r+=n.length,yield n;}}async paginateWithCursor(e,r){if(!this.orderByNodes.length)throw new T(this.model.name+"::paginateWithCursor","ORDER_BY_REQUIRED");let n=this.orderByNodes;if(n.some(c=>c.isRawValue))throw new T(this.model.name+"::paginateWithCursor","ORDER_BY_RAW_NOT_SUPPORTED");if(n.some(c=>c.nulls))throw new T(this.model.name+"::paginateWithCursor","ORDER_BY_NULLS_WITH_CURSOR_NOT_SUPPORTED");let o=n.map(c=>c.column),s=n[0].direction==="desc"?"<":">";if(r){let c=Array.isArray(r.value)?r.value:[r.value];this.andWhere(p=>{for(let h=0;h<o.length;h++){let y=h;p.orWhere(w=>{for(let S=0;S<y;S++)w.where(o[S],"=",c[S]);w.where(o[y],s,c[y]);});}});}this.limit(e+1);let a=await this.many(),l=a.length>e,u=l?a.slice(0,e):a,d=u[u.length-1],m=o.map(c=>c.includes(".")?c.slice(c.lastIndexOf(".")+1):c);return {data:u,hasMore:l,nextCursor:d?{key:m.length===1?m[0]:m,value:m.length===1?d[m[0]]:m.map(c=>d[c])}:null}}lockForUpdate(e={}){return this.lockQueryNodes.push(new tt("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new tt("for_share",e.skipLocked,e.noWait)),this}forNoKeyUpdate(e={}){return this.assertPgLockStrength("forNoKeyUpdate","FOR NO KEY UPDATE"),this.lockQueryNodes.push(new tt("for_no_key_update",e.skipLocked,e.noWait)),this}forKeyShare(e={}){return this.assertPgLockStrength("forKeyShare","FOR KEY SHARE"),this.lockQueryNodes.push(new tt("for_key_share",e.skipLocked,e.noWait)),this}assertPgLockStrength(e,r){if(this.dbType!=="postgres")throw new T(`QueryBuilder::${e}`,`LOCK_STRENGTH_NOT_SUPPORTED_IN_${this.dbType.toUpperCase()}`,new Error(`${r} is only supported by postgres`))}timeout(e,r={}){return this.queryTimeout={ms:e,cancel:r.cancel??false},this}queryContext(e){return this.queryContextOptions={...this.queryContextOptions,...e},this}debug(e=true){return this.shouldLogQuery=e,this}comment(e){return this.assertValidSqlComment(e),this.comments.push(e),this}hintComment(e){this.assertValidSqlComment(e);let r=e.slice(3,-2).trim(),n=this.hints[0];return this.hints=[n?`${n.slice(0,-2).trimEnd()} ${r} */`:`/*+ ${r} */`],this}clearComment(){return this.comments=[],this}clearHintComment(){return this.hints=[],this}assertValidSqlComment(e){let r=()=>{throw new T("QueryBuilder::comment","INVALID_SQL_COMMENT")};(!e.trim().length||e.includes("?"))&&r();let n=(this.dbType==="mysql"||this.dbType==="mariadb")&&e.startsWith("#");if(e.startsWith("--")||n){/[\r\n]/.test(e)&&r();return}if(e.startsWith("/*")&&e.endsWith("*/")&&e.length>=4){let o=e.slice(2,-2);(o.includes("/*")||o.includes("*/"))&&r();return}r();}resolveSetOperationOptions(e,r){return {bindings:Array.isArray(e)?e:void 0,wrap:r?.wrap??e?.wrap}}union(e,r,n){let{bindings:o,wrap:s}=this.resolveSetOperationOptions(r,n);if(typeof e=="string")return this.unionNodes.push(new ve(e,false,"union",o)),this.unionNodes[this.unionNodes.length-1].wrap=s,this;let l=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes(),u=new ve(l);return u.wrap=s,this.unionNodes.push(u),this}unionAll(e,r,n){let{bindings:o,wrap:s}=this.resolveSetOperationOptions(r,n);if(typeof e=="string"){let d=new ve(e,true,"union",o);return d.wrap=s,this.unionNodes.push(d),this}let l=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes(),u=new ve(l,true);return u.wrap=s,this.unionNodes.push(u),this}intersect(e,r,n){let{bindings:o,wrap:s}=this.resolveSetOperationOptions(r,n),a=new ve(this.resolveSetOperationNodes(e),false,"intersect",o);return a.wrap=n?.wrap??r?.wrap,this.unionNodes.push(a),this}except(e,r,n){let{bindings:o,wrap:s}=this.resolveSetOperationOptions(r,n),a=new ve(this.resolveSetOperationNodes(e),false,"except",o);return a.wrap=n?.wrap??r?.wrap,this.unionNodes.push(a),this}resolveSetOperationNodes(e){return typeof e=="string"?e:(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes()}increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?Ot(r.total):0}needsDerivedTableCount(){return this.groupByNodes.length>0||this.havingNodes.length>0||this.distinctNode!==null||this.distinctOnNode!==null}buildCountQuery(e="*"){if(!this.needsDerivedTableCount()){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);return}this.clearOrderBy(),this.clearLimit(),this.clearOffset();let r=this.extractQueryNodes();this.withNodes=[],this.distinctNode=null,this.distinctOnNode=null,this.clearSelect(),this.fromNode=new V(r,"g"),this.joinNodes=[],this.whereNodes=[],this.groupByNodes=[],this.havingNodes=[],this.lockQueryNodes=[],this.unionNodes=[],this.comments=[],this.hints=[],this.selectRaw(`count(${e}) as total`);}async getMax(e){this.clearForFunctions(),this.selectFunc("max",e,"total");let r=await this.one();return r?Ot(r.total):0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?Ot(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?Ot(r.total):0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?Ot(r.total):0}async columnInfo(e){let r=typeof this.fromNode.table=="string"?this.fromNode.table:this.model.table,o=await(await this.getSqlDataSource("read")).getTableInfo(r);return e===void 0?o:o.find(s=>s.name===e)}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&g.warn(`${this.model.name}::paginate Non numeric values provided to \`paginate\``);let n=this.clone(),o=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>o.many(),()=>n.getCount("*"));return {paginationMetadata:cn(e,r,a),data:s}}table(e,r){if(typeof e=="function"){if(!r)throw new T("QueryBuilder::table","MISSING_ALIAS_FOR_SUBQUERY");let n=new i(this.model,this.sqlDataSource),o=e(n),a=(o!=null&&"extractQueryNodes"in o?o:n).extractQueryNodes();return this.fromNode=new V(a,r),this}return this.fromNode=new V(e,r),this}withSchema(e){return this.schemaName=e,this}fromRaw(e,r=[]){return this.fromNode=new V(new x(e,r)),this}fromOnly(e=true){if(this.dbType!=="postgres")throw new T("QueryBuilder::fromOnly","ONLY_NOT_SUPPORTED");return this.fromNode.only=e,this}with(e,r,n){let o=Array.isArray(r)?r:void 0,s=Array.isArray(r)?n:r,a=new i(this.model,this.sqlDataSource),l=s(a),u=l!=null&&"extractQueryNodes"in l?l:a;return this.withNodes.push(new rt("normal",e,u.extractQueryNodes(),o)),this}withRecursive(e,r){let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new rt("recursive",e,s.extractQueryNodes())),this}withMaterialized(e,r){if(!qg.includes(this.dbType))throw new T("QueryBuilder::withMaterialized","MATERIALIZED_CTE_NOT_SUPPORTED",new Error(`MATERIALIZED CTE is not supported by ${this.dbType}`));let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new rt("materialized",e,s.extractQueryNodes())),this}withNotMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new T("QueryBuilder::withNotMaterialized","NOT_MATERIALIZED_CTE_NOT_SUPPORTED",new Error(`NOT MATERIALIZED CTE is not supported by ${this.dbType}`));let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new rt("not materialized",e,s.extractQueryNodes())),this}insert(e,r){this.assertWriteClausesSupported("QueryBuilder::insert");let n=Object.fromEntries(Object.keys(e).map(s=>[s,e[s]])),o=!r||r.length===0;return this.insertNodeSource=void 0,this.insertConflictConfig=null,this.onDuplicateNode=null,this.insertNode=new ne(this.fromNode,[this.interpreterUtils.stripComputedFromData(n)],r,o),new $e(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:s,values:a}=this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert",this.dbType),l=Object.fromEntries(s.map((h,y)=>[h,a[y]])),u=this.insertConflictConfig;if(this.insertNode=new ne(this.fromNode,[l],u?void 0:r,u?true:o),u&&this.dbType==="mssql"){let h=await this.executeMssqlMergeRaw([l],u.conflictColumns,u.columnsToUpdate,{updateOnConflict:u.mode==="update",returning:r},[e]);return o?void 0:h[0]}let{sql:d,bindings:m}=this.astParser.parse(this.extractWriteNodes()),c=await this.getSqlDataSource("write"),p=await G(d,m,c,this.dbType,"rows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery,sqlLiteOptions:{typeofModel:this.model,mode:u?"raw":"insertOne",models:[e]}});if(!o)return Array.isArray(p)&&p.length?p[0]:p},this.buildInsertConflictCommit(r),this.interpreterUtils.filterComputedColumns(Object.keys(e)),"QueryBuilder::insert")}insertMany(e,r){this.assertWriteClausesSupported("QueryBuilder::insertMany");let n=e.map(s=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(s).map(a=>[a,s[a]])))),o=!r||r.length===0;return this.insertNodeSource=void 0,this.insertConflictConfig=null,this.onDuplicateNode=null,this.insertNode=new ne(this.fromNode,n,r,o),new $e(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{if(!e.length)return o?void 0:[];let s=await Promise.all(e.map(async c=>{let{columns:p,values:h}=this.interpreterUtils.prepareColumns(Object.keys(c),Object.values(c),"insert",this.dbType);return Object.fromEntries(p.map((y,w)=>[y,h[w]]))})),a=this.insertConflictConfig;if(this.insertNode=new ne(this.fromNode,s,a?void 0:r,a?true:o),a&&this.dbType==="mssql")return this.executeMssqlMergeRaw(s,a.conflictColumns,a.columnsToUpdate,{updateOnConflict:a.mode==="update",returning:r},e);let{sql:l,bindings:u}=this.astParser.parse(this.extractWriteNodes()),d=await this.getSqlDataSource("write"),m=await G(l,u,d,this.dbType,"rows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery,sqlLiteOptions:{typeofModel:this.model,mode:a?"raw":"insertMany",models:s}});if(!o)return m},this.buildInsertConflictCommit(r),e.length?this.interpreterUtils.filterComputedColumns(Object.keys(e[0])):[],"QueryBuilder::insertMany")}async batchInsert(e,r={}){let n=this.resolveBatchSize(r.chunkSize),o=[];for(let s=0;s<e.length;s+=n){let a=e.slice(s,s+n),l=r.returning?.length?await this.insertMany(a,r.returning):await this.insertMany(a);l&&o.push(...l);}return o}resolveBatchSize(e){let r=e??500;if(!Number.isInteger(r)||r<1)throw new T("QueryBuilder::batchInsert","INVALID_BATCH_SIZE");return r}upsert(e,r,n={updateOnConflict:true}){return this.buildRawUpsert([{...r,...e}],Object.keys(r),this.interpreterUtils.filterComputedColumns(Object.keys(e)),n)}upsertMany(e,r,n,o={updateOnConflict:true}){return this.buildRawUpsert(n,e,this.interpreterUtils.filterComputedColumns(r),o)}buildRawUpsert(e,r,n,o){let s=o.returning?.length?[...o.returning]:void 0,a=s?this.insertMany(e,s):this.insertMany(e),l=o.updateOnConflict??true?a.onConflict(r).merge(n):a.onConflict(r).ignore();return new ie(()=>l.unWrap(),()=>l.toSql(),()=>l.toQuery(),async()=>{let u=await l;return Array.isArray(u)?u:[u]})}buildInsertConflictCommit(e){return r=>{this.insertConflictConfig=r;let n=r.conflictColumns.length===0&&!r.conflictTargetRaw&&!r.conflictConstraint,o=this.dbType==="mysql"||this.dbType==="mariadb";if(r.conflictTargetRaw&&(o||this.dbType==="mssql"))throw new T("QueryBuilder::onConflict",`NOT_SUPPORTED_IN_${this.dbType.toUpperCase()}`,new Error(`${this.dbType} cannot express a raw ON CONFLICT target; pass the conflict columns`));if(r.conflictConstraint&&this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new T("QueryBuilder::onConflict",`NOT_SUPPORTED_IN_${this.dbType.toUpperCase()}`,new Error(`${this.dbType} cannot name a constraint in ON CONFLICT; only PostgreSQL and CockroachDB can`));if(n&&this.dbType==="mssql")throw new T("QueryBuilder::onConflict","NOT_SUPPORTED_IN_MSSQL",new Error("MSSQL cannot express a target-less ON CONFLICT; provide the conflict columns"));let s=n&&o;if(this.insertNode=new ne(this.fromNode,this.insertNode?.records??[],void 0,true,false,{source:this.insertNode?.source,targetColumns:this.insertNode?.targetColumns}),this.onDuplicateNode=this.dbType==="mssql"||s?null:new Ee(this.model.table,r.conflictColumns,r.columnsToUpdate,r.mode,e?.length?e:void 0),!!this.onDuplicateNode&&(this.onDuplicateNode.conflictTargetRaw=r.conflictTargetRaw,this.onDuplicateNode.conflictConstraint=r.conflictConstraint,r.mergeWhere)){if(o||this.dbType==="mssql")throw new T("QueryBuilder::merge","MERGE_WHERE_NOT_SUPPORTED",new Error(`${this.dbType} has no WHERE clause on its conflict update`));let a=new i(this.model,this.sqlDataSource);a.isNestedCondition=true,r.mergeWhere(a),this.onDuplicateNode.whereNodes=a.whereNodes;}}}insertFrom(e,r){this.assertWriteClausesSupported("QueryBuilder::insertFrom");let n=Array.isArray(e),o=n?e:void 0,s=n?r:e,a=typeof s=="function"?s(new i(this.model,this.sqlDataSource)):s,l=a!=null&&"extractQueryNodes"in a?a:s;return this.buildInsertFrom(l.extractQueryNodes(),o)}buildInsertFrom(e,r){return this.insertNodeSource=e,this.insertConflictConfig=null,this.onDuplicateNode=null,this.insertNode=new ne(this.fromNode,[],void 0,true,false,{source:e,targetColumns:r}),new $e(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:n,bindings:o}=this.astParser.parse(this.extractWriteNodes()),s=await this.getSqlDataSource("write"),a=await G(n,o,s,this.dbType,"rows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery});return Array.isArray(a)?a:[a]},this.buildInsertConflictCommit(),r?this.interpreterUtils.filterComputedColumns(r):[],"QueryBuilder::insertFrom")}async executeMssqlMergeRaw(e,r,n,o,s){if(!e.length)return [];let a=Object.keys(e[0]),l=this.interpreterUtils.formatStringColumn("mssql",this.model.table),u=Q=>this.interpreterUtils.formatStringColumn("mssql",Q),d=[],m=e.map(Q=>`select ${a.map(E=>(d.push(Q[E]),`@${d.length}`)).join(", ")}`),c=a.map(u).join(", "),p=m.join(" union all "),h=r.map(Q=>`target.${u(Q)} = source.${u(Q)}`).join(" and "),y=n.filter(Q=>!r.includes(Q)).map(Q=>`target.${u(Q)} = source.${u(Q)}`).join(", "),w=a.map(u).join(", "),S=a.map(Q=>`source.${u(Q)}`).join(", "),q=o.returning&&o.returning.length?o.returning.map(Q=>`inserted.${u(Q)}`).join(", "):a.map(Q=>`inserted.${u(Q)}`).join(", "),R=(o.updateOnConflict??true)&&y?`when matched then update set ${y}`:"",D=`merge into ${l} as target using (${p}) as source (${c}) on ${h} ${R} when not matched then insert (${w}) values (${S}) output ${q};`,$=await this.getSqlDataSource("write"),A=await G(D,d,$,this.dbType,"rows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery,sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(A)?A:[A]}updateFrom(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb"&&this.dbType!=="mssql")throw new T("QueryBuilder::updateFrom","UPDATE_FROM_NOT_SUPPORTED");return this.updateFromNode=this.buildFromSource("QueryBuilder::updateFrom",e,r),this}deleteUsing(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new T("QueryBuilder::deleteUsing","DELETE_USING_NOT_SUPPORTED");return this.deleteUsingNode=this.buildFromSource("QueryBuilder::deleteUsing",e,r),this}buildFromSource(e,r,n){if(typeof r!="function")return new V(r,n);if(!n)throw new T(e,"MISSING_ALIAS_FOR_SUBQUERY");let o=new i(this.model,this.sqlDataSource),s=r(o),a=s!=null&&"extractQueryNodes"in s?s:o;return new V(a.extractQueryNodes(),n)}update(e,r,n){let o=typeof e=="string"?{[e]:r}:e,s=typeof e=="string"?n:r;this.assertWriteClausesSupported("QueryBuilder::update",{allowCte:false});let a=this.interpreterUtils.stripComputedFromData(o),l=Object.keys(a),u=Object.values(a);if(!l.length)throw new T("QueryBuilder::update","UPDATE_REQUIRES_COLUMNS");this.updateNode=new Be(this.fromNode,l,u),this.returningNode=this.buildReturningNode("update",s);let d=this.returningNode!==null;return new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:m,values:c}=this.interpreterUtils.prepareColumns(l,u,"update",this.dbType);this.updateNode=new Be(this.fromNode,m,c);let{sql:p,bindings:h}=this.astParser.parse(this.extractWriteNodes()),y=await this.getSqlDataSource("write");return G(p,h,y,this.dbType,d?"rows":"affectedRows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery,sqlLiteOptions:{typeofModel:this.model,mode:d?"fetch":"affectedRows"}})})}buildReturningNode(e,r){return !r?.length||!this.interpreterUtils.dialectEmitsReturning(this.dbType)?null:new xt(r,e==="delete"?"deleted":"inserted")}withReturningNode(e){if(!this.returningNode)return e;if(this.dbType==="mssql"){let[r,...n]=e;return [r,this.returningNode,...n]}return [...e,this.returningNode]}truncate(e={}){if(this.assertWriteClausesSupported("QueryBuilder::truncate"),this.withNodes.length)throw new T("QueryBuilder::truncate","CTE_NOT_SUPPORTED_ON_TRUNCATE");return this.truncateNode=new qt(this.fromNode,false,e),new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:r,bindings:n}=this.astParser.parse(this.extractWriteNodes()),o=await this.getSqlDataSource("write");await G(r,n,o,this.dbType,"rows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery});})}delete(e){this.assertWriteClausesSupported("QueryBuilder::delete",{allowCte:false}),this.deleteNode=new Mt(this.fromNode),this.returningNode=this.buildReturningNode("delete",e);let r=this.returningNode!==null;return new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:n,bindings:o}=this.astParser.parse(this.extractWriteNodes()),s=await this.getSqlDataSource("write");return G(n,o,s,this.dbType,r?"rows":"affectedRows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery,sqlLiteOptions:{typeofModel:this.model,mode:r?"fetch":"affectedRows"}})})}softDelete(e={}){this.assertWriteClausesSupported("QueryBuilder::softDelete",{allowCte:false});let{column:r="deletedAt",value:n=bt()}=e||{};return this.updateNode=new Be(this.fromNode,[r],[n]),new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:o,values:s}=this.interpreterUtils.prepareColumns([r],[n],"update",this.dbType);this.updateNode=new Be(this.fromNode,o,s);let{sql:a,bindings:l}=this.astParser.parse(this.extractWriteNodes()),u=await this.getSqlDataSource("write");return G(a,l,u,this.dbType,"affectedRows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery,sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return Et(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),n=Bt(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${n}`:n,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new J("*")]);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=W(this.modelSelectedColumns),e.distinctNode=W(this.distinctNode),e.distinctOnNode=W(this.distinctOnNode),e.selectNodes=W(this.selectNodes),e.withQuery=W(this.withQuery),e.joinNodes=W(this.joinNodes),e.whereNodes=W(this.whereNodes),e.groupByNodes=W(this.groupByNodes),e.havingNodes=W(this.havingNodes),e.orderByNodes=W(this.orderByNodes),e.lockQueryNodes=W(this.lockQueryNodes),e.unionNodes=W(this.unionNodes),e.withNodes=W(this.withNodes),e.comments=[...this.comments],e.hints=[...this.hints],e.schemaName=this.schemaName,e.fromNode=W(this.fromNode),e.limitNode=W(this.limitNode),e.offsetNode=W(this.offsetNode),e.returningNode=W(this.returningNode),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}assertWriteClausesSupported(e,{allowCte:r=true}={}){let n=this.dbType==="mysql"||this.dbType==="mariadb";if(!r&&this.withNodes.length&&this.dbType==="mariadb")throw new T(e,"CTE_NOT_SUPPORTED_ON_WRITE",new Error("MariaDB does not support a CTE on UPDATE or DELETE"));if(this.selectNodes.length>0||!!this.distinctNode||!!this.distinctOnNode||this.groupByNodes.length>0||this.havingNodes.length>0||this.unionNodes.length>0||this.lockQueryNodes.length>0||this.comments.length>0||this.hints.length>0)throw new T(e,"SELECT_ONLY_CLAUSE_ON_WRITE");if(!n&&this.joinNodes.length>0)throw new T(e,"JOIN_NOT_SUPPORTED_ON_WRITE");let s=this.orderByNodes.length>0||this.limitNode!==null;if(this.offsetNode||!n&&s)throw new T(e,"ORDER_BY_LIMIT_NOT_SUPPORTED_ON_WRITE")}extractWriteNodes(){if(this.insertNode){let e=this.dbType==="mysql"||this.dbType==="mariadb";this.insertNode.withNodes=e&&this.withNodes.length?this.withNodes:void 0,this.insertNode.source=this.insertNodeSource;let r=(this.dbType==="mysql"||this.dbType==="mariadb")&&!!this.insertConflictConfig&&this.insertConflictConfig.conflictColumns.length===0&&this.insertConflictConfig.mode==="ignore";return this.insertNode.ignoreInto=r,this.insertNode.keyword=r?"insert ignore into":"insert into",this.insertNode.disambiguateSource=this.dbType==="sqlite"&&!!this.insertNodeSource&&!!this.onDuplicateNode,[...e?[]:this.withNodes,this.insertNode,this.onDuplicateNode].filter(Boolean)}return this.updateNode?(this.updateNode.joinNodes=this.joinNodes,this.updateNode.fromSourceNode=this.updateFromNode??void 0,[...this.withNodes,...this.withReturningNode([this.updateNode,...this.whereNodes,...this.orderByNodes,this.limitNode].filter(Boolean))]):this.deleteNode?(this.deleteNode.joinNodes=this.joinNodes,this.deleteNode.usingNode=this.deleteUsingNode??void 0,this.deleteNode.keyword=this.joinNodes.length?"delete":"delete from",[...this.withNodes,...this.withReturningNode([this.deleteNode,...this.whereNodes,...this.orderByNodes,this.limitNode].filter(Boolean))]):this.truncateNode?[this.truncateNode]:[]}extractQueryNodes(){if(this.schemaName){this.fromNode&&typeof this.fromNode.table=="string"&&(this.fromNode.schema=this.schemaName);for(let n of this.joinNodes)n.schema=this.schemaName;}if(this.insertNode||this.updateNode||this.deleteNode||this.truncateNode)return this.extractWriteNodes();this.selectNodes.length||(this.selectNodes=[new J("*")]);let e=this.comments.map(n=>new Ut(n)),r=this.hints.length?[new Ut(this.hints.join(" "),true)]:[];return [...this.withNodes,...e,this.distinctNode,this.distinctOnNode,...this.selectNodes,...r,this.fromNode,...this.joinNodes,...this.whereNodes,...this.groupByNodes,...this.havingNodes,...this.orderByNodes,this.limitNode,this.offsetNode,...this.lockQueryNodes,...this.unionNodes].filter(Boolean)}clearForFunctions(){return this.clearSelect(),this.clearGroupBy(),this.clearOrderBy(),this.clearLimit(),this.clearOffset(),this}isMssqlTransaction(){return this.sqlDataSource.type==="mssql"&&!!this.sqlDataSource.sqlConnection}async executePaginateQueries(e,r){if(this.isMssqlTransaction()){let n=await e(),o=await r();return [n,o]}return Promise.all([e(),r()])}async getSqlDataSource(e){return this.replicationMode?this.replicationMode==="master"?this.sqlDataSource:e==="write"?this.sqlDataSource:this.sqlDataSource.getSlave()||this.sqlDataSource:e==="read"?this.sqlDataSource.getSlave()||this.sqlDataSource:this.sqlDataSource}async execSqlWithSlaveHandling(e,r){let n=await this.getSqlDataSource(e);if(!(n!==this.sqlDataSource))return r(n);try{return await r(n)}catch(s){let a=s instanceof Error?s:new Error(String(s)),l=this.sqlDataSource.getOnSlaveServerFailure();if(l)return await l(a,{host:n.host,port:n.port,username:n.username,password:n.password,database:n.database,type:n.getDbType()}),await r(this.sqlDataSource);throw a}}};function of(i,t){return t.strategy&&t.strategy!=="auto"?t.strategy:Cg(i)}function Cg(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 ru=oe(),sf;sf=Symbol.toStringTag;var Yt=class{constructor(t,e){this.execute=t;this.executePojo=e;this[sf]="ModelQueryResultPromise";}pojo(){return this.executePojo()}run(){return this.executed??(this.executed=this.execute())}then(t,e){return this.run().then(t,e)}catch(t){return this.run().catch(t)}finally(t){return this.run().finally(t)}},it=class i extends v{constructor(e,r){super(e,r);this.loadOptions={strategy:"auto"};this.sqlModelManagerUtils=new zt(e,this.dbType,r),this.relationQueryBuilders=[],this.modelSelectedColumns=[],this.modelColumnsMap=this.model.getColumnsByDatabaseName(),this.modelColumnsDatabaseNames=new Map;for(let[n,o]of this.modelColumnsMap)this.modelColumnsDatabaseNames.set(n,o.columnName);}expandModelSelectColumns(){let e=this.selectNodes;if(!e.length){if(this.joinNodes.length)return;for(let[,r]of this.modelColumnsMap)r.expression||e.push(new J(r.databaseName,r.columnName));return}for(let r of e){if(r.isRawValue||r.alias!==void 0||typeof r.column!="string"||r.column.includes(".")||r.column==="*")continue;let n=this.modelColumnsMap.get(r.column);!n||n.expression||(r.alias=n.columnName);}}get isRelationQueryBuilder(){return !!this.relation}static from(e,r={}){if(r.connection)return new 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.")}one(){return new Yt(()=>this.executeOne(false),()=>this.executeOne(true))}oneOrFail(e){let r=async n=>{let o=await this.executeOne(n);if(!o)throw new T(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return o};return new Yt(()=>r(false),()=>r(true))}many(){return new Yt(()=>this.executeMany(false),()=>this.executeMany(true))}async executeOne(e){let r=await this.limit(1).executeMany(e);return r.length?r[0]:null}async executeMany(e){if(await this.model.beforeFetch?.(this),e)return super.many();let r=this.collectUserOutputNames();this.expandModelSelectColumns();let o=await super.many();if(!o.length)return [];let s=ge(o,this.model,this.modelSelectedColumns,r);if(!s)return [];let a=Array.isArray(s)?s:[s];return this.relationQueryBuilders.length&&await this.processRelationsWithStrategy(a),a}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async*chunk(e){let r=0;for(;;){let n=await this.limit(e).offset(r).many();if(!n.length)break;yield n,r+=n.length;}}async stream(e={}){await this.model.beforeFetch?.(this);let r=this.collectUserOutputNames();this.expandModelSelectColumns();let{sql:n,bindings:o}=this.unWrap(),s=await this.getSqlDataSource("read");return await dn(n,o,s,e,{onData:async(l,u)=>{let d=ge([u],this.model,this.modelSelectedColumns,r);d&&(this.relationQueryBuilders.length&&await this.processRelationsRecursively([d]),l.write(d));}})}async paginateWithCursor(e,r){return super.paginateWithCursor(e,r)}insert(e,r={}){return this.assertWriteClausesSupported("ModelQueryBuilder::insert"),this.getModelManager(r.trx).insert(e,{returning:r.returning,withNodes:this.withNodes.length?this.withNodes:void 0})}insertMany(e,r={}){return this.assertWriteClausesSupported("ModelQueryBuilder::insertMany"),this.getModelManager(r.trx).insertMany(e,{returning:r.returning,withNodes:this.withNodes.length?this.withNodes:void 0})}async batchInsert(e,r={}){this.assertWriteClausesSupported("ModelQueryBuilder::batchInsert");let n=this.resolveBatchSize(r.chunkSize),o=[];for(let s=0;s<e.length;s+=n){let a=await this.insertMany(e.slice(s,s+n),{returning:r.returning,trx:r.trx});o.push(...a);}return r.returning?.length?o:e.length}insertFrom(e,r){this.assertWriteClausesSupported("ModelQueryBuilder::insertFrom");let n=Array.isArray(e),o=n?e:void 0,s=n?r:e,a=typeof s=="function"?s(new i(this.model,this.sqlDataSource)):s,l=a!=null&&"extractQueryNodes"in a?a:s;return this.buildInsertFrom(l.extractQueryNodes(),o)}upsert(e,r,n={updateOnConflict:true}){this.assertWriteClausesSupported("ModelQueryBuilder::upsert");let o=this.getModelManager(n.trx),s=Object.keys(e),a=Object.keys(r),l={...e,...r};return o.upsertMany(s,a,[l],{updateOnConflict:n.updateOnConflict??true,returning:n.returning}).then(u=>Array.isArray(u)?u[0]:u)}upsertMany(e,r,n={updateOnConflict:true}){this.assertWriteClausesSupported("ModelQueryBuilder::upsertMany");let o=this.getModelManager(n.trx),s=r.length>0?Object.keys(r[0]):[];return o.upsertMany(e,s,r,{updateOnConflict:n.updateOnConflict??true,returning:n.returning})}getModelManager(e){let r=e?e.sql:this.sqlDataSource.getTransactionBoundSqlDataSource()??this.sqlDataSource;return new at(this.model,r)}async find(e){return this.getModelManager().find(e)}async findOne(e){return this.getModelManager().findOne(e)}async findOneOrFail(e){return this.getModelManager().findOneOrFail(e)}async findOneByPrimaryKey(e,r){return this.getModelManager().findOneByPrimaryKey(e,r)}async updateRecord(e,r,n){return this.getModelManager(n?.trx).updateRecord(e,r,n)}async deleteRecord(e,r){return this.getModelManager(r?.trx).deleteRecord(e)}async save(e,r){let n=this.model.primaryKey;if(!n)throw new T(this.model.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");let o=e[n],s=o?{[n]:o}:{};return this.upsert(s,e,{updateOnConflict:true,returning:r?.returning,trx:r?.trx})}async softDeleteRecord(e,r,n){let{column:o=this.model.softDeleteColumn,value:s=this.model.softDeleteValue}=r||{},a={[o]:s};return this.getModelManager(n?.trx).updateRecord(e,a,{returning:n?.returning})}async firstOrInsert(e,r,n){let o=this.getModelManager(n?.trx),s=await o.findOne({where:e});if(s)return s;let a={...e,...r};return o.insert(a,{returning:["*"]})}async refresh(e){return this.getModelManager().findOneByPrimaryKey(e)}async sync(e,r,n,o,s={}){if(Array.isArray(n)||(n=[n]),!n.length)return;let a=this.sqlModelManagerUtils.getRelationFromModel(e);if(a.type!=="manyToMany")throw new T(`${this.model.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let l=H(a.leftForeignKey,s.caseConvention||this.model.databaseCaseConvention),u=H(a.rightForeignKey,s.caseConvention||this.model.databaseCaseConvention),d=n.map((p,h)=>({[l]:r[this.model.primaryKey],[u]:p[a.model.primaryKey],...o?o(p,h):{}}));class m extends Ae{static get table(){return a.throughModel}}m.databaseCaseConvention="preserve",m.modelCaseConvention="preserve",await new at(m,s.trx?s.trx.sql:this.sqlDataSource).insertMany(d);}truncate(e={}){return super.truncate(e)}update(e,r,n){let o=typeof e=="string",s=o?{[e]:r}:e,l=((o?n:r)??{}).returning,u=super.update(s,l);return new ie(()=>u.unWrap(),()=>u.toSql(),()=>u.toQuery(),async()=>{if(!l||!this.returningNode)return u;let d=await u;return ge(d,this.model,l)})}softDelete(e={}){let r=super.softDelete(e);return new ie(()=>r.unWrap(),()=>r.toSql(),()=>r.toQuery(),async()=>r)}delete(e={}){let r=e.returning,n=super.delete(r);return new ie(()=>n.unWrap(),()=>n.toSql(),()=>n.toQuery(),async()=>{if(!r||!this.returningNode)return n;let o=await n;return ge(o,this.model,r)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?+r.total:0}async getMax(e){this.clearForFunctions(),this.selectFunc("max",e,"total");let r=await this.one();return r?+r.total:0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?+r.total:0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?+r.total:0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?+r.total:0}async paginate(e,r){let n=this.clone(),o=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>o.many(),()=>n.getCount("*"));return {paginationMetadata:cn(e,r,a),data:s}}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof v)&&typeof e[1]=="string"){let[r,n]=e;return super.select(r,n),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}countDistinct(e,r){return super.countDistinct(e,r),this}sumDistinct(e,r){return super.sumDistinct(e,r),this}avgDistinct(e,r){return super.avgDistinct(e,r),this}rank(e,r){return super.rank(e,r),this}denseRank(e,r){return super.denseRank(e,r),this}rowNumber(e,r){return super.rowNumber(e,r),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}load(e,r,n){let o,s={strategy:"auto"};typeof r=="function"?(o=r,n&&(s=n)):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,o?.(l),this.relationQueryBuilders.push(l),this}clearRelations(){return this.relationQueryBuilders=[],this}havingRelated(e,r,n){return this.andHavingRelated(e,r,n)}andHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.whereExists(d),this}orHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.orWhereExists(d),this}notHavingRelated(e,r,n){return this.andNotHavingRelated(e,r,n)}andNotHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.whereNotExists(d),this}orNotHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.orWhereNotExists(d),this}clone(){let e=super.clone();return e.relationQueryBuilders=W(this.relationQueryBuilders),e}async processRelationsRecursively(e){await Promise.all(this.relationQueryBuilders.filter(r=>r.isRelationQueryBuilder).map(async r=>{let n=await this.getRelatedModelsForRelation(r,r.relation,e);this.mapRelatedModelsToModels(r.relation,e,n);}));}async processRelationsWithStrategy(e){let r=e.length,n=this.relationQueryBuilders.filter(s=>s.isRelationQueryBuilder),o=async s=>{let a=of({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 n)await o(s);return}await Promise.all(n.map(o));}async loadRelationViaJoin(e,r){let n=e.relation,o=e.loadOptions.joinSeparator||"__",a=await this.buildJoinQuery(e,n,o).many();this.mapJoinedResultsToModels(a,r,n,o);}buildJoinQuery(e,r,n){let o=new i(this.model,this.sqlDataSource);if(this.modelSelectedColumns.length>0)for(let s of this.selectNodes)o.selectNodes.push(W(s));else for(let[s,a]of this.model.getColumnsByDatabaseName())a.expression||o.selectNodes.push(new J(`${this.model.table}.${s}`,void 0,void 0,true));for(let s of this.whereNodes){let a=W(s);this.qualifyWhereNodeColumns(a,this.model.table),o.whereNodes.push(a);}for(let s of this.groupByNodes)o.groupByNodes.push(W(s));for(let s of this.orderByNodes)o.orderByNodes.push(W(s));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(o.limitNode=W(this.limitNode)),this.offsetNode&&(o.offsetNode=W(this.offsetNode))),r.type){case "hasOne":case "hasMany":o.leftJoin(r.model.table,`${this.model.table}.${this.model.primaryKey}`,`${r.model.table}.${r.foreignKey}`);break;case "belongsTo":o.leftJoin(r.model.table,`${this.model.table}.${r.foreignKey}`,`${r.model.table}.${r.model.primaryKey}`);break;case "manyToMany":{let s=r;o.leftJoin(s.throughModel,`${this.model.table}.${this.model.primaryKey}`,`${s.throughModel}.${s.leftForeignKey}`),o.leftJoin(s.model.table,`${s.throughModel}.${s.rightForeignKey}`,`${s.model.table}.${s.model.primaryKey}`);break}}this.selectRelationColumnsWithAlias(o,r,e,n);for(let s of e.whereNodes)o.whereNodes.push(W(s));for(let s of e.orderByNodes)o.orderByNodes.push(W(s));return o}selectRelationColumnsWithAlias(e,r,n,o){let s=r.columnName,a=r.model,l=a.getColumnsByName(),u=a.getColumnsByDatabaseName(),d=n.selectNodes.filter(c=>typeof c.column=="string"),m=d.some(c=>c.column==="*"||c.column.endsWith(".*"));if(d.length===0||m)for(let[c,p]of u)e.selectRaw(`${a.table}.${c} as ${s}${o}${p.columnName}`);else for(let c of d){let p=c.column,h=p.includes(".")?p.split(".").pop():p,y=u.get(h)||l.get(h),w=y?.databaseName??h,S=c.alias??y?.columnName??h;e.selectRaw(`${a.table}.${w} as ${s}${o}${S}`);}}mapJoinedResultsToModels(e,r,n,o){let{columnName:s,type:a}=n,l=n.model.getColumnsByName();if(a==="hasMany"||a==="manyToMany"){let u=new Map;e.forEach(d=>{let m=d[this.model.primaryKey];u.has(m)||u.set(m,[]);let c=this.extractRelationDataFromRow(d,s,o);c&&(this.serializeRelationData(c,l),u.get(m).push(c));}),r.forEach(d=>{let m=d[this.model.primaryKey];d[s]=u.get(m)||[];});}else {let u=new Map;e.forEach(d=>{let m=d[this.model.primaryKey];if(!u.has(m)){let c=this.extractRelationDataFromRow(d,s,o);c&&(this.serializeRelationData(c,l),u.set(m,c));}}),r.forEach(d=>{let m=d[this.model.primaryKey];d[s]=u.get(m)||null;});}}extractRelationDataFromRow(e,r,n){let o=`${r}${n}`,s={},a=false,l=false;for(let u of Object.keys(e))if(u.startsWith(o)){let d=u.substring(o.length);s[d]=e[u],a=true,e[u]!==null&&e[u]!==void 0&&(l=true);}return a&&l?s:null}qualifyWhereNodeColumns(e,r){if(e instanceof O)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof ce)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof De)for(let n of e.nodes)this.qualifyWhereNodeColumns(n,r);}serializeRelationData(e,r){for(let n of Object.keys(e)){let o=r.get(n);o?.serialize&&e[n]!==null&&e[n]!==void 0&&(e[n]=o.serialize(e[n]));}}async loadRelationViaBatch(e,r){let n=await this.getRelatedModelsForRelation(e,e.relation,r);this.mapRelatedModelsToModels(e.relation,r,n);}mapRelatedModelsToModels(e,r,n){switch(e.type){case "hasOne":if(!this.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let o=new Map;n.forEach(c=>{let p=c[e.foreignKey];p&&o.set(String(p),c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=null;return}let h=o.get(String(p));c[e.columnName]=h||null;});break;case "belongsTo":let s=new Map;n.forEach(c=>{if(!e.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let p=c[e.model.primaryKey];p&&s.set(String(p),c);}),r.forEach(c=>{let p=c[e.foreignKey];if(!p){c[e.columnName]=null;return}let h=s.get(String(p));c[e.columnName]=h||null;});break;case "hasMany":if(!this.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;n.forEach(c=>{let p=c[e.foreignKey];if(!p)return;let h=String(p);a.has(h)||a.set(h,[]),a.get(h).push(c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=[];return}let h=a.get(String(p))||[];c[e.columnName]=h;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::manyToMany","MODEL_HAS_NO_PRIMARY_KEY");let l=e,u=new Map,d=l.leftForeignKey,m=this.modelColumnsMap.get(d)||this.modelColumnsDatabaseNames.get(d)||H(d,this.model.modelCaseConvention);n.forEach(c=>{let p=c[m];if(p==null)return;let h=String(p);u.has(h)||u.set(h,[]),delete c[m],u.get(h).push(c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=[];return}let h=u.get(String(p))||[];c[e.columnName]=h;});break;default:throw new T(this.model.name+"::mapRelatedModelsToModels","UNSUPPORTED_RELATION_TYPE")}}async getRelatedModelsForRelation(e,r,n){return this.getRelatedModelsQueryForRelation(e,r,n).many()}getRelatedModelsQueryForRelation(e,r,n){let o=this.getFilterValuesFromModelsForRelation(r,n);switch(r.type){case "belongsTo":case "hasOne":return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,o);case "hasMany":let s=e.limitNode?.limit,a=e.offsetNode?.offset;if(!s&&!a)return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,o);let l=Le(ru.crypto.randomBytes(6)),u=`${r.model.table}_cte_${l}`,d=e.orderByNodes.map(A=>A.isRawValue?A.column:`${this.interpreterUtils.formatStringColumn(this.dbType,A.column)} ${A.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let m=e.with(u,A=>A.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${d}) as rn_${l}`).whereIn(r.foreignKey,o));s&&m.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&m.whereRaw(`rn_${l} > ${a}`);let c=e.modelSelectedColumns.map(A=>wo(A,u,e.model.table));return m.select(...c).table(u);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new T(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!n.length)return e;let h=e.limitNode?.limit,y=e.offsetNode?.offset,w=e.modelSelectedColumns.length?e.modelSelectedColumns.map(A=>A.includes(".")?A:`${r.model.table}.${A}`):[`${r.model.table}.*`];if(!h&&!y)return e.select(...w).select([`${p.throughModel}.${p.leftForeignKey}`,p.leftForeignKey]).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o);let S=Le(ru.crypto.randomBytes(6)),q=`${r.model.table}_cte_${S}`,M=e.orderByNodes.map(A=>{if(A.isRawValue)return A.column;let Q=A.column.includes(".")?A.column:`${r.model.table}.${A.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,Q)} ${A.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let R=`${Le(ru.crypto.randomBytes(6))}_left_foreign_key`,D=e.with(q,A=>A.select(...w).select([`${p.throughModel}.${p.leftForeignKey}`,R]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${M}) as rn_${S}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o));h&&D.whereRaw(`rn_${S} <= ${h+(y||0)}`),y&&D.whereRaw(`rn_${S} > ${y}`);let $=w.map(A=>wo(A,q,e.model.table));return D.select(...$).select([`${q}.${R}`,p.leftForeignKey]).table(q);default:throw new T(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new T(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);case "belongsTo":return r.map(n=>n[e.foreignKey]);case "manyToMany":if(!this.model.primaryKey)throw new T(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);default:throw new T(this.model.name+"::getFilterValuesFromModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}applyHavingRelatedFilter(e,r,n,o){let s=new f(r.model),a=new f(this.model),l=this.dbType;switch(r.type){case "hasOne":case "hasMany":{if(!this.model.primaryKey||!r.foreignKey)throw new T(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");let u=s.formatStringColumn(l,`${r.model.table}.${r.foreignKey}`),d=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${u} = ${d}`),n&&typeof o=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${n} ${o}`);return}case "belongsTo":{if(!r.model.primaryKey||!r.foreignKey)throw new T(this.model.name+"::applyHavingRelatedFilter",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${r.model.name}`);let u=s.formatStringColumn(l,`${r.model.table}.${r.model.primaryKey}`),d=a.formatStringColumn(l,`${this.model.table}.${r.foreignKey}`);e.whereRaw(`${u} = ${d}`),n&&typeof o=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${n} ${o}`);return}case "manyToMany":{let u=r;if(!this.model.primaryKey||!r.model.primaryKey)throw new T(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");e.joinNodes?.some(p=>!p.isRawValue&&p.table===u.throughModel&&p.type==="left")||e.leftJoin(u.throughModel,`${u.relatedModel}.${r.model.primaryKey}`,`${u.throughModel}.${u.rightForeignKey}`);let m=a.formatStringColumn(l,`${u.throughModel}.${u.leftForeignKey}`),c=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${m} = ${c}`),n&&typeof o=="number"&&e.groupByRaw(m).andHavingRaw(`count(*) ${n} ${o}`);return}default:throw new T(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}};function af(){return {}}var at=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=af(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new b(this.model,this.sqlType),this.interpreterUtils=new f(this.model);}setReplicationMode(t){return this.replicationMode=t,this}async find(t){if(!t)return this.query().many();let e=this.query();return t.select&&e.select(...t.select),t.relations&&t.relations.forEach(r=>{e.load(r);}),t.where&&this.handleWhereCondition(e,t.where),t.orderBy&&Object.entries(t.orderBy).forEach(([r,n])=>{e.orderBy(r,n);}),t.limit&&e.limit(t.limit),t.offset&&e.offset(t.offset),t.groupBy&&e.groupBy(...t.groupBy),e.many()}async findOne(t){let e=await this.find({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,offset:t.offset,limit:1});return e.length?e[0]:null}async findOneOrFail(t){let e=await this.findOne({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,offset:t.offset});if(e===null)throw t.customError?t.customError:new T(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new T(this.model.name+"::findOneByPrimaryKey","MODEL_HAS_NO_PRIMARY_KEY");return this.query().select(...e||[]).where(this.model.primaryKey,t).one()}withInsertNodes(t,e,r){let n=this.sqlType==="mysql"||this.sqlType==="mariadb";return t.withNodes=n&&r?.length?r:void 0,[...n?[]:r??[],t,e].filter(Boolean)}insert(t,e={}){let r=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(t).map(m=>[m,t[m]]))),n=!e.returning||e.returning.length===0,o=new ne(new V(this.model.table),[r],e.returning,n,false),s=null,a=null,l=()=>{let m=this.astParser.parse(this.withInsertNodes(o,s,e.withNodes));return {sql:m.sql,bindings:m.bindings}},u=()=>{let m=this.astParser.parse(this.withInsertNodes(o,s,e.withNodes));return {sql:Bt(this.sqlDataSource,m.sql),bindings:m.bindings}},d=()=>{let{sql:m,bindings:c}=u();return Et(m,c)};return new $e(l,u,d,async()=>{try{await this.model.validate?.(t);}catch(R){throw R}let{columns:m,values:c}=this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert",this.sqlType),p={};if(m.forEach((R,D)=>{let $=c[D];p[R]=$,t[R]??(t[R]=$);}),a)return (await this.executeInsertConflict([p],[t],a,e.returning,e.withNodes))[0];let h=!e.returning||e.returning.length===0,{sql:y,bindings:w}=this.astParser.parse(this.withInsertNodes(new ne(new V(this.model.table),[p],e.returning,h,false),null,e.withNodes)),S=await G(y,w,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(h)return;if(this.sqlType==="mysql")return this.handleMysqlInsert(S,[t],"one",e.returning);let q=S[0];return q?ge([q],this.model,e.returning):t},m=>{if(a=m,m.conflictColumns.length===0&&this.sqlType==="mssql")throw new T("ModelManager::onConflict","NOT_SUPPORTED_IN_MSSQL",new Error("MSSQL cannot express a target-less ON CONFLICT; provide the conflict columns"));o=new ne(new V(this.model.table),o.records,void 0,true,false),s=this.sqlType==="mssql"?null:new Ee(this.model.table,m.conflictColumns,m.columnsToUpdate,m.mode,e.returning);},this.interpreterUtils.filterComputedColumns(Object.keys(t)),"ModelManager::insert")}insertMany(t,e={}){return this.insertManyInternal(t,e,true)}insertManyInternal(t,e,r){let n=t.map(c=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(c).map(p=>[p,c[p]])))),o=!e.returning||e.returning.length===0,s=new ne(new V(this.model.table),n,e.returning,o,false),a=null,l=null,u=()=>{let c=this.astParser.parse(this.withInsertNodes(s,a,e.withNodes));return {sql:c.sql,bindings:c.bindings}},d=()=>{let c=this.astParser.parse(this.withInsertNodes(s,a,e.withNodes));return {sql:Bt(this.sqlDataSource,c.sql),bindings:c.bindings}},m=()=>{let{sql:c,bindings:p}=d();return Et(c,p)};return new $e(u,d,m,async()=>{if(r)try{await this.model.validate?.(t);}catch(M){throw M}let c=t.map(M=>{let{columns:R,values:D}=this.interpreterUtils.prepareColumns(Object.keys(M),Object.values(M),"insert",this.sqlType),$={};return R.forEach((A,Q)=>{let ye=D[Q];$[A]=ye,M[A]??(M[A]=ye);}),$});if(l)return this.executeInsertConflict(c,t,l,e.returning,e.withNodes);let p=!e.returning||e.returning.length===0,{sql:h,bindings:y}=this.astParser.parse(this.withInsertNodes(new ne(new V(this.model.table),c,e.returning,p,false),null,e.withNodes)),w=await G(h,y,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(p)return [];if(this.sqlType==="mysql")return await this.handleMysqlInsert(w,t,"many",e.returning)||[];let S=w;if(!S.length)return [];let q=ge(S,this.model,e.returning);return q?Array.isArray(q)?q:[q]:[]},c=>{if(l=c,c.conflictColumns.length===0&&this.sqlType==="mssql")throw new T("ModelManager::onConflict","NOT_SUPPORTED_IN_MSSQL",new Error("MSSQL cannot express a target-less ON CONFLICT; provide the conflict columns"));s=new ne(new V(this.model.table),s.records,void 0,true,false),a=this.sqlType==="mssql"?null:new Ee(this.model.table,c.conflictColumns,c.columnsToUpdate,c.mode,e.returning);},t.length?this.interpreterUtils.filterComputedColumns(Object.keys(t[0])):[],"ModelManager::insertMany")}upsertMany(t,e,r,n={updateOnConflict:true}){let o=this.insertManyInternal(r,n,false).onConflict(t);return n.updateOnConflict??true?o.merge(this.interpreterUtils.filterComputedColumns(e)):o.ignore()}async executeInsertConflict(t,e,r,n,o){let s=r.mode==="update";if(this.sqlType==="mssql")return this.executeMssqlMerge(t,r.conflictColumns,r.columnsToUpdate,{updateOnConflict:s,returning:n},e);let a=!n||n.length===0,l=!a&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?n:void 0,{sql:u,bindings:d}=this.astParser.parse(this.withInsertNodes(new ne(new V(this.model.table),t,void 0,true,false),new Ee(this.model.table,r.conflictColumns,r.columnsToUpdate,r.mode,l),o)),m=await G(u,d,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:e}});if(a)return [];if(this.sqlType==="postgres"||this.sqlType==="cockroachdb"){if(m.length<e.length&&!s)return this.refetchByConflictColumn(r.conflictColumns[0],e,n);let p=ge(m,this.model,n);return p?Array.isArray(p)?p:[p]:[]}return this.refetchByConflictColumn(r.conflictColumns[0],e,n)}async refetchByConflictColumn(t,e,r){if(!t)return [];let n=e.map(s=>s[t]);return await this.query().select(...r?.length?r:["*"]).whereIn(t,n).many()}async executeMssqlMerge(t,e,r,n,o){if(!t.length)return [];let s=Object.keys(t[0]),a=this.interpreterUtils.formatStringColumn("mssql",this.model.table),l=$=>this.interpreterUtils.formatStringColumn("mssql",$),u=[],d=t.map($=>`select ${s.map(Q=>(u.push($[Q]),`@${u.length}`)).join(", ")}`),m=s.map(l).join(", "),c=d.join(" union all "),p=e.map($=>`target.${l($)} = source.${l($)}`).join(" and "),h=r.filter($=>!e.includes($)).map($=>`target.${l($)} = source.${l($)}`).join(", "),y=s.map(l).join(", "),w=s.map($=>`source.${l($)}`).join(", "),S=n.returning&&n.returning.length?n.returning.map($=>`inserted.${l($)}${this.interpreterUtils.resolveColumnAlias("mssql",$)}`).join(", "):s.map($=>`inserted.${l($)}${this.interpreterUtils.resolveColumnAlias("mssql",$)}`).join(", "),M=(n.updateOnConflict??true)&&h?`when matched then update set ${h}`:"",R=`merge into ${a} as target using (${c}) as source (${m}) on ${p} ${M} when not matched then insert (${y}) values (${w}) output ${S};`,D=await G(R,u,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});if(D.length===0&&!(n.updateOnConflict??true)){let $=e[0],A=o.map(ye=>ye[$]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn($,A).many()}return D}async updateRecord(t,e,r){let n=new Set(this.model.getColumns().map(S=>S.columnName)),o=Object.keys(e).filter(S=>n.has(S)),s=o.map(S=>e[S]),{columns:a,values:l}=this.interpreterUtils.prepareColumns(o,s,"update",this.sqlType),{primaryKey:u}=this.model;if(!u)throw new T(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let d=a.indexOf(u);d!==-1&&(a.splice(d,1),l.splice(d,1));let m=r?.returning??[],c=m.length>0&&!this.interpreterUtils.hasComputedColumn(m)&&this.interpreterUtils.shouldFetchNatively(this.sqlType,"update"),{sql:p,bindings:h}=this.astParser.parse([new Be(new V(this.model.table),a,l),new O(u,"and",false,"=",t),...c?[new xt(m)]:[]]),y=await G(p,h,this.sqlDataSource,this.sqlType,c?"rows":"affectedRows",c?{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}:void 0);if(!m.length)return;if(c){if(!y.length)throw new T(this.model.name+"::updateRecord","ROW_NOT_FOUND");return ge([y[0]],this.model,m)}let w=await this.findOneByPrimaryKey(t,r?.returning);if(!w)throw new T(this.model.name+"::updateRecord","ROW_NOT_FOUND");return w}async deleteRecord(t){if(!this.model.primaryKey)throw new T(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new O(this.model.primaryKey,"and",false,"=",t),{sql:r,bindings:n}=this.astParser.parse([new Mt(new V(this.model.table)),e]);await G(r,n,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new it(this.model,this.sqlDataSource);return this.replicationMode&&t.setReplicationMode(this.replicationMode),t}async handleMysqlInsert(t,e,r,n){if(!this.model.primaryKey){if(r==="one"){let a=e.length?e[0]:null;return a?ge([a],this.model):null}return ge(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(d=>d[this.model.primaryKey]),l=a.map(d=>`'${d}'`).join(","),u=await this.query().select(...n??["*"]).whereIn(this.model.primaryKey,a).orderByRaw(`FIELD(${this.model.primaryKey}, ${l})`).many();return r==="one"?u.length?u[0]:null:u}let o=Array.from({length:t.affectedRows},(a,l)=>l+t.insertId),s=await this.query().select(...n||["*"]).whereIn(this.model.primaryKey,o).many();return r==="one"?s.length?s[0]:null:s}handleWhereCondition(t,e,r=false){He(t,e??{},r);}};var nu=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??bt()});$t();var Te=class{constructor(t){this.options=t;}static async createDriver(t){throw new T("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};le();var Zt=class Zt extends Te{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new Zt(this.mongoClient);let e=await import('mongodb').catch(()=>{throw new L("mongodb")});if(this.mongoClient=e.default??e,!this.mongoClient)throw new L("mongodb");return new Zt(this.mongoClient)}};Zt.mongoClient=null;var Nn=Zt;le();var Xt=class Xt extends Te{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new Xt(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new L("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new L("mssql");return new Xt(this.mssqlClient)}};Xt.mssqlClient=null;var qn=Xt;le();var er=class er extends Te{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new er(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new L("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new L("mysql2");return new er(this.mysqlClient)}};er.mysqlClient=null;var Cn=er;le();var tr=class tr extends Te{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new tr(this.pgClient);let e=await import('pg').catch(()=>{throw new L("pg")});if("default"in e&&(e.default,this.pgClient=e.default??e),!this.pgClient)throw new L("pg");return new tr(this.pgClient)}};tr.pgClient=null;var Rn=tr;le();var rr=class rr extends Te{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new rr(this.sqlite3Client);let e=await import('sqlite3').catch(()=>{throw new L("sqlite3")});if(this.sqlite3Client=e.default??e,!this.sqlite3Client)throw new L("sqlite3");return new rr(this.sqlite3Client)}};rr.sqlite3Client=null;var _n=rr;var me=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await Cn.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await Rn.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await _n.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await Nn.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await qn.createDriver(),this.mssqlDriver;default:throw new T(`DriverFactory::getDriver Driver ${t} not supported`,"DRIVER_NOT_FOUND")}}static getExistingDriver(t){switch(t){case "mysql":case "mariadb":return this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver;case "sqlite":return this.sqliteDriver;case "mongo":return this.mongodbDriver;case "mssql":return this.mssqlDriver;default:return null}}};me.mysqlDriver=null,me.pgDriver=null,me.sqliteDriver=null,me.mssqlDriver=null,me.mongodbDriver=null;$t();le();var Mn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;let n=e.coerceNumericTypes&&!e.driverOptions?.types?{getTypeParser:(o,s)=>{let a=!s||s==="text";return a&&o===20?l=>BigInt(l):a&&o===1700?l=>Number.parseFloat(l):r.types.getTypeParser(o,s)}}:void 0;this.pool=new r.Pool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions,...n?{types:n}:{}}),this.pool.on("error",o=>{let s=e.onPoolError;if(!s){g.error(`PgDriverAdapter: idle client error - ${o.message}`);return}try{let a=s(o,{type:this.dialect,host:e.host??"",port:e.port??0,database:e.database??""});Promise.resolve(a).catch(l=>g.error(l));}catch(a){g.error(a instanceof Error?a:String(a));}});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.connect()}releaseConnection(t,e){t?.release(e);}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION"),e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=0,o=t.replace(/\?/g,()=>`$${++n}`);if(!r.signal)return (r.connection??this.pool).query(o,e);let s=r.connection??await this.pool.connect(),a=!r.connection,l=()=>{let u=s.processID;u!=null&&this.pool.query("SELECT pg_cancel_backend($1)",[u]).catch(()=>{});};r.signal.addEventListener("abort",l,{once:true});try{return await s.query(o,e)}finally{r.signal.removeEventListener("abort",l),a&&s.release();}}extract(t,e){return e==="rows"?t.rows:e==="raw"?t:t.rowCount}async stream(t,e,r,n){let o=r.connection,s=!o,a=o??await this.pool.connect(),l=await import('pg-query-stream').catch(()=>{throw new L("pg-query-stream")}),u=new PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),d=0,m=t.replace(/\?/g,()=>`$${++d}`),c=new l.default(m,e,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),p=a.query(c),h=0,y=false,w=false,S=false,q=M=>{if(!(!s||S)){S=true;try{a.release(M);}catch{}}};return u.on("close",()=>{if(!(y||w)){w=true;try{p.destroy();}catch{}q();}}),p.on("data",M=>{if(n.onData){h++,Promise.resolve(n.onData(u,M)).then(()=>{h--,y&&h===0&&!w&&(q(),u.end());}).catch(R=>{w=true,q(R),u.destroy(R);});return}u.write(M);}),p.on("end",()=>{y=true,h===0&&!w&&(q(),u.end());}),p.on("error",M=>{w=true,q(M),u.destroy(M);}),u}};var xn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=r.createPool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.getConnection()}releaseConnection(t,e){if(e){t?.destroy();return}t?.release();}async beginTransaction(t,e){e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await t.beginTransaction();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){if(!r.signal)return (r.connection??this.pool).query(t,e);let n=r.connection??await this.pool.getConnection(),o=!r.connection,s=()=>{let a=n.threadId;a!=null&&this.pool.query(`KILL QUERY ${Number(a)}`).catch(()=>{});};r.signal.addEventListener("abort",s,{once:true});try{return await n.query(t,e)}finally{r.signal.removeEventListener("abort",s),o&&n.release();}}extract(t,e){let r=t;return e==="affectedRows"?r[0]?.affectedRows??0:e==="raw"?t:r[0]}async stream(t,e,r,n){let o=this.pool,s=r.connection??await o.getConnection(),a=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),u=s.connection.query(t,e).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),d=0,m=false,c=false,p=()=>{try{s.release();}catch{}};return u.on("data",h=>{if(n.onData){d++,Promise.resolve(n.onData(a,h)).then(()=>{d--,m&&d===0&&!c&&(p(),a.end());}).catch(y=>{c=true,p(),a.destroy(y);});return}a.write(h);}),u.on("end",()=>{m=true,d===0&&!c&&(p(),a.end());}),u.on("error",h=>{c=true,p(),a.destroy(h);}),a.on("close",()=>{p();}),a}};var On=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;}createPool(){let t=String(this.input.database??":memory:"),e=this.input.driverOptions?.mode??void 0;return new Promise((r,n)=>{let o=false,s=u=>{o||(o=true,n(new T("SqliteDataSource::createSqlPool","CONNECTION_NOT_ESTABLISHED",u instanceof Error?u:new Error(String(u)))));},a=u=>{if(u){s(u);return}o||(o=true,r());},l=e===void 0?new this.client.Database(t,a):new this.client.Database(t,e,a);l.on("error",u=>{if(o){g.error(`Sqlite3DriverAdapter: ${u instanceof Error?u.message:String(u)}`);return}s(u);}),this.pool=l;})}async closePool(){await new Promise((t,e)=>{this.pool.close(r=>{r&&e(r),t();});});}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){return await this.promisify(t,e,r)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.pool;return new ou(o,t,e,{onData:n.onData})}promisify(t,e,r){let n=r.sqlLiteOptions??{},o=n.mode||"fetch",s=n.customConnection??r.connection??this.pool;if(["begin","begin transaction","commit","rollback"].includes(t.trim().toLowerCase()))return new Promise((u,d)=>{s.run(t,e,function(m){m&&d(m),u(this.changes);});});if(o==="fetch")return new Promise((u,d)=>{s.all(t,e,(m,c)=>{m&&d(m),u(c||[]);});});if(!n?.typeofModel)return new Promise((u,d)=>{s.run(t,e,function(m){m?d(new Error(m.message)):u(this.changes);});});if(o==="insertOne"||o==="insertMany"){let u=`${t} returning *`;return new Promise((d,m)=>{s.all(u,e,(c,p)=>{if(c)return m(c);d(p||[]);});})}return new Promise((u,d)=>{s.run(t,e,function(m){m?d(new Error(m.message)):u(this.changes);});})}},ou=class extends Readable{constructor(t,e,r=[],n){super({objectMode:true}),this.db=t,this.query=e,this.params=r,this.started=false,this.events=n;}_read(){this.started||(this.started=true,this.readRows());}readRows(){let t=0,e=false,r=false;this.db.each(this.query,this.params,(n,o)=>{if(n){r=true,this.emit("error",n);return}t++;let s=false,a,l={write:u=>{s=true,a=u;}};Promise.resolve(this.events.onData?.(l,o)).then(()=>{if(!r){if(s){this.push(a);return}this.push(o);}}).catch(u=>{r=true,this.emit("error",u);}).finally(()=>{t--,e&&t===0&&!r&&this.push(null);});},n=>{if(n){r=true,this.emit("error",n);return}e=true,t===0&&!r&&this.push(null);});}};le();var An=class{constructor(t,e,r){this.dialect="mssql";this.jsEnvironment="node";this.pendingTransactions=new Set;this.dialect=t,this.client=r,this.input=e;let n=e.driverOptions,{options:o,...s}=n??{};this.pool=new r.ConnectionPool({server:e.host??"localhost",port:e.port,database:e.database,user:e.username,password:e.password,...s,options:{trustServerCertificate:B.MSSQL_TRUST_SERVER_CERTIFICATE??void 0,...o,abortTransactionOnError:false,enableImplicitTransactions:false}});}async createPool(){await this.pool.connect();}async closePool(){await this.endPendingTransactions(),await this.pool.close();}async reserveConnection(){let t=await this.pool.transaction();return this.pendingTransactions.add(t),t}releaseConnection(t,e){if(!(!t||!this.pendingTransactions.delete(t)))return this.endTransaction(t)}async endPendingTransactions(){let t=[...this.pendingTransactions];this.pendingTransactions.clear();for(let e of t)await this.endTransaction(e);}async endTransaction(t){try{await t.rollback();return}catch(e){g.error(e instanceof Error?e:String(e));}try{await t.request().batch("IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION");}catch(e){g.error(e instanceof Error?e:String(e));}}async beginTransaction(t,e){if(e.isolationLevel){let r=await this.getMssqlTransactionLevel(e.isolationLevel);await t.begin(r);return}await t.begin();}async commitTransaction(t,e){await t.commit(),this.pendingTransactions.delete(t);}async rollbackTransaction(t,e){await t.rollback(),this.pendingTransactions.delete(t);}async execute(t,e,r){let n=this.pool,o=r.connection?r.connection.request():n.request();e.forEach((l,u)=>{o.input(`p${u}`,l);});let s=0,a=t.replace(/\?|@(\d+)/g,()=>`@p${s++}`);if(r.signal){let l=()=>{try{o.cancel();}catch{}};r.signal.addEventListener("abort",l,{once:true});try{return await o.query(a)}finally{r.signal.removeEventListener("abort",l);}}return o.query(a)}extract(t,e){return e==="affectedRows"?t.rowsAffected[0]:e==="raw"?t:t.recordset}async stream(t,e,r,n){let o=r.connection??this.pool,s=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),a=o.request();a.stream=true,e.forEach((p,h)=>{a.input(`p${h}`,p);});let l=0,u=t.replace(/\?|@(\d+)/g,()=>`@p${l++}`),d=0,m=false,c=false;return a.on("row",p=>{if(!c){if(n.onData){d++,Promise.resolve(n.onData(s,p)).then(()=>{d--,m&&d===0&&!c&&s.end();}).catch(h=>{c=true,s.destroy(h);});return}s.write(p);}}),a.on("error",p=>{c=true,s.destroy(p);}),a.on("done",()=>{m=true,d===0&&!c&&s.end();}),a.query(u),s}async getMssqlTransactionLevel(t){let e=await import('mssql').then(r=>r.default.ISOLATION_LEVEL).catch(r=>{throw g.error(r),new L("mssql")});switch(t){case "READ UNCOMMITTED":return e.READ_UNCOMMITTED;case "READ COMMITTED":return e.READ_COMMITTED;case "REPEATABLE READ":return e.REPEATABLE_READ;case "SERIALIZABLE":return e.SERIALIZABLE;default:throw new T("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${t}`)}}};var Ag=()=>{be({name:"pg",dialects:["postgres","cockroachdb"],create:async({dialect:i,input:t})=>{let e=(await me.getDriver(i)).client;return new Mn(i,t,e)}}),be({name:"mysql2",dialects:["mysql","mariadb"],create:async({dialect:i,input:t})=>{let e=(await me.getDriver(i)).client;return new xn(i,t,e)}}),be({name:"sqlite3",dialects:["sqlite"],create:async({dialect:i,input:t})=>{let e=(await me.getDriver(i)).client;return new On(i,t,e)}}),be({name:"mssql",dialects:["mssql"],create:async({dialect:i,input:t})=>{let e=(await me.getDriver(i)).client;return new An(i,t,e)}});};Ag();var Eg=async i=>{if(i==="bun"){await(await Promise.resolve().then(()=>(hf(),ff))).registerBunDrivers();return}if(i==="web"){(await Promise.resolve().then(()=>(uu(),lu))).registerWebDrivers();return}if(i==="react-native"){await(await Promise.resolve().then(()=>(uu(),lu))).registerReactNativeDrivers();return}},Pn=async(i,t)=>{let e=pr(t?.jsEnvironment);await Eg(e);let r=await uf(i,e,t?.driver,t);return await r.createPool(),r};var or=class or{constructor(){}static run(t,e){return or.storage.run(t,e)}static getTransaction(){return or.storage.getStore()}};or.storage=new AsyncLocalStorage;var Ge=or;var sr=class i{constructor(t,e,r=false,n=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=Le(oe().crypto.randomBytes(16)),this.isolationLevel=e,this.isNested=r,this.nestingDepth=n;}async nestedTransaction(t){let e=new i(this.sql,this.isolationLevel,true,this.nestingDepth+1);if(await e.transaction(),t)try{let r=await Ge.run(e,()=>t(e));return await e.commit(),r}catch(r){throw await e.rollback(),r}return e}async transaction(){if(this.getIsolationLevelQuery(),this.isNested){let r=this.getSavePointName();this.sql.type==="mssql"?await this.sql.rawQuery(`SAVE TRANSACTION ${r}`):await this.sql.rawQuery(`SAVEPOINT ${r}`),this.isActive=true;return}(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&ct("BEGIN TRANSACTION",this.sql.logs);let t=this.sql.driverAdapter,e=this.sql.sqlConnection;if(!t||!e)throw new T("TRANSACTION::transaction","CONNECTION_NOT_ESTABLISHED");try{await t.beginTransaction(e,{isolationLevel:this.isolationLevel,rawQuery:(r,n)=>this.sql.rawQuery(r,n??[])}),this.isActive=!0;}catch(r){throw await this.releaseConnection(r),r}}async commit(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new T("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let r=this.getSavePointName();switch(this.sql.type){case "mssql":break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "sqlite":await this.sql.rawQuery(`RELEASE SAVEPOINT ${r}`);break}this.isActive=false;return}let e;try{let r=this.sql.driverAdapter,n=this.sql.sqlConnection;(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&ct("COMMIT",this.sql.logs),r&&n&&await r.commitTransaction(n,{rawQuery:(o,s)=>this.sql.rawQuery(o,s??[])});}catch(r){throw e=r,g.error(r),r}finally{this.isActive=false,await this.releaseConnection(e);}}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new T("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let r=this.getSavePointName();switch(this.sql.type){case "mssql":await this.sql.rawQuery(`ROLLBACK TRANSACTION ${r}`);break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":await this.sql.rawQuery(`ROLLBACK TO SAVEPOINT ${r}`);break;case "sqlite":await this.sql.rawQuery(`ROLLBACK TO ${r}`);break;default:throw new T("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}this.isActive=false;return}let e;try{let r=this.sql.driverAdapter,n=this.sql.sqlConnection;(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&ct("ROLLBACK",this.sql.logs),r&&n&&await r.rollbackTransaction(n,{rawQuery:(o,s)=>this.sql.rawQuery(o,s??[])});}catch(r){throw e=r,g.error(r),r}finally{this.isActive=false,await this.releaseConnection(e);}}async releaseConnection(t){if(this.connectionReleased)return;let e=null;try{await this.sql.driverAdapter?.releaseConnection(this.sql.sqlConnection,t);}catch(r){e=r,g.error(r);}this.sql.sqlConnection=null;try{await this.sql.disconnect();}catch(r){g.warn(`Transaction::releaseConnection - disconnect failed: ${r?.message??r}`);}if(this.connectionReleased=true,e)throw e}getIsolationLevelQuery(){if(!this.isolationLevel||this.sql.type==="mssql")return "";if(this.sql.type==="sqlite"&&this.isolationLevel!=="SERIALIZABLE")throw new T("TRANSACTION::getIsolationLevelQuery","SQLITE_ONLY_SUPPORTS_SERIALIZABLE_ISOLATION_LEVEL");if(this.sql.type==="mysql"||this.sql.type==="mariadb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="postgres"||this.sql.type==="cockroachdb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="sqlite")return "";throw new T("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}};var du=Symbol.for("hysteria.orm.SqlDataSource"),Sf,Nf,ke=class i extends(Nf=Wt,Sf=du,Nf){constructor(e){super(e);this[Sf]=true;this.globalTransaction=null;this.globalTransactionLock=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.lockConnection=null;this.lockKeyToId=new Map;this.driverAdapter=null;this.id=oe().crypto.randomUUID();this.logicalSourceId=oe().crypto.randomUUID();this.cacheAdapter=new wr;this.migrationConfig={path:B.MIGRATION_PATH||"database/migrations",lock:true,transactional:true,lockTimeout:3e4};this.seederConfig={path:"database/seeders"};this.zodEngine=null;this.lazyLoad=false;this.connecting=null;this.cloneRegistry=new Set;this.clonedFrom=null;this.sqlType=e?.type||this.type;let r=e;this.inputDetails={...e,type:this.sqlType,host:r?.host??this.host,port:r?.port??this.port,username:r?.username??this.username,password:r?.password??this.password,database:r?.database??this.database,logs:r?.logs??this.logs},this.inputDetails.connectionPolicies=e?.connectionPolicies||{retry:{maxRetries:0,delay:0}},this.inputDetails.queryFormatOptions=e?.queryFormatOptions||{language:Pt(this.sqlType),keywordCase:"lower",dataTypeCase:"lower",functionCase:"lower"},this.cacheKeys=e?.cacheStrategy?.keys??{},this.cacheAdapter=e?.cacheStrategy?.cacheAdapter??this.cacheAdapter,this.adminJsOptions=e?.adminJs,e?.migrations&&(this.migrationConfig={path:e.migrations.path||this.migrationConfig.path,tsconfig:e.migrations.tsconfig,lock:e.migrations.lock??this.migrationConfig.lock,transactional:"transactional"in e.migrations?e.migrations.transactional??this.migrationConfig.transactional:this.migrationConfig.transactional}),e?.seeders&&(this.seederConfig={path:e.seeders.path||this.seederConfig.path,tsconfig:e.seeders.tsconfig}),this._models=e?.models||{},this.slaves=(e?.replication?.slaves||[]).map(n=>new i(n)),this.slaveAlgorithm=e?.replication?.slaveAlgorithm||"roundRobin",this.onSlaveServerFailure=e?.replication?.onSlaveServerFailure,this.lazyLoad=e?.lazyLoad??false,this.clsEnabled=e?.clsEnabled??true;}static isSqlDataSource(e){return typeof e=="object"&&e!==null&&du in e&&e[du]===true}get isClsEnabled(){return this.clsEnabled}getOnSlaveServerFailure(){return this.onSlaveServerFailure}addObserver(e){return this.observerChain||(this.observerChain=new Ht([])),this.observerChain.add(e),this}static async useConnection(e,r){let n=new i(e);await n.connect();try{await r(n),n.isConnected&&await n.disconnect();}catch(o){throw n.isConnected&&await n.disconnect(),o}}async connect(){if(this.isConnected||this.connecting)throw new T("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");this.connecting=this.openConnection().finally(()=>{this.connecting=null;}),await this.connecting;}async openConnection(){try{this.driverAdapter=await Pn(this.sqlType,this.inputDetails),this.sqlPool=this.driverAdapter.pool??null,this.ownsPool=!0,this.slaves.length&&await Promise.all(this.slaves.map(async e=>{e.driverAdapter=await Pn(e.sqlType,e.inputDetails),e.sqlPool=e.driverAdapter.pool??null,e.ownsPool=!0;}));}catch(e){this.sqlPool=null,this.ownsPool=false,await this.closePoolOnFailure();for(let r of this.slaves)r.ownsPool&&await r.closePoolOnFailure();for(let r of this.slaves)r.ownsPool&&(r.sqlPool=null,r.ownsPool=false);throw e}}async closePoolOnFailure(){let e=this.driverAdapter;if(!e)return;let r;try{await Promise.race([e.closePool(),new Promise(n=>{r=setTimeout(n,2e3),r.unref?.();})]);}catch(n){g.warn(`SqlDataSource::openConnection - closing a partially built pool failed: ${n?.message??n}`);}finally{r&&clearTimeout(r);}}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new T("SqlDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.openConnection().finally(()=>{this.connecting=null;})),await this.connecting;}}get isInGlobalTransaction(){return !!this.globalTransaction}get models(){let e=this;return new Proxy(this._models,{get(r,n){if(typeof n=="string"&&n in r)return e.from(r[n])}})}getSlave(){if(this.sqlConnection||!this.slaves.length)return null;if(this.slaveAlgorithm==="random")return this.slaves[Math.floor(Math.random()*this.slaves.length)];let e=this.slaves[this.roundRobinIndex%this.slaves.length];return this.roundRobinIndex=(this.roundRobinIndex+1)%this.slaves.length,e}getTransactionBoundSqlDataSource(){if(this.globalTransaction?.isActive)return this.globalTransaction.sql;if(this.clsEnabled){let e=Ge.getTransaction();if(e?.isActive&&e.sql.logicalSourceId===this.logicalSourceId)return e.sql}return null}hasOpenTransaction(){if(this.getTransactionBoundSqlDataSource())return true;for(let e of this.cloneRegistry)if(e.sqlConnection)return true;return false}async useCache(e,r,...n){if(!this.cacheAdapter)throw new T("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new T("SqlDataSource::useCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);let s=o.length,a=typeof r=="number"&&s===n.length,l,u=[];a?(l=r,u=n):(l=void 0,u=r!==void 0?[r,...n]:n);let d=eo(JSON.stringify(u)),m=d?`${e}:${d}`:e,c=await this.cacheAdapter.get(m);if(c!==void 0)return c;let p=await o(...u);return this.hasOpenTransaction()||await this.cacheAdapter.set(m,p,l),p}async invalidCache(e,...r){if(!this.cacheAdapter)throw new T("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new T("SqlDataSource::invalidCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);if(n.length>0&&r.length===0){let l=e;await this.cacheAdapter.invalidate(l);return}let s=eo(JSON.stringify(r)),a=s?`${e}:${s}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new T("SqlDataSource::invalidateAllCache","CACHE_ADAPTER_NOT_CONFIGURED");await this.cacheAdapter.invalidateAll(e);}async clone(e){let r=new i(this.inputDetails);return r.id=this.id,r.logicalSourceId=this.logicalSourceId,r.observerChain=this.observerChain,r.clonedFrom=this,this.cloneRegistry.add(r),r.sqlType==="sqlite"||!!e?.shouldRecreatePool?(r.driverAdapter=await Pn(r.sqlType,this.inputDetails),r.sqlPool=r.driverAdapter.pool,r.ownsPool=true):(r.driverAdapter=this.driverAdapter,r.sqlPool=this.sqlPool,r.ownsPool=false),r}getDbType(){return this.sqlType}from(e,r){let n=this.getTransactionBoundSqlDataSource()??this;if(typeof e=="string"){let o=new v(nu(e,r),n);return (r?.alias||r?.only)&&o.table(e,r.alias),r?.only&&o.fromOnly(),o}return new it(e,n)}fromRaw(e,r=[],n){let o=this.getTransactionBoundSqlDataSource()??this;return new v(nu("",n),o).fromRaw(e,r)}schema(){if(!this.isConnected&&!this.lazyLoad)throw new T("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new Vt(this,this.getDbType())}async startGlobalTransaction(e){for(;this.globalTransactionLock;)await this.globalTransactionLock;if(this.globalTransaction?.isActive)throw new T("SqlDataSource::startGlobalTransaction","GLOBAL_TRANSACTION_ALREADY_STARTED");let r=()=>{};this.globalTransactionLock=new Promise(n=>{r=n;});try{let n=await this.clone();return n.sqlConnection=await n.getConnection(),this.globalTransaction=new sr(n,e?.isolationLevel),await this.globalTransaction.transaction(),this.globalTransaction}catch(n){throw this.globalTransaction=null,n}finally{r(),this.globalTransactionLock=null;}}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new T("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");try{await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async rollbackGlobalTransaction(e){if(!this.globalTransaction){g.warn("SqlDataSource::rollbackGlobalTransaction - GLOBAL_TRANSACTION_NOT_STARTED");return}try{await this.globalTransaction.rollback({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async transaction(e,r){let n=typeof e=="function"?r:e,o=()=>{n?.isolationLevel&&g.warn(`SqlDataSource::transaction - ignoring isolation level "${n.isolationLevel}": a nested transaction is a savepoint on the outer connection, which keeps its own level`);};if(this.globalTransaction?.isActive)return o(),typeof e=="function"?this.globalTransaction.nestedTransaction(e):this.globalTransaction.nestedTransaction();let s=this.clsEnabled?Ge.getTransaction():void 0;if(s?.isActive&&s.sql.logicalSourceId===this.logicalSourceId)return o(),typeof e=="function"?s.nestedTransaction(e):s.nestedTransaction();let a=await this.clone();a.sqlConnection=await a.getConnection();let l=new sr(a,n?.isolationLevel);if(await l.transaction(),typeof e=="function")try{let u=this.clsEnabled?await Ge.run(l,()=>e(l)):await e(l);return await l.commit({throwErrorOnInactiveTransaction:!1}),u}catch(u){try{await l.rollback({throwErrorOnInactiveTransaction:!1});}catch(d){g.error(d instanceof Error?d:String(d));}throw u}return l}getModelManager(e){if(!this.isConnected&&!this.lazyLoad)throw new T("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");let r=this.getTransactionBoundSqlDataSource()??this;return new at(e,r)}getPool(){if(!this.sqlPool)throw this.lazyLoad?new T("SqlDataSource::getPool - call ensureConnected() or connect() first when using lazyLoad","CONNECTION_NOT_ESTABLISHED"):new T("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(){if(this.sqlConnection)return this.sqlConnection;await this.ensureConnected();let e=this.driverAdapter;if(!e)throw new T("SqlDataSource::getConnection","CONNECTION_NOT_ESTABLISHED");return e.reserveConnection()}async disconnect(){if(this.clonedFrom?.cloneRegistry.delete(this),!this.isConnected){g.warn("Connection already closed or not established");return}if(!this.ownsPool){if(this.sqlConnection)try{this.driverAdapter?.releaseConnection(this.sqlConnection);}catch(e){g.warn(`SqlDataSource::disconnect - releasing borrowed connection failed: ${e?.message??e}`);}this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{g.warn("SqlDataSource::disconnect - Error while rolling back global transaction");}if(this.lockConnection){try{this.driverAdapter?.releaseConnection(this.lockConnection);}catch(e){g.warn(`SqlDataSource::disconnect - releasing lock connection failed: ${e?.message??e}`);}this.lockConnection=null,this.lockKeyToId.clear();}this.clonedFrom||await this.cacheAdapter?.disconnect?.(),this.slaves.length&&await Promise.all(this.slaves.map(async e=>{try{await e.disconnect();}catch(r){g.warn(`SqlDataSource::disconnect - Error while closing slave connection: ${r.message}`);}})),g.warn("Closing connection"),await this.driverAdapter?.closePool(),this.sqlPool=null,this.driverAdapter=null,this.sqlConnection=null;}getConnectionDetails(){return {type:this.getDbType(),host:this.host,port:this.port,username:this.username,password:this.password,database:this.database,connectionPolicies:this.inputDetails.connectionPolicies,queryFormatOptions:this.inputDetails.queryFormatOptions,jsEnvironment:this.inputDetails.jsEnvironment,driver:this.inputDetails.driver}}async introspectSchema(){let e=this.getDbType(),r;e==="postgres"||e==="cockroachdb"?r=`
|
|
260
260
|
SELECT table_schema AS schema_name, table_name
|
|
261
261
|
FROM information_schema.tables
|
|
262
262
|
WHERE table_type = 'BASE TABLE'
|
|
@@ -282,7 +282,7 @@ ORDER BY ordinal_position`,bindings:[]}}},ip=new ba;var Ta=class{toSql(t){let e=
|
|
|
282
282
|
WHERE table_type = 'BASE TABLE'
|
|
283
283
|
AND table_schema NOT IN ('information_schema', 'pg_catalog', 'mysql', 'sys', 'performance_schema')
|
|
284
284
|
ORDER BY table_schema, table_name;
|
|
285
|
-
`;try{let n=await this.rawQuery(r),o=this.extractRowsFromRawResult(n),s={dialect:e,tables:[]},a={};for(let l of o){let u=String(l.schema_name||l.SCHEMA_NAME||"public"),d=String(l.table_name||l.TABLE_NAME||l.name||""),c=`${u}.${d}`;!a[c]&&d&&(a[c]={name:d,columns:[]},s.tables.push(a[c]));}return [s]}catch(n){return g.warn(`Failed to introspect schema: ${n.message}`),[]}}async syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){g.warn("Syncing schema with SQLite is not supported, skipping...");return}let n=(await nt.makeDiff(this)).getSqlStatements();if(!n.length){g.info("No new changes detected between database schema and models metadata");return}if(g.info(`Generated ${n.length} SQL statements to sync schema`),!e?.transactional){for(let o of n)await this.rawQuery(o);g.info(`Synced schema with ${n.length} SQL statements`);return}await this.transaction(async o=>{for(let s of n)await o.sql.rawQuery(s);}),g.info(`Synced schema with ${n.length} SQL statements`);}extractRowsFromRawResult(e){let r=this.getDbType();if(r==="mysql"||r==="mariadb"){if(Array.isArray(e)&&e.length>=1){let n=e[0];if(Array.isArray(n))return n;if(typeof n=="object"&&n!==null&&("insertId"in n||"affectedRows"in n))return []}return e}return r==="postgres"||r==="cockroachdb"?e&&typeof e=="object"&&"rows"in e?e.rows||[]:e:Array.isArray(e)?e:[]}async rawQuery(e,r=[],n){if(await this.ensureConnected(),(n?.replicationMode||"master")==="slave")return this.executeOnSlave(async a=>G(e,r,a,this.getDbType(),"raw"));let s=this.getTransactionBoundSqlDataSource()??this;return G(e,r,s,this.getDbType(),"raw")}rawStatement(e){return new O(e)}jsonSet(e,r,n,o){return hd(e,r,n,o)}jsonInsert(e,r,n,o){return gd(e,r,n,o)}jsonRemove(e,r,n){return bd(e,r,n)}async getTableSchema(e){let[r,n,o,s,a]=await Promise.all([this.getTableInfo(e),this.getIndexInfo(e),this.getForeignKeyInfo(e),this.getPrimaryKeyInfo(e),this.getCheckConstraintInfo(e)]);return {columns:r,indexes:n,foreignKeys:o,primaryKey:s,checkConstraints:a}}getModelOpenApiSchema(){return Pu(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new T("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await Hn(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new T("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await vu(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}loadZodEngine(e){return this.zodEngine=e,De.zodEngine=e,this}isAdminJsEnabled(){return !!this.adminJsOptions?.enabled}async getTableInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Cr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return [];throw l}let s=this.getDbType();if(s==="sqlite")return o.map(l=>{let u=String(l.type||"").toLowerCase(),d=Ve(s,u),c=new Set(["text","varchar","char"]);return {name:l.name,dataType:d,isNullable:l.notnull===0,defaultValue:l.dflt_value??null,withTimezone:null,stringMode:c.has(d)}});let a=o.map(l=>{let u=String(l.column_name||l.COLUMN_NAME||l.name||""),d=String(l.data_type||l.DATA_TYPE||l.type||"").toLowerCase(),c=Ve(s,d),m=l.is_nullable!==void 0?l.is_nullable:l.IS_NULLABLE!==void 0?l.IS_NULLABLE:void 0,p=typeof m=="string"?m.toLowerCase()!=="no":typeof m=="boolean"?m:l.notnull!==void 0?l.notnull===0:true,h=l.column_default??l.COLUMN_DEFAULT??l.defaultValue??l.dflt_value??null,f=s==="mariadb"&&h==="NULL"?null:h,w=l.char_length!=null?Number(l.char_length):null,S=l.numeric_precision!=null?Number(l.numeric_precision):null,q=l.numeric_scale!=null?Number(l.numeric_scale):null,M=l.timezone!=null?!!l.timezone:/with time zone/.test(String(l.column_type||l.udt_name||d||"").toLowerCase()),R=null,$=String(l.column_type||l.COLUMN_TYPE||""),A=$.match(/^enum\((.+)\)$/i);A&&(R=A[1].split(",").map(Ze=>Ze.trim().replace(/^'|'$/g,"")));let D=$.toLowerCase(),Q=D.includes(" unsigned"),pe=D.includes(" zerofill"),se=new Set(["text","tinytext","mediumtext","longtext","varchar","char","nvarchar","nchar","ntext","character varying","character"]).has(c);return {name:u,dataType:c,isNullable:p,defaultValue:f,length:w,precision:S,scale:q,withTimezone:M,enumValues:R,unsigned:Q,zerofill:pe,stringMode:se}});if(s==="postgres"||s==="mssql"){let l=[];try{l=await this.getCheckConstraintInfo(e);}catch{}if(l.length>0)for(let u of a){let d=u.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c=l.find(m=>{let p=m.expression,h=new RegExp(`[\\["\\[]?${d}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),f=new RegExp(`[\\("\\[]?${d}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return h.test(p)||f.test(p)});if(c){let m=c.expression,p=m.match(/IN\s*\(([^)]+)\)/i);if(p)u.enumValues=p[1].split(",").map(h=>h.trim().replace(/^'|'$/g,""));else {let h=m.match(/ARRAY\[([^\]]+)\]/i);h&&(u.enumValues=h[1].split(",").map(f=>f.trim().replace(/::[a-z ]+$/i,"").replace(/^'|'$/g,"")));}}}}return a}async hasTable(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Rr(e)]).sql,o=this.getDbType(),s=[];try{let a=await this.rawQuery(n);s=this.extractRowsFromRawResult(a);}catch{return false}return o==="postgres"||o==="cockroachdb"?s.length>0&&s[0].exists===true:o==="mysql"||o==="mariadb"||o==="mssql"?s.length>0&&parseInt(s[0].count)>0:o==="sqlite"?s.length>0:false}async hasColumn(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new _r(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"?a.some(l=>l.name===r):false}async hasColumns(e,...r){if(!r.length)return true;for(let n of r)if(!await this.hasColumn(e,n))return false;return true}async hasIndex(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Mr(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"?a.length>0:false}async hasPrimaryKey(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new xr(e)]).sql,o=this.getDbType(),s=[];try{let a=await this.rawQuery(n);s=this.extractRowsFromRawResult(a);}catch{return false}return o==="postgres"||o==="cockroachdb"?s.length>0&&s[0].exists===true:o==="mysql"||o==="mariadb"||o==="mssql"?s.length>0&&parseInt(s[0].count)>0:o==="sqlite"?s.some(a=>a.pk>0):false}async hasUnique(e,r){let n=Array.isArray(r)?r:[r];try{return (await this.getIndexInfo(e)).some(s=>{let a=s.unique??s.isUnique??s.Non_unique,l=a===!0||a==="true"||a==="1"||a===0,u=Array.isArray(s.columns)?s.columns:[s.column_name];return l&&u.length===n.length&&u.every((d,c)=>d===n[c])})}catch{return false}}async hasForeignKey(e,r){try{let o=(await this.getForeignKeyInfo(e)).flatMap(a=>a.columns||a.column||[a.from]);return r.every(a=>o.includes(a))&&o.length>=r.length}catch{return false}}async hasCheckConstraint(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Or(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"&&a.length>0&&a[0].sql?a[0].sql.includes("CHECK")&&a[0].sql.includes(r):false}async getTables(){let r=new b({databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Dr]).sql,n=[];try{let s=await this.rawQuery(r);n=this.extractRowsFromRawResult(s);}catch{return []}let o=n[0]?.table_name||"name";return n.map(s=>s[o]||s.name)}async getColumnListing(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Ar(e)]).sql,o=[];try{let s=await this.rawQuery(n);o=this.extractRowsFromRawResult(s);}catch{return []}return o.map(s=>s.name??s.column_name)}async getIndexInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Nr(e)]).sql,o=this.getDbType(),s=[];try{let l=await this.rawQuery(n);s=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return [];throw l}if(o==="mysql"||o==="mariadb"){let l=new Map;for(let u of s){let d=u.Key_name,c=u.Non_unique===0,m=l.get(d)||{name:d,columns:[],isUnique:c};m.columns.push(u.Column_name),l.set(d,m);}return Array.from(l.values())}if(o==="postgres"||o==="cockroachdb"){let l=new Map;for(let u of s){let d=u.index_name,c=!!u.is_unique,m=l.get(d)||{name:d,columns:[],isUnique:c};m.columns.push(u.column_name),l.set(d,m);}return Array.from(l.values())}let a=[];for(let l of s){let u=l.name,d=!!l.unique,c=await this.rawQuery(`PRAGMA index_info(${u})`),p=this.extractRowsFromRawResult(c).map(h=>h.name);a.push({name:u,columns:p,isUnique:d});}return a}async getForeignKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Sr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let u of o){let d=Number(u.id),c=l.get(d)||{name:void 0,columns:[],referencedTable:String(u.table),referencedColumns:[],onDelete:u.on_delete??null,onUpdate:u.on_update??null};c.columns.push(String(u.from)),c.referencedColumns.push(String(u.to)),l.set(d,c);}return Array.from(l.values())}let a=new Map;for(let l of o){let u=String(l.name||""),d=u||`${l.referenced_table}_${l.column_name}`,c=a.get(d)||{name:u||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};c.columns.push(String(l.column_name)),c.referencedColumns.push(String(l.referenced_column)),a.set(d,c);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new qr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return;throw l}if(!o.length)return;let s=o.map(l=>String(l.column_name));return {name:o[0].name||void 0,columns:s}}async getCheckConstraintInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new wr(e)]).sql,o=[];try{let a=await this.rawQuery(n);o=this.extractRowsFromRawResult(a);}catch(a){if(at(this.getDbType(),a))return [];throw a}let s=a=>this.getDbType()==="mariadb"&&/^json_valid\(/i.test(a);return o.filter(a=>!s(String(a.expression))).map(a=>({name:String(a.name),expression:String(a.expression)}))}async acquireLock(e="hysteria_lock",r=3e4){let n=this.getDbType();try{switch(n){case "postgres":case "cockroachdb":{let o=this.hashStringToLockId(e),s=this.driverAdapter;if(!s)return !1;let a=await this.getLockConnection(),l=await s.execute("SELECT pg_try_advisory_lock($1) as pg_try_advisory_lock",[o],{returning:"rows",connection:a}),d=s.extract(l,"rows")?.[0]?.pg_try_advisory_lock;return d===!0||d==="t"?(this.lockKeyToId.set(e,o),!0):!1}case "mysql":case "mariadb":{let o=Math.floor(r/1e3);return (await this.rawQuery("SELECT GET_LOCK(?, ?) as lock_result",[e,o]))[0]?.[0]?.lock_result===1}case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_getapplock @Resource = @p0, @LockMode = 'Exclusive', @LockOwner = 'Session', @LockTimeout = @p1; SELECT @result as lock_result",[e,r])).recordset?.[0]?.lock_result??-999)>=0;case "sqlite":return g.info("SQLite uses automatic file-based locking, advisory locks not needed"),!0;default:return g.warn(`Advisory locks not implemented for database type: ${n}`),!0}}catch(o){let s=o instanceof Error?o:new Error(String(o));return g.error(`Failed to acquire lock: ${s.message||JSON.stringify(o)} (dbType: ${n}, lockKey: ${e}). Full error: ${JSON.stringify(o)}`),false}}async ping(){let e=this.getDbType(),r=Date.now();try{await this.ensureConnected();let n;switch(e){case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "mssql":n="SELECT 1";break;case "sqlite":n="PRAGMA integrity_check";break;default:n="SELECT 1";}return await this.rawQuery(n),{ok:!0,latencyMs:Date.now()-r,dialect:e}}catch{return {ok:false,latencyMs:Date.now()-r,dialect:e}}}async isHealthy(){try{return (await this.ping()).ok}catch{return false}}async releaseLock(e="hysteria_lock"){let r=this.getDbType();try{switch(r){case "postgres":case "cockroachdb":{let n=this.lockKeyToId.get(e),o=this.lockConnection,s=this.driverAdapter;if(n===void 0||!o||!s)return !1;let a=await s.execute("SELECT pg_advisory_unlock($1) as pg_advisory_unlock",[n],{returning:"rows",connection:o}),u=s.extract(a,"rows")?.[0]?.pg_advisory_unlock,d=u===!0||u==="t";return d&&(this.lockKeyToId.delete(e),this.lockKeyToId.size===0&&(s.releaseConnection(o),this.lockConnection=null)),d}case "mysql":case "mariadb":return (await this.rawQuery("SELECT RELEASE_LOCK(?) as release_result",[e]))[0]?.[0]?.release_result===1;case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_releaseapplock @Resource = @p0, @LockOwner = 'Session'; SELECT @result as release_result",[e])).recordset?.[0]?.release_result??-999)>=0;case "sqlite":return !0;default:return g.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(n){let o=n instanceof Error?n:new Error(String(n));return g.error(`Failed to release lock: ${o.message||JSON.stringify(n)} (dbType: ${r}, lockKey: ${e}). Full error: ${JSON.stringify(n)}`),false}}async getLockConnection(){if(this.lockConnection)return this.lockConnection;let e=this.driverAdapter;if(!e)throw new T("SqlDataSource::getLockConnection","CONNECTION_NOT_ESTABLISHED");return this.lockConnection=await e.reserveConnection(),this.lockConnection}hashStringToLockId(e){let r=0;for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);r=(r<<5)-r+o,r=r&r;}return Math.abs(r)}async executeOnSlave(e){let r=this.getSlave();if(!r)return e(this);try{return await e(r)}catch(n){let o=n instanceof Error?n:new Error(String(n));if(this.onSlaveServerFailure)return await this.onSlaveServerFailure(o,{host:r.host,port:r.port,username:r.username,password:r.password,database:r.database,type:r.sqlType}),e(this);throw o}}};var We=class{constructor(t){this.migrationTable="migrations";this.sql=t;}async upMigrations(t){for(let e of t){g.info(`Running migration ${e.migrationName}`),await e.up();let r=e.schema.queryStatements;for(let n of r)n&&await this.sql.rawQuery(n);await this.addMigrationToMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async downMigrations(t){t=t.reverse();for(let e of t){g.info(`Rolling back migration ${e.migrationName}`),await e.down();let r=e.schema.queryStatements;for(let n of r)n&&await this.sql.rawQuery(n);await this.deleteMigrationFromMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async addMigrationToMigrationTable(t){let r=new Date().toISOString().replace("T"," ").replace(/\.\d{3}Z$/,"");await this.sql.from(this.migrationTable).insert({name:t.migrationName,timestamp:r});}async deleteMigrationFromMigrationTable(t){await this.sql.from(this.migrationTable).where("name",t.migrationName).delete();}};async function nr(i,t,e,r,n){let o=i.getDbType(),s=n&&o!=="mssql",a=null;g.info("Rolling back migrations for database type: "+o);try{let l=await fr(o,i),u=await yr(o,e,r),d=l.map(p=>p.name),c=u.filter(p=>d.includes(p.migrationName));if(c.length===0){g.info("No pending migrations.");return}if(t){let p=c.findIndex(w=>w.migrationName===t);if(p===-1){g.error(`Rollback until migration not found: ${t}`);return}let h=c.slice(p);s&&(a=await i.transaction(),i=a.sql),await new We(i).downMigrations(h),s&&await a?.commit(),g.info("Migrations rolled back successfully");return}s&&(a=await i.transaction(),i=a.sql),await new We(i).downMigrations(c),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}g.info("Migrations rolled back successfully");}var or=class{static async generate(t,e){if(e==="code"||!Array.isArray(t)&&"up"in t){let{up:o,down:s}=t;return `import { Migration } from "hysteria-orm";
|
|
285
|
+
`;try{let n=await this.rawQuery(r),o=this.extractRowsFromRawResult(n),s={dialect:e,tables:[]},a={};for(let l of o){let u=String(l.schema_name||l.SCHEMA_NAME||"public"),d=String(l.table_name||l.TABLE_NAME||l.name||""),m=`${u}.${d}`;!a[m]&&d&&(a[m]={name:d,columns:[]},s.tables.push(a[m]));}return [s]}catch(n){return g.warn(`Failed to introspect schema: ${n.message}`),[]}}async syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){g.warn("Syncing schema with SQLite is not supported, skipping...");return}let n=(await ot.makeDiff(this)).getSqlStatements();if(!n.length){g.info("No new changes detected between database schema and models metadata");return}if(g.info(`Generated ${n.length} SQL statements to sync schema`),!e?.transactional){for(let o of n)await this.rawQuery(o);g.info(`Synced schema with ${n.length} SQL statements`);return}await this.transaction(async o=>{for(let s of n)await o.sql.rawQuery(s);}),g.info(`Synced schema with ${n.length} SQL statements`);}extractRowsFromRawResult(e){let r=this.getDbType();if(r==="mysql"||r==="mariadb"){if(Array.isArray(e)&&e.length>=1){let n=e[0];if(Array.isArray(n))return n;if(typeof n=="object"&&n!==null&&("insertId"in n||"affectedRows"in n))return []}return e}return r==="postgres"||r==="cockroachdb"?e&&typeof e=="object"&&"rows"in e?e.rows||[]:e:Array.isArray(e)?e:[]}async rawQuery(e,r=[],n){if(await this.ensureConnected(),(n?.replicationMode||"master")==="slave")return this.executeOnSlave(async a=>G(e,r,a,this.getDbType(),"raw"));let s=this.getTransactionBoundSqlDataSource()??this;return G(e,r,s,this.getDbType(),"raw")}rawStatement(e){return new x(e)}jsonSet(e,r,n,o){return Sd(e,r,n,o)}jsonInsert(e,r,n,o){return Nd(e,r,n,o)}jsonRemove(e,r,n){return qd(e,r,n)}async getTableSchema(e){let[r,n,o,s,a]=await Promise.all([this.getTableInfo(e),this.getIndexInfo(e),this.getForeignKeyInfo(e),this.getPrimaryKeyInfo(e),this.getCheckConstraintInfo(e)]);return {columns:r,indexes:n,foreignKeys:o,primaryKey:s,checkConstraints:a}}getModelOpenApiSchema(){return Ku(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new T("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await Xn(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new T("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await Qu(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}loadZodEngine(e){return this.zodEngine=e,Ae.zodEngine=e,this}isAdminJsEnabled(){return !!this.adminJsOptions?.enabled}async getTableInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Mr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(lt(this.getDbType(),l))return [];throw l}let s=this.getDbType();if(s==="sqlite")return o.map(l=>{let u=String(l.type||"").toLowerCase(),d=Ve(s,u),m=new Set(["text","varchar","char"]);return {name:l.name,dataType:d,isNullable:l.notnull===0,defaultValue:l.dflt_value??null,withTimezone:null,stringMode:m.has(d)}});let a=o.map(l=>{let u=String(l.column_name||l.COLUMN_NAME||l.name||""),d=String(l.data_type||l.DATA_TYPE||l.type||"").toLowerCase(),m=Ve(s,d),c=l.is_nullable!==void 0?l.is_nullable:l.IS_NULLABLE!==void 0?l.IS_NULLABLE:void 0,p=typeof c=="string"?c.toLowerCase()!=="no":typeof c=="boolean"?c:l.notnull!==void 0?l.notnull===0:true,h=l.column_default??l.COLUMN_DEFAULT??l.defaultValue??l.dflt_value??null,y=s==="mariadb"&&h==="NULL"?null:h,w=l.char_length!=null?Number(l.char_length):null,S=l.numeric_precision!=null?Number(l.numeric_precision):null,q=l.numeric_scale!=null?Number(l.numeric_scale):null,M=l.timezone!=null?!!l.timezone:/with time zone/.test(String(l.column_type||l.udt_name||d||"").toLowerCase()),R=null,D=String(l.column_type||l.COLUMN_TYPE||""),$=D.match(/^enum\((.+)\)$/i);$&&(R=$[1].split(",").map(Xe=>Xe.trim().replace(/^'|'$/g,"")));let A=D.toLowerCase(),Q=A.includes(" unsigned"),ye=A.includes(" zerofill"),se=new Set(["text","tinytext","mediumtext","longtext","varchar","char","nvarchar","nchar","ntext","character varying","character"]).has(m);return {name:u,dataType:m,isNullable:p,defaultValue:y,length:w,precision:S,scale:q,withTimezone:M,enumValues:R,unsigned:Q,zerofill:ye,stringMode:se}});if(s==="postgres"||s==="mssql"){let l=[];try{l=await this.getCheckConstraintInfo(e);}catch{}if(l.length>0)for(let u of a){let d=u.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),m=l.find(c=>{let p=c.expression,h=new RegExp(`[\\["\\[]?${d}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),y=new RegExp(`[\\("\\[]?${d}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return h.test(p)||y.test(p)});if(m){let c=m.expression,p=c.match(/IN\s*\(([^)]+)\)/i);if(p)u.enumValues=p[1].split(",").map(h=>h.trim().replace(/^'|'$/g,""));else {let h=c.match(/ARRAY\[([^\]]+)\]/i);h&&(u.enumValues=h[1].split(",").map(y=>y.trim().replace(/::[a-z ]+$/i,"").replace(/^'|'$/g,"")));}}}}return a}async hasTable(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new xr(e)]).sql,o=this.getDbType(),s=[];try{let a=await this.rawQuery(n);s=this.extractRowsFromRawResult(a);}catch{return false}return o==="postgres"||o==="cockroachdb"?s.length>0&&s[0].exists===true:o==="mysql"||o==="mariadb"||o==="mssql"?s.length>0&&parseInt(s[0].count)>0:o==="sqlite"?s.length>0:false}async hasColumn(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Or(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"?a.some(l=>l.name===r):false}async hasColumns(e,...r){if(!r.length)return true;for(let n of r)if(!await this.hasColumn(e,n))return false;return true}async hasIndex(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Ar(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"?a.length>0:false}async hasPrimaryKey(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Dr(e)]).sql,o=this.getDbType(),s=[];try{let a=await this.rawQuery(n);s=this.extractRowsFromRawResult(a);}catch{return false}return o==="postgres"||o==="cockroachdb"?s.length>0&&s[0].exists===true:o==="mysql"||o==="mariadb"||o==="mssql"?s.length>0&&parseInt(s[0].count)>0:o==="sqlite"?s.some(a=>a.pk>0):false}async hasUnique(e,r){let n=Array.isArray(r)?r:[r];try{return (await this.getIndexInfo(e)).some(s=>{let a=s.unique??s.isUnique??s.Non_unique,l=a===!0||a==="true"||a==="1"||a===0,u=Array.isArray(s.columns)?s.columns:[s.column_name];return l&&u.length===n.length&&u.every((d,m)=>d===n[m])})}catch{return false}}async hasForeignKey(e,r){try{let o=(await this.getForeignKeyInfo(e)).flatMap(a=>a.columns||a.column||[a.from]);return r.every(a=>o.includes(a))&&o.length>=r.length}catch{return false}}async hasCheckConstraint(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new $r(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"&&a.length>0&&a[0].sql?a[0].sql.includes("CHECK")&&a[0].sql.includes(r):false}async getTables(){let r=new b({databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Ir]).sql,n=[];try{let s=await this.rawQuery(r);n=this.extractRowsFromRawResult(s);}catch{return []}let o=n[0]?.table_name||"name";return n.map(s=>s[o]||s.name)}async getColumnListing(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new vr(e)]).sql,o=[];try{let s=await this.rawQuery(n);o=this.extractRowsFromRawResult(s);}catch{return []}return o.map(s=>s.name??s.column_name)}async getIndexInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Rr(e)]).sql,o=this.getDbType(),s=[];try{let l=await this.rawQuery(n);s=this.extractRowsFromRawResult(l);}catch(l){if(lt(this.getDbType(),l))return [];throw l}if(o==="mysql"||o==="mariadb"){let l=new Map;for(let u of s){let d=u.Key_name,m=u.Non_unique===0,c=l.get(d)||{name:d,columns:[],isUnique:m};c.columns.push(u.Column_name),l.set(d,c);}return Array.from(l.values())}if(o==="postgres"||o==="cockroachdb"){let l=new Map;for(let u of s){let d=u.index_name,m=!!u.is_unique,c=l.get(d)||{name:d,columns:[],isUnique:m};c.columns.push(u.column_name),l.set(d,c);}return Array.from(l.values())}let a=[];for(let l of s){let u=l.name,d=!!l.unique,m=await this.rawQuery(`PRAGMA index_info(${u})`),p=this.extractRowsFromRawResult(m).map(h=>h.name);a.push({name:u,columns:p,isUnique:d});}return a}async getForeignKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Cr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(lt(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let u of o){let d=Number(u.id),m=l.get(d)||{name:void 0,columns:[],referencedTable:String(u.table),referencedColumns:[],onDelete:u.on_delete??null,onUpdate:u.on_update??null};m.columns.push(String(u.from)),m.referencedColumns.push(String(u.to)),l.set(d,m);}return Array.from(l.values())}let a=new Map;for(let l of o){let u=String(l.name||""),d=u||`${l.referenced_table}_${l.column_name}`,m=a.get(d)||{name:u||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};m.columns.push(String(l.column_name)),m.referencedColumns.push(String(l.referenced_column)),a.set(d,m);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new _r(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(lt(this.getDbType(),l))return;throw l}if(!o.length)return;let s=o.map(l=>String(l.column_name));return {name:o[0].name||void 0,columns:s}}async getCheckConstraintInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new qr(e)]).sql,o=[];try{let a=await this.rawQuery(n);o=this.extractRowsFromRawResult(a);}catch(a){if(lt(this.getDbType(),a))return [];throw a}let s=a=>this.getDbType()==="mariadb"&&/^json_valid\(/i.test(a);return o.filter(a=>!s(String(a.expression))).map(a=>({name:String(a.name),expression:String(a.expression)}))}async acquireLock(e="hysteria_lock",r=3e4){let n=this.getDbType();try{switch(n){case "postgres":case "cockroachdb":{let o=this.hashStringToLockId(e),s=this.driverAdapter;if(!s)return !1;let a=await this.getLockConnection(),l=await s.execute("SELECT pg_try_advisory_lock($1) as pg_try_advisory_lock",[o],{returning:"rows",connection:a}),d=s.extract(l,"rows")?.[0]?.pg_try_advisory_lock;return d===!0||d==="t"?(this.lockKeyToId.set(e,o),!0):!1}case "mysql":case "mariadb":{let o=Math.floor(r/1e3);return (await this.rawQuery("SELECT GET_LOCK(?, ?) as lock_result",[e,o]))[0]?.[0]?.lock_result===1}case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_getapplock @Resource = @p0, @LockMode = 'Exclusive', @LockOwner = 'Session', @LockTimeout = @p1; SELECT @result as lock_result",[e,r])).recordset?.[0]?.lock_result??-999)>=0;case "sqlite":return g.info("SQLite uses automatic file-based locking, advisory locks not needed"),!0;default:return g.warn(`Advisory locks not implemented for database type: ${n}`),!0}}catch(o){let s=o instanceof Error?o:new Error(String(o));return g.error(`Failed to acquire lock: ${s.message||JSON.stringify(o)} (dbType: ${n}, lockKey: ${e}). Full error: ${JSON.stringify(o)}`),false}}async ping(){let e=this.getDbType(),r=Date.now();try{await this.ensureConnected();let n;switch(e){case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "mssql":n="SELECT 1";break;case "sqlite":n="PRAGMA integrity_check";break;default:n="SELECT 1";}return await this.rawQuery(n),{ok:!0,latencyMs:Date.now()-r,dialect:e}}catch{return {ok:false,latencyMs:Date.now()-r,dialect:e}}}async isHealthy(){try{return (await this.ping()).ok}catch{return false}}async releaseLock(e="hysteria_lock"){let r=this.getDbType();try{switch(r){case "postgres":case "cockroachdb":{let n=this.lockKeyToId.get(e),o=this.lockConnection,s=this.driverAdapter;if(n===void 0||!o||!s)return !1;let a=await s.execute("SELECT pg_advisory_unlock($1) as pg_advisory_unlock",[n],{returning:"rows",connection:o}),u=s.extract(a,"rows")?.[0]?.pg_advisory_unlock,d=u===!0||u==="t";return d&&(this.lockKeyToId.delete(e),this.lockKeyToId.size===0&&(s.releaseConnection(o),this.lockConnection=null)),d}case "mysql":case "mariadb":return (await this.rawQuery("SELECT RELEASE_LOCK(?) as release_result",[e]))[0]?.[0]?.release_result===1;case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_releaseapplock @Resource = @p0, @LockOwner = 'Session'; SELECT @result as release_result",[e])).recordset?.[0]?.release_result??-999)>=0;case "sqlite":return !0;default:return g.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(n){let o=n instanceof Error?n:new Error(String(n));return g.error(`Failed to release lock: ${o.message||JSON.stringify(n)} (dbType: ${r}, lockKey: ${e}). Full error: ${JSON.stringify(n)}`),false}}async getLockConnection(){if(this.lockConnection)return this.lockConnection;let e=this.driverAdapter;if(!e)throw new T("SqlDataSource::getLockConnection","CONNECTION_NOT_ESTABLISHED");return this.lockConnection=await e.reserveConnection(),this.lockConnection}hashStringToLockId(e){let r=0;for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);r=(r<<5)-r+o,r=r&r;}return Math.abs(r)}async executeOnSlave(e){let r=this.getSlave();if(!r)return e(this);try{return await e(r)}catch(n){let o=n instanceof Error?n:new Error(String(n));if(this.onSlaveServerFailure)return await this.onSlaveServerFailure(o,{host:r.host,port:r.port,username:r.username,password:r.password,database:r.database,type:r.sqlType}),e(this);throw o}}};var We=class{constructor(t){this.migrationTable="migrations";this.sql=t;}async upMigrations(t){for(let e of t){g.info(`Running migration ${e.migrationName}`),await e.up();let r=e.schema.queryStatements;for(let n of r)n&&await this.sql.rawQuery(n);await this.addMigrationToMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async downMigrations(t){t=t.reverse();for(let e of t){g.info(`Rolling back migration ${e.migrationName}`),await e.down();let r=e.schema.queryStatements;for(let n of r)n&&await this.sql.rawQuery(n);await this.deleteMigrationFromMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async addMigrationToMigrationTable(t){let r=new Date().toISOString().replace("T"," ").replace(/\.\d{3}Z$/,"");await this.sql.from(this.migrationTable).insert({name:t.migrationName,timestamp:r});}async deleteMigrationFromMigrationTable(t){await this.sql.from(this.migrationTable).where("name",t.migrationName).delete();}};async function ir(i,t,e,r,n){let o=i.getDbType(),s=n&&o!=="mssql",a=null;g.info("Rolling back migrations for database type: "+o);try{let l=await gr(o,i),u=await br(o,e,r),d=l.map(p=>p.name),m=u.filter(p=>d.includes(p.migrationName));if(m.length===0){g.info("No pending migrations.");return}if(t){let p=m.findIndex(w=>w.migrationName===t);if(p===-1){g.error(`Rollback until migration not found: ${t}`);return}let h=m.slice(p);s&&(a=await i.transaction(),i=a.sql),await new We(i).downMigrations(h),s&&await a?.commit(),g.info("Migrations rolled back successfully");return}s&&(a=await i.transaction(),i=a.sql),await new We(i).downMigrations(m),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}g.info("Migrations rolled back successfully");}var ar=class{static async generate(t,e){if(e==="code"||!Array.isArray(t)&&"up"in t){let{up:o,down:s}=t;return `import { Migration } from "hysteria-orm";
|
|
286
286
|
|
|
287
287
|
export default class extends Migration {
|
|
288
288
|
async up() {
|
|
@@ -303,7 +303,7 @@ ${t.map(o=>` this.schema.rawQuery('${o.replace(/\\/g,"\\\\").replace(/'/g,"\\
|
|
|
303
303
|
}
|
|
304
304
|
|
|
305
305
|
async down() {}
|
|
306
|
-
}`}};var
|
|
306
|
+
}`}};var En=class{static initTemplate(t){let e=this.getDefaultPort(t),r=t==="sqlite"?"database.db":"database",n=t==="mongodb"?"mongo":t==="redis"?"redis":"SqlDataSource";return t==="mongodb"||t==="redis"?this.handleNoSqlConnection(t,n==="SqlDataSource"?"sql":n):`
|
|
307
307
|
import { ${n} } from "hysteria-orm";
|
|
308
308
|
|
|
309
309
|
const db = new ${n}({
|
|
@@ -345,7 +345,7 @@ export default db;`:""}static getNoSqlConnectionConfig(t){switch(t){case "mongod
|
|
|
345
345
|
password: "root",
|
|
346
346
|
username: "default",
|
|
347
347
|
db: 0,
|
|
348
|
-
}`;default:return ""}}static getDefaultPort(t){switch(t){case "mysql":return 3306;case "postgres":return 5432;case "mariadb":return 3306;case "cockroachdb":return 26257;case "mssql":return 1433;case "mongodb":return 27017;case "redis":return 6379;default:return 3306}}};async function
|
|
348
|
+
}`;default:return ""}}static getDefaultPort(t){switch(t){case "mysql":return 3306;case "postgres":return 5432;case "mariadb":return 3306;case "cockroachdb":return 26257;case "mssql":return 1433;case "mongodb":return 27017;case "redis":return 6379;default:return 3306}}};async function Bn(i,t,e){let r=t.getDbType();g.info(`Running sql for ${r}`);let n=await t.rawQuery(i);if(g.info("Sql ran successfully"),e){let o=ft.dirname(e);ae.existsSync(o)||ae.mkdirSync(o,{recursive:true}),ae.writeFileSync(e,JSON.stringify(n,null,2)),g.info(`Query result saved to ${e}`);return}g.info(JSON.stringify(n,null,2)),await t.disconnect();}var kn=class{static seederTemplate(){return `import { BaseSeeder } from "hysteria-orm";
|
|
349
349
|
|
|
350
350
|
export default class extends BaseSeeder {
|
|
351
351
|
/**
|
|
@@ -355,12 +355,12 @@ export default class extends BaseSeeder {
|
|
|
355
355
|
console.log('Seeder completed');
|
|
356
356
|
}
|
|
357
357
|
}
|
|
358
|
-
`}};var
|
|
359
|
-
`)}function
|
|
360
|
-
`)}var
|
|
361
|
-
Summary:`),g.info(` Tables processed: ${l.length}`),n?g.info(" Mode: Dry run (no files written)"):(g.info(` Output directory: ${e}`),g.info(` Files generated: ${u.length+1}`));}var
|
|
358
|
+
`}};var Kg=(i,t,e)=>{let r=e||"database/seeders",n=t?".js":".ts",s=`${Date.now()}_${i}${n}`;ae.existsSync(r)||(ae.mkdirSync(r,{recursive:true}),g.info(`Created seeders directory: ${r}`));let a=ft.join(r,s),l=kn.seederTemplate();ae.writeFileSync(a,l),g.info(`Seeder created successfully: ${a}`);},qf=Kg;var Lg=async(i,t,e)=>{let r=[];for(let n of t){let o=ft.resolve(process.cwd(),n);ae.existsSync(o)||(g.error(`Path not found: ${o}`),process.exit(1));let s=ae.statSync(o);if(s.isDirectory()){let a=ae.readdirSync(o).filter(l=>l.endsWith(".ts")||l.endsWith(".js")).sort();for(let l of a)r.push({file:l,folder:o});}else if(s.isFile()){let a=ft.basename(o),l=ft.dirname(o);a.endsWith(".ts")||a.endsWith(".js")?r.push({file:a,folder:l}):(g.error(`File must be a .ts or .js file: ${a}`),process.exit(1));}}if(!r.length){g.info("No seeders found");return}g.info(`Found ${r.length} seeder(s) to run`),i.isConnected||await i.connect();for(let{file:n,folder:o}of r)try{g.info(`Running seeder: ${n}`);let s=ft.resolve(o,n),a=await yt(s,e);if(!a.default){g.error(`Seeder ${n} does not export a default class`);continue}let l=new a.default(i);if(typeof l.run!="function"){g.error(`Seeder ${n} must have a run() method. Make sure it extends BaseSeeder from hysteria-orm`);continue}await l.run(),g.info(`\u2713 Completed seeder: ${n}`);}catch(s){throw g.error(`Failed to run seeder ${n}: ${s}`),s}g.info("All seeders completed successfully");},Cf=Lg;function K(i){return {_phantom:void 0,_apply:i}}function Rf(i){return K((t,e)=>{_.date(i??{},false)(t,e);})}Rf.string=function(t){return K((e,r)=>{_.date(t??{},true)(e,r);})};function _f(i){return K((t,e)=>{_.datetime(i??{},false)(t,e);})}_f.string=function(t){return K((e,r)=>{_.datetime(t??{},true)(e,r);})};function Mf(i){return K((t,e)=>{_.timestamp(i??{},false)(t,e);})}Mf.string=function(t){return K((e,r)=>{_.timestamp(t??{},true)(e,r);})};function xf(i){return K((t,e)=>{_.time(i??{},false)(t,e);})}xf.string=function(t){return K((e,r)=>{_.time(t??{},true)(e,r);})};le();var Of=Symbol("mongoProperties");function yu(){return (i,t)=>{let e=z.getMetadata(Of,i)||[];e.push(t),z.defineMetadata(Of,e,i);}}var lr=class extends Je{static get collection(){if(!this._collection)throw new Error(`Collection name not set for ${this.name}. Use defineCollection() to create collections.`);return this._collection}static beforeFetch(t){}static beforeInsert(t){return t}static beforeUpdate(t){}static beforeDelete(t){}static async afterFetch(t){return t}};Su([yu()],lr.prototype,"id");le();$t();le();function jg(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 Fg=new Set(["table","primaryKey","softDeleteColumn","softDeleteValue","modelCaseConvention","databaseCaseConvention","getColumns","getColumnsByName","getColumnsByDatabaseName","getRelations","getIndexes","getUniques","getChecks","beforeFetch","afterFetch","beforeInsert","beforeInsertMany","beforeUpdate","beforeDelete","query","all","first","find","findOneOrFail","findOne","findBy","findOneBy","findOneByPrimaryKey","refresh","sync","insert","insertMany","updateRecord","firstOrInsert","upsert","upsertMany","deleteRecord","save","softDelete","truncate","sqlInstance","getTableInfo","getIndexInfo","getTableSchema","prototype","constructor"]);function Df(i,t){let e=jg(i);switch(t){case "pascal":return so(e);case "camel":return Nr(e);case "snake":return Sr(e);default:return e}}function $f(i){return Fg.has(i)?{name:`${i}_`,wasSanitized:true}:{name:i,wasSanitized:false}}function If(i,t){switch(t){case "snake":return `${Sr(i)}.ts`;case "camel":return `${i}.ts`;default:return `${i}.ts`}}function vf(i,t){let{dataType:e,isNullable:r,defaultValue:n,length:o,precision:s,scale:a,withTimezone:l,unsigned:u}=t,d={};if(r||(d.nullable=false),n!=null){let p=String(n);!p.includes("(")&&!p.includes("CURRENT_")&&(d.default=n);}o!=null&&(d.length=o),s!=null&&(d.precision=s),a!=null&&(d.scale=a),u&&(d.unsigned=true);let m=e.toLowerCase();m.includes("timestamp")&&l&&(d.withTimezone=true);let c="string";return m.includes("varchar")||m.includes("char")?c="string":m.includes("text")?c="text":m==="integer"||m==="int"||m==="int4"?c="integer":m==="bigint"||m==="int8"?c="bigInteger":m==="smallint"||m==="int2"?c="smallint":m==="boolean"||m==="bool"?c="boolean":m.includes("timestamp")?c="timestamp":m==="date"?c="date":m==="time"?c="time":m==="uuid"?c="uuid":m==="json"?c="json":m==="jsonb"?c="jsonb":m==="decimal"||m==="numeric"?c="decimal":m==="float"||m==="real"||m==="double"||m==="double precision"?c="float":m==="binary"||m==="bytea"?c="binary":m==="enum"&&(c="enum",t.enumValues&&(d.enumValues=t.enumValues)),i==="mysql"&&m.includes("tinyint")&&o===1&&(c="boolean"),{method:c,options:d}}function Ye(i){return JSON.stringify(i)}function Pf(i){return i==null?"null":typeof i=="string"?Ye(i):typeof i=="boolean"?i?"true":"false":typeof i=="number"?String(i):Array.isArray(i)?`[${i.map(Pf).join(", ")}]`:String(i)}function Ef(i,t,e,r){let n=[],o=new Set(t.primaryKey?.columns||[]),s=new Map;for(let u of t.foreignKeys)for(let d=0;d<u.columns.length;d++){let m=u.columns[d],c=u.referencedColumns[d];s.has(m)||s.set(m,{referencedTable:u.referencedTable,referencedColumns:[c],onDelete:u.onDelete,onUpdate:u.onUpdate});}n.push('import { col, defineModel } from "hysteria-orm";'),n.push(""),n.push(`export const ${i} = defineModel(${Ye(i)}, {`),n.push(" columns: {");for(let u of t.columns){let m=$f(u.name).name,c=o.has(u.name),{method:p,options:h}=vf(e,u),y=[];for(let[M,R]of Object.entries(h))R!=null&&y.push(`${M}: ${Pf(R)}`);let w=y.length>0?`{ ${y.join(", ")} }`:"",S=w?`col.${p}(${w})`:`col.${p}()`,q=s.get(u.name);if(q){let M=q.referencedColumns.join(", "),R=`/** @fk references ${q.referencedTable}(${M})`;q.onDelete&&(R+=` \u2014 onDelete: ${q.onDelete}`),q.onUpdate&&(R+=` \u2014 onUpdate: ${q.onUpdate}`),R+=" */",n.push(` ${R}`);}c&&(n.push(" // Primary key column"),(p==="integer"||p==="bigInteger")&&n.push(" // TODO: may be auto-increment, verify manually")),n.push(` ${m}: ${S},`);}n.push(" },");let a=t.indexes.filter(u=>!u.isUnique);if(a.length>0){n.push(" indexes: [");for(let u of a)u.name?n.push(` { columns: [${u.columns.map(Ye).join(", ")}], name: ${Ye(u.name)} },`):n.push(` [${u.columns.map(Ye).join(", ")}],`);n.push(" ],");}let l=t.indexes.filter(u=>u.isUnique);if(l.length>0){n.push(" uniques: [");for(let u of l)u.name?n.push(` { columns: [${u.columns.map(Ye).join(", ")}], name: ${Ye(u.name)} },`):n.push(` [${u.columns.map(Ye).join(", ")}],`);n.push(" ],");}return n.push("});"),n.push(""),n.push(`export type ${i}Type = InstanceType<typeof ${i}>;`),n.push(""),n.join(`
|
|
359
|
+
`)}function Bf(i){let t=[];for(let e of i)t.push(`export * from "./${e}";`);return t.push(""),t.join(`
|
|
360
|
+
`)}var Ug=["pg_","information_schema","mysql","sys","performance_schema","sqlite_"];function Vg(i){let t=i.toLowerCase();return Ug.some(e=>t.startsWith(e))}async function fu(i,t){let{outDir:e,naming:r,dry:n}=t;g.info("Starting database introspection");let o=i.getDbType();g.info(`Database dialect: ${o}`);let s=await i.introspectSchema();if(!s||s.length===0){g.warn("No tables found in database");return}let a=[];for(let d of s)for(let m of d.tables)Vg(m.name)||a.push(m.name);if(a.length===0){g.warn("No user tables found in database (system tables excluded)");return}g.info(`Found ${a.length} tables to process`);let l=[],u=[];for(let d of a){g.info(`Processing table: ${d}`);try{let m=await i.getTableSchema(d);if(m.columns.length===0){g.warn(`Table ${d} has no columns, skipping`);continue}let c=Df(d,r),p=If(c,r),h=Ef(d,m,o,{naming:r});l.push(c),n?(g.info(`[DRY RUN] Would generate: ${p}`),g.info("---"),g.info(h),g.info("---")):u.push({fileName:p,content:h});}catch(m){g.error(`Failed to process table ${d}: ${m}`);}}if(!n){ae.existsSync(e)||(ae.mkdirSync(e,{recursive:true}),g.info(`Created output directory: ${e}`));for(let{fileName:d,content:m}of u){let c=ft.join(e,d);ae.writeFileSync(c,m,"utf-8"),g.info(`Generated: ${c}`);}if(l.length>0){let d=Bf(l),m=ft.join(e,"index.ts");ae.writeFileSync(m,d,"utf-8"),g.info(`Generated: ${m}`);}}g.info(`
|
|
361
|
+
Summary:`),g.info(` Tables processed: ${l.length}`),n?g.info(" Mode: Dry run (no files written)"):(g.info(` Output directory: ${e}`),g.info(` Files generated: ${u.length+1}`));}var Qf={devDependencies:{"@types/ioredis":"^5.0.0","@types/mongodb":"^4.0.7","@types/mssql":"^9.1.11","@types/pg":"^8.20.0","@types/sqlite3":"^5.1.0",esbuild:"^0.28.0",ioredis:"^5.10.1",mongodb:"^7.1.1",mssql:"^12.2.1",mysql2:"^3.20.0",pg:"^8.20.0",sqlite3:"^6.0.1",typescript:"^6.0.2"}};var Lf=()=>ae.existsSync(ft.join(process.cwd(),"yarn.lock"))?["yarn","add"]:ae.existsSync(ft.join(process.cwd(),"pnpm-lock.yaml"))?["pnpm","add"]:ae.existsSync(ft.join(process.cwd(),"package-lock.json"))?["npm","install"]:ae.existsSync(ft.join(process.cwd(),"bun.lockb"))?["bun","add"]:ae.existsSync(ft.join(process.cwd(),"deno.lock"))?["deno","add"]:["npm","install"],Kf=async(i,t,e,r)=>{let n=zg.createInterface({input:process.stdin,output:process.stdout}),o=e.join(", "),s=`Do you want to install the following dependencies using ${t}?
|
|
362
362
|
${o}
|
|
363
|
-
(y/n): `;return new Promise(a=>{n.question(s,l=>{if(n.close(),l.toLowerCase()==="y"||l.toLowerCase()==="yes"){execSync(i,r),a(true);return}a(false);});})},me=$y.devDependencies,Py=async(i,t,e)=>{let r=Bn.includes(e)?[`typescript@${me.typescript}`,`esbuild@${me.esbuild}`]:[],n="";switch(e){case "mariadb":case "mysql":n=`mysql2@${me.mysql2}`;break;case "cockroachdb":case "postgres":n=`pg@${me.pg}`,r.push(`@types/pg@${me["@types/pg"]}`);break;case "sqlite":n=`sqlite3@${me.sqlite3}`,r.push(`@types/sqlite3@${me["@types/sqlite3"]}`);break;case "mongo":n=`mongodb@${me.mongodb}`,r.push(`@types/mongodb@${me["@types/mongodb"]}`);break;case "redis":n=`ioredis@${me.ioredis}`,r.push(`@types/ioredis@${me["@types/ioredis"]}`);break;case "mssql":n=`mssql@${me.mssql}`,r.push(`@types/mssql@${me["@types/mssql"]}`);break;default:throw new Error(`Invalid database type: ${e}`)}if(n){let s=await Iy(`${i} ${t} ${n}`,i,[n],{stdio:"inherit"});s&&g.info("Driver dependency installed successfully"),s||g.info("Driver dependency installation skipped");}let o=i==="deno"?"--dev":"-D";if(r.length){let s=await Iy(`${i} ${t} ${r.join(" ")} ${o}`,i,r,{stdio:"inherit"});s&&g.info("Dev dependencies installed successfully"),s||g.info("Dev dependencies installation skipped");}};var Bn=["sqlite","mysql","postgres","mariadb","cockroachdb","mssql"],kn=Bn.concat("mongodb","redis");async function Ye(i,t){let{default:e}=await pt(ft.resolve(process.cwd(),i));return e||(g.error(`The provided datasource file does not export a default export: ${i}`),process.exit(1)),ke.isSqlDataSource(e)||(g.error(`The provided datasource file does not export a valid SqlDataSource instance: ${i}`),process.exit(1)),e.isConnected||await e.connect(),e}function du(i,t,e,r){let n=typeof e=="boolean"?i??e:i??e?.enabled??true,o=typeof e=="object"?e?.timeout:r,s=t?parseInt(t,10):o??3e4,a=typeof e=="object"&&e.customValue!==void 0?typeof e.customValue=="function"?e.customValue():e.customValue:"hysteria_migration_lock";return {enabled:n,timeout:s,key:a}}var Te=new Command;Te.command("init",{isDefault:false}).option("-t, --type [type]",`Type of the database to connect to, available types: ${kn.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=kn.join(", ");i.type||(g.error(`Database type is required (-t|--type), available types: ${t}`),process.exit(1)),kn.includes(i.type)||(g.error(`Invalid database type: ${i.type}, available types: ${kn.join(", ")}`),process.exit(1)),g.info("Initializing hysteria-orm with standard configuration"),g.info(`Database type: ${i.type||"not specified (will use env DB_TYPE)"}`);let[e,r]=vy();g.info(`Package manager: ${e}`),g.info("Installing base dependencies"),await Py(e,r,i.type);let n=$n.initTemplate(i.type);ae.existsSync("database")?g.info("database folder already exists, skipping"):ae.mkdirSync("database",{recursive:true}),ae.existsSync("database/index.ts")?g.info("database/index.ts file already exists, skipping"):ae.writeFileSync("database/index.ts",n),Bn.includes(i.type)&&!ae.existsSync("database/migrations")?ae.mkdirSync("database/migrations",{recursive:true}):g.info("database/migrations folder already exists or is not a sql database, skipping"),g.info("Initialization completed successfully");});Te.command("sql [sql]").alias("run:sql").option("-f, --file [path]","Path to the sql file",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-o, --out [query]","File path to save the query result",void 0).option("-t, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).description("Run a sql file or a sql query directly from the command line for the given connection defined in the env file").action(async(i,t)=>{g.info("Starting SQL execution"),t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=t?.file;!i&&!e&&(g.error("SQL query or file path is required"),process.exit(1)),i&&e&&(g.error("Cannot provide both sql query and file path"),process.exit(1));let r=await Ye(t.datasource,t?.tsconfigPath);if(i){g.info("Executing SQL query directly from command line");try{await In(i,r,t?.out),g.info("SQL execution completed successfully"),process.exit(0);}catch(o){g.error(`SQL execution failed: ${o}`),process.exit(1);}}e||(g.error("No SQL statement or file provided"),process.exit(1)),g.info(`Reading SQL from file: ${e}`),e=ft.resolve(process.cwd(),e),ae.existsSync(e)||(g.error(`File not found: ${e}`),process.exit(1));let n=ae.readFileSync(e,"utf-8");g.info(`SQL file loaded successfully (${n.length} characters)`);try{await In(n,r,t?.out),g.info("SQL file execution completed successfully"),process.exit(0);}catch(o){g.error(`SQL file execution failed: ${o}`),process.exit(1);}});Te.command("create:migration <name>").description("Create a new migration file, standard folder is migrations from the current directory you are now, you can change it in the env MIGRATION_PATH").option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-a, --alter","Generate a template for an alter table migration",false).option("-c, --create","Generate a template for a create table migration",false).option("-t, --table <table>","Specifies the target table name for the migration",false).action((i,t)=>{g.info(`Creating migration: ${i}`),g.info(`Migration options: javascript=${t.javascript}, alter=${t.alter}, create=${t.create}, table=${t.table||"not specified"}`),i||(g.error("Migration name is required"),process.exit(1)),t.alter&&t.create&&(g.error("Cannot use --alter and --create at the same time"),process.exit(1)),t.table&&!(t.create||t.alter)&&(g.error("Cannot use --table without --create or --alter"),process.exit(1));let e=t.alter?"alter":t.create?"create":"basic";g.info(`Migration mode: ${e}`),Ou(i,t.javascript,e,t.table||i);});Te.command("migrate [runUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, only applies to postgres",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Run pending migrations, if runUntil is provided, it will run all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ye(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,n=t?.tsconfigPath||e.migrationConfig.tsconfig,o=t?.transactional??e.migrationConfig.transactional,s=du(t?.lock,t?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(s.enabled){if(g.info("Acquiring migration lock"),a=await e.acquireLock(typeof s.key=="string"?s.key:String(s.key),s.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await Bt(e,i,r,n,o);}catch(l){throw console.error(l),l}finally{s.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof s.key=="string"?s.key:String(s.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});Te.command("rollback [rollbackUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Rollbacks every migration that has been run, if rollbackUntil is provided, it will rollback all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ye(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,n=t?.tsconfigPath||e.migrationConfig.tsconfig,o=t?.transactional??e.migrationConfig.transactional,s=du(t?.lock,t?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(s.enabled){if(g.info("Acquiring migration lock"),a=await e.acquireLock(typeof s.key=="string"?s.key:String(s.key),s.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await nr(e,i,r,n,o);}catch(l){throw console.error(l),l}finally{s.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof s.key=="string"?s.key:String(s.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});Te.command("refresh").option("-f, --force","Drop all tables in the database before running the migrations instead of running the down migrations",false).option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).option("-m, --migration-path [path]","Path to the migrations",void 0).description("Rollbacks every migration that has been run and then run the migrations").action(async i=>{let t=i?.force||false;i?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ye(i.datasource,i?.tsconfigPath),r=i?.migrationPath||e.migrationConfig.path,n=i?.tsconfigPath||e.migrationConfig.tsconfig,o=i?.transactional??e.migrationConfig.transactional,s=du(i?.lock,i?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(s.enabled){if(g.info("Acquiring migration lock for refresh operation"),a=await e.acquireLock(typeof s.key=="string"?s.key:String(s.key),s.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}t?await Wn(e,!1,o):await nr(e,void 0,r,n,o),await Bt(e,void 0,r,n,o);}catch(l){console.error(l);}finally{s.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof s.key=="string"?s.key:String(s.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});Te.command("generate:migrations").description("Generate a migration file based on the database schema and the models metadata, supported only for postgres, mysql, mariadb and cockroachdb").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-f, --dry","Does not create a migration file but only outputs sql statements",false).option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-m, --migration-path [path]","Path to the migrations",void 0).option("-n, --name [name]","Name of the migration",void 0).option("-o, --output [mode]","Output mode: 'code' generates schema builder calls, 'raw' generates raw SQL (default: code)","code").action(async i=>{i?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1)),i?.name||(i.name="auto_generated_migration"),i.name=`${Date.now()}_${i.name}`;let t=await Ye(i.datasource,i?.tsconfigPath),e=i?.migrationPath||t.migrationConfig.path;["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(g.error(`generate:migrations is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),process.exit(1));try{let n=await nt.makeDiff(t);if((i.output==="raw"?"raw":"code")==="code"){let s=n.getCodeStatements();if(s.up.length||(g.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){console.log("// up()");for(let u of s.up)console.log(u);console.log(`
|
|
364
|
-
// down()`);for(let u of s.down)console.log(u);process.exit(0);}ae.existsSync(e)||ae.mkdirSync(e,{recursive:!0});let a=await
|
|
365
|
-
export{
|
|
363
|
+
(y/n): `;return new Promise(a=>{n.question(s,l=>{if(n.close(),l.toLowerCase()==="y"||l.toLowerCase()==="yes"){execSync(i,r),a(true);return}a(false);});})},pe=Qf.devDependencies,Wf=async(i,t,e)=>{let r=Ln.includes(e)?[`typescript@${pe.typescript}`,`esbuild@${pe.esbuild}`]:[],n="";switch(e){case "mariadb":case "mysql":n=`mysql2@${pe.mysql2}`;break;case "cockroachdb":case "postgres":n=`pg@${pe.pg}`,r.push(`@types/pg@${pe["@types/pg"]}`);break;case "sqlite":n=`sqlite3@${pe.sqlite3}`,r.push(`@types/sqlite3@${pe["@types/sqlite3"]}`);break;case "mongo":n=`mongodb@${pe.mongodb}`,r.push(`@types/mongodb@${pe["@types/mongodb"]}`);break;case "redis":n=`ioredis@${pe.ioredis}`,r.push(`@types/ioredis@${pe["@types/ioredis"]}`);break;case "mssql":n=`mssql@${pe.mssql}`,r.push(`@types/mssql@${pe["@types/mssql"]}`);break;default:throw new Error(`Invalid database type: ${e}`)}if(n){let s=await Kf(`${i} ${t} ${n}`,i,[n],{stdio:"inherit"});s&&g.info("Driver dependency installed successfully"),s||g.info("Driver dependency installation skipped");}let o=i==="deno"?"--dev":"-D";if(r.length){let s=await Kf(`${i} ${t} ${r.join(" ")} ${o}`,i,r,{stdio:"inherit"});s&&g.info("Dev dependencies installed successfully"),s||g.info("Dev dependencies installation skipped");}};var Ln=["sqlite","mysql","postgres","mariadb","cockroachdb","mssql"],Wn=Ln.concat("mongodb","redis");async function Ze(i,t){let{default:e}=await yt(ft.resolve(process.cwd(),i));return e||(g.error(`The provided datasource file does not export a default export: ${i}`),process.exit(1)),ke.isSqlDataSource(e)||(g.error(`The provided datasource file does not export a valid SqlDataSource instance: ${i}`),process.exit(1)),e.isConnected||await e.connect(),e}function hu(i,t,e,r){let n=typeof e=="boolean"?i??e:i??e?.enabled??true,o=typeof e=="object"?e?.timeout:r,s=t?parseInt(t,10):o??3e4,a=typeof e=="object"&&e.customValue!==void 0?typeof e.customValue=="function"?e.customValue():e.customValue:"hysteria_migration_lock";return {enabled:n,timeout:s,key:a}}var we=new Command;we.command("init",{isDefault:false}).option("-t, --type [type]",`Type of the database to connect to, available types: ${Wn.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=Wn.join(", ");i.type||(g.error(`Database type is required (-t|--type), available types: ${t}`),process.exit(1)),Wn.includes(i.type)||(g.error(`Invalid database type: ${i.type}, available types: ${Wn.join(", ")}`),process.exit(1)),g.info("Initializing hysteria-orm with standard configuration"),g.info(`Database type: ${i.type||"not specified (will use env DB_TYPE)"}`);let[e,r]=Lf();g.info(`Package manager: ${e}`),g.info("Installing base dependencies"),await Wf(e,r,i.type);let n=En.initTemplate(i.type);ae.existsSync("database")?g.info("database folder already exists, skipping"):ae.mkdirSync("database",{recursive:true}),ae.existsSync("database/index.ts")?g.info("database/index.ts file already exists, skipping"):ae.writeFileSync("database/index.ts",n),Ln.includes(i.type)&&!ae.existsSync("database/migrations")?ae.mkdirSync("database/migrations",{recursive:true}):g.info("database/migrations folder already exists or is not a sql database, skipping"),g.info("Initialization completed successfully");});we.command("sql [sql]").alias("run:sql").option("-f, --file [path]","Path to the sql file",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-o, --out [query]","File path to save the query result",void 0).option("-t, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).description("Run a sql file or a sql query directly from the command line for the given connection defined in the env file").action(async(i,t)=>{g.info("Starting SQL execution"),t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=t?.file;!i&&!e&&(g.error("SQL query or file path is required"),process.exit(1)),i&&e&&(g.error("Cannot provide both sql query and file path"),process.exit(1));let r=await Ze(t.datasource,t?.tsconfigPath);if(i){g.info("Executing SQL query directly from command line");try{await Bn(i,r,t?.out),g.info("SQL execution completed successfully"),process.exit(0);}catch(o){g.error(`SQL execution failed: ${o}`),process.exit(1);}}e||(g.error("No SQL statement or file provided"),process.exit(1)),g.info(`Reading SQL from file: ${e}`),e=ft.resolve(process.cwd(),e),ae.existsSync(e)||(g.error(`File not found: ${e}`),process.exit(1));let n=ae.readFileSync(e,"utf-8");g.info(`SQL file loaded successfully (${n.length} characters)`);try{await Bn(n,r,t?.out),g.info("SQL file execution completed successfully"),process.exit(0);}catch(o){g.error(`SQL file execution failed: ${o}`),process.exit(1);}});we.command("create:migration <name>").description("Create a new migration file, standard folder is migrations from the current directory you are now, you can change it in the env MIGRATION_PATH").option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-a, --alter","Generate a template for an alter table migration",false).option("-c, --create","Generate a template for a create table migration",false).option("-t, --table <table>","Specifies the target table name for the migration",false).action((i,t)=>{g.info(`Creating migration: ${i}`),g.info(`Migration options: javascript=${t.javascript}, alter=${t.alter}, create=${t.create}, table=${t.table||"not specified"}`),i||(g.error("Migration name is required"),process.exit(1)),t.alter&&t.create&&(g.error("Cannot use --alter and --create at the same time"),process.exit(1)),t.table&&!(t.create||t.alter)&&(g.error("Cannot use --table without --create or --alter"),process.exit(1));let e=t.alter?"alter":t.create?"create":"basic";g.info(`Migration mode: ${e}`),vu(i,t.javascript,e,t.table||i);});we.command("migrate [runUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, only applies to postgres",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Run pending migrations, if runUntil is provided, it will run all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ze(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,n=t?.tsconfigPath||e.migrationConfig.tsconfig,o=t?.transactional??e.migrationConfig.transactional,s=hu(t?.lock,t?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(s.enabled){if(g.info("Acquiring migration lock"),a=await e.acquireLock(typeof s.key=="string"?s.key:String(s.key),s.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await Kt(e,i,r,n,o);}catch(l){throw console.error(l),l}finally{s.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof s.key=="string"?s.key:String(s.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});we.command("rollback [rollbackUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Rollbacks every migration that has been run, if rollbackUntil is provided, it will rollback all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ze(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,n=t?.tsconfigPath||e.migrationConfig.tsconfig,o=t?.transactional??e.migrationConfig.transactional,s=hu(t?.lock,t?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(s.enabled){if(g.info("Acquiring migration lock"),a=await e.acquireLock(typeof s.key=="string"?s.key:String(s.key),s.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await ir(e,i,r,n,o);}catch(l){throw console.error(l),l}finally{s.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof s.key=="string"?s.key:String(s.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});we.command("refresh").option("-f, --force","Drop all tables in the database before running the migrations instead of running the down migrations",false).option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).option("-m, --migration-path [path]","Path to the migrations",void 0).description("Rollbacks every migration that has been run and then run the migrations").action(async i=>{let t=i?.force||false;i?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ze(i.datasource,i?.tsconfigPath),r=i?.migrationPath||e.migrationConfig.path,n=i?.tsconfigPath||e.migrationConfig.tsconfig,o=i?.transactional??e.migrationConfig.transactional,s=hu(i?.lock,i?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(s.enabled){if(g.info("Acquiring migration lock for refresh operation"),a=await e.acquireLock(typeof s.key=="string"?s.key:String(s.key),s.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}t?await Jn(e,!1,o):await ir(e,void 0,r,n,o),await Kt(e,void 0,r,n,o);}catch(l){console.error(l);}finally{s.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof s.key=="string"?s.key:String(s.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});we.command("generate:migrations").description("Generate a migration file based on the database schema and the models metadata, supported only for postgres, mysql, mariadb and cockroachdb").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-f, --dry","Does not create a migration file but only outputs sql statements",false).option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-m, --migration-path [path]","Path to the migrations",void 0).option("-n, --name [name]","Name of the migration",void 0).option("-o, --output [mode]","Output mode: 'code' generates schema builder calls, 'raw' generates raw SQL (default: code)","code").action(async i=>{i?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1)),i?.name||(i.name="auto_generated_migration"),i.name=`${Date.now()}_${i.name}`;let t=await Ze(i.datasource,i?.tsconfigPath),e=i?.migrationPath||t.migrationConfig.path;["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(g.error(`generate:migrations is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),process.exit(1));try{let n=await ot.makeDiff(t);if((i.output==="raw"?"raw":"code")==="code"){let s=n.getCodeStatements();if(s.up.length||(g.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){console.log("// up()");for(let u of s.up)console.log(u);console.log(`
|
|
364
|
+
// down()`);for(let u of s.down)console.log(u);process.exit(0);}ae.existsSync(e)||ae.mkdirSync(e,{recursive:!0});let a=await ar.generate(s,"code"),l=i?.javascript?".js":".ts";ae.writeFileSync(`${e}/${i?.name}${l}`,a),g.info(`Migration file created successfully: ${i?.name}${l}`);}else {let s=n.getSqlStatements();if(s.length||(g.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){for(let u of s)console.log(u);process.exit(0);}ae.existsSync(e)||ae.mkdirSync(e,{recursive:!0});let a=await ar.generate(s,"raw"),l=i?.javascript?".js":".ts";ae.writeFileSync(`${e}/${i?.name}${l}`,a),g.info(`Migration file created successfully: ${i?.name}${l}`);}await t.disconnect(),process.exit(0);}catch(n){console.error(n),await t.disconnect(),process.exit(1);}});we.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||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let t=await Ze(i.datasource,i?.tsconfigPath);["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(g.error(`sync is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),await t.disconnect(),process.exit(1));try{let n=(await ot.makeDiff(t)).getSqlStatements();if(n.length||(g.info("No new changes detected between database schema and models metadata"),await t.disconnect(),process.exit(0)),i.dry){g.info(`${n.length} SQL statement(s) would be executed:`);for(let o of n)console.log(o);await t.disconnect(),process.exit(0);}await t.syncSchema({transactional:i?.transactional??!1}),g.info("Schema sync completed successfully"),await t.disconnect(),process.exit(0);}catch(r){console.error(r),await t.disconnect(),process.exit(1);}});we.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)=>{g.info(`Creating seeder: ${i}`),g.info(`Seeder options: javascript=${t.javascript}`),i||(g.error("Seeder name is required"),process.exit(1)),qf(i,t.javascript,t.seederPath);});we.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=>{g.info("Starting seeder execution"),i?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let t=await Ze(i.datasource,i?.tsconfigPath),e;i?.seederPath&&i.seederPath.length>0?e=i.seederPath.flatMap(n=>n.split(",").map(o=>o.trim())):e=[t.seederConfig.path];let r=i?.tsconfigPath||t.seederConfig.tsconfig;try{await Cf(t,e,r),await t.disconnect(),g.info("Seeding completed successfully"),process.exit(0);}catch(n){console.error(n),await t.disconnect(),process.exit(1);}});we.command("db:pull").description("Generate TypeScript model files from database schema introspection").option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-o, --out [path]","Output directory for generated models","./database/models").option("--naming [convention]","Naming convention for model names (camel, snake, pascal)","camel").option("--dry","Preview generated code without writing files",false).option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).action(async i=>{i?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let t=["camel","snake","pascal"],e=i?.naming||"camel";t.includes(e)||(g.error(`Invalid naming convention: ${e}. Must be one of: ${t.join(", ")}`),process.exit(1));let r=await Ze(i.datasource,i?.tsconfig);try{await fu(r,{outDir:i?.out||"./database/models",naming:e,dry:i?.dry||!1}),await r.disconnect(),process.exit(0);}catch(n){console.error(n),await r.disconnect(),process.exit(1);}});we.parse(process.argv);
|
|
365
|
+
export{Ln as sqlDatabaseTypes};//# sourceMappingURL=cli.js.map
|
|
366
366
|
//# sourceMappingURL=cli.js.map
|