hysteria-orm 12.0.0 → 12.0.1
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 +33 -33
- package/lib/cli.js.map +1 -1
- package/lib/index.cjs +22 -22
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +219 -167
- package/lib/index.d.ts +219 -167
- package/lib/index.js +22 -22
- 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 oe,{promises}from'fs';import dt from'path';import Xl from'fs/promises';import {format}from'sql-formatter';import {highlight}from'sql-highlight';import {createRequire}from'module';import {pathToFileURL}from'url';import De,{privateDecrypt,publicEncrypt}from'crypto';import {AsyncLocalStorage}from'async_hooks';import {execSync}from'child_process';import Bh from'readline';var Kl=Object.defineProperty;var Ll=s=>{throw TypeError(s)};var Oe=(s,t)=>()=>(s&&(t=s(s=0)),t);var jl=(s,t)=>{for(var e in t)Kl(s,e,{get:t[e],enumerable:true});};var Wl=(s,t,e,r)=>{for(var n=void 0,o=s.length-1,i;o>=0;o--)(i=s[o])&&(n=(i(t,e,n))||n);return n&&Kl(t,e,n),n};var Vf=(s,t,e)=>t.has(s)||Ll("Cannot "+e);var Fl=(s,t,e)=>t.has(s)?Ll("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(s):t.set(s,e);var Ul=(s,t,e)=>(Vf(s,t,"access private method"),e);var L,se=Oe(()=>{L=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};});var df,fe,fh,cf,qt=Oe(()=>{se();df=[],fe=s=>{df.push(s);},fh=async(s,t,e,r)=>{if(!Array.isArray(t?.dialects))throw new Error(`driver must be a registered driver name or a DriverAdapterFactory with a "dialects" array (got ${typeof t}).`);if(!t.dialects.includes(s))throw new Error(`driver "${t.name}" does not support dialect "${s}" (declares: ${t.dialects.join(", ")}).`);return t.create({dialect:s,jsEnvironment:e,input:r})},cf=async(s,t,e,r)=>{if(e&&typeof e!="string")return fh(s,e,t,r);let n=df.filter(l=>l.dialects.includes(s)),o=(l,u)=>(l.environments??["node"]).includes(u),i=(l,u)=>(e?l.name===e:true)&&o(l,u),a=n.find(l=>i(l,t));if(a)return a.create({dialect:s,jsEnvironment:t,input:r});if(t==="bun"){let l=n.find(u=>i(u,"node"));if(l)return l.create({dialect:s,jsEnvironment:t,input:r})}throw new L(e??s)};});var Ct,wh,pf,Vt=Oe(()=>{Ct=async(s,t={},e)=>{let r=new PassThrough({objectMode:t.objectMode??true,highWaterMark:t.highWaterMark});try{for(let n of s)e.onData?await e.onData(r,n):r.write(n);r.end();}catch(n){r.destroy(n);}return r},wh=s=>{if(s.writableNeedDrain)return new Promise(t=>s.once("drain",()=>t()))},pf=async(s,t={},e)=>{let r=new PassThrough({objectMode:t.objectMode??true,highWaterMark:t.highWaterMark});try{for(let n of s)e.onData?await e.onData(r,n):r.write(n),await wh(r);r.end();}catch(n){r.destroy(n);}return r};});var Tn,ff=Oe(()=>{Vt();Tn=class{constructor(t,e,r){this.jsEnvironment="bun";this.dialect=t;let n={hostname:e.host,port:e.port,username:e.username,password:e.password,database:e.database,...e.driverOptions};(t==="mysql"||t==="mariadb")&&(n.adapter="mysql",n.allowPublicKeyRetrieval=true),this.sql=new r(n),this.pool=this.sql;}createPool(){}async closePool(){this.sql.close();}async reserveConnection(){return this.sql.reserve()}releaseConnection(t){t?.release();}async beginTransaction(t,e){(this.dialect==="mysql"||this.dialect==="mariadb")&&e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await e.rawQuery(this.dialect==="mysql"||this.dialect==="mariadb"?"START TRANSACTION":"BEGIN TRANSACTION"),(this.dialect==="postgres"||this.dialect==="cockroachdb")&&e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let o=await(r.connection??this.sql).unsafe(t,e);if(this.dialect==="mysql"||this.dialect==="mariadb"){let a=/^\s*(select|show|desc(ribe)?|explain)\b/i.test(t);if(Array.isArray(o)&&(a||o.length>0))return [o,void 0];let l=o;return [{affectedRows:Number(l.affectedRows),insertId:Number(l.lastInsertRowid)},void 0]}let i=o;return Array.isArray(o)&&!((i.command==="INSERT"||i.command==="UPDATE"||i.command==="DELETE")&&o.length===0)?{rows:o,rowCount:o.length}:{rows:[],rowCount:i.count??i.affectedRows??0}}extract(t,e){if(e==="raw")return t;if(this.dialect==="mysql"||this.dialect==="mariadb"){let n=t;return e==="affectedRows"?n[0]?.affectedRows??0:n[0]}let r=t;return e==="affectedRows"?r.rowCount:r.rows}async stream(t,e,r,n){let i=await(r.connection??this.sql).unsafe(t,e),a=Array.isArray(i)?i:[];return Ct(a,r,n)}};});var wn,yf=Oe(()=>{Vt();wn=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="bun";this.db=new r(String(e.database??":memory:"),e.driverOptions),this.pool=this.db;}createPool(){}async closePool(){this.db.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.db,o=r.sqlLiteOptions??{},i=o.mode||"fetch";return ["begin","begin transaction","commit","rollback"].includes(t.trim().toLowerCase())?n.query(t).run(...e).changes:i==="fetch"?n.query(t).all(...e):o?.typeofModel?i==="insertOne"||i==="insertMany"?n.query(`${t} returning *`).all(...e):n.query(t).run(...e).changes:n.query(t).run(...e).changes}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.db;return pf(o.query(t).iterate(...e),r,n)}};});var hf={};jl(hf,{registerBunDrivers:()=>Sh});var Sh,gf=Oe(()=>{qt();ff();yf();Sh=async()=>{let{SQL:s}=await import('bun'),{Database:t}=await import('bun:sqlite');fe({name:"bun-sql",dialects:["postgres","cockroachdb","mysql","mariadb"],environments:["bun"],create:async({dialect:e,input:r})=>new Tn(e,r,s)}),fe({name:"bun-sqlite",dialects:["sqlite"],environments:["bun"],create:async({dialect:e,input:r})=>new wn(e,r,t)});};});var Nh,Sn,xl,Ol=Oe(()=>{Vt();Nh=async s=>(await(await import('@sqlite.org/sqlite-wasm')).default(s)).oo1,Sn=class{constructor(t,e,r=Nh,n){this.dialect="sqlite";this.jsEnvironment="web";this.filename=String(e.database??":memory:"),this.loader=r,this.initConfig=n;}async createPool(){let t=await this.loader(this.initConfig),{filename:e}=this;this.db=e.startsWith(":memory:")||e===""?new t.DB(e):t.OpfsDb?new t.OpfsDb(e,"c"):new t.DB(e,"c"),this.pool=this.db;}async closePool(){this.db?.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.requireDb(),o=r.sqlLiteOptions??{},i=o.mode||"fetch",a=u=>(n.exec(u,{bind:e}),n.changes());return xl(t)?a(t):i==="fetch"?n.selectObjects(t,e):o?.typeofModel&&(i==="insertOne"||i==="insertMany")?n.selectObjects(`${t} returning *`,e):a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.requireDb();return Ct(o.selectObjects(t,e),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-wasm: pool not created, await createPool() before querying");return this.db}},xl=s=>["begin","begin transaction","commit","rollback"].includes(s.trim().toLowerCase());});var Al,Nn,bf=Oe(()=>{Vt();Ol();Al=s=>Array.isArray(s)?s:s?._array??[],Nn=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="react-native";this.filename=String(e.database??":memory:"),this.engine=r;}createPool(){this.db=this.engine.open({name:this.filename}),this.pool=this.db;}async closePool(){this.db?.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.requireDb(),o=r.sqlLiteOptions??{},i=o.mode||"fetch",a=async u=>(await n.execute(u,e)).rowsAffected??0;if(xl(t))return a(t);if(i==="fetch"){let u=await n.execute(t,e);return Al(u.rows)}if(!o?.typeofModel)return a(t);if(i==="insertOne"||i==="insertMany"){let u=await n.execute(`${t} returning *`,e);return Al(u.rows)}return a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let i=await(r.connection??this.requireDb()).execute(t,e);return Ct(Al(i.rows),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-rn: pool not created, await createPool() before querying");return this.db}};});var Dl={};jl(Dl,{registerReactNativeDrivers:()=>Ch,registerWebDrivers:()=>qh});var Tf,wf,qh,Sf,Ch,$l=Oe(()=>{qt();bf();Ol();Tf=false,qh=s=>{Tf||(Tf=true,wf=s,fe({name:"sqlite-wasm",dialects:["sqlite"],environments:["web"],create:({dialect:t,input:e})=>new Sn(t,e,void 0,wf)}));},Sf=false,Ch=async()=>{if(Sf)return;Sf=true;let s=await import('@op-engineering/op-sqlite');fe({name:"sqlite-rn",dialects:["sqlite"],environments:["react-native"],create:({dialect:t,input:e})=>new Nn(t,e,s)});};});var _t=s=>{switch(s){case "mysql":return "mysql";case "mariadb":return "mariadb";case "postgres":case "cockroachdb":return "postgresql";case "sqlite":return "sqlite";case "mssql":return "transactsql";default:return "sql"}},Dn=s=>{if(s==null)return "NULL";if(s instanceof Date)return `'${s.toISOString()}'`;let t=typeof s;return t==="boolean"?s?"TRUE":"FALSE":t==="number"&&Number.isFinite(s)||t==="bigint"?String(s):t==="string"?`'${s.replace(/'/g,"''")}'`:Array.isArray(s)||t==="object"&&Object.keys(s).length>0?`'${JSON.stringify(s).replace(/'/g,"''")}'`:String(s)},tt=(s,t)=>{let e=s;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,Dn(t[r]));for(let r=0;r<t.length;r++){let n=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(n,Dn(t[r]));}for(let r=0;r<t.length;r++){let n=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(n,Dn(t[r]));}return e},rt=(s,t)=>t?s==="mysql"||s==="mariadb"?t.code==="ER_NO_SUCH_TABLE"||t.errno===1146:s==="postgres"||s==="cockroachdb"?t.code==="42P01":s==="sqlite"?/no such table/i.test(String(t.message||"")):s==="mssql"?t.number===208:false:false,nt=(s,t)=>{let e=s.getDbType(),r;try{r=format(t,{...s.inputDetails.queryFormatOptions,language:_t(e)});}catch{try{r=format(t,{...s.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var Jl={info:0,warn:1,error:2};function rr(s){return s?s===true?{level:"info",logQueries:true}:{level:s.level??"info",logQueries:s.logQueries??true,customLogger:s.customLogger}:null}function zf(s,t="info"){let e=rr(s);if(!e)return false;let r=e.level??"info";return Jl[t]>=Jl[r]}function Gf(s){let t=rr(s);return t?t.logQueries??true:false}var Ie={info:"32",warn:"33",error:"31",query:"35",dim:"2",cyan:"36"},Yf=typeof process<"u"&&!!process.stdout?.isTTY&&!process.env.NO_COLOR,ot=(s,t)=>Yf?`\x1B[${s}m${t}\x1B[0m`:t;function Yl(){let s=new Date,t=r=>r.toString().padStart(2,"0"),e=s.getMilliseconds().toString().padStart(3,"0");return `${t(s.getHours())}:${t(s.getMinutes())}:${t(s.getSeconds())}.${e}`}function $n(s,t){let e=ot(Ie.dim,`[${Yl()}]`),r=ot(Ie[s],s.toUpperCase().padEnd(5));return `${e} ${r} ${t}`}var Zf=60,Xf=10,Hl=400;function tr(s,t=Zf){return s.length<=t?s:`${s.slice(0,t)}\u2026`}function ey(s){if(s==null)return "null";if(typeof s=="string")return `'${tr(s)}'`;if(typeof s=="number"||typeof s=="bigint")return String(s);if(typeof s=="boolean")return s?"true":"false";if(s instanceof Date)return `'${tr(s.toISOString())}'`;if(typeof s=="object"){let t;try{t=JSON.stringify(s);}catch{t=String(s);}return `'${tr(t)}'`}return tr(String(s))}function ty(s){if(!s||s.length===0)return "[]";let t=s.slice(0,Xf).map(ey),e=s.length-t.length;e>0&&t.push(`\u2026 (${e} more)`);let r=`[${t.join(", ")}]`;return r.length>Hl&&(r=`${r.slice(0,Hl)}\u2026`),r}var zl=(s,t)=>{let e=" ".repeat(t);return s.split(`
|
|
2
|
+
import {PassThrough,Readable}from'stream';import {Command}from'commander';import oe,{promises}from'fs';import ct from'path';import tu from'fs/promises';import {format}from'sql-formatter';import {highlight}from'sql-highlight';import {createRequire}from'module';import {pathToFileURL}from'url';import De,{privateDecrypt,publicEncrypt}from'crypto';import {AsyncLocalStorage}from'async_hooks';import {execSync}from'child_process';import Jh from'readline';var Fl=Object.defineProperty;var jl=i=>{throw TypeError(i)};var Ae=(i,t)=>()=>(i&&(t=i(i=0)),t);var Wl=(i,t)=>{for(var e in t)Fl(i,e,{get:t[e],enumerable:true});};var Ul=(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&&Fl(t,e,n),n};var Xf=(i,t,e)=>t.has(i)||jl("Cannot "+e);var Vl=(i,t,e)=>t.has(i)?jl("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);var Jl=(i,t,e)=>(Xf(i,t,"access private method"),e);var L,se=Ae(()=>{L=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};});var hf,ye,qh,gf,Ct=Ae(()=>{se();hf=[],ye=i=>{hf.push(i);},qh=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})},gf=async(i,t,e,r)=>{if(e&&typeof e!="string")return qh(i,e,t,r);let n=hf.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 Rt,Oh,Tf,Jt=Ae(()=>{Rt=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},Oh=i=>{if(i.writableNeedDrain)return new Promise(t=>i.once("drain",()=>t()))},Tf=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 Oh(r);r.end();}catch(n){r.destroy(n);}return r};});var wf,wn,Sf=Ae(()=>{Jt();wf=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},wn=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 wf(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 wf(l)}let a=Array.isArray(s)?s:[];return Rt(a,r,n)}};});var Sn,Nf=Ae(()=>{Jt();Sn=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 Tf(o.query(t).iterate(...e),r,n)}};});var qf={};Wl(qf,{registerBunDrivers:()=>Ah});var Ah,Cf=Ae(()=>{Ct();Sf();Nf();Ah=async()=>{let{SQL:i}=await import('bun'),{Database:t}=await import('bun:sqlite');ye({name:"bun-sql",dialects:["postgres","cockroachdb","mysql","mariadb"],environments:["bun"],create:async({dialect:e,input:r})=>new wn(e,r,i)}),ye({name:"bun-sqlite",dialects:["sqlite"],environments:["bun"],create:async({dialect:e,input:r})=>new Sn(e,r,t)});};});var Dh,Nn,Al,Dl=Ae(()=>{Jt();Dh=async i=>(await(await import('@sqlite.org/sqlite-wasm')).default(i)).oo1,Nn=class{constructor(t,e,r=Dh,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 Al(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 Rt(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}},Al=i=>["begin","begin transaction","commit","rollback"].includes(i.trim().toLowerCase());});var $l,qn,Rf=Ae(()=>{Jt();Dl();$l=i=>Array.isArray(i)?i:i?._array??[],qn=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(Al(t))return a(t);if(s==="fetch"){let u=await n.execute(t,e);return $l(u.rows)}if(!o?.typeofModel)return a(t);if(s==="insertOne"||s==="insertMany"){let u=await n.execute(`${t} returning *`,e);return $l(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 Rt($l(s.rows),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-rn: pool not created, await createPool() before querying");return this.db}};});var Pl={};Wl(Pl,{registerReactNativeDrivers:()=>Ph,registerWebDrivers:()=>$h});var _f,Mf,$h,xf,Ph,vl=Ae(()=>{Ct();Rf();Dl();_f=false,$h=i=>{_f||(_f=true,Mf=i,ye({name:"sqlite-wasm",dialects:["sqlite"],environments:["web"],create:({dialect:t,input:e})=>new Nn(t,e,void 0,Mf)}));},xf=false,Ph=async()=>{if(xf)return;xf=true;let i=await import('@op-engineering/op-sqlite');ye({name:"sqlite-rn",dialects:["sqlite"],environments:["react-native"],create:({dialect:t,input:e})=>new qn(t,e,i)});};});var xt=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"}},$n=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)},rt=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,$n(t[r]));for(let r=0;r<t.length;r++){let n=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(n,$n(t[r]));}for(let r=0;r<t.length;r++){let n=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(n,$n(t[r]));}return e},nt=(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,ot=(i,t)=>{let e=i.getDbType(),r;try{r=format(t,{...i.inputDetails.queryFormatOptions,language:xt(e)});}catch{try{r=format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var zl={info:0,warn:1,error:2};function nr(i){return i?i===true?{level:"info",logQueries:true}:{level:i.level??"info",logQueries:i.logQueries??true,customLogger:i.customLogger}:null}function ry(i,t="info"){let e=nr(i);if(!e)return false;let r=e.level??"info";return zl[t]>=zl[r]}function ny(i){let t=nr(i);return t?t.logQueries??true:false}var Ie={info:"32",warn:"33",error:"31",query:"35",dim:"2",cyan:"36"},oy=typeof process<"u"&&!!process.stdout?.isTTY&&!process.env.NO_COLOR,st=(i,t)=>oy?`\x1B[${i}m${t}\x1B[0m`:t;function Xl(){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 Pn(i,t){let e=st(Ie.dim,`[${Xl()}]`),r=st(Ie[i],i.toUpperCase().padEnd(5));return `${e} ${r} ${t}`}var sy=60,iy=10,Gl=400;function rr(i,t=sy){return i.length<=t?i:`${i.slice(0,t)}\u2026`}function ay(i){if(i==null)return "null";if(typeof i=="string")return `'${rr(i)}'`;if(typeof i=="number"||typeof i=="bigint")return String(i);if(typeof i=="boolean")return i?"true":"false";if(i instanceof Date)return `'${rr(i.toISOString())}'`;if(typeof i=="object"){let t;try{t=JSON.stringify(i);}catch{t=String(i);}return `'${rr(t)}'`}return rr(String(i))}function ly(i){if(!i||i.length===0)return "[]";let t=i.slice(0,iy).map(ay),e=i.length-t.length;e>0&&t.push(`\u2026 (${e} more)`);let r=`[${t.join(", ")}]`;return r.length>Gl&&(r=`${r.slice(0,Gl)}\u2026`),r}var Yl=(i,t)=>{let e=" ".repeat(t);return i.split(`
|
|
3
3
|
`).map(r=>`${e}${r}`).join(`
|
|
4
|
-
`)};function
|
|
5
|
-
`)}var
|
|
4
|
+
`)};function uy(i){let t=i<10?Ie.info:i<100?Ie.warn:Ie.error;return st(t,`(${i}ms)`)}function dy(i,t,e){let r=st(Ie.dim,`[${Xl()}]`),n=st(Ie.query,"QUERY"),s=[e===void 0?`${r} ${n}`:`${r} ${n} ${uy(e)}`,Yl(i,2)];return t&&t.length>0&&s.push(Yl(`parameters: ${st(Ie.cyan,ly(t))}`,4)),s.join(`
|
|
5
|
+
`)}var Zl={info(i){console.log(Pn("info",i));},error(i){console.error(Pn("error",i));},warn(i){console.warn(Pn("warn",i));}},it=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===Zl){console.log(t);return}this.loggerInstance.info(t);}};it.loggerInstance=Zl;function at(i,t,e,r,n,o){if(!ny(t))return;let s=i;if(r||n)try{s=format(i,{...r,language:r?.language??(n?xt(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"}});it.query(dy(a,e,o));}function eu(i,t,e=false){ry(e,t)&&it.loggerInstance[t](i);}var g=it;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,19 +111,19 @@ CREATE TABLE [migrations] (
|
|
|
111
111
|
[name] NVARCHAR(255) NOT NULL,
|
|
112
112
|
[timestamp] DATETIME NOT NULL DEFAULT GETDATE(),
|
|
113
113
|
PRIMARY KEY ([id])
|
|
114
|
-
);`}},te=new
|
|
114
|
+
);`}},te=new vn;async function In(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 tu.rm(n,{recursive:!0,force:!0}),g.info("Sqlite database dropped successfully"),await tu.writeFile(n,""),g.info("Sqlite database recreated successfully"),await i.connect(),g.info("All tables dropped successfully");return}let a=te.getAllTablesTemplate(r,n),l=await i.rawQuery(a),u=te.parseGetAllTables(r,n,l);if(!u.length){g.info("No tables to drop");return}let d=te.dropAllTablesTemplate(r,u);if(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 c)await
|
|
120
|
-
`).forEach(r=>{let[n,o]=r.split("="),i=n.trim(),a=o.trim();switch(i){case "DB_TYPE":P.DB_TYPE||(P.DB_TYPE=a);break;case "DB_HOST":P.DB_HOST||(P.DB_HOST=a);break;case "DB_PORT":P.DB_PORT||(P.DB_PORT=a);break;case "DB_USER":P.DB_USER||(P.DB_USER=a);break;case "DB_PASSWORD":P.DB_PASSWORD||(P.DB_PASSWORD=a);break;case "DB_DATABASE":P.DB_DATABASE||(P.DB_DATABASE=a);break;case "MIGRATION_PATH":P.MIGRATION_PATH||(P.MIGRATION_PATH=a||"database/migrations");break;case "REDIS_HOST":P.REDIS_HOST||(P.REDIS_HOST=a);break;case "REDIS_PORT":P.REDIS_PORT||(P.REDIS_PORT=a);break;case "REDIS_USERNAME":P.REDIS_USERNAME||(P.REDIS_USERNAME=a);break;case "REDIS_PASSWORD":P.REDIS_PASSWORD||(P.REDIS_PASSWORD=a);break;case "REDIS_DATABASE":P.REDIS_DATABASE||(P.REDIS_DATABASE=a);break;case "MONGO_URL":P.MONGO_URL||(P.MONGO_URL=a);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":P.MSSQL_TRUST_SERVER_CERTIFICATE||(P.MSSQL_TRUST_SERVER_CERTIFICATE=a==="true");break}});}catch{}finally{return P}},v=ay();var ly=()=>{let s=v.MIGRATION_PATH,t=dt.resolve(process.cwd(),s);return oe.existsSync(t)||oe.mkdirSync(t,{recursive:true}),t},nu=(s,t=false,e="basic",r="table")=>{let n=ly(),o=new Date().getTime(),i=t?`${o}_${s}.js`:`${o}_${s}.ts`,a=dt.join(n,i),l;switch(e){case "alter":l=te.alterMigrationTemplate(t,r);break;case "create":l=te.createMigrationTemplate(t,r);break;default:l=te.basicMigrationTemplate(t);break}oe.writeFileSync(a,l),g.info(`Migration created successfully at '${a}'.`),process.exit(0);};var q=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}},Ot=class extends q{constructor(t){super("ValidationError","VALIDATION_ERROR"),this.errors=t;}};async function cy(s){try{return import(pathToFileURL(s).href)}catch{let e=createRequire(import.meta.url)(s);return {default:e.default||e,...e}}}async function my(s){let{build:t}=await import('esbuild').catch(()=>{throw new Error("esbuild is required to import TypeScript files. Install it with: npm install esbuild -D")}),e=Math.random().toString(36).slice(2,8),r=s.replace(/\.ts$/,`.bundled_${e}.mjs`);try{return await t({entryPoints:[s],bundle:!0,platform:"node",format:"esm",sourcemap:"inline",outfile:r,packages:"external",logLevel:"silent"}),await import(pathToFileURL(r).href)}finally{await oe.promises.unlink(r).catch(()=>{});}}async function ut(s,t){let e=dt.isAbsolute(s)?s:dt.resolve(process.cwd(),s);return e.endsWith(".ts")?my(e):cy(e)}var yy=async(s,t)=>{if(s.endsWith(".ts"))return ut(s);try{return import(pathToFileURL(s).href)}catch{let n=createRequire(import.meta.url);try{let o=n(s);return {default:o.default||o,...o}}catch{throw new q(`MigrationUtils::importMigrationFile Failed to import migration file: ${s}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function ar(s,t){switch(s){case "mariadb":case "mysql":return await t.rawQuery(te.migrationTableTemplateMysql()),(await t.rawQuery(te.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":return await t.rawQuery(te.migrationTableTemplatePg()),(await t.rawQuery(te.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await t.rawQuery(te.migrationTableTemplateSQLite()),await t.rawQuery(te.selectAllFromMigrationsTemplate());case "mssql":return await t.rawQuery(te.migrationTableTemplateMssql()),(await t.rawQuery(te.selectAllFromMigrationsTemplate())).recordset;default:throw new q("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function lr(s,t,e){let r=gy(t),n=[];for(let{name:o,fullPath:i}of r){let a=await hy(i),l=new a(s||v.DB_TYPE);l.migrationName=o,n.push(l);}return n}async function hy(s,t){let e=await yy(s);if(!e.default)throw new q("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}function gy(s){let t=process.cwd(),e=s||v.MIGRATION_PATH||"database/migrations",r=/[*?{}\[\]]/.test(e);if(!r){let i=dt.isAbsolute(e)?e:dt.resolve(t,e);if(!oe.existsSync(i))return oe.mkdirSync(i,{recursive:true}),[]}let n=r?e:dt.join(e,"**/*.{ts,js}"),o=dt.isAbsolute(n)?n:dt.resolve(t,n);try{return oe.globSync(o).filter(a=>oe.statSync(a).isFile()).sort().map(a=>({name:dt.basename(a),fullPath:a}))}catch{return []}}async function At(s,t,e,r,n){let o=s.getDbType(),i=n&&o!=="mssql",a=null;g.info("Running migrations for database type: "+o);try{let l=await ar(o,s),d=(await lr(o,e,r)).filter(c=>!l.map(p=>p.name).includes(c.migrationName));if(!d.length){g.info("No pending migrations.");return}if(t){let c=d.findIndex(f=>f.migrationName===t);if(c===-1){console.error(`Migration ${t} not found.`);return}let p=d.slice(0,c+1);i&&(a=await s.transaction(),s=a.sql),await new Be(s).upMigrations(p),i&&await a?.commit(),g.info("Migrations ran successfully");return}i&&(a=await s.transaction(),s=a.sql),await new Be(s).upMigrations(d),i&&await a?.commit();}catch(l){throw i&&await a?.rollback(),l}g.info("Migrations ran successfully");}se();var ur={string:"string",varchar:"string",char:"string",text:"textarea",longtext:"textarea",mediumtext:"textarea",tinytext:"textarea",integer:"number",int:"number",smallint:"number",bigint:"number",tinyint:"number",mediumint:"number",float:"float",double:"float",decimal:"float",numeric:"float",real:"float",boolean:"boolean",bool:"boolean",date:"date",datetime:"datetime",timestamp:"datetime",time:"string",year:"number",json:"mixed",jsonb:"mixed",uuid:"string",ulid:"string",binary:"string",blob:"string",enum:"string"};var au=null;function Je(s,t){return t.getModelManager(s)}function iu(s,t,e){if(!t||typeof t!="object")return;let r=t;if(!r.filters)return;let n=e.getColumns();for(let[o,i]of Object.entries(r.filters)){let a=i.value;if(a==null||a==="")continue;let l=n.find(m=>m.columnName===o||m.databaseName===o);if(!l)continue;let u=typeof l.type=="string"?l.type:"string",d=ur[u]||"string";if(d==="string"||d==="textarea"){s.whereLike(o,`%${a}%`);continue}if(d==="boolean"){s.where(o,a==="true"||a===true);continue}if(d==="date"||d==="datetime"){if(typeof a=="object"&&a!==null){let m=a;m.from&&s.where(o,">=",m.from),m.to&&s.where(o,"<=",m.to);continue}s.where(o,a);continue}s.where(o,a);}}function Dt(s,t){let e={},r=t.getColumns();for(let n of r){let o=s[n.columnName];e[n.columnName]=o;}return e}async function by(){let s=await import('adminjs').catch(()=>{throw new L("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=s;return class extends t{constructor(o){super(o),this._model=o,this._db=au;}static isAdapterFor(o){if(typeof o!="function")return false;let i=o;return i.prototype!==void 0&&typeof i.table=="string"&&typeof i.getColumns=="function"}databaseName(){return this._db.database||"hysteria"}databaseType(){return this._db.getDbType()}id(){return this._model.table}properties(){return this._model.getColumns().map(i=>{let a=typeof i.type=="string"?i.type:"string",l=ur[a]||"string";return new r({path:i.columnName,type:l,isId:i.isPrimary,isSortable:true})})}property(o){let a=this._model.getColumns().find(d=>d.columnName===o||d.databaseName===o);if(!a)return null;let l=typeof a.type=="string"?a.type:"string",u=ur[l]||"string";return new r({path:a.columnName,type:u,isId:a.isPrimary,isSortable:true})}async count(o){let a=Je(this._model,this._db).query();return iu(a,o,this._model),a.getCount()}async find(o,i={}){let l=Je(this._model,this._db).query();return iu(l,o,this._model),i.limit&&l.limit(i.limit),i.offset&&l.offset(i.offset),i.sort?.sortBy&&l.orderBy(i.sort.sortBy,i.sort.direction||"asc"),(await l.many()).map(d=>new e(Dt(d,this._model),this))}async findOne(o){if(!this._model.primaryKey)return null;let l=await Je(this._model,this._db).findOneByPrimaryKey(o);return l?new e(Dt(l,this._model),this):null}async findMany(o){let i=this._model.primaryKey;return i?(await Je(this._model,this._db).query().whereIn(i,o).many()).map(u=>new e(Dt(u,this._model),this)):[]}async create(o){let a=await Je(this._model,this._db).insert(o,{returning:["*"]});return Dt(a,this._model)}async update(o,i){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=Je(this._model,this._db);if(!await l.findOneByPrimaryKey(o))throw new Error("Record not found");let d=await l.updateRecord(o,i,{returning:["*"]});return Dt(d,this._model)}async delete(o){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=Je(this._model,this._db);await a.findOneByPrimaryKey(o)&&await a.deleteRecord(o);}}}async function Ty(){let s=await import('adminjs').catch(()=>{throw new L("adminjs")}),{BaseDatabase:t}=s;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function wy(){let s=await import('adminjs').catch(()=>{throw new L("adminjs")}),t=await by(),e=await Ty();s.default.registerAdapter({Database:e,Resource:t});}async function Kn(s,t){au=s;let e=await import('adminjs').catch(()=>{throw new L("adminjs")});await wy();let r=t.resources||Object.values(s.models);if(!r.length)throw new Error("No models provided for AdminJS. Please provide models in the resources option or register them in SqlDataSource.");let n=r.map(a=>{let l=t.resourceOptions?.[a.table]||{};return {resource:a,options:l}}),o={rootPath:t.rootPath||"/admin",resources:n};if(t.branding&&(o.branding=t.branding),t.locale?.language&&(o.locale=t.locale),t.assets&&(o.assets=t.assets),t.settings&&(o.settings=t.settings),t.pages){let a={};for(let[l,u]of Object.entries(t.pages))u.component&&(a[l]=u);Object.keys(a).length>0&&(o.pages=a);}return {admin:new e.default(o)}}async function lu(s,t){let{admin:e}=await Kn(s,t),r;try{r=await import('@adminjs/express');}catch{throw new L("@adminjs/express")}let n=r.buildRouter(e);return {admin:e,router:n}}var ct=new Map,Qe=new Map,dr=class{async get(t){return ct.get(t)}async set(t,e,r){let n=Qe.get(t);if(n&&(clearTimeout(n),Qe.delete(t)),ct.set(t,e),r){let o=setTimeout(()=>{ct.delete(t),Qe.delete(t);},r);Qe.set(t,o);}}async invalidate(t){let e=Qe.get(t);e&&(clearTimeout(e),Qe.delete(t)),ct.delete(t);}async invalidateAll(t){let e=ct.keys();for(let r of e)if(r.startsWith(t)){let n=Qe.get(r);n&&(clearTimeout(n),Qe.delete(r)),ct.delete(r);}}};var $t=class{constructor(t){switch(this.type=t?.type||v.DB_TYPE,this.type){case "mongo":this.handleMongoSource(t);break;case "cockroachdb":this.handleCockroachdbSource(t);break;case "postgres":this.handlePostgresSource(t);break;case "mariadb":case "mysql":this.handleMysqlSource(t);break;case "sqlite":this.handleSqliteSource(t);break;case "mssql":this.handleMssqlSource(t);break;default:throw new q(`Invalid database type: ${this.type}, please provide a valid database type in your input or in the .env file with the key DB_TYPE
|
|
121
|
-
Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}let e=rr(this.logs);e?.customLogger&&g.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||v.DB_HOST,this.port=+t?.port||+v.DB_PORT,this.username=t?.username||v.DB_USER,this.password=t?.password||v.DB_PASSWORD,this.database=t?.database||v.DB_DATABASE,this.logs=t?.logs||v.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||v.DB_HOST,this.port=+t?.port||+v.DB_PORT,this.username=t?.username||v.DB_USER,this.password=t?.password||v.DB_PASSWORD,this.database=t?.database||v.DB_DATABASE,this.logs=t?.logs||v.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||v.DB_HOST,this.port=+t?.port||+v.DB_PORT,this.username=t?.username||v.DB_USER,this.password=t?.password||v.DB_PASSWORD,this.database=t?.database||v.DB_DATABASE,this.logs=t?.logs||v.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||v.DB_DATABASE||":memory:",this.logs=t?.logs||v.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||v.MONGO_URL,this.logs=t?.logs||v.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||v.DB_HOST,this.port=+t?.port||+v.DB_PORT,this.username=t?.username||v.DB_USER,this.password=t?.password||v.DB_PASSWORD,this.database=t?.database||v.DB_DATABASE,this.logs=t?.logs||v.DB_LOGS||false,this.port||(this.port=1433);}};var Sy=s=>{let{required:t,...e}=s.openApi||{},r={...e,type:s.openApi?.type||"string",description:s.openApi?.description??`Property: ${s.columnName}`};return s.openApi?.type?{...r,type:s.openApi.type}:Array.isArray(s.type)?{...r,type:"string",enum:s.type}:s.type==="date"||s.type==="datetime"||s.type==="timestamp"||s.type==="time"?{...r,type:"string",format:"date-time"}:s.type==="boolean"?{...r,type:"boolean"}:s.type==="integer"||s.type==="tinyint"||s.type==="smallint"||s.type==="mediumint"||s.type==="increment"?{...r,type:"integer",format:"int32"}:s.type==="biginteger"||s.type==="bigIncrement"?{...r,type:"integer",format:"int64"}:s.type==="float"||s.type==="real"?{...r,type:"number",format:"float"}:s.type==="double"?{...r,type:"number",format:"double"}:s.type==="decimal"||s.type==="numeric"?{...r,type:"number"}:s.type==="json"||s.type==="jsonb"?{...r,type:"object"}:s.type==="uuid"?{...r,type:"string",format:"uuid"}:s.type==="ulid"?{...r,type:"string",format:"ulid"}:s.type==="string"||s.type==="char"||s.type==="varchar"||s.type==="text"||s.type==="longtext"||s.type==="mediumtext"||s.type==="tinytext"?{...r,type:"string"}:s.type==="blob"||s.type==="binary"||s.type==="varbinary"||s.type==="tinyblob"||s.type==="mediumblob"||s.type==="longblob"?{...r,type:"string",format:"binary"}:s.type==="year"?{...r,type:"integer",format:"int32"}:r},Ny=s=>s.openApi?.required??false,qy=s=>{let t=s.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=Sy(r));return e},Cy=s=>{let t=s.getColumns(),e=[];for(let r of t)Ny(r)&&e.push(r.columnName);return e||[]},Ry=s=>{let t=qy(s),e=Cy(s);return {type:"object",properties:t,required:e.length?e:[]}};var uu=s=>s.map(t=>({...Ry(t),modelName:t.table,$id:t.table}));var Ln=(s,t)=>{let e=De.createHash("sha256"),r=s;return e.update(r),e.digest("hex")};var jn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length){let i=[];for(let a of o){let{sql:l}=r.parse([a]);i.push(l);}i.length&&(n+=` ${i.join(" ")}`);}return {sql:`add ${n}`,bindings:[]}}},du=new jn;var Wn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},cu=new Wn;var Fn=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`[${n}]`).join(", ")})`,bindings:[]}}},mu=new Fn;var Un=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),i=o.join(" ");e.newType.dataType==="uuid"&&(i=i.replace(/\s+default\s+.+$/i,"").trim());let a="";e.options.nullable!==void 0&&(a=e.options.nullable?" null":" not null");let l=`alter column [${e.column}] ${i}${a}`;if(e.options.dropDefault&&(l=`drop constraint DF_${e.column}, ${l}`),e.options.default!==void 0&&!e.options.dropDefault){let u=e.options.default;u===null?u="null":typeof u=="string"&&(u==="NULL"?u="null":u==="TRUE"||u==="FALSE"?u=u==="TRUE"?"1":"0":u=`'${u}'`),l+=`, add constraint DF_${e.column} default ${u} for [${e.column}]`;}return e.options.unique!==void 0&&e.options.unique&&(l+=`, add constraint UQ_${e.column} unique ([${e.column}])`),{sql:l,bindings:[]}}},pu=new Un;var S=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var mt=class extends S{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};function cr(s){return typeof s!="string"||!s?s:s.replace(/([a-z])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}function mr(s){return typeof s!="string"||!s?s:s.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function Vn(s){if(typeof s!="string"||!s)return s;let t=mr(s);return t.charAt(0).toUpperCase()+t.slice(1)}function H(s,t){return t==="preserve"?s:t==="snake"?cr(s):t==="camel"?mr(s):t==="pascal"?Vn(s):t instanceof RegExp?s.replace(t,e=>e[1].toUpperCase()):t(s)}var _y=s=>{if(s==null||typeof s!="object"||s instanceof Date)return false;if(Array.isArray(s))return true;let t=Object.getPrototypeOf(s);return t===Object.prototype||t===null},y=class{constructor(t){this.model=t;this.modelColumnsMap=typeof t.getColumnsByName=="function"?t.getColumnsByName():new Map;let e=[];for(let r of this.modelColumnsMap.values())r.expression||(r.type==="ulid"||r.autoCreate==="js")&&e.push(r);this.jsInsertColumns=e;}formatStringColumn(t,e){if(e==="*")return "*";let r=this.resolveComputedExpression(e);if(r!==void 0)return `(${r})`;if(e.includes(".")){let[i,a]=e.split(".");if(a==="*")switch(t){case "mysql":case "mariadb":return `\`${i}\`.*`;case "postgres":case "cockroachdb":case "sqlite":return `"${i}".*`;case "mssql":return `[${i}].*`;default:throw new Error(`Unsupported database type: ${t}`)}let l=this.modelColumnsMap.get(a)?.databaseName??H(a,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${i}\`.\`${l}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${i}"."${l}"`;case "mssql":return `[${i}].[${l}]`;default:throw new Error(`Unsupported database type: ${t}`)}}let o=this.modelColumnsMap.get(e)?.databaseName??H(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${o}"`;case "mssql":return `[${o}]`;default:throw new Error(`Unsupported database type: ${t}`)}}resolveComputedExpression(t){let e=t.includes(".")?t.split(".").pop():t;return this.modelColumnsMap.get(e)?.expression}isComputedColumn(t){return !!this.modelColumnsMap.get(t)?.expression}filterComputedColumns(t){return this.modelColumnsMap.size===0?t:t.filter(e=>!this.isComputedColumn(e))}stripComputedFromData(t){if(this.modelColumnsMap.size===0)return t;let e={};for(let r of Object.keys(t))this.isComputedColumn(r)||(e[r]=t[r]);return e}formatStringColumnBare(t,e){let r=e.includes(".")?e.split(".")[1]:e;return this.formatStringColumn(t,r)}dialectEmitsReturning(t){switch(t){case "postgres":case "cockroachdb":case "sqlite":case "mssql":return true;default:return false}}shouldFetchNatively(t,e){if(!this.dialectEmitsReturning(t)||t==="mssql")return false;if(t==="sqlite"&&e==="update"){for(let r of this.modelColumnsMap.values())if(r.autoUpdate)return false}return true}hasComputedColumn(t){return t.some(e=>this.isComputedColumn(e))}resolveColumnAlias(t,e){let r=this.modelColumnsMap.get(e);if(!r||r.columnName===r.databaseName)return "";switch(t){case "mssql":return ` as [${r.columnName}]`;case "mysql":case "mariadb":return ` as \`${r.columnName}\``;case "postgres":case "cockroachdb":case "sqlite":return ` as "${r.columnName}"`;default:return ""}}formatStringTable(t,e){e=e.replace(/\s+/g," ").trim();let r="";switch(e.toLowerCase().includes(" as ")&&([e,r]=e.split(" as ")),t){case "mysql":case "mariadb":return `\`${e}\`${r?` as \`${r}\``:""}`;case "postgres":case "cockroachdb":case "sqlite":return `"${e}"${r?` as "${r}"`:""}`;case "mssql":return `[${e}]${r?` as [${r}]`:""}`;default:return `${e}${r?` as ${r}`:""}`}}prepareColumns(t,e,r="insert",n="postgres"){if(!t.length)return {columns:t,values:e};let o=[],i=[];for(let l=0;l<t.length;l++){let u=t[l],d=e[l];u!=="*"&&(o.push(u),i.push(d));}let a=n==="mysql"||n==="mariadb";for(let l=0;l<o.length;l++){let u=o[l],d=i[l],m=this.modelColumnsMap.get(u);if(m?.expression){o.splice(l,1),i.splice(l,1),l--;continue}if(!m){_y(d)&&(i[l]=JSON.stringify(d));continue}if(d==null&&(m.autoCreate===true||m.type==="uuid"&&n!=="mysql"&&n!=="mariadb")){o.splice(l,1),i.splice(l,1),l--;continue}if(m.prepare){let c=r==="insert"?m.prepare(d):m.prepare(d)??d;if(c!==null&&typeof c?.then=="function")throw new Error(`hysteria-orm: prepare on column "${u}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);i[l]=c;}}if(r==="insert"){let l=new Set(t);for(let u of this.jsInsertColumns)l.has(u.columnName)||this.generateJsInsertColumn(u,o,i);if(a){let u=this.model.primaryKey;if(u){let d=this.modelColumnsMap.get(u);d&&d.type==="uuid"&&d.isPrimary&&!l.has(u)&&this.generateJsInsertColumn(d,o,i);}}}return {columns:o,values:i}}generateJsInsertColumn(t,e,r){let n=t.prepare?.(void 0);if(n!==null&&typeof n?.then=="function")throw new Error(`hysteria-orm: prepare on column "${t.columnName}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);e.push(t.columnName),r.push(n??void 0);}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new b(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}};var Jn=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};if(e.children.length===1&&e.children[0]instanceof mt){let d=e.children[0];return {sql:`EXEC sp_rename '${e.table}', '${d.newName}'`,bindings:[]}}let o=new b(this.model,"mssql"),i=[],a=[];for(let d of e.children){let{sql:m,bindings:c}=o.parse([d]);i.push(m.trim()),a.push(...c);}let l=i.join(", ");return {sql:`${n} ${l}`,bindings:a}}},fu=new Jn;var Hn=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},yu=new Hn;var zn=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},hu=new zn;var Gn=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},gu=new Gn;var Yn=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] null`,bindings:[]}}},bu=new Yn;var Zn=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},Tu=new Zn;var Xn=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},wu=new Xn;var eo=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},Su=new eo;var A=class extends S{constructor(e){super("raw",true);this.canKeywordBeSeenMultipleTimes=true;this.chainsWith=" ";this.currParamIndex=0;this.isRawValue=true;this.folder="raw";this.file="raw";this.rawValue=e;}};var k=class extends S{constructor(e,r=[]){super("sqlfunc");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="sqlfunc";this.file="sqlfunc";this.fn=e,this.args=r;}};var to=class{toSql(t){let e=t,r;return e.defaultValue instanceof A?r=e.defaultValue.rawValue:e.defaultValue instanceof k?r=new b(this.model,"mssql").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"||e.defaultValue===null?r="null":e.defaultValue==="TRUE"?r="1":e.defaultValue==="FALSE"?r="0":typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="1"&&e.defaultValue!=="0"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`add constraint DF_${e.column} default ${r} for [${e.column}]`,bindings:[]}}},Nu=new to;var ro=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] not null`,bindings:[]}}},qu=new ro;var no=class{toSql(t){return {sql:"",bindings:[]}}},Cu=new no;function oo(s){return s.replace(/^[`"]|[`"]$/g,"")}function so(s,t,e){if(!s.includes(".")){let o=oo(s);return `${t}.${o}`}let[r,n]=s.split(".");return r=oo(r),n=oo(n),r!==e?s:n==="*"?`${t}.*`:`${t}.${n}`}function C(s){return typeof s=="function"?s():s}var j=(s,t=new WeakMap)=>{if(s===null||typeof s!="object")return s;if(t.has(s))return t.get(s);if(Array.isArray(s)){let r=[];t.set(s,r);for(let n=0;n<s.length;n++)r[n]=j(s[n],t);return r}let e=Object.create(Object.getPrototypeOf(s)||{});t.set(s,e);for(let r of Object.getOwnPropertyNames(s)){let n=s[r];if(typeof n=="function"){e[r]=n;continue}e[r]=j(n,t);}return e};var io=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new y(this.model).formatStringColumn("mssql",C(e.column)),o=e.dataType.toLowerCase();if(o==="char"){let a=e.length??1;return {sql:`${n} char(${a})`,bindings:[]}}if(o==="varchar"){let a=e.length??255;return {sql:`${n} varchar(${a})`,bindings:[]}}if(o==="text"||o==="longtext"||o==="mediumtext"||o==="tinytext")return {sql:`${n} varchar(max)`,bindings:[]};if(o==="uuid"){let a=e.isForeignKey?"":" default NEWID()";return {sql:`${n} uniqueidentifier${a}`,bindings:[]}}if(o==="ulid")return {sql:`${n} varchar(26)`,bindings:[]};if(o==="bigint")return e.autoIncrement?{sql:`${n} bigint identity(1,1)`,bindings:[]}:{sql:`${n} bigint`,bindings:[]};if(o==="tinyint")return {sql:`${n} tinyint`,bindings:[]};if(o==="smallint")return {sql:`${n} smallint`,bindings:[]};if(o==="mediumint")return {sql:`${n} int`,bindings:[]};if(o==="float"||o==="real")return {sql:`${n} real`,bindings:[]};if(o==="double")return {sql:`${n} float`,bindings:[]};if(o==="decimal"||o==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${n} decimal(${a}, ${l})`,bindings:[]}}if(o==="date")return {sql:`${n} date`,bindings:[]};if(o==="year")return {sql:`${n} smallint`,bindings:[]};if(o==="time"){let a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${n} time${a}`,bindings:[]}}if(o==="datetime"||o==="timestamp"){let a=typeof e.precision=="number"?`(${e.precision})`:"",l=`${n} datetime2${a}`;return e.autoCreate&&(l+=" default current_timestamp"),{sql:l,bindings:[]}}if(o==="boolean"||o==="bool")return {sql:`${n} bit`,bindings:[]};if(o==="bytea"||o==="binary"||o==="varbinary"||o==="blob"||o==="longblob"||o==="mediumblob"||o==="tinyblob")return {sql:`${n} varbinary(max)`,bindings:[]};if(o==="json"||o==="jsonb")return {sql:`${n} nvarchar(max)`,bindings:[]};if(o==="enum"){if(e.enumValues&&e.enumValues.length>0){let a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${n} varchar(255) check (${n} in (${a}))`,bindings:[]}}return {sql:`${n} varchar(255)`,bindings:[]}}if(o==="integer"||o==="int")return e.autoIncrement?{sql:`${n} int identity(1,1)`,bindings:[]}:{sql:`${n} int`,bindings:[]};if(o==="geometry")return {sql:`${n} geometry`,bindings:[]};if(o==="point")return {sql:`${n} geometry`,bindings:[]};if(o==="linestring")return {sql:`${n} geometry`,bindings:[]};if(o==="polygon")return {sql:`${n} geometry`,bindings:[]};if(o==="multipoint")return {sql:`${n} geometry`,bindings:[]};let i=e.length?`(${e.length})`:"";return {sql:`${n} ${o}${i}`,bindings:[]}}},Ru=new io;var ao=class{toSql(t){return {sql:"",bindings:[]}}},Mu=new ao;var lo=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let n=e.constraintName?`constraint [${e.constraintName}] `:"",o=(e.columns??[]).map(i=>r.formatStringColumn("mssql",C(i))).join(", ");return {sql:`${n}primary key (${o})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns??[],o=e.constraintName?`constraint [${e.constraintName}] `:"",i=n.map(a=>r.formatStringColumn("mssql",C(a))).join(", ");return e.constraintName?{sql:`${o}unique (${i})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let n=e.defaultValue;return n instanceof A?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof k?{sql:`default ${new b(this.model,"mssql").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"?{sql:"default 1",bindings:[]}:n==="FALSE"?{sql:"default 0",bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let n=e.columns.map(u=>r.formatStringColumn("mssql",C(u))).join(", ");if(!e.references)return {sql:"",bindings:[]};let o=r.formatStringTable("mssql",e.references.table),i=e.references.columns.map(u=>r.formatStringColumn("mssql",C(u))).join(", "),l=`${e.constraintName?`constraint [${e.constraintName}] `:""}foreign key (${n}) references ${o}(${i})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint [${e.constraintName}] `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},_u=new lo;var uo=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mssql"),i=[],a=[];for(let h of e.children){let{sql:f,bindings:T}=o.parse([h]);if(h.folder==="constraint"){let N=i.pop()??"",w=f;if(/not null/i.test(w)||/null/i.test(w)||/default/i.test(w)){let R=`${N} ${w}`.trim();R=R.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),i.push(R),a.push(...T);continue}i.push(N),i.push(w),a.push(...T);continue}i.push(f),a.push(...T);}for(let h of e.namedConstraints){let{sql:f,bindings:T}=o.parse([h]);i.push(f),a.push(...T);}let l=i.join(", "),u=[];e.dataCompression&&u.push(`DATA_COMPRESSION = ${e.dataCompression}`);let d=e.onFilegroup?` ON [${e.onFilegroup}]`:"",m=e.textImageOn?` TEXTIMAGE_ON [${e.textImageOn}]`:"",c=u.length>0?` WITH (${u.join(", ")})`:"";return {sql:`${n} (${l})${c}${d}${m}`,bindings:a}}},xu=new uo;var co=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("mssql",e.fromNode),bindings:[]}}},Ou=new co;var mo=class{toSql(t){return {sql:"",bindings:[]}}},Au=new mo;var po=class{toSql(t){return g.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},Du=new po;var fo=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},$u=new fo;var yo=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Pu=new yo;var ho=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mssql",e.table)} as [${e.alias}]`,bindings:[]}:{sql:a.formatStringTable("mssql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"mssql").parse(r),i=e.alias&&e.alias.length?` as [${e.alias}]`:"";return {sql:`(${o.sql})${i}`,bindings:o.bindings}}},vu=new ho;var go=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},Iu=new go;var bo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(!(e.value instanceof S)&&!Array.isArray(e.value)&&(n=`${new y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} @${r}`,o=[e.value]),Array.isArray(e.value)){let i=e.value.map((a,l)=>`@${r+l}`).join(", ");n=`${new y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} (${i})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},Eu=new bo;var To=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table),o=e.columns.map(a=>`[${a}]`).join(", ");return {sql:`${e.unique?"unique ":""}[${e.indexName}] on ${n} (${o})`,bindings:[]}}},ku=new To;var wo=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},Bu=new wo;var So=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],i=Object.keys(o).filter(c=>o[c]!==void 0);if(!i.length)return {sql:n,bindings:[]};let a=i.map(c=>r.formatStringColumn("mssql",c)).join(", "),l=[],u=[],d=e.currParamIndex;for(let c of e.records){let p=i.map(f=>c[f]),h=[];for(let f of p)f instanceof A?h.push(f.rawValue):(l.push(f),h.push(`@${d++}`));u.push(`(${h.join(", ")})`);}let m=`${n} (${a}) values ${u.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let c=e.returning.map(p=>`inserted.${r.formatStringColumn("mssql",p)}${r.resolveColumnAlias("mssql",p)}`).join(", ");m=m.replace(") values",`) output ${c} values`);}else {let c=this.getOutputColumns(i,r);m=m.replace(") values",`) output ${c} values`);}return {sql:m,bindings:l}}getOutputColumns(t,e){let r=[...t],n=this.model.primaryKey;return n&&!t.includes(n)&&r.push(n),r.map(o=>`inserted.${e.formatStringColumn("mssql",o)}${e.resolveColumnAlias("mssql",o)}`).join(", ")}},Qu=new So;var No=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let i=r.formatStringColumn("mssql",n),a=r.formatStringColumn("mssql",o),u=`${r.formatStringTable("mssql",e.table)} on ${i} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let m=new b(this.model,"mssql");for(let c of e.additionalConditions){let p=m.parse([c]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},Ku=new No;var qo=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},Lu=new qo;var Co=class{toSql(t){return {sql:"",bindings:[]}}},ju=new Co;var Ro=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},Wu=new Ro;var Mo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:(g.warn("MSSQL does not support ON CONFLICT or ON DUPLICATE KEY. Use MERGE statement for upsert operations. This clause will be ignored. Consider using raw queries for MSSQL upserts."),{sql:"",bindings:[]})}},Fu=new Mo;var _o=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("mssql",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},Uu=new _o;var xo=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Vu=new xo;var Oo=class{toSql(t){let e=t,r=new y(this.model);return {sql:`output ${!e.columns.length||e.columns.includes("*")?`${e.prefix}.*`:e.columns.map(o=>`${e.prefix}.${r.formatStringColumn("mssql",o)}${r.resolveColumnAlias("mssql",o)}`).join(", ")}`,bindings:[]}}},Ju=new Oo;var Ao=class{toSql(t){return {sql:`SELECT
|
|
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 or(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 cy=i=>{i[6]=i[6]&15|64,i[8]=i[8]&63|128;let t=ke(i);return [t.slice(0,8),t.slice(8,12),t.slice(12,16),t.slice(16,20),t.slice(20)].join("-")},ru=i=>{let t=globalThis.crypto;if(!t||typeof t.getRandomValues!="function")throw new lt("crypto.getRandomValues \u2014 browsers require a secure context (HTTPS); React Native requires react-native-get-random-values or expo-crypto");return t.getRandomValues(i)},En=class{unsupported(t){throw new lt(`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")}},kn=class{join(...t){return t.filter(Boolean).join("/").replace(/\/+/g,"/")}dirname(t){let e=t.lastIndexOf("/");return e<=0?".":t.slice(0,e)}basename(t,e){let r=t.slice(t.lastIndexOf("/")+1);return e&&r.endsWith(e)?r.slice(0,-e.length):r}resolve(...t){let e=t.filter(Boolean).join("/").replace(/\/+/g,"/");return e.startsWith("/")?e:`/${e}`}},Ee=class{constructor(){this.name="web";this.crypto={randomUUID:()=>{let t=globalThis.crypto;return typeof t?.randomUUID=="function"?t.randomUUID():cy(ru(new Uint8Array(16)))},randomBytes:t=>ru(new Uint8Array(t))};this.timing={now:()=>globalThis.performance.now()};this.fs=new En;this.path=new kn;}readEnv(t){}};var ut=class extends Ee{constructor(){super(...arguments);this.name="node";this.fs={exists:e=>oe.existsSync(e),readFileSync:e=>oe.existsSync(e)?new Uint8Array(oe.readFileSync(e)):null,readFile:async e=>promises.readFile(e,"utf8"),readdir:e=>promises.readdir(e),mkdir:async(e,r)=>{await promises.mkdir(e,{recursive:r?.recursive});},writeFile:async(e,r)=>{await promises.writeFile(e,r);},rm:async(e,r)=>{await promises.rm(e,{recursive:r?.recursive,force:r?.force});}};this.path=ct;}readEnv(e){return typeof process>"u"?void 0:process.env[e]}};var Kn=()=>import('bun'),sr=class extends ut{constructor(){super();this.name="bun";let e=this.fs;this.fs={...e,readFile:async r=>(await Kn()).file(r).text(),readdir:async r=>{let n=await Kn(),o=[];for await(let s of new n.Glob("*").scan({cwd:r}))o.push(s);return o},writeFile:async(r,n)=>{await(await Kn()).write(r,n);}};}};var ir=class extends Ee{constructor(){super(...arguments);this.name="react-native";}};var lt=class extends Error{constructor(t){super(`Platform does not support: ${t}`),this.name="PlatformUnsupportedError";}},ke=i=>{let t="";for(let e of i)t+=e.toString(16).padStart(2,"0");return t},nu=new Map,py=i=>{switch(i){case "bun":return new sr;case "node":return new ut;case "react-native":return new ir;default:return new Ee}};function re(i){let t=or(i),e=nu.get(t);return e||(e=py(t),nu.set(t,e)),e}var X=re(),v={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},fy=()=>{try{if(!X.fs.exists(".env"))return v;let i=X.fs.readFileSync(".env");if(!i)return v;new TextDecoder().decode(i).split(`
|
|
120
|
+
`).forEach(r=>{let[n,o]=r.split("="),s=n.trim(),a=o.trim();switch(s){case "DB_TYPE":v.DB_TYPE||(v.DB_TYPE=a);break;case "DB_HOST":v.DB_HOST||(v.DB_HOST=a);break;case "DB_PORT":v.DB_PORT||(v.DB_PORT=a);break;case "DB_USER":v.DB_USER||(v.DB_USER=a);break;case "DB_PASSWORD":v.DB_PASSWORD||(v.DB_PASSWORD=a);break;case "DB_DATABASE":v.DB_DATABASE||(v.DB_DATABASE=a);break;case "MIGRATION_PATH":v.MIGRATION_PATH||(v.MIGRATION_PATH=a||"database/migrations");break;case "REDIS_HOST":v.REDIS_HOST||(v.REDIS_HOST=a);break;case "REDIS_PORT":v.REDIS_PORT||(v.REDIS_PORT=a);break;case "REDIS_USERNAME":v.REDIS_USERNAME||(v.REDIS_USERNAME=a);break;case "REDIS_PASSWORD":v.REDIS_PASSWORD||(v.REDIS_PASSWORD=a);break;case "REDIS_DATABASE":v.REDIS_DATABASE||(v.REDIS_DATABASE=a);break;case "MONGO_URL":v.MONGO_URL||(v.MONGO_URL=a);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":v.MSSQL_TRUST_SERVER_CERTIFICATE||(v.MSSQL_TRUST_SERVER_CERTIFICATE=a==="true");break}});}catch{}finally{return v}},I=fy();var yy=()=>{let i=I.MIGRATION_PATH,t=ct.resolve(process.cwd(),i);return oe.existsSync(t)||oe.mkdirSync(t,{recursive:true}),t},su=(i,t=false,e="basic",r="table")=>{let n=yy(),o=new Date().getTime(),s=t?`${o}_${i}.js`:`${o}_${i}.ts`,a=ct.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}oe.writeFileSync(a,l),g.info(`Migration created successfully at '${a}'.`),process.exit(0);};var q=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}},At=class extends q{constructor(t){super("ValidationError","VALIDATION_ERROR"),this.errors=t;}};async function by(i){try{return import(pathToFileURL(i).href)}catch{let e=createRequire(import.meta.url)(i);return {default:e.default||e,...e}}}async function Ty(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 oe.promises.unlink(r).catch(()=>{});}}async function dt(i,t){let e=ct.isAbsolute(i)?i:ct.resolve(process.cwd(),i);return e.endsWith(".ts")?Ty(e):by(e)}var Ny=async(i,t)=>{if(i.endsWith(".ts"))return dt(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 q(`MigrationUtils::importMigrationFile Failed to import migration file: ${i}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function lr(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 q("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function ur(i,t,e){let r=Cy(t),n=[];for(let{name:o,fullPath:s}of r){let a=await qy(s),l=new a(i||I.DB_TYPE);l.migrationName=o,n.push(l);}return n}async function qy(i,t){let e=await Ny(i);if(!e.default)throw new q("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}function Cy(i){let t=process.cwd(),e=i||I.MIGRATION_PATH||"database/migrations",r=/[*?{}\[\]]/.test(e);if(!r){let s=ct.isAbsolute(e)?e:ct.resolve(t,e);if(!oe.existsSync(s))return oe.mkdirSync(s,{recursive:true}),[]}let n=r?e:ct.join(e,"**/*.{ts,js}"),o=ct.isAbsolute(n)?n:ct.resolve(t,n);try{return oe.globSync(o).filter(a=>oe.statSync(a).isFile()).sort().map(a=>({name:ct.basename(a),fullPath:a}))}catch{return []}}async function Dt(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 lr(o,i),d=(await ur(o,e,r)).filter(c=>!l.map(p=>p.name).includes(c.migrationName));if(!d.length){g.info("No pending migrations.");return}if(t){let c=d.findIndex(f=>f.migrationName===t);if(c===-1){console.error(`Migration ${t} not found.`);return}let p=d.slice(0,c+1);s&&(a=await i.transaction(),i=a.sql),await new Be(i).upMigrations(p),s&&await a?.commit(),g.info("Migrations ran successfully");return}s&&(a=await i.transaction(),i=a.sql),await new Be(i).upMigrations(d),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}g.info("Migrations ran successfully");}se();var dr={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 uu=null;function He(i,t){return t.getModelManager(i)}function lu(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=dr[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 $t(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 Ry(){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=uu;}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=dr[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=dr[l]||"string";return new r({path:a.columnName,type:u,isId:a.isPrimary,isSortable:true})}async count(o){let a=He(this._model,this._db).query();return lu(a,o,this._model),a.getCount()}async find(o,s={}){let l=He(this._model,this._db).query();return lu(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($t(d,this._model),this))}async findOne(o){if(!this._model.primaryKey)return null;let l=await He(this._model,this._db).findOneByPrimaryKey(o);return l?new e($t(l,this._model),this):null}async findMany(o){let s=this._model.primaryKey;return s?(await He(this._model,this._db).query().whereIn(s,o).many()).map(u=>new e($t(u,this._model),this)):[]}async create(o){let a=await He(this._model,this._db).insert(o,{returning:["*"]});return $t(a,this._model)}async update(o,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=He(this._model,this._db);if(!await l.findOneByPrimaryKey(o))throw new Error("Record not found");let d=await l.updateRecord(o,s,{returning:["*"]});return $t(d,this._model)}async delete(o){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=He(this._model,this._db);await a.findOneByPrimaryKey(o)&&await a.deleteRecord(o);}}}async function _y(){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 My(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),t=await Ry(),e=await _y();i.default.registerAdapter({Database:e,Resource:t});}async function Ln(i,t){uu=i;let e=await import('adminjs').catch(()=>{throw new L("adminjs")});await My();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 du(i,t){let{admin:e}=await Ln(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 mt=new Map,Ke=new Map,cr=class{async get(t){return mt.get(t)}async set(t,e,r){let n=Ke.get(t);if(n&&(clearTimeout(n),Ke.delete(t)),mt.set(t,e),r){let o=setTimeout(()=>{mt.delete(t),Ke.delete(t);},r);Ke.set(t,o);}}async invalidate(t){let e=Ke.get(t);e&&(clearTimeout(e),Ke.delete(t)),mt.delete(t);}async invalidateAll(t){let e=mt.keys();for(let r of e)if(r.startsWith(t)){let n=Ke.get(r);n&&(clearTimeout(n),Ke.delete(r)),mt.delete(r);}}};var Pt=class{constructor(t){switch(this.type=t?.type||I.DB_TYPE,this.type){case "mongo":this.handleMongoSource(t);break;case "cockroachdb":this.handleCockroachdbSource(t);break;case "postgres":this.handlePostgresSource(t);break;case "mariadb":case "mysql":this.handleMysqlSource(t);break;case "sqlite":this.handleSqliteSource(t);break;case "mssql":this.handleMssqlSource(t);break;default:throw new q(`Invalid database type: ${this.type}, please provide a valid database type in your input or in the .env file with the key DB_TYPE
|
|
121
|
+
Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}let e=nr(this.logs);e?.customLogger&&g.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||I.DB_DATABASE||":memory:",this.logs=t?.logs||I.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||I.MONGO_URL,this.logs=t?.logs||I.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||I.DB_HOST,this.port=+t?.port||+I.DB_PORT,this.username=t?.username||I.DB_USER,this.password=t?.password||I.DB_PASSWORD,this.database=t?.database||I.DB_DATABASE,this.logs=t?.logs||I.DB_LOGS||false,this.port||(this.port=1433);}};var xy=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},Oy=i=>i.openApi?.required??false,Ay=i=>{let t=i.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=xy(r));return e},Dy=i=>{let t=i.getColumns(),e=[];for(let r of t)Oy(r)&&e.push(r.columnName);return e||[]},$y=i=>{let t=Ay(i),e=Dy(i);return {type:"object",properties:t,required:e.length?e:[]}};var cu=i=>i.map(t=>({...$y(t),modelName:t.table,$id:t.table}));var Fn=(i,t)=>{let e=De.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var jn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length){let 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:[]}}},mu=new jn;var Wn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},pu=new Wn;var Un=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`[${n}]`).join(", ")})`,bindings:[]}}},fu=new Un;var Vn=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:[]}}},yu=new Vn;var S=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var pt=class extends S{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};function mr(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 pr(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function Jn(i){if(typeof i!="string"||!i)return i;let t=pr(i);return t.charAt(0).toUpperCase()+t.slice(1)}function H(i,t){return t==="preserve"?i:t==="snake"?mr(i):t==="camel"?pr(i):t==="pascal"?Jn(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}function Ce(i){return String(i).padStart(2,"0")}function vy(i,t){let e=i.getFullYear(),r=Ce(i.getMonth()+1),n=Ce(i.getDate()),o=Ce(i.getHours()),s=Ce(i.getMinutes()),a=Ce(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 hu(i,t){let e=i.getUTCFullYear(),r=Ce(i.getUTCMonth()+1),n=Ce(i.getUTCDate()),o=Ce(i.getUTCHours()),s=Ce(i.getUTCMinutes()),a=Ce(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 ie=(i,t="ISO",e="UTC")=>{if(!(i instanceof Date)||isNaN(i.getTime()))throw new Error("Invalid date provided");return e==="LOCAL"?vy(i,t):hu(i,t)};var ft=(i=new Date)=>hu(i,"ISO");var Iy=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},Hn=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="";switch(e.toLowerCase().includes(" as ")&&([e,r]=e.split(" as ")),t){case "mysql":case "mariadb":return `\`${e}\`${r?` as \`${r}\``:""}`;case "postgres":case "cockroachdb":case "sqlite":return `"${e}"${r?` as "${r}"`:""}`;case "mssql":return `[${e}]${r?` as [${r}]`:""}`;default:return `${e}${r?` as ${r}`:""}`}}prepareColumns(t,e,r="insert",n="postgres"){if(!t.length)return {columns:t,values:e};let o=[],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(!m){Iy(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&&Hn(m)&&(s[l]=ie(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&&Hn(u)?ie(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&&Hn(t)?ie(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})`}};var zn=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 pt){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}}},gu=new zn;var Gn=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},bu=new Gn;var Yn=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},Tu=new Yn;var Zn=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},wu=new Zn;var Xn=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:[]}}},Su=new Xn;var eo=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},Nu=new eo;var to=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},qu=new to;var ro=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},Cu=new ro;var A=class extends S{constructor(e){super("raw",true);this.canKeywordBeSeenMultipleTimes=true;this.chainsWith=" ";this.currParamIndex=0;this.isRawValue=true;this.folder="raw";this.file="raw";this.rawValue=e;}};var $=class extends S{constructor(e,r=[]){super("sqlfunc");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="sqlfunc";this.file="sqlfunc";this.fn=e,this.args=r;}};var Ru=new Map;function Qe(i,t){let e=i===void 0?void 0:Ru.get(i),r=Ru.get("*");return e?.(t)??r?.(t)}var no=class{toSql(t){let e=t,r;return e.defaultValue instanceof A?r=e.defaultValue.rawValue:e.defaultValue instanceof $?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:[]}}},_u=new no;var oo=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:[]}}},Mu=new oo;var so=class{toSql(t){return {sql:"",bindings:[]}}},xu=new so;function io(i){return i.replace(/^[`"]|[`"]$/g,"")}function ao(i,t,e){if(!i.includes(".")){let o=io(i);return `${t}.${o}`}let[r,n]=i.split(".");return r=io(r),n=io(n),r!==e?i:n==="*"?`${t}.*`:`${t}.${n}`}function C(i){return typeof i=="function"?i():i}var F=(i,t=new WeakMap)=>{if(i===null||typeof i!="object")return i;if(t.has(i))return t.get(i);if(Array.isArray(i)){let r=[];t.set(i,r);for(let n=0;n<i.length;n++)r[n]=F(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]=F(n,t);}return e};var lo=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:[]}}},Ou=new lo;var uo=class{toSql(t){return {sql:"",bindings:[]}}},Au=new uo;var co=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 A?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof $?{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:[]}}},Du=new co;var mo=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:T}=o.parse([h]);if(h.folder==="constraint"){let N=s.pop()??"",w=f;if(/not null/i.test(w)||/null/i.test(w)||/default/i.test(w)){let R=`${N} ${w}`.trim();R=R.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(R),a.push(...T);continue}s.push(N),s.push(w),a.push(...T);continue}s.push(f),a.push(...T);}for(let h of e.namedConstraints){let{sql:f,bindings:T}=o.parse([h]);s.push(f),a.push(...T);}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}}},$u=new mo;var po=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:[]}}},Pu=new po;var fo=class{toSql(t){return {sql:"",bindings:[]}}},vu=new fo;var yo=class{toSql(t){return g.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},Iu=new yo;var ho=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Eu=new ho;var go=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},ku=new go;var bo=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mssql",e.table)} as [${e.alias}]`,bindings:[]}:{sql:a.formatStringTable("mssql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"mssql").parse(r),s=e.alias&&e.alias.length?` as [${e.alias}]`:"";return {sql:`(${o.sql})${s}`,bindings:o.bindings}}},Bu=new bo;var To=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},Ku=new To;var wo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(e.value instanceof $){let s=new b(this.model,"mssql").parse([e.value],1,true).sql;n=`${new y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${s}`,o=[];}else !(e.value instanceof S)&&!Array.isArray(e.value)&&(n=`${new y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} @${r}`,o=[e.value]);if(Array.isArray(e.value)){let s=e.value.map((a,l)=>`@${r+l}`).join(", ");n=`${new y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} (${s})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},Qu=new wo;var So=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:[]}}},Lu=new So;var No=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},Fu=new No;var qo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],s=Object.keys(o).filter(c=>o[c]!==void 0);if(!s.length)return {sql:n,bindings:[]};let a=s.map(c=>r.formatStringColumn("mssql",c)).join(", "),l=[],u=[],d=e.currParamIndex;for(let c of e.records){let p=s.map(f=>c[f]),h=[];for(let f of p)f instanceof A?h.push(f.rawValue):(l.push(f),h.push(`@${d++}`));u.push(`(${h.join(", ")})`);}let m=`${n} (${a}) values ${u.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let c=e.returning.map(p=>`inserted.${r.formatStringColumn("mssql",p)}${r.resolveColumnAlias("mssql",p)}`).join(", ");m=m.replace(") values",`) output ${c} values`);}else {let c=this.getOutputColumns(s,r);m=m.replace(") values",`) output ${c} values`);}return {sql:m,bindings:l}}getOutputColumns(t,e){let r=[...t],n=this.model.primaryKey;return n&&!t.includes(n)&&r.push(n),r.map(o=>`inserted.${e.formatStringColumn("mssql",o)}${e.resolveColumnAlias("mssql",o)}`).join(", ")}},ju=new qo;var Co=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let s=r.formatStringColumn("mssql",n),a=r.formatStringColumn("mssql",o),u=`${r.formatStringTable("mssql",e.table)} on ${s} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let m=new b(this.model,"mssql");for(let c of e.additionalConditions){let p=m.parse([c]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},Wu=new Co;var Ro=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},Uu=new Ro;var _o=class{toSql(t){return {sql:"",bindings:[]}}},Vu=new _o;var Mo=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},Ju=new Mo;var xo=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:[]})}},Hu=new xo;var Oo=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:[]}}},zu=new Oo;var Ao=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Gu=new Ao;var Do=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:[]}}},Yu=new Do;var $o=class{toSql(t){return {sql:`SELECT
|
|
122
122
|
cc.name AS name,
|
|
123
123
|
cc.definition AS expression
|
|
124
124
|
FROM sys.check_constraints cc
|
|
125
125
|
JOIN sys.tables t ON cc.parent_object_id = t.object_id
|
|
126
|
-
WHERE t.name = '${t.table}'`,bindings:[]}}},
|
|
126
|
+
WHERE t.name = '${t.table}'`,bindings:[]}}},Zu=new $o;var Po=class{toSql(t){return {sql:`SELECT
|
|
127
127
|
fk.name as name,
|
|
128
128
|
c.name as column_name,
|
|
129
129
|
rt.name as referenced_table,
|
|
@@ -135,7 +135,7 @@ INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_i
|
|
|
135
135
|
INNER JOIN sys.columns c ON fkc.parent_object_id = c.object_id AND fkc.parent_column_id = c.column_id
|
|
136
136
|
INNER JOIN sys.tables rt ON fkc.referenced_object_id = rt.object_id
|
|
137
137
|
INNER JOIN sys.columns rc ON fkc.referenced_object_id = rc.object_id AND fkc.referenced_column_id = rc.column_id
|
|
138
|
-
WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},
|
|
138
|
+
WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},Xu=new Po;var vo=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 vo;var Io=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:[]}}},td=new Io;var Eo=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:[]}}},rd=new Eo;var ko=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:[]}}},nd=new ko;var Bo=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:[]}}},od=new Bo;var Ko=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = '${t.table}' AND CONSTRAINT_TYPE = 'PRIMARY KEY'`,bindings:[]}}},sd=new Ko;var Qo=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = '${t.table}'`,bindings:[]}}},id=new Qo;var Lo=class{toSql(t){return {sql:`SELECT
|
|
139
139
|
i.name as index_name,
|
|
140
140
|
c.name as column_name,
|
|
141
141
|
i.is_unique as is_unique
|
|
@@ -144,7 +144,7 @@ INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = i
|
|
|
144
144
|
INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
|
|
145
145
|
WHERE i.object_id = OBJECT_ID('${t.table}')
|
|
146
146
|
AND i.is_primary_key = 0
|
|
147
|
-
AND i.type > 0`,bindings:[]}}},
|
|
147
|
+
AND i.type > 0`,bindings:[]}}},ad=new Lo;var Fo=class{toSql(t){return {sql:`SELECT
|
|
148
148
|
tc.CONSTRAINT_NAME as name,
|
|
149
149
|
kcu.COLUMN_NAME as column_name
|
|
150
150
|
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
|
|
@@ -152,7 +152,7 @@ JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
|
|
|
152
152
|
ON tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
|
|
153
153
|
WHERE tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
|
|
154
154
|
AND tc.TABLE_NAME = '${t.table}'
|
|
155
|
-
ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},
|
|
155
|
+
ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},ld=new Fo;var jo=class{toSql(t){return {sql:`SELECT
|
|
156
156
|
c.COLUMN_NAME as column_name,
|
|
157
157
|
c.DATA_TYPE as data_type,
|
|
158
158
|
c.IS_NULLABLE as is_nullable,
|
|
@@ -162,7 +162,7 @@ ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},od=new Ko;var Lo=class{toSql(t){re
|
|
|
162
162
|
c.NUMERIC_SCALE as numeric_scale
|
|
163
163
|
FROM INFORMATION_SCHEMA.COLUMNS c
|
|
164
164
|
WHERE c.TABLE_NAME = '${t.table}'
|
|
165
|
-
ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},sd=new Lo;var jo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new y(this.model).formatStringColumn("mssql",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"mssql").parse(t),i=`(${o.sql})`;return e&&(i=`${e.toLowerCase()}${i}`),{sql:i,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"mssql").parse([t]),i=`(${o.sql})`;return e&&(i=`${e.toLowerCase()}${i}`),{sql:i,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new y(this.model).formatStringColumn("mssql",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"mssql").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},id=new jo;var qe=class s{constructor(t){this.segments=this.normalize(t);}normalize(t){if(Array.isArray(t))return t;if(typeof t=="string"){if(!t||t==="$")return [];let e=t.trim();return e=e.startsWith("$.")?e.slice(2):e,e=e.startsWith("$")?e.slice(1):e,e=e.startsWith(".")?e.slice(1):e,e?e.split(".").map(r=>{let n=Number(r);return isNaN(n)?r:n}):[]}return []}getSegments(){return [...this.segments]}isEmpty(){return this.segments.length===0}toPostgres(t=false){if(this.isEmpty())return "";let e=[];for(let r=0;r<this.segments.length;r++){let n=this.segments[r],o=r===this.segments.length-1,i=typeof n=="number";o&&t?e.push(i?`->>${n}`:`->>'${n}'`):e.push(i?`->${n}`:`->'${n}'`);}return e.join("")}toStandardJsonPath(){return this.isEmpty()?"$":`$.${this.segments.join(".")}`}toMysql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments){if(typeof e=="number"){t.push(`[${e}]`);continue}t.push(`.${e}`);}return t.join("")}toSqlite(){return this.toStandardJsonPath()}toMssql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments)typeof e=="number"?t.push(`[${e}]`):t.push(`.${e}`);return t.join("")}toDbSyntax(t,e=false){switch(t){case "postgres":case "cockroachdb":return this.toPostgres(e);case "mysql":case "mariadb":return this.toMysql();case "sqlite":return this.toSqlite();case "mssql":return this.toMssql();default:return this.toStandardJsonPath()}}static from(t){return new s(t)}static root(){return new s("")}};var Wo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("mssql",e.column),n=qe.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMssql();return r==="$"?t:`JSON_VALUE(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toMssql();return `(SELECT COUNT(*) FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}buildObjectKeysSql(t,e){let r=e.toMssql();return `(SELECT [key] FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}formatWithAlias(t,e){return e&&e.length>0?`${t} as [${e}]`:t}},ad=new Wo;var Fo=class{toSql(t){let e=t,r=this.renderToken(e.fn);if(r!==void 0)return {sql:r,bindings:[]};let n=e.args.map(o=>o instanceof A?o.rawValue:o instanceof k?this.toSql(o).sql:typeof o=="number"?String(o):`'${o}'`).join(", ");return {sql:`${e.fn}(${n})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "NEWID()";case "$now":case "$currentTimestamp":return "current_timestamp";default:return}}},ld=new Fo;var Uo=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:`table ${new y(this.model).getFromForWriteOperations("mssql",e.fromNode)}`,bindings:[]}}},ud=new Uo;var Vo=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},dd=new Vo;var Jo=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=0,i=[],a=e.columns.map((u,d)=>{let m=e.currParamIndex+d-o,c=e.values[d];if(c instanceof A)return o++,`${r.formatStringColumn("mssql",u)} = ${c.rawValue}`;if(c instanceof k){o++;let p=new b(this.model,"mssql").parse([c],1,true).sql;return `${r.formatStringColumn("mssql",u)} = ${p}`}return i.push(c),`${r.formatStringColumn("mssql",u)} = @${m}`}).join(", ");return {sql:`${n} set ${a}`,bindings:i}}},cd=new Jo;var Ho=class{toSql(t){let e=t;if(e.isRawValue){let a=e.value??[];if(a.length===0)return {sql:e.column,bindings:[]};let l=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`@${l++}`),bindings:a}}let r=e.value,n=e.currParamIndex;if(this.isRawNode(r)){let a=this.formatRawIdentifierIfPossible(r.rawValue);return {sql:`${new y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`.trim(),bindings:[]}}if(Array.isArray(r)){let a=new y(this.model).formatStringColumn("mssql",e.column);if(e.operator.toLowerCase()==="between"){let d=`@${n} AND @${n+1}`,m=`${a} between ${d}`;return e.isNegated&&(m=`not (${m})`),{sql:m.trim(),bindings:r}}let l=r.map((d,m)=>`@${n+m}`).join(", "),u=`${a} ${e.operator} (${l})`;return e.isNegated&&(u=`not (${u})`),{sql:u.trim(),bindings:r}}let o=new y(this.model).formatStringColumn("mssql",e.column);if(e.operator.includes("null")){let a=`${o} ${e.operator}`;return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:[]}}if(r===void 0)return {sql:"",bindings:[]};let i=`${o} ${e.operator} @${n}`;return e.isNegated&&(i=`not (${i})`),{sql:i.trim(),bindings:[r]}}isRawNode(t){if(!t||!(typeof t=="object"))return false;let r="rawValue"in t,n=t.isRawValue===true;return r&&n}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("mssql",t):t}},md=new Ho;var zo=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"mssql"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},pd=new zo;var Go=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],i=new y(this.model).formatStringColumn("mssql",e.column);switch(e.jsonOperator){case "=":n=`${i} = @${r}`,o=[JSON.stringify(e.value)];break;case "contains":case "not contains":n=`CHARINDEX(@${r}, ${i}) > 0`,o=[JSON.stringify(e.value)];break;case "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`NOT (${n})`),{sql:n.trim(),bindings:o}}},fd=new Go;var Yo=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"mssql"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"mssql"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},yd=new Yo;var Zo=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex);return e.clause==="materialized"&&g.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored."),{sql:`[${e.alias}] as (${o.sql})`,bindings:o.bindings}}},hd=new Zo;var Xo=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length>0){let i=[];for(let a of o){let{sql:l}=r.parse([a]);i.push(l);}i.length>0&&(n+=` ${i.join(" ")}`);}return {sql:`add column ${n}`,bindings:[]}}},gd=new Xo;var es=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},bd=new es;var ts=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`\`${n}\``).join(", ")})`,bindings:[]}}},Td=new ts;var rs=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),i=o.join(" ");e.newType.dataType==="uuid"&&(i=i.replace(/\s+default\s+.+$/i,"").trim());let a=`modify column \`${e.column}\` ${i}`;if(e.options.nullable!==void 0){let l=e.options.nullable?" null":" not null";a+=l;}if(!e.options.dropDefault){if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=` default ${l}`;}}return e.options.collate&&(a+=` COLLATE ${e.options.collate}`),e.options.unique!==void 0&&e.options.unique&&(a+=" unique"),{sql:a,bindings:[]}}},wd=new rs;var ns=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"mysql"),i=[],a=[];for(let c of e.children){let{sql:p,bindings:h}=o.parse([c]);if(c.file==="add_column")i.push(p);else if(c.file==="add_constraint"||c.folder==="constraint"){let f=i[i.length-1]??"",T=/^\s*add\s+column\b/i.test(f),N=/^\s*add\s+constraint\b/i.test(p);if(T&&!N){let w=p.replace(/^\s*add\s+/i,"").trimStart();i[i.length-1]=`${f} ${w}`;}else {let w=/^\s*add\b/i.test(p)?p:`add ${p}`;i.push(w);}}else c.file==="set_default"||c.file==="drop_default"||c.file==="set_not_null"||c.file,i.push(p);a.push(...h);}let l=i.join(", "),u=e.ifExists?"if exists ":"";return {sql:/^\s*drop\s+index\b/i.test(l)?l:`${u}${n} ${l}`,bindings:a}}},Sd=new ns;var os=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},Nd=new os;var ss=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},qd=new ss;var is=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},Cd=new is;var as=class{toSql(t){return {sql:"",bindings:[]}}},Rd=new as;var ls=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Md=new ls;var us=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},_d=new us;var ds=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},xd=new ds;var cs=class{toSql(t){let e=t,r;return e.defaultValue instanceof A?r=e.defaultValue.rawValue:e.defaultValue instanceof k?r=new b(this.model,"mysql").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column \`${e.column}\` set default ${r}`,bindings:[]}}},Od=new cs;var ms=class{toSql(t){return {sql:"",bindings:[]}}},Ad=new ms;var ps=class{toSql(t){let e=t,r=[];return e.engine&&r.push(`ENGINE=${e.engine}`),e.charset&&r.push(`CHARSET=${e.charset}`),e.collate&&r.push(`COLLATE=${e.collate}`),{sql:r.join(" "),bindings:[]}}},Dd=new ps;var fs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new y(this.model).formatStringColumn("mysql",C(e.column)),o=e.dataType.toLowerCase(),i,a=false,l=false;if(o==="char"){let u=e.length??1;i=`${n} char(${u})`;}else if(o==="varchar"){let u=e.length??255;i=`${n} varchar(${u})`;}else if(o==="uuid")i=`${n} varchar(36)`;else if(o==="ulid")i=`${n} varchar(26)`;else if(o==="longtext"||o==="mediumtext"||o==="tinytext"||o==="text")i=`${n} ${o}`;else if(o==="integer"||o==="int")a=true,l=!!e.autoIncrement,i=`${n} int`;else if(o==="tinyint")a=true,i=`${n} tinyint`;else if(o==="smallint")a=true,i=`${n} smallint`;else if(o==="mediumint")a=true,i=`${n} mediumint`;else if(o==="bigint")a=true,l=!!e.autoIncrement,i=`${n} bigint`;else if(o==="float")a=true,i=`${n} float`;else if(o==="double")a=true,i=`${n} double`;else if(o==="real")a=true,i=`${n} double`;else if(o==="decimal"){a=true;let u=e.precision??10,d=e.scale??0;i=`${n} decimal(${u}, ${d})`;}else if(o==="numeric"){a=true;let u=e.precision??10,d=e.scale??0;i=`${n} numeric(${u}, ${d})`;}else if(o==="date")i=`${n} date`;else if(o==="time"){let u=typeof e.precision=="number"?`(${e.precision})`:"";i=`${n} time${u}`.trimEnd();}else if(o==="datetime"){let u=typeof e.precision=="number"?`(${e.precision})`:"";i=`${n} datetime${u}`.trimEnd(),e.autoCreate&&(i+=` default current_timestamp${u}`),e.autoUpdate&&(i+=` on update current_timestamp${u}`);}else if(o==="timestamp"){let u=typeof e.precision=="number"?`(${e.precision})`:"";i=`${n} timestamp${u}`.trimEnd(),e.autoCreate&&(i+=` default current_timestamp${u}`),e.autoUpdate&&(i+=` on update current_timestamp${u}`);}else if(o==="year")i=`${n} year`;else if(o==="boolean")i=`${n} boolean`;else if(o==="varbinary"){let u=e.length??255;i=`${n} varbinary(${u})`;}else if(o==="binary"){let u=e.length??255;i=`${n} binary(${u})`;}else if(o==="bytea"||o==="blob")i=`${n} blob`;else if(o==="json"||o==="jsonb")i=`${n} json`;else if(o==="enum")if(e.enumValues&&e.enumValues.length>0){let u=e.enumValues.map(d=>`'${d}'`).join(", ");i=`${n} enum(${u})`;}else i=`${n} text`;else if(o==="geometry")i=`${n} geometry`;else if(o==="point")i=`${n} point`;else if(o==="linestring")i=`${n} linestring`;else if(o==="polygon")i=`${n} polygon`;else if(o==="multipoint")i=`${n} multipoint`;else {let u=e.length?`(${e.length})`:"";i=`${n} ${o}${u}`;}return a&&(e.zerofill?i+=" ZEROFILL":e.unsigned&&(i+=" UNSIGNED"),l&&(i+=" AUTO_INCREMENT")),e.collate&&(i+=` COLLATE ${e.collate}`),{sql:i,bindings:[]}}},$d=new fs;var ys=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Pd=new ys;var hs=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){let n=(e.columns??[]).map(i=>r.formatStringColumn("mysql",C(i))).join(", ");return {sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}primary key (${n})`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns.map(i=>r.formatStringColumn("mysql",C(i))).join(", "),o=e.constraintName?`constraint \`${e.constraintName}\` `:"";return e.constraintName?{sql:`${o}unique (${n})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let n=e.defaultValue;return n instanceof A?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof k?{sql:`default ${new b(this.model,"mysql").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let n=(e.columns??[]).map(u=>r.formatStringColumn("mysql",C(u))).join(", "),o=r.formatStringTable("mysql",e.references.table),i=e.references.columns.map(u=>r.formatStringColumn("mysql",C(u))).join(", "),l=`${e.constraintName?`constraint \`${e.constraintName}\` `:""}foreign key (${n}) references ${o}(${i})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},vd=new hs;var gs=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mysql"),i=[],a=[];for(let p of e.children){let{sql:h,bindings:f}=o.parse([p]);if(p.folder==="constraint"){let T=i.pop()??"",N=h;if(/not null/i.test(N)||/null/i.test(N)||/default/i.test(N)){let w=`${T} ${N}`.trim();w=w.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),i.push(w),a.push(...f);continue}i.push(T),i.push(N),a.push(...f);continue}i.push(h),a.push(...f);}for(let p of e.namedConstraints){let{sql:h,bindings:f}=o.parse([p]);i.push(h),a.push(...f);}let l=i.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.engine&&d.push(`ENGINE=${e.engine}`),e.charset&&d.push(`CHARSET=${e.charset}`),e.collate&&d.push(`COLLATE=${e.collate}`);let m=d.length>0?` ${d.join(" ")}`:"";return {sql:`${u}${n} (${l})${m}`,bindings:a}}},Id=new gs;var bs=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},Ed=new bs;var Ts=class{toSql(t){return {sql:"distinct",bindings:[]}}},kd=new Ts;var ws=class{toSql(t){return g.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},Bd=new ws;var Ss=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Qd=new Ss;var Ns=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Kd=new Ns;var qs=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mysql",e.table)} as \`${e.alias}\``,bindings:[]}:{sql:a.formatStringTable("mysql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"mysql").parse(r),i=e.alias&&e.alias.length?` as \`${e.alias}\``:"";return {sql:`(${o.sql})${i}`,bindings:o.bindings}}},Ld=new qs;var Cs=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},jd=new Cs;var Rs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(!(e.value instanceof S)&&!Array.isArray(e.value)&&(n=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} $${r}`,o=[e.value]),Array.isArray(e.value)){let i=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${i})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},Wd=new Rs;var Ms=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table),o=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${n} (${o})`,bindings:[]}}},Fd=new Ms;var _s=class{toSql(t){let e=t;if(!e.table)throw new Error("MySQL DROP INDEX requires table name");return {sql:`\`${e.indexName}\` on \`${e.table}\``,bindings:[]}}},Ud=new _s;var xs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],i=Object.keys(o);if(!i.length)return {sql:n,bindings:[]};let a=i.map(m=>r.formatStringColumn("mysql",m)).join(", "),l=[],u=[];for(let m of e.records){let c=i.map(h=>m[h]),p=[];for(let h of c)h instanceof A?p.push(h.rawValue):(l.push(h),p.push("?"));u.push(`(${p.join(", ")})`);}let d=`${n} (${a}) VALUES ${u.join(", ")}`;if(this.dbType==="mariadb"&&!e.disableReturning){if(e.returning&&e.returning.length){let m=e.returning.map(c=>r.formatStringColumn("mariadb",c)).join(", ");return {sql:`${d} returning ${m}`,bindings:l}}return {sql:`${d} returning *`,bindings:l}}return {sql:d,bindings:l}}},Vd=new xs;var Os=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let i=r.formatStringColumn("mysql",n),a=r.formatStringColumn("mysql",o),u=`${r.formatStringTable("mysql",e.table)} on ${i} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let m=new b(this.model,"mysql");for(let c of e.additionalConditions){let p=m.parse([c]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},Jd=new Os;var As=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Hd=new As;var xy={for_update:"for update",for_share:"lock in share mode"},Ds=class{toSql(t){let e=t,r=xy[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},zd=new Ds;var $s=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Gd=new $s;var Ps=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model);if(e.mode==="ignore"){let o=e.conflictColumns?.[0]||"id",i=r.formatStringColumn("mysql",`${e.table}.${o}`);return {sql:`ON DUPLICATE KEY UPDATE ${i} = ${i}`,bindings:[]}}return {sql:`ON DUPLICATE KEY UPDATE ${e.columnsToUpdate.map(o=>`${r.formatStringColumn("mysql",o)} = VALUES(${r.formatStringColumn("mysql",o)})`).join(", ")}`,bindings:[]}}},Yd=new Ps;var vs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("mysql",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},Zd=new vs;var Is=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Xd=new Is;var Es=class{toSql(t){return {sql:"",bindings:[]}}},ec=new Es;var ks=class{toSql(t){return {sql:`SELECT
|
|
165
|
+
ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},ud=new jo;var Wo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new y(this.model).formatStringColumn("mssql",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"mssql").parse(t),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"mssql").parse([t]),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new y(this.model).formatStringColumn("mssql",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"mssql").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},dd=new Wo;var Re=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 Uo=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=Re.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}},cd=new Uo;var Vo=class{toSql(t){let e=t,r=Qe(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 A?s.rawValue:s instanceof $?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}}},md=new Vo;var Jo=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:`table ${new y(this.model).getFromForWriteOperations("mssql",e.fromNode)}`,bindings:[]}}},pd=new Jo;var Ho=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},fd=new Ho;var zo=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=0,s=[],a=e.columns.map((u,d)=>{let m=e.currParamIndex+d-o,c=e.values[d];if(c instanceof A)return o++,`${r.formatStringColumn("mssql",u)} = ${c.rawValue}`;if(c instanceof $){o++;let p=new b(this.model,"mssql").parse([c],1,true).sql;return `${r.formatStringColumn("mssql",u)} = ${p}`}return s.push(c),`${r.formatStringColumn("mssql",u)} = @${m}`}).join(", ");return {sql:`${n} set ${a}`,bindings:s}}},yd=new zo;var Go=class{toSql(t){let e=t;if(e.isRawValue){let a=e.value??[];if(a.length===0)return {sql:e.column,bindings:[]};let l=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`@${l++}`),bindings:a}}let r=e.value,n=e.currParamIndex;if(this.isRawNode(r)){let a=this.formatRawIdentifierIfPossible(r.rawValue);return {sql:`${new y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`.trim(),bindings:[]}}if(Array.isArray(r)){let a=new y(this.model).formatStringColumn("mssql",e.column);if(e.operator.toLowerCase()==="between"){let d=`@${n} AND @${n+1}`,m=`${a} between ${d}`;return e.isNegated&&(m=`not (${m})`),{sql:m.trim(),bindings:r}}let l=r.map((d,m)=>`@${n+m}`).join(", "),u=`${a} ${e.operator} (${l})`;return e.isNegated&&(u=`not (${u})`),{sql:u.trim(),bindings:r}}if(r instanceof $){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}},hd=new Go;var Yo=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}}},gd=new Yo;var Zo=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 "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`NOT (${n})`),{sql:n.trim(),bindings:o}}},bd=new Zo;var Xo=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}}},Td=new Xo;var es=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex);return e.clause==="materialized"&&g.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored."),{sql:`[${e.alias}] as (${o.sql})`,bindings:o.bindings}}},wd=new es;var ts=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:[]}}},Sd=new ts;var rs=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Nd=new rs;var ns=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`\`${n}\``).join(", ")})`,bindings:[]}}},qd=new ns;var os=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:[]}}},Cd=new os;var ss=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 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 f=s[s.length-1]??"",T=/^\s*add\s+column\b/i.test(f),N=/^\s*add\s+constraint\b/i.test(p);if(T&&!N){let w=p.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${f} ${w}`;}else {let w=/^\s*add\b/i.test(p)?p:`add ${p}`;s.push(w);}}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}}},Rd=new ss;var is=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},_d=new is;var as=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},Md=new as;var ls=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},xd=new ls;var us=class{toSql(t){return {sql:"",bindings:[]}}},Od=new us;var ds=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Ad=new ds;var cs=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},Dd=new cs;var ms=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},$d=new ms;var ps=class{toSql(t){let e=t,r;return e.defaultValue instanceof A?r=e.defaultValue.rawValue:e.defaultValue instanceof $?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:[]}}},Pd=new ps;var fs=class{toSql(t){return {sql:"",bindings:[]}}},vd=new fs;var ys=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:[]}}},Id=new ys;var hs=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:[]}}},Ed=new hs;var gs=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},kd=new gs;var bs=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 A?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof $?{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:[]}}},Bd=new bs;var Ts=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 T=s.pop()??"",N=h;if(/not null/i.test(N)||/null/i.test(N)||/default/i.test(N)){let w=`${T} ${N}`.trim();w=w.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(w),a.push(...f);continue}s.push(T),s.push(N),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 m=d.length>0?` ${d.join(" ")}`:"";return {sql:`${u}${n} (${l})${m}`,bindings:a}}},Kd=new Ts;var ws=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:[]}}},Qd=new ws;var Ss=class{toSql(t){return {sql:"distinct",bindings:[]}}},Ld=new Ss;var Ns=class{toSql(t){return g.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},Fd=new Ns;var qs=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},jd=new qs;var Cs=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Wd=new Cs;var Rs=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mysql",e.table)} as \`${e.alias}\``,bindings:[]}:{sql:a.formatStringTable("mysql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"mysql").parse(r),s=e.alias&&e.alias.length?` as \`${e.alias}\``:"";return {sql:`(${o.sql})${s}`,bindings:o.bindings}}},Ud=new Rs;var _s=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},Vd=new _s;var Ms=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(e.value instanceof $){let s=new b(this.model,"mysql").parse([e.value],1,true).sql;n=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${s}`,o=[];}else !(e.value instanceof S)&&!Array.isArray(e.value)&&(n=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} $${r}`,o=[e.value]);if(Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${s})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},Jd=new Ms;var xs=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:[]}}},Hd=new xs;var Os=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:[]}}},zd=new Os;var As=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],s=Object.keys(o);if(!s.length)return {sql:n,bindings:[]};let a=s.map(m=>r.formatStringColumn("mysql",m)).join(", "),l=[],u=[];for(let m of e.records){let c=s.map(h=>m[h]),p=[];for(let h of c)h instanceof A?p.push(h.rawValue):(l.push(h),p.push("?"));u.push(`(${p.join(", ")})`);}let d=`${n} (${a}) VALUES ${u.join(", ")}`;if(this.dbType==="mariadb"&&!e.disableReturning){if(e.returning&&e.returning.length){let m=e.returning.map(c=>r.formatStringColumn("mariadb",c)).join(", ");return {sql:`${d} returning ${m}`,bindings:l}}return {sql:`${d} returning *`,bindings:l}}return {sql:d,bindings:l}}},Gd=new As;var Ds=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let s=r.formatStringColumn("mysql",n),a=r.formatStringColumn("mysql",o),u=`${r.formatStringTable("mysql",e.table)} on ${s} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let m=new b(this.model,"mysql");for(let c of e.additionalConditions){let p=m.parse([c]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},Yd=new Ds;var $s=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Zd=new $s;var Ey={for_update:"for update",for_share:"lock in share mode"},Ps=class{toSql(t){let e=t,r=Ey[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},Xd=new Ps;var vs=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},ec=new vs;var Is=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:[]}}},tc=new Is;var Es=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:[]}}},rc=new Es;var ks=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},nc=new ks;var Bs=class{toSql(t){return {sql:"",bindings:[]}}},oc=new Bs;var Ks=class{toSql(t){return {sql:`SELECT
|
|
166
166
|
cc.CONSTRAINT_NAME AS name,
|
|
167
167
|
cc.CHECK_CLAUSE AS expression
|
|
168
168
|
FROM information_schema.CHECK_CONSTRAINTS cc
|
|
@@ -171,7 +171,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},sd=new Lo;var jo=class{toSql(t){let
|
|
|
171
171
|
AND cc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
|
|
172
172
|
WHERE tc.TABLE_SCHEMA = DATABASE()
|
|
173
173
|
AND tc.TABLE_NAME = '${t.table}'
|
|
174
|
-
AND tc.CONSTRAINT_TYPE = 'CHECK'`,bindings:[]}}},
|
|
174
|
+
AND tc.CONSTRAINT_TYPE = 'CHECK'`,bindings:[]}}},sc=new Ks;var Qs=class{toSql(t){return {sql:`SELECT
|
|
175
175
|
k.CONSTRAINT_NAME AS name,
|
|
176
176
|
k.COLUMN_NAME AS column_name,
|
|
177
177
|
k.REFERENCED_TABLE_NAME AS referenced_table,
|
|
@@ -182,12 +182,12 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},sd=new Lo;var jo=class{toSql(t){let
|
|
|
182
182
|
JOIN information_schema.REFERENTIAL_CONSTRAINTS r
|
|
183
183
|
ON k.CONSTRAINT_NAME = r.CONSTRAINT_NAME AND k.CONSTRAINT_SCHEMA = r.CONSTRAINT_SCHEMA
|
|
184
184
|
WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.REFERENCED_TABLE_NAME IS NOT NULL
|
|
185
|
-
ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},
|
|
185
|
+
ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},ic=new Qs;var Ls=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:[]}}},ac=new Ls;var Fs=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:[]}}},lc=new Fs;var js=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.check_constraints WHERE constraint_schema = DATABASE() AND constraint_name = '${t.constraint}'`,bindings:[]}}},uc=new js;var Ws=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:[]}}},dc=new Ws;var Us=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:[]}}},cc=new Us;var Vs=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:[]}}},mc=new Vs;var Js=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = '${t.table}'`,bindings:[]}}},pc=new Js;var Hs=class{toSql(t){return {sql:`SHOW INDEX FROM \`${t.table}\``,bindings:[]}}},fc=new Hs;var zs=class{toSql(t){return {sql:`SELECT
|
|
186
186
|
CONSTRAINT_NAME AS name,
|
|
187
187
|
COLUMN_NAME AS column_name
|
|
188
188
|
FROM information_schema.KEY_COLUMN_USAGE k
|
|
189
189
|
WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.CONSTRAINT_NAME = 'PRIMARY'
|
|
190
|
-
ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},cc=new Js;var Hs=class{toSql(t){return {sql:`SELECT COLUMN_NAME AS column_name, DATA_TYPE AS data_type, COLUMN_TYPE AS column_type, IS_NULLABLE AS is_nullable, COLUMN_DEFAULT AS column_default, CHARACTER_MAXIMUM_LENGTH AS char_length, NUMERIC_PRECISION AS numeric_precision, NUMERIC_SCALE AS numeric_scale FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${t.table}' ORDER BY ORDINAL_POSITION`,bindings:[]}}},mc=new Hs;var zs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new y(this.model).formatStringColumn("mysql",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"mysql").parse(t),i=`(${o.sql})`;return e&&(i=`${e.toLowerCase()}${i}`),{sql:i,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"mysql").parse([t]),i=`(${o.sql})`;return e&&(i=`${e.toLowerCase()}${i}`),{sql:i,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new y(this.model).formatStringColumn("mysql",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"mysql").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},pc=new zs;var Gs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("mysql",e.column),n=qe.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMysql();return r==="$"?t:`JSON_EXTRACT(${t}, '${r}')`}buildExtractTextSql(t,e){let r=e.toMysql();return r==="$"?`JSON_UNQUOTE(${t})`:`JSON_UNQUOTE(JSON_EXTRACT(${t}, '${r}'))`}buildArrayLengthSql(t,e){let r=e.toMysql();return r==="$"?`JSON_LENGTH(${t})`:`JSON_LENGTH(${t}, '${r}')`}buildObjectKeysSql(t,e){let r=e.toMysql();return r==="$"?`JSON_KEYS(${t})`:`JSON_KEYS(${t}, '${r}')`}formatWithAlias(t,e){return e&&e.length>0?`${t} as \`${e}\``:t}},fc=new Gs;var Ys=class{toSql(t){let e=t,r=this.renderToken(e.fn);if(r!==void 0)return {sql:r,bindings:[]};let n=e.args.map(o=>o instanceof A?o.rawValue:o instanceof k?this.toSql(o).sql:typeof o=="number"?String(o):`'${o}'`).join(", ");return {sql:`${e.fn}(${n})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":throw new Error("hysteria-orm: $uuid has no mysql/mariadb default \u2014 uuid columns must be generated in JS");case "$now":return "now()";case "$currentTimestamp":return "current_timestamp";default:return}}},yc=new Ys;var Zs=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},hc=new Zs;var Xs=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},gc=new Xs;var ei=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],i=e.columns.map((l,u)=>{let d=e.values[u];if(d instanceof A)return `${r.formatStringColumn("mysql",l)} = ${d.rawValue}`;if(d instanceof k){let m=new b(this.model,"mysql").parse([d],1,true).sql;return `${r.formatStringColumn("mysql",l)} = ${m}`}return o.push(d),`${r.formatStringColumn("mysql",l)} = ?`}).join(", ");return {sql:`${n} set ${i}`,bindings:o}}},bc=new ei;var ti=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",n=[];if(this.isRawNode(e.value)){let o=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${o}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,n=e.value;else {let o=e.value.map(i=>"?").join(", ");r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${o})`,n=e.value;}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ?`,n=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("mysql",t):t}},Tc=new ti;var ri=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"mysql"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},wc=new ri;var ni=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new y(this.model).formatStringColumn("mysql",e.column);switch(e.jsonOperator){case "=":r=`${o} = CAST(? AS JSON)`,n=[JSON.stringify(e.value)];break;case "contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},Sc=new ni;var oi=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"mysql"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"mysql"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},Nc=new oi;var si=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex);return {sql:`${e.alias} as (${o.sql})`,bindings:o.bindings}}},qc=new si;var ii=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length){let i=[];for(let a of o){let{sql:l}=r.parse([a]);i.push(l);}i.length&&(n+=` ${i.join(" ")}`);}return {sql:`add column ${n}`,bindings:[]}}},Cc=new ii;var ai=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Rc=new ai;var li=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`"${n}"`).join(", ")})`,bindings:[]}}},Mc=new li;var ui=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),i=o.join(" ");i=i.replace(/\s*check\s*\(.*\)\s*$/i,"").trim(),e.newType.dataType==="uuid"&&(i=i.replace(/\s+default\s+.+$/i,"").trim());let a=`alter column "${e.column}" type ${i}`;if(e.options.nullable!==void 0){let l=e.options.nullable?`alter column "${e.column}" drop not null`:`alter column "${e.column}" set not null`;a+=`, ${l}`;}if(e.options.dropDefault)a+=`, alter column "${e.column}" drop default`;else if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=`, alter column "${e.column}" set default ${l}`;}return e.options.unique!==void 0&&(e.options.unique?a+=`, add constraint "unique_${e.column}" unique ("${e.column}")`:a+=`, drop constraint "unique_${e.column}"`),{sql:a,bindings:[]}}},_c=new ui;var di=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"postgres"),i=[],a=[];for(let m of e.children){let{sql:c,bindings:p}=o.parse([m]);i.push(c.trim()),a.push(...p);}let l=i.join(", ");return {sql:`${e.ifExists?"if exists ":""}${n} ${l}`,bindings:a}}},xc=new di;var ci=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Oc=new ci;var mi=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},Ac=new mi;var pi=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Dc=new pi;var fi=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},$c=new fi;var yi=class{toSql(t){return {sql:"",bindings:[]}}},Pc=new yi;var hi=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},vc=new hi;var gi=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Ic=new gi;var bi=class{toSql(t){let e=t,r;return e.defaultValue instanceof A?r=e.defaultValue.rawValue:e.defaultValue instanceof k?r=new b(this.model,"postgres").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},Ec=new bi;var Ti=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},kc=new Ti;var wi=class{toSql(t){return {sql:"",bindings:[]}}},Bc=new wi;var Si=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new y(this.model).formatStringColumn("postgres",C(e.column)),o=e.dataType.toLowerCase();if(o==="char"){let a=e.length??1;return {sql:`${n} char(${a})`,bindings:[]}}else if(o==="varchar"){let a=e.length??255;return {sql:`${n} varchar(${a})`,bindings:[]}}else {if(o==="text"||o==="longtext"||o==="mediumtext"||o==="tinytext")return {sql:`${n} text`,bindings:[]};if(o==="uuid"){let a=e.isForeignKey?"":" default gen_random_uuid()";return {sql:`${n} uuid${a}`,bindings:[]}}else {if(o==="ulid")return {sql:`${n} varchar(26)`,bindings:[]};if(o==="bigint")return e.autoIncrement?{sql:`${n} bigserial`,bindings:[]}:{sql:`${n} bigint`,bindings:[]};if(o==="tinyint")return {sql:`${n} smallint`,bindings:[]};if(o==="smallint")return {sql:`${n} smallint`,bindings:[]};if(o==="mediumint")return {sql:`${n} integer`,bindings:[]};if(o==="float"||o==="real")return {sql:`${n} real`,bindings:[]};if(o==="double")return {sql:`${n} double precision`,bindings:[]};if(o==="decimal"||o==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${n} numeric(${a}, ${l})`,bindings:[]}}else {if(o==="date")return {sql:`${n} date`,bindings:[]};if(o==="year")return {sql:`${n} smallint`,bindings:[]};if(o==="time"){let a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${n} time${a}`,bindings:[]}}else if(o==="datetime"||o==="timestamp"){let a=e.withTimezone?" with time zone":" without time zone",l=typeof e.precision=="number"?`(${e.precision})`:"",u=`${n} timestamp${l}${a}`.trimEnd();return e.autoCreate&&(u+=" default current_timestamp"),{sql:u,bindings:[]}}else {if(o==="boolean"||o==="bool")return {sql:`${n} boolean`,bindings:[]};if(o==="bytea"||o==="binary"||o==="varbinary"||o==="blob"||o==="longblob"||o==="mediumblob"||o==="tinyblob")return {sql:`${n} bytea`,bindings:[]};if(o==="json")return {sql:`${n} json`,bindings:[]};if(o==="jsonb")return {sql:`${n} jsonb`,bindings:[]};if(o==="enum"){if(e.enumValues&&e.enumValues.length>0){let a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${n} text check (${n} in (${a}))`,bindings:[]}}return {sql:`${n} text`,bindings:[]}}else {if(o==="integer"||o==="int")return e.autoIncrement?{sql:`${n} serial`,bindings:[]}:{sql:`${n} integer`,bindings:[]};if(o==="geometry")return {sql:`${n} geometry`,bindings:[]};if(o==="point")return {sql:`${n} point`,bindings:[]};if(o==="linestring")return {sql:`${n} linestring`,bindings:[]};if(o==="polygon")return {sql:`${n} polygon`,bindings:[]};if(o==="multipoint")return {sql:`${n} multipoint`,bindings:[]}}}}}}let i=e.length?`(${e.length})`:"";return {sql:`${n} ${o}${i}`,bindings:[]}}},Qc=new Si;var Ni=class{toSql(t){return {sql:"",bindings:[]}}},Kc=new Ni;var qi=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let n=e.constraintName?`constraint "${e.constraintName}" `:"",o=(e.columns??[]).map(i=>r.formatStringColumn("postgres",C(i))).join(", ");return {sql:`${n}primary key (${o})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns??[],o=e.constraintName?`constraint "${e.constraintName}" `:"",i=n.map(a=>r.formatStringColumn("postgres",C(a))).join(", ");return e.constraintName?{sql:`${o}unique (${i})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let n=e.defaultValue;return n instanceof A?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof k?{sql:`default ${new b(this.model,"postgres").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let n=e.columns.map(u=>r.formatStringColumn("postgres",C(u))).join(", ");if(!e.references)return {sql:"",bindings:[]};let o=r.formatStringTable("postgres",e.references.table),i=e.references.columns.map(u=>r.formatStringColumn("postgres",C(u))).join(", "),l=`${e.constraintName?`constraint "${e.constraintName}" `:""}foreign key (${n}) references ${o}(${i})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint "${e.constraintName}" `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Lc=new qi;var Ci=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"postgres"),i=[],a=[];for(let N of e.children){let{sql:w,bindings:R}=o.parse([N]);if(N.folder==="constraint"){let _=i.pop()??"",E=w;if(/not null/i.test(E)||/null/i.test(E)||/default/i.test(E)){let O=`${_} ${E}`.trim();O=O.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),i.push(O),a.push(...R);continue}i.push(_),i.push(E),a.push(...R);continue}i.push(w),a.push(...R);}for(let N of e.namedConstraints){let{sql:w,bindings:R}=o.parse([N]);i.push(w),a.push(...R);}let l=i.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.temporary&&d.push("TEMPORARY"),e.unlogged&&d.push("UNLOGGED");let m=[];if(e.postgresWith){let N=Object.entries(e.postgresWith).map(([w,R])=>`${w}=${R}`).join(", ");N&&m.push(`WITH (${N})`);}let c=e.tablespace?`TABLESPACE ${e.tablespace}`:"",p=d.length>0?`${d.join(" ")} `:"",h=m.length>0?` ${m.join(" ")}`:"",f=c?` ${c}`:"";return {sql:`${u}${p}${n} (${l})${h}${f}`,bindings:a}}},jc=new Ci;var Ri=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},Wc=new Ri;var Mi=class{toSql(t){return {sql:"",bindings:[]}}},Fc=new Mi;var _i=class{toSql(t){return {sql:`(${t.columns.map(n=>new y(this.model).formatStringColumn("postgres",n)).join(", ")})`,bindings:[]}}},Uc=new _i;var xi=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Vc=new xi;var Oi=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},Jc=new Oi;var Ai=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("postgres",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("postgres",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"postgres").parse(r),i=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${o.sql})${i}`,bindings:o.bindings}}},Hc=new Ai;var Di=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},zc=new Di;var $i=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(!(e.value instanceof S)&&!Array.isArray(e.value)&&(n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,o=[e.value]),Array.isArray(e.value)){let i=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${i})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},Gc=new $i;var Pi=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table),o=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${n} (${o})`,bindings:[]}}},Yc=new Pi;var vi=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},Zc=new vi;var Ii=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],i=Object.keys(o);if(!i.length)return {sql:n,bindings:[]};let a=i.map(c=>r.formatStringColumn("postgres",c)).join(", "),l=[],u=[],d=e.currParamIndex;for(let c of e.records){let p=i.map(f=>c[f]),h=[];for(let f=0;f<i.length;f++){let T=p[f];T instanceof A?h.push(T.rawValue):(l.push(T),h.push(`$${d++}${this.formatTypeCast(T)}`));}u.push(`(${h.join(", ")})`);}let m=`${n} (${a}) values ${u.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let c=e.returning.map(p=>r.formatStringColumn("postgres",p)).join(", ");m+=` returning ${c}`;}else m+=" returning *";return {sql:m,bindings:l}}formatTypeCast(t){let e="";return Buffer.isBuffer(t)?e="::bytea":Array.isArray(t)?e="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?e="::jsonb":typeof t=="boolean"?e="::boolean":typeof t=="bigint"&&(e="::bigint"),e}},Xc=new Ii;var Ei=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let i=r.formatStringColumn("postgres",n),a=r.formatStringColumn("postgres",o),u=`${r.formatStringTable("postgres",e.table)} on ${i} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let m=new b(this.model,"postgres");for(let c of e.additionalConditions){let p=m.parse([c]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},em=new Ei;var ki=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},tm=new ki;var Oy={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},Bi=class{toSql(t){let e=t,r=Oy[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},rm=new Bi;var Qi=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},nm=new Qi;var Ki=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.conflictColumns.map(a=>r.formatStringColumnBare("postgres",a)).join(", ");if(e.mode==="ignore"){let a=`on conflict (${n}) do nothing`;if(e.returning&&e.returning.length){let l=e.returning.map(u=>r.formatStringColumn("postgres",u)).join(", ");a+=` returning ${l}`;}return {sql:a,bindings:[]}}let o=e.columnsToUpdate.map(a=>`${r.formatStringColumnBare("postgres",a)} = excluded.${r.formatStringColumnBare("postgres",a)}`).join(", "),i=`on conflict (${n}) do update set ${o}`;if(e.returning&&e.returning.length){let a=e.returning.map(l=>r.formatStringColumn("postgres",l)).join(", ");i+=` returning ${a}`;}return {sql:i,bindings:[]}}},om=new Ki;var Li=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("postgres",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},sm=new Li;var ji=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},im=new ji;var Wi=class{toSql(t){let e=t,r=new y(this.model);return {sql:`returning ${!e.columns.length||e.columns.includes("*")?"*":e.columns.map(o=>r.formatStringColumn("postgres",o)).join(", ")}`,bindings:[]}}},am=new Wi;var Fi=class{toSql(t){return {sql:`SELECT
|
|
190
|
+
ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},yc=new zs;var Gs=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:[]}}},hc=new Gs;var Ys=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new y(this.model).formatStringColumn("mysql",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"mysql").parse(t),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"mysql").parse([t]),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new y(this.model).formatStringColumn("mysql",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"mysql").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},gc=new Ys;var Zs=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=Re.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}},bc=new Zs;var Xs=class{toSql(t){let e=t,r=Qe(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 A?s.rawValue:s instanceof $?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}}},Tc=new Xs;var ei=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},wc=new ei;var ti=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Sc=new ti;var ri=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.columns.map((l,u)=>{let d=e.values[u];if(d instanceof A)return `${r.formatStringColumn("mysql",l)} = ${d.rawValue}`;if(d instanceof $){let m=new b(this.model,"mysql").parse([d],1,true).sql;return `${r.formatStringColumn("mysql",l)} = ${m}`}return o.push(d),`${r.formatStringColumn("mysql",l)} = ?`}).join(", ");return {sql:`${n} set ${s}`,bindings:o}}},Nc=new ri;var ni=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 $){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}},qc=new ni;var oi=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}}},Cc=new oi;var si=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new y(this.model).formatStringColumn("mysql",e.column);switch(e.jsonOperator){case "=":r=`${o} = CAST(? AS JSON)`,n=[JSON.stringify(e.value)];break;case "contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},Rc=new si;var ii=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}}},_c=new ii;var ai=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex);return {sql:`${e.alias} as (${o.sql})`,bindings:o.bindings}}},Mc=new ai;var li=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:[]}}},xc=new li;var ui=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Oc=new ui;var di=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`"${n}"`).join(", ")})`,bindings:[]}}},Ac=new di;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:[]}}},Dc=new ci;var mi=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 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}}},$c=new mi;var pi=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Pc=new pi;var fi=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},vc=new fi;var yi=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Ic=new yi;var hi=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Ec=new hi;var gi=class{toSql(t){return {sql:"",bindings:[]}}},kc=new gi;var bi=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Bc=new bi;var Ti=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Kc=new Ti;var wi=class{toSql(t){let e=t,r;return e.defaultValue instanceof A?r=e.defaultValue.rawValue:e.defaultValue instanceof $?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:[]}}},Qc=new wi;var Si=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Lc=new Si;var Ni=class{toSql(t){return {sql:"",bindings:[]}}},Fc=new Ni;var qi=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:[]}}},jc=new qi;var Ci=class{toSql(t){return {sql:"",bindings:[]}}},Wc=new Ci;var Ri=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 A?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof $?{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:[]}}},Uc=new Ri;var _i=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 N of e.children){let{sql:w,bindings:R}=o.parse([N]);if(N.folder==="constraint"){let M=s.pop()??"",k=w;if(/not null/i.test(k)||/null/i.test(k)||/default/i.test(k)){let O=`${M} ${k}`.trim();O=O.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(O),a.push(...R);continue}s.push(M),s.push(k),a.push(...R);continue}s.push(w),a.push(...R);}for(let N of e.namedConstraints){let{sql:w,bindings:R}=o.parse([N]);s.push(w),a.push(...R);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.temporary&&d.push("TEMPORARY"),e.unlogged&&d.push("UNLOGGED");let m=[];if(e.postgresWith){let N=Object.entries(e.postgresWith).map(([w,R])=>`${w}=${R}`).join(", ");N&&m.push(`WITH (${N})`);}let c=e.tablespace?`TABLESPACE ${e.tablespace}`:"",p=d.length>0?`${d.join(" ")} `:"",h=m.length>0?` ${m.join(" ")}`:"",f=c?` ${c}`:"";return {sql:`${u}${p}${n} (${l})${h}${f}`,bindings:a}}},Vc=new _i;var Mi=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:[]}}},Jc=new Mi;var xi=class{toSql(t){return {sql:"",bindings:[]}}},Hc=new xi;var Oi=class{toSql(t){return {sql:`(${t.columns.map(n=>new y(this.model).formatStringColumn("postgres",n)).join(", ")})`,bindings:[]}}},zc=new Oi;var Ai=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Gc=new Ai;var Di=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},Yc=new Di;var $i=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("postgres",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("postgres",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"postgres").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${o.sql})${s}`,bindings:o.bindings}}},Zc=new $i;var Pi=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},Xc=new Pi;var vi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(e.value instanceof $){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 !(e.value instanceof S)&&!Array.isArray(e.value)&&(n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,o=[e.value]);if(Array.isArray(e.value)){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;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},em=new vi;var Ii=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:[]}}},tm=new Ii;var Ei=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},rm=new Ei;var ki=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],s=Object.keys(o);if(!s.length)return {sql:n,bindings:[]};let a=s.map(c=>r.formatStringColumn("postgres",c)).join(", "),l=[],u=[],d=e.currParamIndex;for(let c of e.records){let p=s.map(f=>c[f]),h=[];for(let f=0;f<s.length;f++){let T=p[f];T instanceof A?h.push(T.rawValue):(l.push(T),h.push(`$${d++}${this.formatTypeCast(T)}`));}u.push(`(${h.join(", ")})`);}let m=`${n} (${a}) values ${u.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let c=e.returning.map(p=>r.formatStringColumn("postgres",p)).join(", ");m+=` returning ${c}`;}else m+=" returning *";return {sql:m,bindings:l}}formatTypeCast(t){let e="";return Buffer.isBuffer(t)?e="::bytea":Array.isArray(t)?e="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?e="::jsonb":typeof t=="boolean"?e="::boolean":typeof t=="bigint"&&(e="::bigint"),e}},nm=new ki;var Bi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let s=r.formatStringColumn("postgres",n),a=r.formatStringColumn("postgres",o),u=`${r.formatStringTable("postgres",e.table)} on ${s} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let m=new b(this.model,"postgres");for(let c of e.additionalConditions){let p=m.parse([c]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},om=new Bi;var Ki=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},sm=new Ki;var ky={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},Qi=class{toSql(t){let e=t,r=ky[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},im=new Qi;var Li=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},am=new Li;var Fi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.conflictColumns.map(a=>r.formatStringColumnBare("postgres",a)).join(", ");if(e.mode==="ignore"){let a=`on conflict (${n}) do nothing`;if(e.returning&&e.returning.length){let l=e.returning.map(u=>r.formatStringColumn("postgres",u)).join(", ");a+=` returning ${l}`;}return {sql:a,bindings:[]}}let o=e.columnsToUpdate.map(a=>`${r.formatStringColumnBare("postgres",a)} = excluded.${r.formatStringColumnBare("postgres",a)}`).join(", "),s=`on conflict (${n}) do update set ${o}`;if(e.returning&&e.returning.length){let a=e.returning.map(l=>r.formatStringColumn("postgres",l)).join(", ");s+=` returning ${a}`;}return {sql:s,bindings:[]}}},lm=new Fi;var ji=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:[]}}},um=new ji;var Wi=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},dm=new Wi;var Ui=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:[]}}},cm=new Ui;var Vi=class{toSql(t){return {sql:`SELECT
|
|
191
191
|
con.conname AS name,
|
|
192
192
|
pg_get_constraintdef(con.oid) AS expression
|
|
193
193
|
FROM pg_constraint con
|
|
@@ -195,7 +195,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},sd=new Lo;var jo=class{toSql(t){let
|
|
|
195
195
|
JOIN pg_namespace nsp ON nsp.oid = rel.relnamespace
|
|
196
196
|
WHERE con.contype = 'c'
|
|
197
197
|
AND rel.relname = '${t.table}'
|
|
198
|
-
AND nsp.nspname = current_schema()`,bindings:[]}}},
|
|
198
|
+
AND nsp.nspname = current_schema()`,bindings:[]}}},mm=new Vi;var Ji=class{toSql(t){return {sql:`SELECT
|
|
199
199
|
tc.constraint_name as name,
|
|
200
200
|
kcu.column_name as column_name,
|
|
201
201
|
ccu.table_name as referenced_table,
|
|
@@ -210,7 +210,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},sd=new Lo;var jo=class{toSql(t){let
|
|
|
210
210
|
JOIN information_schema.referential_constraints rc
|
|
211
211
|
ON rc.constraint_name = tc.constraint_name AND rc.constraint_schema = tc.table_schema
|
|
212
212
|
WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
|
|
213
|
-
ORDER BY kcu.ordinal_position`,bindings:[]}}},
|
|
213
|
+
ORDER BY kcu.ordinal_position`,bindings:[]}}},pm=new Ji;var Hi=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:[]}}},fm=new Hi;var zi=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:[]}}},ym=new zi;var Gi=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:[]}}},hm=new Gi;var Yi=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:[]}}},gm=new Yi;var Zi=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:[]}}},bm=new Zi;var Xi=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:[]}}},Tm=new Xi;var ea=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:[]}}},wm=new ea;var ta=class{toSql(t){return {sql:`SELECT
|
|
214
214
|
i.relname as index_name,
|
|
215
215
|
a.attname as column_name,
|
|
216
216
|
ix.indisunique as is_unique
|
|
@@ -229,14 +229,14 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},sd=new Lo;var jo=class{toSql(t){let
|
|
|
229
229
|
AND t.relname = '${t.table}'
|
|
230
230
|
AND t.relnamespace = n.oid
|
|
231
231
|
AND n.nspname = current_schema()
|
|
232
|
-
AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},
|
|
232
|
+
AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},Sm=new ta;var ra=class{toSql(t){return {sql:`SELECT
|
|
233
233
|
tc.constraint_name as name,
|
|
234
234
|
kcu.column_name as column_name
|
|
235
235
|
FROM information_schema.table_constraints tc
|
|
236
236
|
JOIN information_schema.key_column_usage kcu
|
|
237
237
|
ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
|
|
238
238
|
WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
|
|
239
|
-
ORDER BY kcu.ordinal_position`,bindings:[]}}},
|
|
239
|
+
ORDER BY kcu.ordinal_position`,bindings:[]}}},Nm=new ra;var na=class{toSql(t){return {sql:`SELECT column_name,
|
|
240
240
|
data_type,
|
|
241
241
|
is_nullable,
|
|
242
242
|
column_default,
|
|
@@ -246,13 +246,13 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},sd=new Lo;var jo=class{toSql(t){let
|
|
|
246
246
|
FROM information_schema.columns
|
|
247
247
|
WHERE table_schema = current_schema()
|
|
248
248
|
AND table_name = '${t.table}'
|
|
249
|
-
ORDER BY ordinal_position`,bindings:[]}}},Tm=new ta;var ra=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new y(this.model).formatStringColumn("postgres",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"postgres").parse(t),i=`(${o.sql})`;return e&&(i=`${e.toLowerCase()}${i}`),{sql:i,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"postgres").parse([t]),i=`(${o.sql})`;return e&&(i=`${e.toLowerCase()}${i}`),{sql:i,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new y(this.model).formatStringColumn("postgres",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"postgres").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),i=o.toLowerCase(),a=i.lastIndexOf("cast");for(;a>=0;){let l=a>0?i[a-1]:" ",u=i[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=i.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},wm=new ra;var na=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("postgres",e.column),n=qe.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toPostgres(false);return r?`${t}${r}`:t}buildExtractTextSql(t,e){if(e.isEmpty())return `${t}::text`;let r=e.toPostgres(true);return `${t}${r}`}buildArrayLengthSql(t,e){return `jsonb_array_length(${this.buildExtractSql(t,e)})`}buildObjectKeysSql(t,e){return `jsonb_object_keys(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},Sm=new na;var oa=class{toSql(t){let e=t,r=this.renderToken(e.fn);if(r!==void 0)return {sql:r,bindings:[]};let n=e.args.map(o=>o instanceof A?o.rawValue:o instanceof k?this.toSql(o).sql:typeof o=="number"?String(o):`'${o}'`).join(", ");return {sql:`${e.fn}(${n})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "gen_random_uuid()";case "$now":return "now()";case "$currentTimestamp":return "current_timestamp";default:return}}},Nm=new oa;var sa=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},qm=new sa;var ia=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Cm=new ia;var aa=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=0,i=[],a=e.columns.map((u,d)=>{let m=e.currParamIndex+d-o,c=e.values[d];if(c instanceof A)return o++,`${r.formatStringColumn("postgres",u)} = ${c.rawValue}`;if(c instanceof k){o++;let p=new b(this.model,"postgres").parse([c],1,true).sql;return `${r.formatStringColumn("postgres",u)} = ${p}`}return i.push(c),`${r.formatStringColumn("postgres",u)} = $${m}${this.formatTypeCast(c)}`}).join(", ");return {sql:`${n} set ${a}`,bindings:i}}formatTypeCast(t){let e="";return Buffer.isBuffer(t)?e="::bytea":Array.isArray(t)?e="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?e="::jsonb":typeof t=="boolean"?e="::boolean":typeof t=="bigint"&&(e="::bigint"),e}},Rm=new aa;var la=class{toSql(t){let e=t;if(e.isRawValue){let i=e.value??[];if(i.length===0)return {sql:e.column,bindings:[]};let a=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`$${a++}`),bindings:i}}let r=e.currParamIndex,n="",o=[];if(this.isRawNode(e.value)){let i=this.formatRawIdentifierIfPossible(e.value.rawValue);n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${i}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between"){let i=`$${r} AND $${r+1}`;n=`${new y(this.model).formatStringColumn("postgres",e.column)} between ${i}`,o=e.value;}else {let i=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${i})`,o=e.value;}else if(e.operator.includes("null"))n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,o=[e.value];}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("postgres",t):t}},Mm=new la;var ua=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"postgres"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},_m=new ua;var da=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],i=new y(this.model).formatStringColumn("postgres",e.column);switch(e.jsonOperator){case "=":n=`${i} = $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "contains":n=`${i} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "not contains":n=`${i} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`NOT (${n})`),{sql:n.trim(),bindings:o}}},xm=new da;var ca=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},Om=new ca;var ma=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),i=e.clause==="materialized"?" materialized":"";return {sql:`${e.alias} as${i} (${o.sql})`,bindings:o.bindings}}},Am=new ma;var pa=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length>0){let i=[];for(let a of o){let{sql:l}=r.parse([a]);i.push(l);}i.length>0&&(n+=` ${i.join(" ")}`);}return {sql:`add column ${n}`,bindings:[]}}},Dm=new pa;var fa=class{toSql(t){return {sql:"",bindings:[]}}},$m=new fa;var ya=class{toSql(t){return {sql:"",bindings:[]}}},Pm=new ya;var ha=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"sqlite"),i=[],a=[],l=false;for(let c of e.children){let{sql:p,bindings:h}=o.parse([c]);if(!(!p||!p.trim())){if(c.file==="add_column")i.push(p),l=true;else if(c.file==="add_constraint"&&l){let f=i.pop()??"",T=p.replace(/^\s*add\s+/i,"").trimStart();i.push(`${f} ${T}`);}else {if(c.file==="set_not_null"||c.file==="drop_not_null")continue;if(c.file==="set_default"||c.file==="drop_default")continue;i.push(p),l=false;}a.push(...h);}}let u=i.join(", "),d=e.ifExists?"if exists ":"";return u.trim()?{sql:`${d}${n} ${u}`,bindings:a}:{sql:"",bindings:[]}}},vm=new ha;var ga=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Im=new ga;var ba=class{toSql(t){return {sql:"",bindings:[]}}},Em=new ba;var Ta=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},km=new Ta;var wa=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Bm=new wa;var Sa=class{toSql(t){return {sql:"",bindings:[]}}},Qm=new Sa;var Na=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Km=new Na;var qa=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Lm=new qa;var Ca=class{toSql(t){let e=t,r;return e.defaultValue instanceof A?r=e.defaultValue.rawValue:e.defaultValue instanceof k?r=new b(this.model,"sqlite").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},jm=new Ca;var Ra=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Wm=new Ra;var Ma=class{toSql(t){return {sql:"",bindings:[]}}},Fm=new Ma;var _a=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new y(this.model).formatStringColumn("sqlite",C(e.column)),o=e.dataType.toLowerCase();if(o==="bigincrement")return {sql:`${n} integer primary key autoincrement`,bindings:[]};if(o==="char"||o==="varchar")return {sql:`${n} text`,bindings:[]};if(o==="uuid"){let a=e.isForeignKey?"":" default (lower(hex(randomblob(16))))";return {sql:`${n} varchar(36)${a}`,bindings:[]}}else if(o==="ulid")return {sql:`${n} varchar(26)`,bindings:[]};if(o.includes("text"))return {sql:`${n} text`,bindings:[]};if(o==="integer"||o==="bigint"||o==="int")return e.autoIncrement?{sql:`${n} integer primary key autoincrement`,bindings:[]}:{sql:`${n} integer`,bindings:[]};if(o==="tinyint")return {sql:`${n} integer`,bindings:[]};if(o==="smallint")return {sql:`${n} integer`,bindings:[]};if(o==="mediumint")return {sql:`${n} integer`,bindings:[]};if(o==="float"||o==="double")return {sql:`${n} real`,bindings:[]};if(o==="decimal"||o==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${n} numeric(${a}, ${l})`,bindings:[]}}if(o==="date"||o==="datetime"||o==="timestamp"||o==="time"||o==="year"){let a=`${n} text`;return (o==="datetime"||o==="timestamp")&&e.autoCreate&&(a+=" default current_timestamp"),{sql:a,bindings:[]}}else {if(o==="boolean")return {sql:`${n} integer`,bindings:[]};if(o==="json"||o==="jsonb")return {sql:`${n} text`,bindings:[]};if(o==="enum")return {sql:`${n} text`,bindings:[]};if(o==="bytea"||o==="blob"||o==="binary"||o==="longblob"||o==="mediumblob"||o==="tinyblob")return {sql:`${n} blob`,bindings:[]};if(o==="geometry"||o==="point"||o==="linestring"||o==="polygon"||o==="multipoint")return {sql:`${n} ${o}`,bindings:[]}}let i=e.length?`(${e.length})`:"";return {sql:`${n} ${o}${i}`,bindings:[]}}},Um=new _a;var xa=class{toSql(t){return {sql:"",bindings:[]}}},Vm=new xa;var Oa=class{toSql(t){let e=t,r=new y(this.model),n=e.constraintName?`constraint "${e.constraintName}" `:"";if(e.constraintType==="primary_key"){let o=!!e.autoIncrement,i=(e.columnType||"").toLowerCase();return o&&(i==="integer"||i==="bigint")?{sql:`${n}primary key autoincrement`,bindings:[]}:{sql:`${n}primary key`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length){let o=e.columns.map(i=>r.formatStringColumn("sqlite",C(i))).join(", ");return e.constraintName?{sql:`${n}unique (${o})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let o=e.defaultValue;return o instanceof A?{sql:`default ${o.rawValue}`,bindings:[]}:o instanceof k?{sql:`default ${new b(this.model,"sqlite").parse([o],1,true).sql}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let o=(e.columns??[]).map(u=>r.formatStringColumn("sqlite",C(u))).join(", "),i=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(u=>r.formatStringColumn("sqlite",C(u))).join(", "),l=`${n}foreign key (${o}) references ${i}(${a})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${n}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Jm=new Oa;var Aa=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"sqlite"),i=[],a=[];for(let f of e.children){let{sql:T,bindings:N}=o.parse([f]);if(f.folder==="constraint"){let w=i.pop()??"",R=T;if(/not null/i.test(R)||/null/i.test(R)||/default/i.test(R)||/primary key/i.test(R)){let _=`${w} ${R}`.trim();_=_.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),i.push(_),a.push(...N);continue}i.push(w),i.push(R),a.push(...N);continue}i.push(T),a.push(...N);}for(let f of e.namedConstraints){let{sql:T,bindings:N}=o.parse([f]);i.push(T),a.push(...N);}let l=i.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.sqliteTemporary&&d.push("TEMPORARY");let m=d.length>0?`${d.join(" ")} `:"",c=e.withoutRowId?" WITHOUT ROWID":"",p=e.strict?" STRICT":"";return {sql:`${u}${m}${n} (${l})${c}${p}`,bindings:a}}},Hm=new Aa;var Da=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("sqlite",e.fromNode),bindings:[]}}},zm=new Da;var $a=class{toSql(t){return {sql:"distinct",bindings:[]}}},Gm=new $a;var Pa=class{toSql(t){return g.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},Ym=new Pa;var va=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Zm=new va;var Ia=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},Xm=new Ia;var Ea=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("sqlite",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("sqlite",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"sqlite").parse(r),i=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${o.sql})${i}`,bindings:o.bindings}}},ep=new Ea;var ka=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},tp=new ka;var Ba=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(!(e.value instanceof S)&&!Array.isArray(e.value)&&(n=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} $${r}`,o=[e.value]),Array.isArray(e.value)){let i=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${i})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},rp=new Ba;var Qa=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table),o=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${n} (${o})`,bindings:[]}}},np=new Qa;var Ka=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},op=new Ka;var La=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],i=Object.keys(o);if(!i.length)return {sql:n,bindings:[]};let a=i.map(m=>r.formatStringColumn("sqlite",m)).join(", "),l=[],u=[];for(let m of e.records){let c=i.map(h=>m[h]),p=[];for(let h of c)h instanceof A?p.push(h.rawValue):(l.push(h),p.push("?"));u.push(`(${p.join(", ")})`);}return {sql:`${n} (${a}) VALUES ${u.join(", ")}`,bindings:l}}},sp=new La;var ja=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let i=r.formatStringColumn("sqlite",n),a=r.formatStringColumn("sqlite",o),u=`${r.formatStringTable("sqlite",e.table)} on ${i} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let m=new b(this.model,"sqlite");for(let c of e.additionalConditions){let p=m.parse([c]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},ip=new ja;var Wa=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},ap=new Wa;var Fa=class{toSql(t){return {sql:"",bindings:[]}}},lp=new Fa;var Ua=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},up=new Ua;var Va=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.conflictColumns.map(i=>r.formatStringColumnBare("sqlite",i)).join(", ");if(e.mode==="ignore")return {sql:`ON CONFLICT (${n}) DO NOTHING`,bindings:[]};let o=e.columnsToUpdate.map(i=>`${r.formatStringColumnBare("sqlite",i)} = EXCLUDED.${r.formatStringColumnBare("sqlite",i)}`).join(", ");return {sql:`ON CONFLICT (${n}) DO UPDATE SET ${o}`,bindings:[]}}},dp=new Va;var Ja=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("sqlite",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},cp=new Ja;var Ha=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},mp=new Ha;var za=class{toSql(t){let e=t,r=new y(this.model);return {sql:`returning ${!e.columns.length||e.columns.includes("*")?"*":e.columns.map(o=>r.formatStringColumn("sqlite",o)).join(", ")}`,bindings:[]}}},pp=new za;var Ga=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},fp=new Ga;var Ya=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},yp=new Ya;var Za=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},hp=new Za;var Xa=class{toSql(t){return {sql:"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name",bindings:[]}}},gp=new Xa;var el=class{toSql(t){return {sql:`SELECT sql FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},bp=new el;var tl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Tp=new tl;var rl=class{toSql(t){let e=t;return {sql:`SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='${e.table}' AND name='${e.index}'`,bindings:[]}}},wp=new rl;var nl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Sp=new nl;var ol=class{toSql(t){return {sql:`SELECT name FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},Np=new ol;var sl=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},qp=new sl;var il=class{toSql(t){return {sql:`SELECT
|
|
249
|
+
ORDER BY ordinal_position`,bindings:[]}}},qm=new na;var oa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new y(this.model).formatStringColumn("postgres",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"postgres").parse(t),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"postgres").parse([t]),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new y(this.model).formatStringColumn("postgres",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"postgres").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),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}"`})}},Cm=new oa;var sa=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=Re.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}},Rm=new sa;var ia=class{toSql(t){let e=t,r=Qe(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 A?s.rawValue:s instanceof $?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}}},_m=new ia;var aa=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},Mm=new aa;var la=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},xm=new la;var ua=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=0,s=[],a=e.columns.map((u,d)=>{let m=e.currParamIndex+d-o,c=e.values[d];if(c instanceof A)return o++,`${r.formatStringColumn("postgres",u)} = ${c.rawValue}`;if(c instanceof $){o++;let p=new b(this.model,"postgres").parse([c],1,true).sql;return `${r.formatStringColumn("postgres",u)} = ${p}`}return s.push(c),`${r.formatStringColumn("postgres",u)} = $${m}${this.formatTypeCast(c)}`}).join(", ");return {sql:`${n} set ${a}`,bindings:s}}formatTypeCast(t){let e="";return Buffer.isBuffer(t)?e="::bytea":Array.isArray(t)?e="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?e="::jsonb":typeof t=="boolean"?e="::boolean":typeof t=="bigint"&&(e="::bigint"),e}},Om=new ua;var da=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 $){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}},Am=new da;var ca=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}}},Dm=new ca;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 "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`NOT (${n})`),{sql:n.trim(),bindings:o}}},$m=new ma;var pa=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}}},Pm=new pa;var fa=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":"";return {sql:`${e.alias} as${s} (${o.sql})`,bindings:o.bindings}}},vm=new fa;var ya=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:[]}}},Im=new ya;var ha=class{toSql(t){return {sql:"",bindings:[]}}},Em=new ha;var ga=class{toSql(t){return {sql:"",bindings:[]}}},km=new ga;var ba=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 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 f=s.pop()??"",T=p.replace(/^\s*add\s+/i,"").trimStart();s.push(`${f} ${T}`);}else {if(c.file==="set_not_null"||c.file==="drop_not_null")continue;if(c.file==="set_default"||c.file==="drop_default")continue;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:[]}}},Bm=new ba;var Ta=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Km=new Ta;var wa=class{toSql(t){return {sql:"",bindings:[]}}},Qm=new wa;var Sa=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Lm=new Sa;var Na=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Fm=new Na;var qa=class{toSql(t){return {sql:"",bindings:[]}}},jm=new qa;var Ca=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Wm=new Ca;var Ra=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Um=new Ra;var _a=class{toSql(t){let e=t,r;return e.defaultValue instanceof A?r=e.defaultValue.rawValue:e.defaultValue instanceof $?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:[]}}},Vm=new _a;var Ma=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Jm=new Ma;var xa=class{toSql(t){return {sql:"",bindings:[]}}},Hm=new xa;var Oa=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:[]}}},zm=new Oa;var Aa=class{toSql(t){return {sql:"",bindings:[]}}},Gm=new Aa;var Da=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 A?{sql:`default ${o.rawValue}`,bindings:[]}:o instanceof $?{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:[]}}},Ym=new Da;var $a=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:T,bindings:N}=o.parse([f]);if(f.folder==="constraint"){let w=s.pop()??"",R=T;if(/not null/i.test(R)||/null/i.test(R)||/default/i.test(R)||/primary key/i.test(R)){let M=`${w} ${R}`.trim();M=M.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(M),a.push(...N);continue}s.push(w),s.push(R),a.push(...N);continue}s.push(T),a.push(...N);}for(let f of e.namedConstraints){let{sql:T,bindings:N}=o.parse([f]);s.push(T),a.push(...N);}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}}},Zm=new $a;var Pa=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:[]}}},Xm=new Pa;var va=class{toSql(t){return {sql:"distinct",bindings:[]}}},ep=new va;var Ia=class{toSql(t){return g.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},tp=new Ia;var Ea=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},rp=new Ea;var ka=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},np=new ka;var Ba=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new y(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("sqlite",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("sqlite",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"sqlite").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${o.sql})${s}`,bindings:o.bindings}}},op=new Ba;var Ka=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},sp=new Ka;var Qa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(e.value instanceof $){let s=new b(this.model,"sqlite").parse([e.value],1,true).sql;n=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${s}`,o=[];}else !(e.value instanceof S)&&!Array.isArray(e.value)&&(n=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} $${r}`,o=[e.value]);if(Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${s})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},ip=new Qa;var La=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:[]}}},ap=new La;var Fa=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},lp=new Fa;var ja=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],s=Object.keys(o);if(!s.length)return {sql:n,bindings:[]};let a=s.map(m=>r.formatStringColumn("sqlite",m)).join(", "),l=[],u=[];for(let m of e.records){let c=s.map(h=>m[h]),p=[];for(let h of c)h instanceof A?p.push(h.rawValue):(l.push(h),p.push("?"));u.push(`(${p.join(", ")})`);}return {sql:`${n} (${a}) VALUES ${u.join(", ")}`,bindings:l}}},up=new ja;var Wa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let s=r.formatStringColumn("sqlite",n),a=r.formatStringColumn("sqlite",o),u=`${r.formatStringTable("sqlite",e.table)} on ${s} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let m=new b(this.model,"sqlite");for(let c of e.additionalConditions){let p=m.parse([c]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},dp=new Wa;var Ua=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},cp=new Ua;var Va=class{toSql(t){return {sql:"",bindings:[]}}},mp=new Va;var Ja=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},pp=new Ja;var Ha=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.conflictColumns.map(s=>r.formatStringColumnBare("sqlite",s)).join(", ");if(e.mode==="ignore")return {sql:`ON CONFLICT (${n}) DO NOTHING`,bindings:[]};let o=e.columnsToUpdate.map(s=>`${r.formatStringColumnBare("sqlite",s)} = EXCLUDED.${r.formatStringColumnBare("sqlite",s)}`).join(", ");return {sql:`ON CONFLICT (${n}) DO UPDATE SET ${o}`,bindings:[]}}},fp=new Ha;var za=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:[]}}},yp=new za;var Ga=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},hp=new Ga;var Ya=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:[]}}},gp=new Ya;var Za=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},bp=new Za;var Xa=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},Tp=new Xa;var el=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},wp=new el;var tl=class{toSql(t){return {sql:"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name",bindings:[]}}},Sp=new tl;var rl=class{toSql(t){return {sql:`SELECT sql FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},Np=new rl;var nl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},qp=new nl;var ol=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:[]}}},Cp=new ol;var sl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Rp=new sl;var il=class{toSql(t){return {sql:`SELECT name FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},_p=new il;var al=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},Mp=new al;var ll=class{toSql(t){return {sql:`SELECT
|
|
250
250
|
'PRIMARY' as name,
|
|
251
251
|
name as column_name
|
|
252
252
|
FROM pragma_table_info('${t.table}')
|
|
253
253
|
WHERE pk > 0
|
|
254
|
-
ORDER BY pk`,bindings:[]}}},Cp=new il;var al=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Rp=new al;var ll=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new y(this.model).formatStringColumn("sqlite",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"sqlite").parse(t),i=`(${o.sql})`;return e&&(i=`${e.toLowerCase()}${i}`),{sql:i,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"sqlite").parse([t]),i=`(${o.sql})`;return e&&(i=`${e.toLowerCase()}${i}`),{sql:i,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new y(this.model).formatStringColumn("sqlite",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"sqlite").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),i=o.toLowerCase(),a=i.lastIndexOf("cast");for(;a>=0;){let l=a>0?i[a-1]:" ",u=i[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=i.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},Mp=new ll;var ul=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("sqlite",e.column),n=qe.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toSqlite();return r==="$"?t:`json_extract(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toSqlite();return r==="$"?`json_array_length(${t})`:`json_array_length(${t}, '${r}')`}buildObjectKeysSql(t,e){return `json_each.key FROM json_each(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},_p=new ul;var dl=class{toSql(t){let e=t,r=this.renderToken(e.fn);if(r!==void 0)return {sql:r,bindings:[]};let n=e.args.map(o=>o instanceof A?o.rawValue:o instanceof k?this.toSql(o).sql:typeof o=="number"?String(o):`'${o}'`).join(", ");return {sql:`${e.fn}(${n})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "lower(hex(randomblob(16)))";case "$now":case "$currentTimestamp":return "current_timestamp";default:return}}},xp=new dl;var cl=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return e.keyword="",{sql:e.fromNode,bindings:[]};let r=new y(this.model).getFromForWriteOperations("sqlite",e.fromNode);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},Op=new cl;var ml=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Ap=new ml;var pl=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],i=e.columns.map((a,l)=>{let u=e.values[l];if(u instanceof A)return `${r.formatStringColumn("sqlite",a)} = ${u.rawValue}`;if(u instanceof k){let d=new b(this.model,"sqlite").parse([u],1,true).sql;return `${r.formatStringColumn("sqlite",a)} = ${d}`}return o.push(u),`${r.formatStringColumn("sqlite",a)} = ?`}).join(", ");return {sql:`${n} set ${i}`,bindings:o}}},Dp=new pl;var fl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",n=[];if(this.isRawNode(e.value)){let o=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${o}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,n=e.value;else {let o=e.value.map(i=>"?").join(", ");r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${o})`,n=e.value;}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ?`,n=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("sqlite",t):t}},$p=new fl;var yl=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"sqlite"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},Pp=new yl;var hl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new y(this.model).formatStringColumn("sqlite",e.column);switch(e.jsonOperator){case "=":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},vp=new hl;var gl=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"sqlite"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"sqlite"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},Ip=new gl;var bl=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex);return {sql:`${e.alias} as (${o.sql})`,bindings:o.bindings}}},Ep=new bl;var kp={mssql:{alter_table:{add_column:du,add_constraint:cu,add_primary_key:mu,alter_column_type:pu,alter_table:fu,drop_column:yu,drop_constraint:hu,drop_default:gu,drop_not_null:bu,drop_primary_key:Tu,rename_column:wu,rename_table:Su,set_default:Nu,set_not_null:qu,set_table_options:Cu},column:{column_type:Ru},constraint:{after:Mu,constraint:_u},create_table:{create_table:xu},delete:{delete:Ou},distinct:{distinct:Au,distinct_on:Du},drop_table:{drop_table:$u},extension:{create_extension:Pu},from:{from:vu},group_by:{group_by:Iu},having:{having:Eu},index_op:{create_index:ku,drop_index:Bu},insert:{insert:Qu},join:{join:Ku},limit:{limit:Lu},lock:{lock:ju},offset:{offset:Wu},on_duplicate:{on_duplicate:Fu},order_by:{order_by:Uu},raw:{raw:Vu},returning:{returning:Ju},schema:{check_constraint_info:Hu,foreign_key_info:zu,get_column_listing:Gu,get_tables:Yu,has_check_constraint:Zu,has_column:Xu,has_index:ed,has_primary_key:td,has_table:rd,index_info:nd,primary_key_info:od,table_info:sd},select:{select:id,select_json:ad},sqlfunc:{sqlfunc:ld},truncate:{truncate:ud},union:{union:dd},update:{update:cd},where:{where:md,where_group:pd,where_json:fd,where_subquery:yd},with:{with:hd}},mysql:{alter_table:{add_column:gd,add_constraint:bd,add_primary_key:Td,alter_column_type:wd,alter_table:Sd,drop_column:Nd,drop_constraint:qd,drop_default:Cd,drop_not_null:Rd,drop_primary_key:Md,rename_column:_d,rename_table:xd,set_default:Od,set_not_null:Ad,set_table_options:Dd},column:{column_type:$d},constraint:{after:Pd,constraint:vd},create_table:{create_table:Id},delete:{delete:Ed},distinct:{distinct:kd,distinct_on:Bd},drop_table:{drop_table:Qd},extension:{create_extension:Kd},from:{from:Ld},group_by:{group_by:jd},having:{having:Wd},index_op:{create_index:Fd,drop_index:Ud},insert:{insert:Vd},join:{join:Jd},limit:{limit:Hd},lock:{lock:zd},offset:{offset:Gd},on_duplicate:{on_duplicate:Yd},order_by:{order_by:Zd},raw:{raw:Xd},returning:{returning:ec},schema:{check_constraint_info:tc,foreign_key_info:rc,get_column_listing:nc,get_tables:oc,has_check_constraint:sc,has_column:ic,has_index:ac,has_primary_key:lc,has_table:uc,index_info:dc,primary_key_info:cc,table_info:mc},select:{select:pc,select_json:fc},sqlfunc:{sqlfunc:yc},truncate:{truncate:hc},union:{union:gc},update:{update:bc},where:{where:Tc,where_group:wc,where_json:Sc,where_subquery:Nc},with:{with:qc}},postgres:{alter_table:{add_column:Cc,add_constraint:Rc,add_primary_key:Mc,alter_column_type:_c,alter_table:xc,drop_column:Oc,drop_constraint:Ac,drop_default:Dc,drop_not_null:$c,drop_primary_key:Pc,rename_column:vc,rename_table:Ic,set_default:Ec,set_not_null:kc,set_table_options:Bc},column:{column_type:Qc},constraint:{after:Kc,constraint:Lc},create_table:{create_table:jc},delete:{delete:Wc},distinct:{distinct:Fc,distinct_on:Uc},drop_table:{drop_table:Vc},extension:{create_extension:Jc},from:{from:Hc},group_by:{group_by:zc},having:{having:Gc},index_op:{create_index:Yc,drop_index:Zc},insert:{insert:Xc},join:{join:em},limit:{limit:tm},lock:{lock:rm},offset:{offset:nm},on_duplicate:{on_duplicate:om},order_by:{order_by:sm},raw:{raw:im},returning:{returning:am},schema:{check_constraint_info:lm,foreign_key_info:um,get_column_listing:dm,get_tables:cm,has_check_constraint:mm,has_column:pm,has_index:fm,has_primary_key:ym,has_table:hm,index_info:gm,primary_key_info:bm,table_info:Tm},select:{select:wm,select_json:Sm},sqlfunc:{sqlfunc:Nm},truncate:{truncate:qm},union:{union:Cm},update:{update:Rm},where:{where:Mm,where_group:_m,where_json:xm,where_subquery:Om},with:{with:Am}},sqlite:{alter_table:{add_column:Dm,add_constraint:$m,alter_column_type:Pm,alter_table:vm,drop_column:Im,drop_constraint:Em,drop_default:km,drop_not_null:Bm,drop_primary_key:Qm,rename_column:Km,rename_table:Lm,set_default:jm,set_not_null:Wm,set_table_options:Fm},column:{column_type:Um},constraint:{after:Vm,constraint:Jm},create_table:{create_table:Hm},delete:{delete:zm},distinct:{distinct:Gm,distinct_on:Ym},drop_table:{drop_table:Zm},extension:{create_extension:Xm},from:{from:ep},group_by:{group_by:tp},having:{having:rp},index_op:{create_index:np,drop_index:op},insert:{insert:sp},join:{join:ip},limit:{limit:ap},lock:{lock:lp},offset:{offset:up},on_duplicate:{on_duplicate:dp},order_by:{order_by:cp},raw:{raw:mp},returning:{returning:pp},schema:{check_constraint_info:fp,foreign_key_info:yp,get_column_listing:hp,get_tables:gp,has_check_constraint:bp,has_column:Tp,has_index:wp,has_primary_key:Sp,has_table:Np,index_info:qp,primary_key_info:Cp,table_info:Rp},select:{select:Mp,select_json:_p},sqlfunc:{sqlfunc:xp},truncate:{truncate:Op},union:{union:Ap},update:{update:Dp},where:{where:$p,where_group:Pp,where_json:vp,where_subquery:Ip},with:{with:Ep}}};var b=class{constructor(t,e){this.dbType=e,this.model=t;}parse(t,e=1,r=false){if(!t.length)return {sql:"",bindings:[]};let n=t.find(R=>!!R&&R.folder==="distinctOn"),o=!n&&t.find(R=>!!R&&R.folder==="distinct"),i=this.dbType==="mssql"?t.find(R=>!!R&&R.folder==="lock")??null:null,a=i?this.getMssqlTableHints(i):"",l=t.filter(R=>R!==null&&R.folder!=="distinct"&&R.folder!=="distinctOn"),u=l.some(R=>R.folder==="offset"),d=l.some(R=>R.folder==="order_by"),m=l.find(R=>R.folder==="limit"),c=l.find(R=>R.folder==="offset"),p=this.dbType==="mssql"&&m&&!u&&!d,h=this.dbType==="mssql"&&!p&&(m||c),f=[],T=[],N=null;p&&m&&T.push(m.limit);for(let R=0;R<l.length;R++){let _=l[R];if(p&&_.folder==="limit"||h&&(_.folder==="limit"||_.folder==="offset"))continue;_.currParamIndex=e+T.length;let E=kp[this.mapCommonDbType(this.dbType)][_.folder][_.file];if(!E)throw new Error(`Interpreter not found for ${this.dbType} ${_.keyword}`);E.model=this.model,E.dbType=this.dbType;let O=E.toSql(_);if(!O.sql||!O.sql.trim().length)continue;let D=l[R+1],V=!D||D.keyword!==_.keyword?"":D.chainsWith;if(_.folder==="lock"||_.folder==="on_duplicate"||_.folder==="returning"||_.folder==="schema"){f.push(`${O.sql}${V}`),T.push(...O.bindings),N=_.keyword;continue}if(N!==_.keyword||_.canKeywordBeSeenMultipleTimes){if(r)f.push(`${O.sql}${V}`);else {let $=_.keyword;if(_.folder==="with"&&this.dbType!=="mssql"){let Y=R,ve=false;for(;Y<l.length&&l[Y].keyword===_.keyword;){let er=l[Y];if(er.folder==="with"&&er.clause==="recursive"){ve=true;break}Y++;}ve&&($=`${$} recursive`);}if($==="select"){let Y=p?`top (@${e}) `:"";if(n){let ve=Array.isArray(n.columns)?n.columns.join(", "):"";f.push(`select ${Y}distinct on (${ve}) ${O.sql}${V}`);}else o?f.push(`select ${Y}distinct ${O.sql}${V}`):f.push(`select ${Y}${O.sql}${V}`);}else $==="from"&&a?f.push(`${$} ${O.sql}${a}${V}`):f.push(`${$} ${O.sql}${V}`);}N=_.keyword;}else f.push(`${O.sql}${V}`);T.push(...O.bindings);}if(h){d||f.push("order by (select null)");let R=c?.offset??0;T.push(R);let E=`offset @${e+T.length-1} rows`;if(m){T.push(m.limit);let O=e+T.length-1;E+=` fetch next @${O} rows only`;}f.push(E);}return {sql:f.join(" "),bindings:T}}mapCommonDbType(t){switch(t){case "mariadb":return "mysql";case "cockroachdb":return "postgres";default:return t}}getMssqlTableHints(t){let e=[];switch(t.lockType){case "UPDATE":e.push("UPDLOCK");break;case "SHARE":e.push("HOLDLOCK");break;case "NO_KEY_UPDATE":e.push("UPDLOCK");break;case "KEY_SHARE":e.push("HOLDLOCK");break}return t.skipLocked&&e.push("READPAST"),t.noWait&&e.push("NOWAIT"),e.length>0?` with (${e.join(", ")})`:""}};var pr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var fr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var yr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var hr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var gr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var br=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_table";this.table=e;}};var Tr=class extends S{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_column";this.table=e,this.column=r;}};var wr=class extends S{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_index";this.table=e,this.index=r;}};var Sr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_primary_key";this.table=e;}};var Nr=class extends S{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_check_constraint";this.table=e,this.constraint=r;}};var qr=class extends S{constructor(){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_tables";}};var Cr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_column_listing";this.table=e;}};var Rr=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var ge=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var pt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var Mr=class extends S{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="alter_column_type";this.column=e,this.newType=r,this.options=n;}};var ce=class extends S{constructor(e,r=[],n=false){super("alter table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="alter_table";this.table=e,this.children=r,this.ifExists=n;}};var _r=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var be=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var Pt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var xr=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var ft=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var Or=class extends S{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var Ar=class extends S{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_default";this.column=e,this.defaultValue=r;}};var Dr=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var yt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="set_table_options";this.engine=e.engine,this.charset=e.charset,this.collate=e.collate;}};var F=class extends S{constructor(e,r={},n=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="constraint";this.constraintType=e,this.columns=r.columns,this.references=r.references,this.constraintName=r.constraintName,this.onDelete=r.onDelete,this.onUpdate=r.onUpdate,this.defaultValue=r.defaultValue,this.checkExpression=r.checkExpression,this.isRawValue=n;}};var $r=class extends S{constructor(e,r=[],n=[],o=false,i){super("create table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="create_table";this.file="create_table";this.table=e,this.children=r,this.namedConstraints=n,this.ifNotExists=o,i&&Object.assign(this,i);}};var Pr=class extends S{constructor(e,r=false){super("drop table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="drop_table";this.file="drop_table";this.table=e,this.ifExists=r;}};var vr=class extends S{constructor(e,r=true){super("create extension");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="extension";this.file="create_extension";this.extensionName=e,this.ifNotExists=r;}};var Ir=class extends S{constructor(e,r,n,o=false){super("create index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="index_op";this.file="create_index";this.table=e,this.columns=r,this.indexName=n,this.unique=o;}};var Er=class extends S{constructor(e,r,n){super("drop index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.cascade=false;this.folder="index_op";this.file="drop_index";this.indexName=e,this.table=r,this.cascade=n??false;}};var ht=class extends S{constructor(e,r=false){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e;}};function Ay(s){return s.endsWith("ies")?s.slice(0,-3)+"y":s.endsWith("sses")||s.endsWith("shes")||s.endsWith("ches")||s.endsWith("xes")||s.endsWith("zes")?s.slice(0,-2):s.endsWith("s")&&!s.endsWith("ss")?s.slice(0,-1):s}var kr=Symbol("columns"),gt=Symbol("primaryKey"),Tl=Symbol("relations"),Bp=Symbol("indexes"),Qp=Symbol("uniques"),Kp=Symbol("checks"),wl=s=>`${Ay(s)}_id`,Sl=(s,t)=>`idx_${s}_${t}`,Te=(s,t)=>`uq_${s}_${t}`,Z=(s,t,e)=>`fk_${s}_${t}${e?`_${e}`:""}`,we=(s,t)=>`pk_${s}_${t}`;var I=class extends S{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="column";this.file="column_type";this.isRawValue=false;this.column=e,this.dataType=r,this.length=n.length,this.precision=n.precision,this.scale=n.scale,this.enumValues=n.enumValues,this.withTimezone=n.withTimezone,this.autoIncrement=n.autoIncrement,this.autoCreate=n.autoCreate,this.autoUpdate=n.autoUpdate,this.collate=n.collate,this.isRawValue=n.isRawValue??false,this.unsigned=n.unsigned,this.zerofill=n.zerofill;}};var vt=class extends S{constructor(e,r=false,n=false){super("lock");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="lock";this.file="lock";this.lockType=e,this.skipLocked=r,this.noWait=n;}};var He=class extends S{constructor(e,r=false){super(r?"union all":"union");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="union";this.file="union";this.query=e,this.isAll=r;}};var bt=class extends S{constructor(e,r,n){e==="normal"&&(e="");super("with");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="with";this.file="with";this.alias=r,this.body=n,this.clause=e;}};var Ke=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var Br=class extends S{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var Qr=class extends Ke{constructor(t,e,r,n,o=[],i="create_table"){super(e),this.columnNode=r,this.tableName=n,this.namedConstraints=o,this.context=i,this.sqlType=t;}primaryKey(t){let e=we(this.tableName,C(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new F("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new F("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??e})),this)}foreignKey(t,e){this.columnNode.isForeignKey=true;let[r,n]=t.split("."),o=n.split(","),i=e?.constraintName??Z(this.tableName??"",C(this.columnNode.column),o[0]);return this.context==="alter_table"?(this.nodes.push(new F("foreign_key",{columns:[C(this.columnNode.column)],references:{table:r,columns:o},constraintName:i,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this):(this.namedConstraints.push(new F("foreign_key",{columns:[C(this.columnNode.column)],references:{table:r,columns:o},constraintName:i,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this)}increment(){return this.columnNode.autoIncrement=true,this}unsigned(){return this.columnNode.unsigned=true,this}zerofill(){return this.columnNode.zerofill=true,this}notNullable(){return this.nodes.push(new F("not_null",{columns:[C(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new F("null",{columns:[C(this.columnNode.column)]})),this}default(t){let e;return t instanceof A||t instanceof k?e=t:t===null?e="NULL":typeof t=="boolean"?e=t?"TRUE":"FALSE":t!==void 0&&(e=t.toString()),this.nodes.push(new F("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new F("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??Te(this.tableName??"",C(this.columnNode.column))})),this):(this.namedConstraints.push(new F("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName||Te(this.tableName??"",C(this.columnNode.column))})),this)}check(t,e){let r=C(this.columnNode.column),n=e?.constraintName??`chk_${this.tableName}_${r}`.substring(0,63);return this.context==="alter_table"?(this.nodes.push(new F("check",{columns:[r],checkExpression:t,constraintName:n})),this):(this.namedConstraints.push(new F("check",{columns:[r],checkExpression:t,constraintName:n})),this)}after(t){return this.sqlType!=="mysql"?this:(this.nodes.push(new Br(t)),this)}collate(t){return this.columnNode.collate=t,this}handleSqliteAutoIncrement(t){return this.nodes.push(new F("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this}};var ze=class extends Ke{constructor(e,r,n,o){super(r);this.context="create_table";this.tableName=n,this.namedConstraints=[],this.context=o??"create_table",this.sqlType=e;}mysqlOptions(e){return this._mysqlOptions=e,this}getMysqlOptions(){return this._mysqlOptions}build(e){return this.nodes.push(e),new Qr(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new A(e)}char(e,r=1){let n=new I(e,"char",{length:r});return this.build(n)}varchar(e,r=255){let n=new I(e,"varchar",{length:r});return this.build(n)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let n=new I(e,r);return this.build(n)}longtext(e){return this.text(e,"longtext")}mediumtext(e){return this.text(e,"mediumtext")}tinytext(e){return this.text(e,"tinytext")}uuid(e){let r=new I(e,"uuid");return this.build(r)}ulid(e){let r=new I(e,"ulid");return this.build(r)}integer(e,r=255){let n=new I(e,"integer",{length:r});return this.build(n)}tinyint(e,r=255){let n=new I(e,"tinyint",{length:r});return this.build(n)}smallint(e,r=255){let n=new I(e,"smallint",{length:r});return this.build(n)}mediumint(e,r=255){let n=new I(e,"mediumint",{length:r});return this.build(n)}biginteger(e,r=255){let n=new I(e,"bigint",{length:r});return this.build(n)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let n=new I(e,"float",{precision:r});return this.build(n)}double(e,r=10){let n=new I(e,"double",{precision:r});return this.build(n)}real(e,r=10){let n=new I(e,"real",{precision:r});return this.build(n)}decimal(e,r=10,n=2){let o=new I(e,"decimal",{precision:r,scale:n});return this.build(o)}numeric(e,r=10,n=2){let o=new I(e,"numeric",{precision:r,scale:n});return this.build(o)}increment(e,r=255){return this.integer(e,r).increment()}bigIncrement(e,r=255){return this.biginteger(e,r).increment()}date(e,r){let n=new I(e,"date",{precision:r});return this.build(n)}time(e,r){let n=new I(e,"time",{precision:r});return this.build(n)}year(e){let r=new I(e,"year");return this.build(r)}datetime(e,r){let n=new I(e,"datetime",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}timestamp(e,r){let n=new I(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}boolean(e){let r=new I(e,"boolean");return this.build(r)}binary(e){let r=new I(e,"binary");return this.build(r)}varbinary(e,r=255){let n=new I(e,"varbinary",{length:r});return this.build(n)}blob(e){let r=new I(e,"blob");return this.build(r)}tinyblob(e){let r=new I(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new I(e,"mediumblob");return this.build(r)}longblob(e){let r=new I(e,"longblob");return this.build(r)}json(e){let r=new I(e,"json");return this.build(r)}jsonb(e){let r=new I(e,"jsonb");return this.build(r)}enum(e,r){let n=new I(e,"enum",{enumValues:r});return this.build(n)}custom(e,r,n){let o=new I(e,r,{length:n});return this.build(o)}rawColumn(e){let r=new I(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new I(e,"geometry");return this.build(r)}point(e){let r=new I(e,"point");return this.build(r)}linestring(e){let r=new I(e,"linestring");return this.build(r)}polygon(e){let r=new I(e,"polygon");return this.build(r)}multiPoint(e){let r=new I(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var Kr=class extends Ke{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new A(t)}addColumn(t){let e=[],r=new ze(this.sqlType,e,this.table,"alter_table"),n=t(r);if(!e.length)return;let o=r.getNamedConstraints(),i=e.filter(m=>m.folder==="column");if(e=e.concat(o),i.length!==1)throw new Error("addColumn callback must define exactly one column");let a=i[0],l=n.getNodes().filter(m=>{let c=m;return c.constraintType==="not_null"||c.constraintType==="null"||c.constraintType==="default"}),u=new Rr(a);u.inlineConstraints=l,this.nodes.push(u),n.getNodes().filter(m=>{let c=m;return c.constraintType==="unique"||c.constraintType==="foreign_key"||c.constraintType==="primary_key"}).forEach(m=>{this.nodes.push(new ge(m));});}alterColumn(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new ze(this.sqlType,e,this.table,"alter_table"),n=t(r);if(!e.length)return;let o=e.filter(p=>p.folder==="column");if(o.length!==1)throw new Error("alterColumn callback must define exactly one column");let i=o[0],a=C(i.column),l=n.getNodes().find(p=>p.constraintType==="null"),d=n.getNodes().find(p=>p.constraintType==="not_null")||l,m=n.getNodes().find(p=>p.constraintType==="default"),c={};d&&(c.nullable=d.constraintType==="null"),m&&(m.defaultValue===void 0||m.defaultValue===null||m.defaultValue==="NULL"?c.dropDefault=true:c.default=m.defaultValue),i.collate&&(this.sqlType==="mysql"||this.sqlType==="mariadb")&&(c.collate=i.collate),this.nodes.push(new Mr(C(a),i,c)),d&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(d.constraintType==="not_null"?this.nodes.push(new Dr(C(a))):d.constraintType==="null"&&this.nodes.push(new xr(C(a)))),m&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(m.defaultValue===void 0||m.defaultValue===null||m.defaultValue==="NULL"?this.nodes.push(new Pt(C(a))):this.nodes.push(new Ar(C(a),m.defaultValue))),n.getNodes().forEach(p=>{let h=p;switch(h.constraintType){case "primary_key":this.addPrimaryKey(C(a));break;case "unique":this.unique(C(a),{constraintName:h.constraintName});break;case "foreign_key":this.foreignKey(C(a),h.references?.table??"",C(h.references?.columns?.[0]??""),{constraintName:h.constraintName,onDelete:h.onDelete,onUpdate:h.onUpdate});break}});}dropColumn(t){this.nodes.push(new _r(t));}renameColumn(t,e){this.nodes.push(new Or(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Pt(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new pt([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ge(new F(...t)));}foreignKey(t,e,r,n){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ge(new F("foreign_key",{columns:[t],references:{table:e,columns:[r]},constraintName:n?.constraintName??Z(this.table,t,r),onDelete:n?.onDelete,onUpdate:n?.onUpdate})));}unique(t,e){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ge(new F("unique",{columns:[t],constraintName:e?.constraintName??Te(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let r=Z(this.table,t,e);this.nodes.push(new be(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new q("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??Te(this.table,t);this.nodes.push(new be(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new be(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new q("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new ft(t));}setTableOptions(t){let e=this.sqlType==="mysql"||this.sqlType==="mariadb",r=this.sqlType==="postgres"||this.sqlType==="cockroachdb",n=this.sqlType==="mssql";return this.sqlType==="sqlite"?this:(e?this.nodes.push(new yt(t)):r?this.nodes.push(new yt(t)):n&&this.nodes.push(new yt(t)),this)}};var ie=class{constructor(t){if(this.sqlType=t||v.DB_TYPE,!this.sqlType)throw new q("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new A(t)}rawQuery(t){this.queryStatements.push(t);}async execute(){for(let t of this.queryStatements)this.rawQuery(t);}runFile(t){if(!oe.existsSync(t))throw new q("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=dt.basename(t),r=dt.extname(e);if(r!==".sql"&&r!==".txt")throw new q("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let o=oe.readFileSync(t,"utf-8").split(";").map(i=>i.trim()).filter(i=>i.length>0&&!i.startsWith("--"));for(let i of o)this.rawQuery(i);}createTable(t,e,r){let n=new ze(this.sqlType,[],t);e(n);let o=n.getNodes(),i=new b({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a={...r,...this.sqlType==="mysql"||this.sqlType==="mariadb"?n.getMysqlOptions()||{}:{}},l=new $r(t,o,n.getNamedConstraints(),r?.ifNotExists,a),u=i.parse([l]).sql,d=u.startsWith("create table")?u:`create table ${u}`;this.rawQuery(d),this.generateAutoUpdateTriggers(t,o);}alterTable(t,e){let r=[],n=new Kr(t,r,this.sqlType);if(e(n),!r.length)return;let o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"}),i=[],a=()=>{if(!i.length)return;let u=new ce(t,i),d=o.parse([u]).sql;if(!d||!d.trim())return;let m=d.startsWith("alter table")?d:`alter table ${d}`;this.rawQuery(m),i=[];};for(let u of r)u.file==="add_constraint"&&i.length&&i[0].file==="add_column"||a(),i.push(u);a();let l=r.filter(u=>u.file==="add_column").map(u=>u.column);this.generateAutoUpdateTriggers(t,l);}dropTable(t,e=false){let r=new Pr(t,e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}renameTable(t,e){let r=new ce(t,[new mt(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}truncateTable(t){let e=new ht(t,true),r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}createIndex(t,e,r={}){Array.isArray(e)||(e=[e]);let n=r.constraintName||Sl(t,e.join("_")),o=new Ir(t,e,n),i=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(i.parse([o]).sql);}dropIndex(t,e){let r=new Er(t,e),n=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addPrimaryKey(t,e){let r=new ce(t,[new pt(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addUnique(t,e,r){let n=Array.isArray(e)?e:[e],o=r?.constraintName??Te(t,n.join("_")),i=new F("unique",{columns:n,constraintName:o}),a=new ce(t,[new ge(i)]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropForeignKey(t,e,r){let n=Z(t,e,r),o=new be(n),i=new ce(t,[o]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([i]).sql);}dropUnique(t,e,r){let n=Array.isArray(e)?Te(t,e.join("_")):Te(t,e),o=r?.constraintName??n,i=new be(o),a=new ce(t,[i]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new ft,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new F(...e),n=new ce(t,[new ge(r)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}dropConstraint(t,e){let r=new be(e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addCheck(t,e,r){let n=r?.constraintName??`chk_${t}_custom`.substring(0,63),o=new F("check",{checkExpression:e,constraintName:n}),i=new ce(t,[new ge(o)]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([i]).sql);}dropCheck(t,e){if(this.sqlType==="mysql"){this.rawQuery(`ALTER TABLE \`${t}\` DROP CHECK \`${e}\``);return}let r=new be(e),n=new ce(t,[r]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}createExtension(t,e=true){let r=new vr(t,e),n=this.generateAstInstance({table:"",databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}generateAutoUpdateTriggers(t,e){if(this.sqlType==="mysql"||this.sqlType==="mariadb")return;let r=e.filter(n=>n.folder==="column"&&n.autoUpdate===true).map(n=>C(n.column));for(let n of r){let o=this.getAutoUpdateTriggerSql(t,n);for(let i of o)this.rawQuery(i);}}getAutoUpdateTriggerSql(t,e){let r=`trg_${t}_${e}_auto_update`;switch(this.sqlType){case "postgres":case "cockroachdb":return [`CREATE OR REPLACE FUNCTION ${r}_fn() RETURNS trigger AS $$ BEGIN NEW."${e}" = CURRENT_TIMESTAMP; RETURN NEW; END; $$ LANGUAGE plpgsql`,`CREATE OR REPLACE TRIGGER ${r} BEFORE UPDATE ON "${t}" FOR EACH ROW EXECUTE FUNCTION ${r}_fn()`];case "sqlite":return [`CREATE TRIGGER IF NOT EXISTS ${r} AFTER UPDATE ON "${t}" FOR EACH ROW BEGIN UPDATE "${t}" SET "${e}" = CURRENT_TIMESTAMP WHERE rowid = NEW.rowid; END`];case "mssql":return [`CREATE OR ALTER TRIGGER [${r}] ON [${t}] AFTER UPDATE AS BEGIN SET NOCOUNT ON; UPDATE t SET t.[${e}] = CURRENT_TIMESTAMP FROM [${t}] t INNER JOIN inserted i ON t.[id] = i.[id]; END`];default:return []}}generateAstInstance(t){return new b(t,this.sqlType)}};var Lr,Wp,It=class{constructor(t,e){Fl(this,Lr);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new ie(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=Ul(this,Lr,Wp).call(this)),this.executionPromise.then(t,e)}rawStatement(t){return this.schema.rawStatement(t)}rawQuery(t){return this.schema.rawQuery(t),this}createTable(t,e,r){return this.schema.createTable(t,e,r),this}alterTable(t,e){return this.schema.alterTable(t,e),this}dropTable(t,e=false){return this.schema.dropTable(t,e),this}renameTable(t,e){return this.schema.renameTable(t,e),this}truncateTable(t){return this.schema.truncateTable(t),this}createIndex(t,e,r){return this.schema.createIndex(t,e,r),this}dropIndex(t,e){return this.schema.dropIndex(t,e),this}addPrimaryKey(t,e){return this.schema.addPrimaryKey(t,e),this}addUnique(t,e,r){return this.schema.addUnique(t,e,r),this}addConstraint(t,e,...r){return this.schema.addConstraint(t,e,...r),this}dropPrimaryKey(t){return this.schema.dropPrimaryKey(t),this}dropForeignKey(t,e,r){return this.schema.dropForeignKey(t,e,r),this}dropUnique(t,e,r){return this.schema.dropUnique(t,e,r),this}dropConstraint(t,e){return this.schema.dropConstraint(t,e),this}createExtension(t,e=true){return this.schema.createExtension(t,e),this}toQuery(){let t=this.schema.queryStatements;return t.length===1?t[0]:t}toQueries(){return [...this.schema.queryStatements]}toString(){let t=this.schema.queryStatements;return t.length===1?t[0]||"":t.join(`;
|
|
255
|
-
`)}async execute(){if(this.state!=="executed"){if(this.state==="failed")throw this.executionError;return this.then()}}isExecuted(){return this.state==="executed"}isPending(){return this.state==="pending"}hasFailed(){return this.state==="failed"}async hasTable(t){return this.dataSource.hasTable(t)}async hasColumn(t,e){return this.dataSource.hasColumn(t,e)}async hasColumns(t,...e){return this.dataSource.hasColumns(t,...e)}async hasIndex(t,e){return this.dataSource.hasIndex(t,e)}async hasPrimaryKey(t){return this.dataSource.hasPrimaryKey(t)}async hasUnique(t,e){return this.dataSource.hasUnique(t,e)}async hasForeignKey(t,e){return this.dataSource.hasForeignKey(t,e)}async hasCheckConstraint(t,e){return this.dataSource.hasCheckConstraint(t,e)}async getTables(){return this.dataSource.getTables()}async getColumnListing(t){return this.dataSource.getColumnListing(t)}dropTableIfExists(t){return this.schema.dropTable(t,true),this}async dropIndexIfExists(t,e){if(await this.dataSource.hasIndex(e,t)){let n=new ie(this.dataSource.getDbType());n.dropIndex(t,e);let o=n.queryStatements[0];o&&await this.dataSource.rawQuery(o);}}renameColumn(t,e,r){return this.schema.alterTable(t,n=>{n.renameColumn(e,r);}),this}};Lr=new WeakSet,Wp=async function(){try{this.state="pending";let t=this.schema.queryStatements;if(!t.length){this.state="executed";return}for(let e of t)await this.dataSource.rawQuery(e);this.state="executed";}catch(t){throw this.state="failed",this.executionError=t,t}};var Ce=class{constructor(t,e){this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var jr=class{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}buildDropDependencies(t){let e=new Map,r=new Map,n=new Map;for(let o of t.relationsToDrop||[]){let i=`${o.table}.${o.relation.name}`,a=[];if(o.relation.referencedTable&&a.push(`table.${o.relation.referencedTable}`),o.relation.referencedColumns)for(let l of o.relation.referencedColumns)a.push(`column.${o.relation.referencedTable}.${l}`);e.set(i,a);}for(let o of t.tablesToDrop||[]){let i=`table.${o.table}`,a=[];for(let l of this.models){let u=l.getRelations();for(let d of u)d.type==="belongsTo"&&d.model().table===o.table&&a.push(`fk.${l.table}.${d.constraintName}`);}r.set(i,a);}for(let o of t.columnsToDrop||[]){let i=`column.${o.table}.${o.column}`,a=[],l=this.models.find(u=>u.table===o.table);if(l){let u=l.getColumns().find(d=>d.databaseName===o.column);if(u){u.isPrimary&&a.push(`pk.${o.table}`);let d=l.getRelations();for(let m of d)m.columnName===u.columnName&&a.push(`fk.${o.table}.${m.constraintName}`);}}n.set(i,a);}return {foreignKeys:e,tables:r,constraints:n}}topologicalSortReverse(t,e){let r=new Set,n=new Set,o=[],i=a=>{if(n.has(a))throw new Error(`Circular dependency detected: ${a}`);if(r.has(a))return;n.add(a);let l=e(a);for(let u of l)i(u);n.delete(a),r.add(a),o.push(a);};for(let a of t.keys())r.has(a)||i(a);return o}generateDropOperations(t){let e=this.buildDropDependencies(t),r=[],n=this.topologicalSortReverse(e.foreignKeys,i=>e.foreignKeys.get(i)||[]);for(let i of n){let[a,l]=i.split("."),u=t.relationsToDrop?.find(d=>d.table===a&&d.relation.name===l);u&&r.push({type:"DROP_FOREIGN_KEY",phase:"DESTRUCTIVE_OPERATIONS",table:a,constraint:l,data:u,dependencies:e.foreignKeys.get(i)||[],sqlStatements:this.generateDropForeignKeySql(u)});}let o=this.topologicalSortReverse(e.tables,i=>e.tables.get(i)||[]);for(let i of t.columnsToDrop||[]){let a=`column.${i.table}.${i.column}`,l=e.constraints.get(a)||[];for(let u of l)u.startsWith("pk.")?r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:i.table,constraint:"PRIMARY KEY",data:{type:"primary_key",table:i.table},dependencies:[a],sqlStatements:this.generateDropPrimaryKeySql(i.table)}):u.startsWith("unique.")&&r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:i.table,constraint:`UNIQUE_${i.column}`,data:{type:"unique",table:i.table,column:i.column},dependencies:[a],sqlStatements:this.generateDropUniqueConstraintSql(i.table,i.column)});}for(let i of t.columnsToDrop||[])r.push({type:"DROP_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:i.table,column:i.column,data:i,dependencies:[],sqlStatements:this.generateDropColumnSql(i)});for(let i of o){let a=i.replace("table.",""),l=t.tablesToDrop?.find(u=>u.table===a);l&&r.push({type:"DROP_TABLE",phase:"DESTRUCTIVE_OPERATIONS",table:a,data:l,dependencies:e.tables.get(i)||[],sqlStatements:this.generateDropTableSql(l)});}return r}analyzeConstraintImpact(t){let e=new Map;for(let r of t.columnsToDrop||[]){let n=[],o=this.models.find(i=>i.table===r.table);if(o){let i=o.getColumns().find(a=>a.databaseName===r.column);if(i){i.isPrimary&&n.push(`PRIMARY KEY on ${r.table}`);let a=o.getRelations();for(let l of a)l.columnName===i.columnName&&n.push(`FOREIGN KEY ${l.constraintName} on ${r.table}`);}}e.set(`${r.table}.${r.column}`,n);}return e}detectMixedOperations(t){let e=[];for(let r of t.columnsToModify||[]){let n=this.models.find(o=>o.table===r.table);n&&n.getColumns().find(i=>i.databaseName===r.dbColumns.name)&&this.hasConstraintChanges(r.dbColumns,r.modelColumn)&&e.push({type:"column_modification_with_constraints",table:r.table,column:r.dbColumns.name,description:`Column ${r.dbColumns.name} modification requires constraint recreation`});}for(let r of t.primaryKeysToModify||[])e.push({type:"primary_key_modification",table:r.table,description:`Primary key modification on ${r.table} requires FK recreation`});return e}hasConstraintChanges(t,e){return t.isNullable!==!e.constraints?.nullable||t.isUnique!==!!e.constraints?.unique||t.defaultValue!==e.constraints?.default}generateDropForeignKeySql(t){if(this.sql.getDbType()==="sqlite")return [];if(!t.relation.name)return [];let e=this.sql.schema().alterTable(t.table,n=>{n.dropConstraint(t.relation.name);}).toQueries(),r=this.sql.getDbType();return (r==="mysql"||r==="mariadb")&&e.push(`DROP INDEX \`${t.relation.name}\` ON \`${t.table}\``),e}generateDropPrimaryKeySql(t){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,e=>{e.dropPrimaryKey();}).toQueries()}generateDropUniqueConstraintSql(t,e){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,r=>{r.dropConstraint(`UNIQUE_${e}`);}).toQueries()}generateDropColumnSql(t){return this.sql.schema().alterTable(t.table,e=>{e.dropColumn(t.column);}).toQueries()}generateDropTableSql(t){return [`DROP TABLE ${t.table}`]}};var Wr=class Wr{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new jr(t);}generateOperations(t){let e=[];e.push(...this.generateStructureCreationOperations(t)),e.push(...this.generateConstraintCreationOperations(t)),e.push(...this.generateDestructiveOperations(t)),e.push(...this.generateColumnModificationOperations(t));let r=l=>l.table&&l.constraint?`${l.table}::${l.constraint}`:void 0,n=new Set(e.filter(l=>l.type==="ADD_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),o=new Set(e.filter(l=>l.type==="DROP_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),i=new Set([...n].filter(l=>o.has(l)));return e.filter(l=>{let u=r(l);return u?!(i.has(u)&&(l.type==="ADD_FOREIGN_KEY"||l.type==="DROP_FOREIGN_KEY")):true})}generateStructureCreationOperations(t){let e=[];for(let r of t.tablesToAdd){let n=this.sql.schema().createTable(r.table,o=>{for(let i of r.columns){if(Array.isArray(i.type)){o.enum(i.databaseName,i.type);continue}i.type&&this.executeBuilderMethod(r.table,o,i,[i.databaseName,i.length,i.precision&&!i.withTimezone?i.precision:void 0,i.scale,i.withTimezone?{withTimezone:i.withTimezone,precision:i.precision}:void 0].filter(Boolean),true);}}).toQuery();e.push({type:"CREATE_TABLE",phase:"STRUCTURE_CREATION",table:r.table,data:r,dependencies:[],sqlStatements:[n]});}for(let r of t.columnsToAdd){let n=this.generateAddColumnViaAlter(r);e.push({type:"ADD_COLUMN",phase:"STRUCTURE_CREATION",table:r.table,column:r.column.databaseName,data:r,dependencies:[`table.${r.table}`],sqlStatements:n});}return e}generateConstraintCreationOperations(t){let e=[];for(let n of t.uniquesToDrop||[]){let o=this.sql.schema().alterTable(n.table,i=>{i.dropConstraint(n.name);}).toQueries();e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:o});}let r=new Set((t.uniquesToDrop||[]).map(n=>n.name));for(let n of t.indexesToDrop){if(r.has(n.index))continue;let o=new ie(this.sql.getDbType());o.dropIndex(n.index,n.table);let i=o.queryStatements[0];e.push({type:"DROP_INDEX",phase:"CONSTRAINT_CREATION",table:n.table,index:n.index,data:n,dependencies:[`table.${n.table}`],sqlStatements:[i]});}for(let n of t.primaryKeysToAdd){let a=this.models.find(u=>u.table===n.table)?.getColumns().find(u=>u.columnName===n.columns[0])?.primaryKeyConstraintName||we(n.table,n.columns[0]),l=this.sql.schema().alterTable(n.table,u=>{let d=a||we(n.table,n.columns[0]);u.addConstraint("primary_key",{columns:[n.columns[0]],constraintName:d});}).toQueries();e.push({type:"ADD_PRIMARY_KEY",phase:"CONSTRAINT_CREATION",table:n.table,constraint:a,data:n,dependencies:[`table.${n.table}`],sqlStatements:l});}for(let n of t.relationsToAdd){if(n.relation.type==="manyToMany")continue;let o=this.generateAddRelationViaAlter(n),i=this.computeFkConstraintName(n);e.push({type:"ADD_FOREIGN_KEY",phase:"CONSTRAINT_CREATION",table:n.table,constraint:i,data:n,dependencies:this.getForeignKeyDependencies(n),sqlStatements:o});}for(let n of t.uniquesToAdd||[]){let o=this.models.find(l=>l.table===n.table),i=(n.columns||[]).map(l=>o?.getColumns().find(d=>d.columnName===l)?.databaseName||l),a=this.sql.schema().alterTable(n.table,l=>{l.addConstraint("unique",{columns:i,constraintName:n.name||"mandatory"});}).toQueries();e.push({type:"ADD_UNIQUE_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name||"mandatory",data:n,dependencies:[`table.${n.table}`],sqlStatements:a});}for(let n of t.indexesToAdd){let o=this.generateCreateIndexSql(n);e.push({type:"CREATE_INDEX",phase:"CONSTRAINT_CREATION",table:n.table,index:n.index,data:n,dependencies:[`table.${n.table}`],sqlStatements:[o]});}for(let n of t.checksToDrop||[]){let o=new ie(this.sql.getDbType());o.dropCheck(n.table,n.name);let i=o.queryStatements;e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:i});}for(let n of t.checksToAdd||[]){let o=new ie(this.sql.getDbType());o.addCheck(n.table,n.expression,{constraintName:n.name});let i=o.queryStatements;e.push({type:"ADD_CHECK_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:i});}return e}computeFkConstraintName(t){let e=C(t.relation.constraintName);if(e)return e;let r=t.table;t.relation.type==="belongsTo"?r=t.relation.model().table:t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(r=C(t.relation.manyToManyOptions.throughModel));let o=this.models.find(a=>a.table===t.table)?.getColumns()||[],i=t.relation.columnName;return t.relation.type==="belongsTo"?i=o.find(l=>l.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey:i=o.find(l=>l.columnName===i)?.databaseName||i,Z(t.table,i,r)}generateDestructiveOperations(t){return this.dropResolver.generateDropOperations(t)}generateColumnModificationOperations(t){let e=[];for(let r of t.columnsToModify||[]){let n=this.generateModifyColumnViaAlter(r);e.push({type:"MODIFY_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:r.table,column:r.dbColumns.name,data:r,dependencies:[],sqlStatements:n});}return e}getForeignKeyDependencies(t){let e=[];if(t.relation.type==="belongsTo"){let n=t.relation.model();e.push(`table.${n.table}`);let o=n.primaryKey||"id",i=n.getColumns().find(a=>a.columnName===o);i&&e.push(`column.${n.table}.${i.databaseName}`);}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let n=C(t.relation.manyToManyOptions.throughModel);e.push(`table.${n}`);}e.push(`table.${t.table}`);let r=this.models.find(n=>n.table===t.table);if(r){let n=r.getColumns().find(o=>o.columnName===t.relation.columnName||o.databaseName===t.relation.columnName);n&&e.push(`column.${t.table}.${n.databaseName}`);}return e}applyNullableConstraint(t,e){return e===false?t.notNullable():e===true||this.sql.getDbType()==="mariadb"?t.nullable():t}executeBuilderMethod(t,e,r,n,o=true){let i;if(Array.isArray(r.type))i=e.enum(n[0],r.type);else if(typeof r.type=="string"&&Wr.BUILTIN_COLUMN_TYPES.has(r.type))i=e[r.type](...n);else if(typeof r.type=="string")i=e.custom(n[0],r.type,r.length);else throw new Error(`Unknown column type: ${String(r.type)} for column ${r.columnName}`);return o&&(r.isPrimary&&i.primaryKey({constraintName:r.primaryKeyConstraintName||we(t,r.columnName)}),r.unsigned&&i.unsigned(),r.zerofill&&i.zerofill(),r.constraints?.default!==void 0&&i.default(r.constraints.default),this.applyNullableConstraint(i,r.constraints?.nullable)),i}generateAddColumnViaAlter(t){let e=[t.column.databaseName,t.column.length,t.column.precision&&!t.column.withTimezone?t.column.precision:void 0,t.column.scale,t.column.withTimezone?{withTimezone:t.column.withTimezone,precision:t.column.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,r=>{r.addColumn(n=>{let o=this.executeBuilderMethod(t.table,n,t.column,e,false);return t.column.constraints?.default!==void 0&&o.default(t.column.constraints.default),this.applyNullableConstraint(o,t.column.constraints?.nullable),o});}).toQueries()}generateModifyColumnViaAlter(t){if(this.sql.getDbType()==="sqlite")return [];let e=[t.modelColumn.databaseName,t.modelColumn.length,t.modelColumn.precision&&!t.modelColumn.withTimezone?t.modelColumn.precision:void 0,t.modelColumn.scale,t.modelColumn.withTimezone?{withTimezone:t.modelColumn.withTimezone,precision:t.modelColumn.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,n=>{n.alterColumn(o=>{let i=this.executeBuilderMethod(t.table,o,t.modelColumn,e,false);return t.modelColumn.constraints?.default!==void 0?i.default(t.modelColumn.constraints.default):t.dbColumns.defaultValue!=null&&t.dbColumns.defaultValue!==""&&i.default(null),this.applyNullableConstraint(i,t.modelColumn.constraints?.nullable),i});}).toQueries()}generateCreateIndexSql(t){let e=this.models.find(i=>i.table===t.table),n=(e?.getIndexes().find(i=>i.name===t.index)?.columns||[]).map(i=>e?.getColumns().find(l=>l.columnName===i)?.databaseName||i),o=new ie(this.sql.getDbType());return o.createIndex(t.table,n,{constraintName:t.index}),o.queryStatements[0]||""}generateAddRelationViaAlter(t){let e=t.table,r=t.relation.foreignKey;t.relation.type==="belongsTo"?(e=t.relation.model().table,r=t.relation.model().primaryKey||"id"):t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(e=C(t.relation.manyToManyOptions.throughModel),r=C(t.relation.manyToManyOptions.rightForeignKey),(!r||r==="undefined")&&(r=t.relation.model().primaryKey||"id"));let n=typeof t.relation.constraintName=="string"?t.relation.constraintName:void 0,o=C(r);if(t.relation.type==="belongsTo"){let c=t.relation.model(),p=c.primaryKey,f=c.getColumns().find(T=>T.columnName===p);if(f)o=f.databaseName;else {let T=c?.databaseCaseConvention||"preserve";o=H(p,T);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let c=t.relation.model();if(typeof o=="string"&&o){let p=c.getColumns(),h=p.find(f=>f.columnName===o);if(h)o=h.databaseName;else {let f=c.primaryKey||"id",T=p.find(N=>N.columnName===f);if(T)o=T.databaseName;else {let N=c?.databaseCaseConvention||"preserve";o=H(o||f,N);}}}else {let p=c.primaryKey||"id",f=c.getColumns().find(T=>T.columnName===p);if(f)o=f.databaseName;else {let T=c?.databaseCaseConvention||"preserve";o=H(p,T);}}}let i=this.models.find(c=>c.table===t.table),a=i?.getColumns()||[],l=t.relation.columnName,u=a.find(c=>c.columnName===l);if(u)l=u.databaseName;else {let c=i?.databaseCaseConvention||"preserve";l=H(l,c);}if(t.relation.type==="belongsTo"){let c=a.find(p=>p.columnName===t.relation.foreignKey);if(c)l=c.databaseName;else {let p=i?.databaseCaseConvention||"preserve";l=H(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let c=t.relation.manyToManyOptions.leftForeignKey,p=C(c),h=a.find(f=>f.columnName===p);if(h)l=h.databaseName;else {let f=i?.databaseCaseConvention||"preserve";l=H(p,f);}}let d=t.relation.onDelete?.toLowerCase(),m=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,c=>{let p=n||Z(t.table,l,e);c.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[o]},constraintName:p,onDelete:d,onUpdate:m});}).toQueries()}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};Wr.BUILTIN_COLUMN_TYPES=new Set(["char","varchar","string","text","longtext","mediumtext","tinytext","uuid","ulid","integer","tinyint","smallint","mediumint","bigint","biginteger","float","double","real","decimal","numeric","increment","bigIncrement","boolean","date","time","datetime","timestamp","year","json","jsonb","binary","varbinary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]);var Et=Wr;var Ur=class Ur{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}generateCode(t){let e=[],r=[],n=null,o={STRUCTURE_CREATION:"Structure creation",CONSTRAINT_CREATION:"Constraints and indexes",DESTRUCTIVE_OPERATIONS:"Destructive operations"};for(let i of t){i.phase!==n&&(n=i.phase,e.length>0&&e.push(""),e.push(`// ${o[n]}`));let{up:a,down:l}=this.generateOperationCode(i);a&&e.push(...a),l&&r.push(...l);}return {up:e,down:r}}generateOperationCode(t){switch(t.type){case "CREATE_TABLE":return this.generateCreateTableCode(t);case "ADD_COLUMN":return this.generateAddColumnCode(t);case "MODIFY_COLUMN":return this.generateModifyColumnCode(t);case "DROP_COLUMN":return this.generateDropColumnCode(t);case "CREATE_INDEX":return this.generateCreateIndexCode(t);case "DROP_INDEX":return this.generateDropIndexCode(t);case "ADD_FOREIGN_KEY":return this.generateAddForeignKeyCode(t);case "DROP_FOREIGN_KEY":return this.generateDropForeignKeyCode(t);case "ADD_UNIQUE_CONSTRAINT":return this.generateAddUniqueCode(t);case "DROP_CONSTRAINT":return this.generateDropConstraintCode(t);case "ADD_CHECK_CONSTRAINT":return this.generateAddCheckCode(t);case "ADD_PRIMARY_KEY":return this.generateAddPrimaryKeyCode(t);case "DROP_TABLE":return this.generateDropTableCode(t);case "MODIFY_PRIMARY_KEY":return this.generateModifyPrimaryKeyCode(t);default:return {up:null,down:null}}}generateCreateTableCode(t){let e=t.data,r=[];r.push(`this.schema.createTable(${this.quote(e.table)}, (table) => {`);for(let o of e.columns){let i=this.generateColumnCode(e.table,o,true);r.push(` ${i}`);}r.push("});");let n=[`this.schema.dropTable(${this.quote(e.table)});`];return {up:r,down:n}}generateAddColumnCode(t){let{table:e,column:r}=t.data,n=this.generateColumnCode(e,r,false),o=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.addColumn((col) => ${n.replace(/^table\./,"col.")});`,"});"],i=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r.databaseName)});`,"});"];return {up:o,down:i}}generateModifyColumnCode(t){let{table:e,modelColumn:r,dbColumns:n}=t.data,o=this.generateColumnCodeForModify(e,r,n),i=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.alterColumn((col) => ${o.replace(/^table\./,"col.")});`,"});"],a=[`// TODO: reverse column modification for ${this.quote(n.name)} on ${this.quote(e)}`];return {up:i,down:a}}generateDropColumnCode(t){let{table:e,column:r}=t.data,n=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r)});`,"});"],o=[`// TODO: reverse column drop for ${this.quote(r)} on ${this.quote(e)}`];return {up:n,down:o}}generateCreateIndexCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=(r?.getIndexes().find(u=>u.name===e.index)?.columns||[]).map(u=>r?.getColumns().find(m=>m.columnName===u)?.databaseName||u),i=o.length===1?this.quote(o[0]):`[${o.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.createIndex(${this.quote(e.table)}, ${i}, { constraintName: ${this.quote(e.index)} });`],l=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`];return {up:a,down:l}}generateDropIndexCode(t){let e=t.data,r=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`],n=[`// TODO: reverse index drop for ${this.quote(e.index)} on ${this.quote(e.table)}`];return {up:r,down:n}}generateAddForeignKeyCode(t){let e=t.data,{sourceColumn:r,referencedTable:n,referencedColumn:o,constraintName:i}=this.resolveRelationDetails(e),a=e.relation.onDelete?.toLowerCase(),l=e.relation.onUpdate?.toLowerCase(),u=[];i&&u.push(`constraintName: ${this.quote(i)}`),a&&u.push(`onDelete: ${this.quote(a)}`),l&&u.push(`onUpdate: ${this.quote(l)}`);let d=u.length>0?`, { ${u.join(", ")} }`:"",m=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.foreignKey(${this.quote(r)}, ${this.quote(n)}, ${this.quote(o)}${d});`,"});"],c=i||Z(e.table,r,n),p=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.dropConstraint(${this.quote(c)});`,"});"];return {up:m,down:p}}generateDropForeignKeyCode(t){let e=t.constraint||t.data?.relation?.name;if(!e)return {up:null,down:null};let r=t.table||t.data?.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(e)});`,"});"],o=[`// TODO: reverse FK drop for ${this.quote(e)} on ${this.quote(r)}`];return {up:n,down:o}}generateAddUniqueCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=`[${(e.columns||[]).map(u=>r?.getColumns().find(m=>m.columnName===u)?.databaseName||u).map(u=>this.quote(u)).join(", ")}]`,i=e.name||"mandatory",a=[`this.schema.addUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(i)} });`],l=[`this.schema.dropUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(i)} });`];return {up:a,down:l}}generateDropConstraintCode(t){let e=t.data,r=t.table||e.table,n=t.constraint||e.name;if(!n||!r)return {up:null,down:null};if(e.type==="primary_key"){let a=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});"],l=[`// TODO: reverse primary key drop on ${this.quote(r)}`];return {up:a,down:l}}if(e.type==="unique"){let a=e.column,l=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],u=[`// TODO: reverse unique constraint drop for ${this.quote(a)} on ${this.quote(r)}`];return {up:l,down:u}}if(e.expression!==void 0){let a=[`this.schema.dropCheck(${this.quote(r)}, ${this.quote(n)});`],l=[`// TODO: reverse check constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:a,down:l}}let o=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],i=[`// TODO: reverse constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:o,down:i}}generateAddCheckCode(t){let e=t.data,r=[`this.schema.addCheck(${this.quote(e.table)}, ${this.quote(e.expression)}, { constraintName: ${this.quote(e.name)} });`],n=[`this.schema.dropCheck(${this.quote(e.table)}, ${this.quote(e.name)});`];return {up:r,down:n}}generateAddPrimaryKeyCode(t){let e=t.data,o=this.models.find(u=>u.table===e.table)?.getColumns().find(u=>u.columnName===e.columns[0])?.primaryKeyConstraintName||we(e.table,e.columns[0]),i=`[${e.columns.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.addConstraint("primary_key", { columns: ${i}, constraintName: ${this.quote(o)} });`,"});"],l=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`," table.dropPrimaryKey();","});"];return {up:a,down:l}}generateDropTableCode(t){let e=t.table||t.data?.table,r=[`this.schema.dropTable(${this.quote(e)});`],n=[`// TODO: reverse table drop for ${this.quote(e)}`];return {up:r,down:n}}generateModifyPrimaryKeyCode(t){let e=t.data,r=e.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});",`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.addPrimaryKey(${this.quote(e.modelPrimaryKey)});`,"});"],o=[`// TODO: reverse primary key modification on ${this.quote(r)}`];return {up:n,down:o}}generateColumnCode(t,e,r){let n=this.generateColumnTypeCode(e);if(!r)return n;if(e.isPrimary){let o=e.primaryKeyConstraintName||we(t,e.columnName);n+=`.primaryKey({ constraintName: ${this.quote(o)} })`;}return e.unsigned&&(n+=".unsigned()"),e.zerofill&&(n+=".zerofill()"),e.constraints?.default!==void 0&&(n+=`.default(${this.formatDefaultValue(e.constraints.default)})`),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n+";"}generateColumnCodeForModify(t,e,r){let n=this.generateColumnTypeCode(e);return e.constraints?.default!==void 0?n+=`.default(${this.formatDefaultValue(e.constraints.default)})`:r.defaultValue!=null&&r.defaultValue!==""&&(n+=".default(null)"),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n}generateColumnTypeCode(t){let e=t.databaseName;if(Array.isArray(t.type)){let i=t.type.map(a=>this.quote(a)).join(", ");return `table.enum(${this.quote(e)}, [${i}])`}let r=t.type;if(new Set(["uuid","ulid","boolean","year","json","jsonb","binary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]).has(r))return `table.${r}(${this.quote(e)})`;if(r==="timestamp"||r==="datetime"){let i=[];return t.withTimezone&&i.push("withTimezone: true"),t.precision!=null&&i.push(`precision: ${t.precision}`),i.length>0?`table.${r}(${this.quote(e)}, { ${i.join(", ")} })`:`table.${r}(${this.quote(e)})`}return r==="date"||r==="time"?t.precision!=null?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="increment"||r==="bigIncrement"?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:r==="decimal"||r==="numeric"?t.precision!=null?t.scale!=null?`table.${r}(${this.quote(e)}, ${t.precision}, ${t.scale})`:`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="float"||r==="double"||r==="real"?t.precision!=null&&t.precision!==10?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="longtext"||r==="mediumtext"||r==="tinytext"?`table.${r}(${this.quote(e)})`:new Set(["varchar","char","string","integer","tinyint","smallint","mediumint","bigint","biginteger","varbinary"]).has(r)?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:Ur.BUILTIN_COLUMN_TYPES.has(r)?`table.${r}(${this.quote(e)})`:t.length!=null?`table.custom(${this.quote(e)}, ${this.quote(r)}, ${t.length})`:`table.custom(${this.quote(e)}, ${this.quote(r)})`}resolveRelationDetails(t){let e=t.table,r="id";if(t.relation.type==="belongsTo"){let l=t.relation.model();e=l.table;let u=l.primaryKey||"id";r=l.getColumns().find(c=>c.columnName===u)?.databaseName||u;}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){e=C(t.relation.manyToManyOptions.throughModel);let l=C(t.relation.manyToManyOptions.rightForeignKey);l&&l!=="undefined"?r=l:r=t.relation.model().primaryKey||"id";}let o=this.models.find(l=>l.table===t.table)?.getColumns()||[],i=t.relation.columnName;if(t.relation.type==="belongsTo")i=o.find(u=>u.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey;else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let l=C(t.relation.manyToManyOptions.leftForeignKey);i=o.find(d=>d.columnName===l)?.databaseName||l;}else i=o.find(u=>u.columnName===i)?.databaseName||i;let a=typeof t.relation.constraintName=="string"?t.relation.constraintName:C(t.relation.constraintName)||void 0;return {sourceColumn:i,referencedTable:e,referencedColumn:r,constraintName:a}}quote(t){return `"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}formatDefaultValue(t){return t==null?"null":t==="NULL"?'"NULL"':typeof t=="boolean"||typeof t=="number"?t.toString():t==="TRUE"||t==="true"?"true":t==="FALSE"||t==="false"?"false":this.quote(String(t))}};Ur.BUILTIN_COLUMN_TYPES=new Set(["char","varchar","string","text","longtext","mediumtext","tinytext","uuid","ulid","integer","tinyint","smallint","mediumint","bigint","biginteger","float","double","real","decimal","numeric","increment","bigIncrement","boolean","date","time","datetime","timestamp","year","json","jsonb","binary","varbinary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]);var Fr=Ur;function $y(s){return s.replace(/\s+/g," ").trim()}function Py(s){return s.replace(/\s*\([^)]*\)/g,"").trim()}function vy(s){let t=s.split(/\s+/).filter(n=>n.length>0),e=[],r=[];for(let n of t)n==="unsigned"||n==="zerofill"?e.push(n):r.push(n);return {bareBase:r.join(" "),modifiers:e}}function Iy(s,t){return t.length===0?s:`${s} ${t.join(" ")}`}function Le(s,t){let e=$y(t.toLowerCase()),r=Py(e);switch(s){case "sqlite":{let n=[{test:o=>o==="increment",normalized:"integer"},{test:o=>o==="bigincrement",normalized:"integer"},{test:o=>o.includes("int"),normalized:"integer"},{test:o=>o==="string",normalized:"varchar"},{test:o=>o.includes("char"),normalized:"varchar"},{test:o=>o.includes("text"),normalized:"text"},{test:o=>o.includes("clob"),normalized:"text"},{test:o=>o.includes("date"),normalized:"text"},{test:o=>o.includes("time"),normalized:"text"},{test:o=>o.includes("timestamp"),normalized:"text"},{test:o=>o.includes("datetime"),normalized:"text"},{test:o=>o.includes("blob"),normalized:"blob"},{test:o=>o.includes("real")||o.includes("floa")||o.includes("doub"),normalized:"real"},{test:o=>o.includes("numeric"),normalized:"numeric"},{test:o=>o.includes("bool"),normalized:"integer"},{test:o=>o.includes("uuid"),normalized:"varchar"},{test:o=>o.includes("ulid"),normalized:"varchar"},{test:o=>o.includes("jsonb"),normalized:"text"},{test:o=>o.includes("json"),normalized:"text"}];for(let o of n)if(o.test(r))return o.normalized;return r}case "mysql":case "mariadb":{let{bareBase:n,modifiers:o}=vy(r),a=new Set(["int","integer","increment","tinyint","smallint","mediumint","bigint","bigincrement","float","double","double precision","real","decimal","numeric","year","bool","boolean"]).has(n);if(n.endsWith("text")||n==="text")return "text";let l;switch(n){case "int":case "integer":case "increment":l="integer";break;case "tinyint":l="boolean";break;case "smallint":l="smallint";break;case "mediumint":l="mediumint";break;case "bigint":case "bigincrement":l="bigint";break;case "float":l="float";break;case "double":case "double precision":l="double";break;case "real":l="double";break;case "decimal":case "numeric":l="numeric";break;case "string":case "varchar":case "character varying":l="varchar";break;case "char":case "character":l="char";break;case "uuid":l="varchar";break;case "ulid":l="varchar";break;case "date":l="date";break;case "datetime":l="datetime";break;case "timestamp":l="timestamp";break;case "time":l="time";break;case "year":l="year";break;case "jsonb":case "json":l=s==="mariadb"?"text":"json";break;case "enum":l="enum";break;case "binary":l="binary";break;case "varbinary":l="varbinary";break;case "tinyblob":l="tinyblob";break;case "mediumblob":l="mediumblob";break;case "longblob":l="longblob";break;case "blob":l="blob";break;case "boolean":case "bool":l="boolean";break;default:l=n;break}return a&&o.length>0?Iy(l,o):l}case "postgres":case "cockroachdb":{if(r.endsWith("text")||r==="text")return "text";if(r.startsWith("timestamp"))return "timestamp";if(r.startsWith("time"))return "time";if(r==="datetime")return "timestamp";switch(r){case "string":case "varchar":case "character varying":return "varchar";case "char":case "character":return "char";case "ulid":return "varchar";case "double precision":return "double";case "real":return "real";case "float":return "real";case "integer":case "int4":case "int":case "increment":case "serial":return "integer";case "mediumint":return "integer";case "bigint":case "int8":case "bigincrement":case "bigserial":return "bigint";case "smallint":case "int2":return "smallint";case "tinyint":return "smallint";case "uuid":return "uuid";case "year":return "smallint";case "bytea":return "bytea";case "binary":case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":return "bytea";case "boolean":case "bool":return "boolean";case "numeric":case "decimal":return "numeric";case "jsonb":return "jsonb";case "json":return "json";case "date":return "date";default:return r}}case "mssql":{if(r.endsWith("text")||r==="text"||r==="ntext")return "text";if(r.startsWith("datetime2"))return "datetime2";if(r.startsWith("datetimeoffset"))return "datetimeoffset";switch(r){case "int":case "integer":case "increment":return "int";case "tinyint":return "tinyint";case "smallint":return "smallint";case "bigint":case "bigincrement":return "bigint";case "float":return "float";case "real":return "real";case "double":case "double precision":return "float";case "decimal":case "numeric":return "decimal";case "money":return "money";case "smallmoney":return "smallmoney";case "string":case "varchar":case "character varying":return "varchar";case "nvarchar":return "nvarchar";case "char":case "character":return "char";case "nchar":return "nchar";case "uuid":case "uniqueidentifier":return "uniqueidentifier";case "ulid":return "varchar";case "date":return "date";case "datetime":return "datetime";case "smalldatetime":return "smalldatetime";case "time":return "time";case "timestamp":return "datetime2";case "binary":return "binary";case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":case "bytea":return "varbinary";case "image":return "image";case "bit":case "boolean":case "bool":return "bit";case "json":case "jsonb":return "nvarchar";case "xml":return "xml";case "sql_variant":return "sql_variant";default:return r}}default:return r}}var Ge=class s{constructor(t){this.emptyStatements=[/^alter table [`'"]?[\w]+[`'"]?\s*$/i];this.sql=t,this.models=Object.values(this.sql._models),this.data={columnsToAdd:[],columnsToDrop:[],columnsToModify:[],indexesToAdd:[],indexesToDrop:[],uniquesToAdd:[],uniquesToDrop:[],checksToAdd:[],checksToDrop:[],tablesToAdd:[],relationsToAdd:[],relationsToDrop:[],relationsToModify:[],primaryKeysToAdd:[],primaryKeysToDrop:[],primaryKeysToModify:[]};}static async makeDiff(t){let e=new s(t);return await Promise.all(e.models.map(async r=>{let n=await e.sql.getTableSchema(r.table),o={columns:r.getColumns().filter(f=>f?.type!==void 0&&f?.type!==null),indexes:r.getIndexes(),relations:r.getRelations()};if(!n.columns.length){e.data.tablesToAdd.push({table:r.table,columns:o.columns});for(let N of o.indexes)n.indexes.map(w=>w.name).includes(N.name)||e.data.indexesToAdd.push({table:r.table,index:N.name});let f=r.getUniques?.()||[];for(let N of f)e.data.uniquesToAdd.push({table:r.table,name:N.name||"mandatory",columns:N.columns});let T=r.getChecks?.()||[];for(let N of T)e.data.checksToAdd.push({table:r.table,name:N.name,expression:N.expression});for(let N of o.relations){if(N.type!=="belongsTo")continue;let w=C(N.constraintName);n.foreignKeys.find(_=>_.name===w)||e.data.relationsToAdd.push({table:r.table,relation:N,onDelete:N.onDelete,onUpdate:N.onUpdate});}return}for(let f of o.columns)n.columns.some(N=>N.name===f.databaseName||N.name===f.columnName)||e.data.columnsToAdd.push({table:r.table,column:f});let i=r.getColumns();for(let f of n.columns)i.some(N=>N.databaseName===f.name||N.columnName===f.name)||e.data.columnsToDrop.push({table:r.table,column:f.name});for(let f of o.indexes)n.indexes.map(T=>T.name).includes(f.name)||e.data.indexesToAdd.push({table:r.table,index:f.name});let a=r.getUniques?.()||[];for(let f of a)n.indexes.some(N=>N.name===f.name&&N.isUnique)||e.data.uniquesToAdd.push({table:r.table,name:f.name||"mandatory",columns:f.columns});let l=n.foreignKeys.map(f=>f.name);for(let f of n.indexes)f.isUnique||l.includes(f.name)||o.indexes.map(N=>N.name).includes(f.name)||e.data.indexesToDrop.push({table:r.table,index:f.name});for(let f of n.indexes){if(!f.isUnique||f.name==="PRIMARY")continue;(r.getUniques?.()||[]).map(N=>N.name).includes(f.name)||e.data.uniquesToDrop.push({table:r.table,name:f.name});}let u=r.getChecks?.()||[];for(let f of u)n.checkConstraints.some(N=>N.name===f.name)||e.data.checksToAdd.push({table:r.table,name:f.name,expression:f.expression});let d=new Set(u.map(f=>f.name)),m=o.columns.filter(f=>Array.isArray(f.type)),c=new Set(m.map(f=>f.databaseName||f.columnName));for(let f of n.checkConstraints)if(!d.has(f.name)){let T=[...c].find(N=>{let w=N.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),R=new RegExp(`[\\["\\[]?${w}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),_=new RegExp(`[\\("\\[]?${w}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return R.test(f.expression)||_.test(f.expression)});if(T){let N=m.find(R=>(R.databaseName||R.columnName)===T),w=n.columns.find(R=>R.name===T);if(N&&w?.enumValues&&Array.isArray(N.type)){let R=[...N.type].sort(),_=[...w.enumValues].sort();if(!(R.length===_.length&&R.every((O,D)=>O===_[D]))){e.data.checksToDrop.push({table:r.table,name:f.name});let O=e.sql.getDbType(),D=O==="mssql"?"[":'"',Q=O==="mssql"?"]":'"',V=N.type.map($=>`'${$.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:f.name,expression:`${D}${T}${Q} IN (${V})`});}}}else e.data.checksToDrop.push({table:r.table,name:f.name});}for(let f of o.columns){let T=n.columns.find(R=>R.name===f.databaseName||R.name===f.columnName);if(!T)continue;let N=!e.areColumnsEqual(T,f,n.indexes),w=e.getDefaultChange({table:r.table,dbColumns:T,modelColumn:f});(N||w)&&e.data.columnsToModify.push({table:r.table,dbColumns:T,modelColumn:f});}for(let f of o.relations){if(f.type!=="belongsTo"&&f.type!=="manyToMany")continue;if(f.type==="manyToMany"&&f.manyToManyOptions){let w=C(f.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:w,relation:{type:"belongsTo",model:()=>r,columnName:C(f.manyToManyOptions.leftForeignKey),foreignKey:f.manyToManyOptions.leftForeignKey,constraintName:f.constraintName?C(f.constraintName):Z(w,C(f.manyToManyOptions.leftForeignKey||wl(r.table)),r.table),onDelete:f.onDelete,onUpdate:f.onUpdate},onDelete:f.onDelete,onUpdate:f.onUpdate});continue}let T=C(f.constraintName);if(T&&n.foreignKeys.some(w=>w.name===T))continue;n.foreignKeys.find(w=>e.relationMatchesDbRelation(r,f,w))||e.data.relationsToAdd.push({table:r.table,relation:f,onDelete:f.onDelete,onUpdate:f.onUpdate});}let p=new Set(o.relations.filter(f=>f.type==="belongsTo").map(f=>{let T=C(f.foreignKey)||f.columnName,w=r.getColumns().find(R=>R.columnName===T)?.databaseName||T;return C(f.constraintName)||Z(r.table,w,f.model().table)}));for(let f of n.foreignKeys){if(f.name&&p.has(f.name))continue;o.relations.find(N=>N.type!=="belongsTo"&&N.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,N,f))||e.data.relationsToDrop.push({table:r.table,relation:f});}for(let f of o.relations){if(f.type!=="belongsTo"&&f.type!=="manyToMany")continue;let T=n.foreignKeys.find(N=>e.relationMatchesDbRelation(r,f,N));T&&!e.areRelationsEqual(T,f)&&e.data.relationsToModify.push({table:r.table,dbRelation:T,modelRelation:f,onDelete:f.onDelete,onUpdate:f.onUpdate});}let h=r.primaryKey;if(h&&!n.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[h]}),n.primaryKey&&!h&&e.data.primaryKeysToDrop.push({table:r.table,columns:n.primaryKey.columns,name:n.primaryKey.name}),h&&n.primaryKey){let f=r.getColumns().find(T=>T.columnName===h);f&&!e.arePrimaryKeysEqual(n.primaryKey,f)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:n.primaryKey,modelPrimaryKey:h});}})),await e.processManyToMany(),await e.removeFkChurnByName(),e}getSqlStatements(){let t=this.getSqlStatementsByPhase();return Object.values(t).flat().filter(r=>{let n=r.trim();return n?!this.emptyStatements.some(o=>o.test(n)):false})}getCodeStatements(){let e=new Et(this.sql).generateOperations(this.data);return new Fr(this.sql).generateCode(e)}getSqlStatementsByPhase(){let t=new Et(this.sql),e=t.generateOperations(this.data),r=t.formatSqlStatements(e),n={STRUCTURE_CREATION:[],CONSTRAINT_CREATION:[],DESTRUCTIVE_OPERATIONS:[]};for(let o of r)n[o.phase].push(...o.sqlStatements);return n}areColumnsEqual(t,e,r=[]){let n=t.name===e.databaseName,o=this.sql.getDbType(),i=Le(o,t.dataType),a=typeof e.type=="string"?Le(o,e.type):void 0,l=i.split(" ").filter(d=>d!=="unsigned"&&d!=="zerofill").join(" ");if(a&&n&&(n=l===a),Array.isArray(e.type)&&(o==="mysql"||o==="mariadb")){let d=[...e.type].sort(),m=t.enumValues?[...t.enumValues].sort():null;m&&n&&(n=d.length===m.length&&d.every((c,p)=>c===m[p]));}e.length!=null&&t.length!=null&&n&&(n=t.length===e.length);let u=a==="real"||a==="double"||a==="float";if(e.precision!=null&&t.precision!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.precision===e.precision)),e.scale!=null&&t.scale!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.scale===e.scale)),typeof e.type=="string"&&(a==="timestamp"||a==="time")&&(o==="postgres"||o==="cockroachdb")&&e.withTimezone!==void 0&&t.withTimezone!==void 0&&n&&(n=!!t.withTimezone==!!e.withTimezone),e.constraints?.nullable!==void 0){let d=e.constraints.nullable,m=t.isNullable;n=n&&d===m;}if(o==="mysql"||o==="mariadb"){if(e.unsigned!==void 0){let d=e.unsigned??false,m=t.unsigned??false;n&&(n=d===m);}if(e.zerofill!==void 0){let d=e.zerofill??false,m=t.zerofill??false;n&&(n=d===m);}}if(e.stringMode!==void 0){let d=e.stringMode??false,m=t.stringMode??false;n&&(n=d===m);}return n}areRelationsEqual(t,e){let r=C(e.constraintName),n=r?t.name===r:true;if(e.type==="belongsTo"){let u=e.model(),d=u.primaryKey||"id",m=u.getColumns().find(h=>h.columnName===d),c=u.table,p=m?.databaseName||d;n=n&&t.referencedTable===c&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===p;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let u=C(e.manyToManyOptions.throughModel);n=n&&t.referencedTable===u;}let o=t.onDelete?.toLowerCase(),i=t.onUpdate?.toLowerCase(),a=e.onDelete?.toLowerCase(),l=e.onUpdate?.toLowerCase();return a&&n&&(n=o===a),l&&n&&(n=i===l),n}relationMatchesDbRelation(t,e,r){let n,o=e;if(o&&o.model){if(typeof o.model=="function"&&o.model.table)n=o.model;else if(typeof o.model=="function")try{let f=o.model();f&&f.table&&(n=f);}catch{}}if(!n)return false;let i=e.type==="belongsTo"?n.table:e.type==="manyToMany"&&e.manyToManyOptions?C(e.manyToManyOptions.throughModel):void 0;if(i&&r.referencedTable!==i)return false;let a=C(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),d=(o.type||"belongsTo")==="belongsTo"?C(o.foreignKey):o.columnName,m=l.find(f=>f.columnName===d);m&&(d=m.databaseName);let c=n.primaryKey||"id",h=n.getColumns().find(f=>f.columnName===c)?.databaseName||c;return r.columns.length===1&&r.columns[0]===d&&r.referencedColumns.length===1&&r.referencedColumns[0]===h}arePrimaryKeysEqual(t,e){if(t.columns.length!==1)return false;let n=t.columns[0]===e.databaseName,o=this.sql.getDbType();if(["mysql","mariadb"].includes(o))return n;let a=!t.name||!e.primaryKeyConstraintName||t.name===e.primaryKeyConstraintName;return n&&a}getDefaultChange(t){let e=this.sql.getDbType(),r=Le(e,t.dbColumns.dataType),n=typeof t.modelColumn.type=="string"?Le(e,t.modelColumn.type):void 0;if(n&&r!==n||t.modelColumn.length!=null&&t.dbColumns.length!=null&&t.dbColumns.length!==t.modelColumn.length||t.modelColumn.precision!=null&&t.dbColumns.precision!=null&&t.dbColumns.precision!==t.modelColumn.precision||t.modelColumn.scale!=null&&t.dbColumns.scale!=null&&t.dbColumns.scale!==t.modelColumn.scale||(this.sql.getDbType()==="postgres"||this.sql.getDbType()==="cockroachdb")&&typeof t.modelColumn.type=="string"&&(n==="timestamp"||n==="time")&&t.modelColumn.withTimezone!==void 0&&t.dbColumns.withTimezone!==void 0&&!!t.dbColumns.withTimezone!=!!t.modelColumn.withTimezone)return false;let i=t.modelColumn.constraints?.default!==void 0,a=t.dbColumns.defaultValue!==null&&t.dbColumns.defaultValue!==void 0,l=t.modelColumn.type==="bigIncrement"||t.modelColumn.type==="increment",u=typeof t.dbColumns.defaultValue=="string"&&t.dbColumns.defaultValue.includes("nextval(");if(i&&!a)return "set";if(!i&&a)return l&&u||t.modelColumn.type==="uuid"&&this.isImplicitUuidDefault(e,t.dbColumns.defaultValue)?false:"drop";if(i&&a){let d=String(t.dbColumns.defaultValue),m=String(t.modelColumn.constraints?.default),c=this.normalizeDefaultValue(e,r,d),p=this.normalizeDefaultValue(e,n||r,m);return c!==p?"set":false}return false}isImplicitUuidDefault(t,e){let r=String(e??"").replace(/[()\s]/g,"").toLowerCase();return ({postgres:["gen_random_uuid"],cockroachdb:["gen_random_uuid"],mysql:["uuid"],mariadb:["uuid"],mssql:["newid"],sqlite:["lower(hex(randomblob(16)))"]}[t]??[]).includes(r)}normalizeDefaultValue(t,e,r){let n=String(r).trim();if(!n)return n;if(t==="postgres"||t==="cockroachdb"){if(e==="json"||e==="jsonb")try{n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::(jsonb?|[a-zA-Z_ ]+[\[\]]*)/g,"");let i=n.match(/^'(.*)'$/s);if(i&&(n=i[1]),n==="{}"||n==="")return "{}";let a=JSON.parse(n);return JSON.stringify(a)}catch{}n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::[a-zA-Z_ ]+[\[\]]*/g,"");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),/^true$/i.test(n)?"true":/^false$/i.test(n)?"false":/^null$/i.test(n)?"null":(n)}if(t==="mysql"||t==="mariadb"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);if(o&&(n=o[1]),/^current_timestamp(?:\(\d+\))?$/i.test(n))return "current_timestamp";if(e==="boolean"){if(/^1$/.test(n))return "true";if(/^0$/.test(n))return "false"}return n}if(t==="sqlite"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),n.toLowerCase()}return n}async processManyToMany(){let t=new Set;for(let e of this.models){let r=e.getRelations();for(let n of r){if(n.type!=="manyToMany"||!n.manyToManyOptions||n.manyToManyOptions.wasModelProvided)continue;let o=C(n.manyToManyOptions.throughModel);if(t.has(o))continue;t.add(o);let i=this.models.find($=>$.table===n?.manyToManyOptions?.primaryModel),a=n.model();if(!i||!a)continue;let l=i.primaryKey||"id",u=a.primaryKey||"id",d=i.getColumns().find($=>$.columnName===l),m=a.getColumns().find($=>$.columnName===u);if(!d||!m)continue;let c=C(n.manyToManyOptions.leftForeignKey)||l,p=C(n.manyToManyOptions.rightForeignKey)||u,h=await this.sql.getTableSchema(o);if(!h.columns.length){this.data.tablesToAdd.push({table:o,columns:[this.clonePkAsColumn(d,c),this.clonePkAsColumn(m,p)]}),this.pushM2mFkRelations({throughTable:o,leftModel:i,rightModel:a,leftFkName:c,rightFkName:p,onDelete:n.onDelete,onUpdate:n.onUpdate,constraintName:void 0});continue}let f=this.clonePkAsColumn(d,c),T=this.clonePkAsColumn(m,p),N=h.columns.find($=>$.name===c),w=h.columns.find($=>$.name===p),R=N?this.areColumnsEqual(N,f,h.indexes):false,_=w?this.areColumnsEqual(w,T,h.indexes):false;for(let $ of h.foreignKeys){let Y=$.referencedTable===i.table,ve=$.referencedTable===a.table;if(!Y&&!ve)continue;let er=Y?c:p,Mt=$.columns[0];Mt&&Mt!==er&&(this.data.relationsToDrop.push({table:o,relation:$}),Mt!==c&&Mt!==p&&this.data.columnsToDrop.push({table:o,column:Mt}));}let E={};R||(E[f.databaseName]=f),_||(E[T.databaseName]=E[T.databaseName]||T);for(let $ of Object.keys(E))this.data.columnsToAdd.push({table:o,column:E[$]});let O=this.buildBelongsToRelation(o,()=>i,c,l,void 0,n.onDelete,n.onUpdate),D=this.buildBelongsToRelation(o,n.model,p,u,void 0,n.onDelete,n.onUpdate),Q=h.foreignKeys.find($=>$.referencedTable===i.table&&$.columns.length===1&&$.columns[0]===c),V=h.foreignKeys.find($=>$.referencedTable===a.table&&$.columns.length===1&&$.columns[0]===p);if(!Q){let $=h.foreignKeys.find(Y=>Y.referencedTable===i.table);$&&this.data.relationsToDrop.push({table:o,relation:$}),this.data.relationsToAdd.push(O);}if(!V){let $=h.foreignKeys.find(Y=>Y.referencedTable===a.table);$&&this.data.relationsToDrop.push({table:o,relation:$}),this.data.relationsToAdd.push(D);}}}}async removeFkChurnByName(){let t=new Set;for(let n of this.data.relationsToAdd)t.add(n.table);for(let n of this.data.relationsToDrop)t.add(n.table);let e=new Map;for(let n of t){let o=await this.sql.getTableSchema(n),i=new Set((o.foreignKeys||[]).map(a=>a.name).filter(Boolean));e.set(n,i);}let r=new Map;for(let n of this.models){let o=n.getRelations(),i=new Set;for(let a of o){if(a.type!=="belongsTo")continue;let l=a.foreignKey||a.columnName,d=n.getColumns().find(c=>c.columnName===l)?.databaseName||l,m=C(a.constraintName)||Z(n.table,d,a.model().table);i.add(m);}r.set(n.table,i);}this.data.relationsToAdd=await Promise.all(this.data.relationsToAdd.map(async n=>{let o=await this.sql.getTableSchema(n.table),i=this.models.find(f=>f.table===n.table),a=i?.getColumns()||[],l=n.relation.columnName;n.relation.type==="belongsTo"?l=a.find(T=>T.columnName===n.relation.foreignKey)?.databaseName||n.relation.foreignKey:l=a.find(T=>T.columnName===l)?.databaseName||l;let u=n.table,d=n.relation.foreignKey;if(n.relation.type==="belongsTo"){let f=n.relation.model();u=f.table;let T=f.primaryKey||"id";d=f.getColumns().find(w=>w.columnName===T)?.databaseName||T;}let m=new Set([l,n.relation.columnName].filter(Boolean)),c=o.foreignKeys.some(f=>{if(f.columns.length!==1||f.referencedColumns.length!==1)return false;let T=m.has(f.columns[0]),N=f.referencedTable===u,w=f.referencedColumns[0]===d;return T&&N&&w}),p=C(n.relation.constraintName)||Z(n.table,l,u),h=e.get(n.table)||new Set;if(c||p&&h.has(p))return null;if(n.relation.type==="manyToMany"&&n.relation.manyToManyOptions){let f=C(n.relation.manyToManyOptions.throughModel),T=C(n.relation.manyToManyOptions.leftForeignKey),N=C(n.relation.manyToManyOptions.rightForeignKey),w=n.table===f&&n.relation.columnName===T&&n.relation.model().table===i?.table,R=n.table===f&&n.relation.columnName===N&&n.relation.model().table!==i?.table,_=await this.sql.getTableSchema(f),E=_.foreignKeys.some(D=>D.columns.length===1&&D.columns[0]===T&&D.referencedTable===(i?.table||"")),O=_.foreignKeys.some(D=>D.columns.length===1&&D.columns[0]===N&&D.referencedTable===n.relation.model().table);if(w&&E||R&&O)return null}return n})).then(n=>n.filter(Boolean)),this.data.relationsToDrop=await Promise.all(this.data.relationsToDrop.map(async n=>{let o=this.models.find(u=>u.table===n.table);if(!o)return n;let i=o.getRelations(),a=o.getColumns();return i.some(u=>{if(u.type!=="belongsTo")return false;let m=a.find(T=>T.columnName===u.foreignKey)?.databaseName||u.foreignKey,c=u.model(),p=c.primaryKey||"id",f=c.getColumns().find(T=>T.columnName===p)?.databaseName||p;return n.relation.columns.length===1&&n.relation.columns[0]===m&&n.relation.referencedTable===c.table&&n.relation.referencedColumns.length===1&&n.relation.referencedColumns[0]===f})?null:n})).then(n=>n.filter(Boolean));}clonePkAsColumn(t,e){let r=t.type;return r==="bigIncrement"?r="bigint":r==="increment"&&(r="integer"),{columnName:e,databaseName:e,isPrimary:false,type:r,length:t.length,precision:t.precision,scale:t.scale,withTimezone:t.withTimezone,constraints:{nullable:false}}}pushM2mFkRelations(t){let e=this.buildBelongsToRelation(t.throughTable,()=>t.leftModel,t.leftFkName,t.leftModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate),r=this.buildBelongsToRelation(t.throughTable,()=>t.rightModel,t.rightFkName,t.rightModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate);this.data.relationsToAdd.push(e),this.data.relationsToAdd.push(r);}buildBelongsToRelation(t,e,r,n,o,i,a){let l=o?C(o):Z(t,r,e().table);return {table:t,relation:{type:"belongsTo",model:e,columnName:r,foreignKey:r,constraintName:l,onDelete:i,onUpdate:a},onDelete:i,onUpdate:a}}};var je=class{};je.modelCaseConvention="camel",je.databaseCaseConvention="snake";function Me(s){return String(s).padStart(2,"0")}function Ey(s,t){let e=s.getFullYear(),r=Me(s.getMonth()+1),n=Me(s.getDate()),o=Me(s.getHours()),i=Me(s.getMinutes()),a=Me(s.getSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${i}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${i}:${a}`;case "TIMESTAMP":return Math.floor(s.getTime()/1e3).toString()}}function Up(s,t){let e=s.getUTCFullYear(),r=Me(s.getUTCMonth()+1),n=Me(s.getUTCDate()),o=Me(s.getUTCHours()),i=Me(s.getUTCMinutes()),a=Me(s.getUTCSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${i}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${i}:${a}`;case "TIMESTAMP":return Math.floor(s.getTime()/1e3).toString()}}var Ae=(s,t="ISO",e="UTC")=>{if(!(s instanceof Date)||isNaN(s.getTime()))throw new Error("Invalid date provided");return e==="LOCAL"?Ey(s,t):Up(s,t)};var Tt=(s=new Date)=>Up(s,"ISO");var Vp=(s,t)=>{try{let e=De.createHash("sha256").update(s).digest(),r=De.randomBytes(16),n=De.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");return o+=n.final("hex"),`${r.toString("hex")}:${o}`}catch(e){throw new q("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Jp=(s,t)=>{try{let e=De.createHash("sha256").update(s).digest(),r=String(t).trim(),[n,o]=r.split(":");if(!n||!o)throw new Error(`Invalid encrypted value format: expected "iv:data" but got "${r.substring(0,50)}..."`);let i=n.toLowerCase(),a=o.toLowerCase(),l=De.createDecipheriv("aes-256-cbc",e,Buffer.from(i,"hex")),u=l.update(a,"hex","utf8");return u+=l.final("utf8"),u}catch(e){throw new q("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Hp=(s,t)=>{try{let e=De.randomBytes(32),r=De.randomBytes(16),n=De.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");o+=n.final("hex");let i=publicEncrypt(s,e);return `${r.toString("hex")}:${i.toString("hex")}:${o}`}catch(e){throw new q("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},zp=(s,t)=>{try{let e=String(t).trim(),[r,n,o]=e.split(":");if(!r||!n||!o)throw new Error(`Invalid encrypted value format: expected "iv:key:data" but got "${e.substring(0,50)}..."`);let i=privateDecrypt(s,Buffer.from(n,"hex")),a=De.createDecipheriv("aes-256-cbc",i,Buffer.from(r,"hex")),l=a.update(o,"hex","utf8");return l+=a.final("utf8"),l}catch(e){throw new q("Encryption::decryptAsymmetric","FAILED_TO_DECRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}};var z=class{static defineMetadata(t,e,r,n){if((typeof r!="object"||r===null)&&typeof r!="function")throw new TypeError("target must be an object or function");let o=this.store.get(r);o||(o=new Map,this.store.set(r,o));let i=o.get(n);i||(i=new Map,o.set(n,i)),i.set(t,e);}static getMetadata(t,e,r){if((typeof e!="object"||e===null)&&typeof e!="function")throw new TypeError("target must be an object or function");let n=e;for(;n;){let o=this.store.get(n);if(o){let i=o.get(r);if(i&&i.has(t))return i.get(t)}n=Object.getPrototypeOf(n);}}};z.store=new WeakMap;var Cl="0123456789ABCDEFGHJKMNPQRSTVWXYZ",ql=Cl.length,Qy=10,Ky=16,Ly=(s,t)=>{let e="";for(let r=0;r<t;r++){let n=s%ql;e=Cl.charAt(n)+e,s=(s-n)/ql;}return e},jy=s=>{let t=re().crypto.randomBytes(s),e="";for(let r=0;r<s;r++){let n=t[r];e+=Cl.charAt(n%ql);}return e},Gp=()=>{let s=Math.floor(Date.now()/1e3),t=Ly(s,Qy),e=jy(Ky);return t+e};var Vr=class extends Ce{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var Jr=class extends Ce{constructor(e,r,n){super(e,r);this.type="hasMany";this.foreignKey=n,this.type="hasMany";}};var Hr=class extends Ce{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var zr=class extends Ce{constructor(e,r,n){super(e,r);this.type="manyToMany";this.primaryModel=n.primaryModel,this.relatedModel=e.table,this.throughModel=n.throughModel,this.leftForeignKey=n.leftForeignKey,this.rightForeignKey=n.rightForeignKey;}};function M(s={primaryKey:false}){let t=s?.primaryKey??false;return (e,r)=>{let n=e.constructor;if(t){if(z.getMetadata(gt,e))throw new q("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");z.defineMetadata(gt,r,e),z.defineMetadata(gt,r,e.constructor);}let o=s.databaseName??H(r,n.databaseCaseConvention),i={columnName:r,serialize:s.serialize,prepare:s.prepare,isPrimary:t,primaryKeyConstraintName:s.primaryKeyConstraintName??we(n.table,r),autoUpdate:s.autoUpdate,autoCreate:s.autoCreate,databaseName:o,openApi:s.openApi,type:s.type,length:s?.length,precision:s?.precision,scale:s?.scale,withTimezone:s?.withTimezone,unsigned:s.unsigned,zerofill:s.zerofill,stringMode:s.stringMode,expression:s.expression,constraints:{nullable:s.nullable,default:s.default}};i.validate=s.validate;let a=z.getMetadata(kr,e)||[];a.push(i),z.defineMetadata(kr,a,e);}}M.primary=Wy;M.date=sh;M.datetime=ih;M.timestamp=ah;M.time=lh;M.boolean=oh;M.json=uh;M.uuid=Hy;M.ulid=zy;M.integer=Uy;M.bigInteger=Zy;M.float=Fy;M.decimal=Xy;M.increment=Vy;M.bigIncrement=Jy;M.string=Gy;M.text=Yy;M.binary=eh;M.enum=th;M.encryption={symmetric:rh,asymmetric:nh};M.computed=dh;function Wy(s={}){return M({...s,primaryKey:true})}function Fy(s={}){return M({type:"float",...s,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?Number.parseInt(t):Number.parseFloat(t)},openApi:{type:"number",format:"float",description:"A floating point number",...s.openApi||{}}})}function Uy(s={}){return M({type:"integer",...s,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?+t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An integer number",...s.openApi||{}}})}function Vy(s={}){return M({type:"increment",...s,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An auto-incrementing integer number",...s.openApi||{}}})}function Jy(s={}){return M({type:"bigIncrement",...s,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An auto-incrementing bigint number",...s.openApi||{}}})}function Hy(s={}){return M({type:"uuid",...s,prepare:t=>t||re().crypto.randomUUID(),openApi:{type:"string",format:"uuid",description:"uuid (Universally Unique Identifier)",...s.openApi||{}}})}function zy(s={}){return M({type:"ulid",...s,prepare:t=>t||Gp(),openApi:{type:"string",format:"ulid",description:"ulid (Universally Unique Lexicographically Sortable Identifier)",...s.openApi||{}}})}function Gy(s={}){return M({type:"string",...s,openApi:{type:"string",description:"A string value",...s.openApi||{}}})}function Yy(s={}){return M({type:"longtext",...s,openApi:{type:"string",description:"A text value",...s.openApi||{}}})}function Zy(s={}){return M({type:"bigint",...s,serialize:t=>{if(t!==void 0){if(t===null)return null;if(typeof t=="number")return t;if(typeof t=="string")return Number.parseInt(t);if(typeof t=="bigint")return Number(t)}},openApi:{type:"integer",format:"int64",description:"A bigint number",...s.openApi||{}}})}function Xy(s={}){return M({type:"decimal",precision:s.precision??10,scale:s.scale??2,...s,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseFloat(t)},openApi:{type:"number",format:"double",description:"A decimal number",...s.openApi||{}}})}function eh(s={}){return M({type:"binary",...s,openApi:{type:"string",format:"binary",description:"Binary data",...s.openApi||{}}})}function th(s,t={}){return M({type:s,...t,openApi:{type:"string",enum:s,description:"An enum value",...t.openApi||{}}})}function rh(s){return M({...s,prepare:t=>t&&Vp(s.key,t),serialize:t=>t&&Jp(s.key,t)})}function nh(s){return M({...s,prepare:t=>t&&Hp(s.publicKey,t),serialize:t=>t&&zp(s.privateKey,t)})}function oh(s={}){return M({type:"boolean",...s,serialize:t=>!!t,prepare:t=>{if(t!=null)return !!t},openApi:{type:"boolean",description:"A boolean value",...s.openApi||{}}})}function sh(s={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=s,i=!!n,a=!!r,l=typeof n=="function"?"js":i?true:void 0,u=()=>new Date,d=()=>Ae(new Date,"DATE_ONLY",e),m=t?typeof n=="function"?n:d:typeof n=="function"?n:u,c=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return M({type:"date",...o,autoUpdate:a,autoCreate:l,prepare:t?f=>f?a?c():f:i?m():null:f=>f?a?c():f:i?m():null,serialize:t?f=>{if(f!==void 0)return f===null?null:f instanceof Date?Ae(f,"DATE_ONLY",e):String(f)}:f=>{if(f!==void 0)return f===null?null:f instanceof Date?f:new Date(f)},openApi:{type:"string",format:"date",description:"YYYY-MM-DD",...o.openApi||{}}})}function ih(s={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...i}=s,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,m=typeof o=="function"?"js":u?true:void 0,c=()=>new Date,p=()=>Ae(new Date,"ISO",a),h=t?typeof o=="function"?o:p:typeof o=="function"?o:c,f=t?typeof n=="function"?n:p:typeof n=="function"?n:c;return M({type:"datetime",...i,withTimezone:l,autoUpdate:d,autoCreate:m,prepare:t?w=>w?d?f():w:u?h():null:w=>w?d?f():w:u?h():null,serialize:t?w=>{if(w!==void 0)return w===null?null:w instanceof Date?Ae(w,"ISO",a):String(w)}:w=>{if(w!==void 0)return w===null?null:w instanceof Date?w:new Date(w)},stringMode:t,openApi:{type:"string",format:"date-time",description:"YYYY-MM-DD HH:mm:ss",...i.openApi||{}}})}function ah(s={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...i}=s,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,m=typeof o=="function"?"js":u?true:void 0,c=()=>new Date,p=()=>Ae(new Date,"TIMESTAMP",a),h=t?typeof o=="function"?o:p:typeof o=="function"?o:c,f=t?typeof n=="function"?n:p:typeof n=="function"?n:c;return M({type:"timestamp",...i,withTimezone:l,autoUpdate:d,autoCreate:m,prepare:t?w=>w?d?f():w:u?h():null:w=>w?d?f():w:u?h():null,serialize:t?w=>{if(w!==void 0)return w===null?null:w instanceof Date?Ae(w,"TIMESTAMP",a):String(w)}:w=>{if(w!==void 0)return w===null?null:w instanceof Date?w:new Date(w)},stringMode:t,openApi:{type:"string",format:"date-time",description:"Unix timestamp",...i.openApi||{}}})}function lh(s={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=s,i=!!n,a=!!r,l=typeof n=="function"?"js":i?true:void 0,u=()=>new Date,d=()=>Ae(new Date,"TIME_ONLY",e),m=t?typeof n=="function"?n:d:typeof n=="function"?n:u,c=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return M({type:"time",...o,autoUpdate:a,autoCreate:l,prepare:t?f=>f?a?c():f:i?m():null:f=>f?a?c():f:i?m():null,serialize:t?f=>{if(f!==void 0)return f===null?null:f instanceof Date?Ae(f,"TIME_ONLY",e):String(f)}:f=>{if(f!==void 0)return f===null?null:f instanceof Date?f:new Date(f)},stringMode:t,openApi:{type:"string",format:"time",description:"HH:mm:ss",...o.openApi||{}}})}function uh(s={}){return M({type:"jsonb",...s,serialize:t=>typeof t=="string"?JSON.parse(t):t,prepare:t=>typeof t!="string"?JSON.stringify(t):t,openApi:{type:"object",description:"A JSON object",...s.openApi||{}}})}function dh(s,t={}){return M({...t,expression:s})}function Yp(s){try{return z.getMetadata(kr,s.prototype)||[]}catch{return []}}function Zp(s){return z.getMetadata(Tl,s.prototype)||[]}function Xp(s){return (z.getMetadata(Tl,s.prototype)||[]).map(e=>{let{type:r,model:n,columnName:o,foreignKey:i}=e,a=C(i),l=n();switch(r){case "belongsTo":return new Vr(l,o,a);case "hasOne":return new Hr(l,o,a);case "hasMany":return new Jr(l,o,a);case "manyToMany":if(!e.manyToManyOptions)throw new q("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let u=n();return new zr(u,o,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:C(e.manyToManyOptions.throughModel),leftForeignKey:C(e.manyToManyOptions.leftForeignKey),rightForeignKey:C(e.manyToManyOptions.rightForeignKey)});default:throw new q("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function ef(s){return z.getMetadata(gt,s)||z.getMetadata(gt,s.prototype)}function tf(s){return z.getMetadata(Bp,s.prototype)||[]}function rf(s){return z.getMetadata(Qp,s.prototype)||[]}function nf(s){return z.getMetadata(Kp,s.prototype)||[]}var me=class{};me.columns=new WeakMap,me.byName=new WeakMap,me.byDatabaseName=new WeakMap;var _e=class extends je{static get table(){let t=Object.getOwnPropertyDescriptor(this,"table");if(t&&"value"in t)return t.value;throw new Error(`Table name not set for model "${this.name}". Use defineModel() to create models.`)}static set table(t){Object.defineProperty(this,"table",{value:t,writable:true,enumerable:true,configurable:true});}static get primaryKey(){return ef(this)}constructor(t){if(super(),t)for(let e in t)Object.assign(this,{[e]:t[e]});}static getColumns(){let t=me.columns.get(this);return t||(t=Yp(this),me.columns.set(this,t)),t}static getColumnsByName(){let t=me.byName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.columnName,e])),me.byName.set(this,t)),t}static getColumnsByDatabaseName(){let t=me.byDatabaseName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.databaseName,e])),me.byDatabaseName.set(this,t)),t}static getRelations(){return Zp(this)}static getIndexes(){return tf(this)}static getUniques(){return rf(this)}static getChecks(){return nf(this)}static async validate(t){var i,a;let e=this.getColumns(),r={},n=this.primaryKey,o=n&&t?.[n]!==void 0?"update":"insert";for(let l of e){if(l.expression)continue;let u=l.validate;if(!u)continue;let d=t?t[l.columnName]:void 0,m=Array.isArray(u)?u:[u];for(let c of m)try{let p=await c(d,{model:this,column:l.columnName,operation:o,data:t});if(!(p&&p.valid)){let h=p&&p.message||"Validation failed";(r[i=l.columnName]||(r[i]=[])).push(h);}}catch{(r[a=l.columnName]||(r[a]=[])).push("Validation error");}}if(Object.keys(r).length>0)throw new Ot(r);return {valid:true}}};_e.zodEngine=null,_e.softDeleteColumn="deletedAt",_e.softDeleteValue=Tt();var wt=class extends S{constructor(e,r=false){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.fromNode=e;}};var U=class extends S{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var ee=class extends S{constructor(e,r=[],n,o=false,i=false){super("insert into",i);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="insert";this.file="insert";this.fromNode=e,this.records=r,this.returning=n,this.disableReturning=o;}};var Se=class extends S{constructor(e,r,n,o="update",i,a=false){super("on duplicate",a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="on_duplicate";this.file="on_duplicate";this.table=e,this.conflictColumns=r,this.columnsToUpdate=n,this.mode=o,this.returning=i;}};var St=class extends S{constructor(e=[],r="inserted"){super("returning");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="returning";this.file="returning";this.columns=e,this.prefix=r;}};var $e=class extends S{constructor(e,r=[],n=[],o=false){super("update",o);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="update";this.file="update";this.fromNode=e,this.columns=r,this.values=n;}};var x=class extends S{constructor(e,r,n=false,o,i,a=false){super("where",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where";this.column=e,this.chainsWith=` ${r}`,this.isNegated=n,this.operator=o,this.value=i;}};var xe=class extends S{constructor(e,r="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`;}};var ae=class extends x{constructor(e,r,n=false,o,i,a=false){super(e,r,n,"=",i,a);this.file="where_json";this.jsonOperator=o,this.value=i;}};var Ne=class extends S{constructor(e,r,n,o="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_subquery";this.column=e,this.operator=r,this.subquery=n,this.chainsWith=` ${o}`;}};var of;of=Symbol.toStringTag;var G=class{constructor(t,e,r,n){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=n;this[of]="WriteOperation";}then(t,e){return this.executor().then(t,e)}catch(t){return this.executor().catch(t)}finally(t){return this.executor().finally(t)}toQuery(){return this.toQueryFn()}toSql(){return this.toSqlFn()}unWrap(){return this.unWrapFn()}};var ch=(s,t,e,r,n,o=false)=>{let i=Object.create(t.prototype);for(let a of Object.keys(s)){let l=s[a],u=e.get(a),d=a;u||(u=r.get(a),u&&(d=u.columnName));let m=u!==void 0,c=o?true:n?n.has(d):true;if(m){if(!c)continue;if(l===null){i[d]=null;continue}if(u?.serialize){let p=u.serialize(l);if(p!==null&&typeof p?.then=="function")throw new Error(`hysteria-orm: column "${d}" on model "${t.name}" has an async serialize function, but serializers must be synchronous. Move async work to prepare or a getter.`);i[d]=p;continue}i[d]=l;continue}(!o||n&&n.has(d))&&(i[d]=l);}if(n)for(let a of n)a in i||(i[a]=null);return i},pe=(s,t,e=[])=>{if(!s.length)return null;let r=t.getColumnsByName(),n=t.getColumnsByDatabaseName(),o=e.some(u=>u.includes("*")),i=[];for(let u of e){if(u.toLowerCase().includes(" as ")){let p=u.match(/\s+as\s+(.+)$/i);p&&i.push(p[1].trim());continue}let m=u;if(m.includes(".")&&(m=m.split(".").pop()),m==="*")continue;let c=r.get(m)?.columnName??m;i.push(c);}let a=i.length?new Set(i):null,l=s.map(u=>ch(u,t,r,n,a,o));return l.length===1?l[0]:l};var kt=class{constructor(t){this.observers=t??[];}add(t){this.observers.push(t);}async notifyBefore(t){for(let e of this.observers)e?.onBeforeQuery&&await e.onBeforeQuery(t);}async notifyAfter(t,e){for(let r of this.observers)r?.onAfterQuery&&(t.result??(t.result=e),await r.onAfterQuery(t));}async notifyError(t){for(let e of this.observers)e?.onQueryError&&await e.onQueryError(t);}},sf=s=>{if(!s)return "OTHER";let t=s.trim().toUpperCase();return t.startsWith("SELECT")?"SELECT":t.startsWith("INSERT")?"INSERT":t.startsWith("UPDATE")?"UPDATE":t.startsWith("DELETE")?"DELETE":"OTHER"};var Gr=re();function Rl(s){let t=Gr.timing.now()-s;return Math.round(t*100)/100}var J=async(s,t,e,r,n="rows",o)=>{await e.ensureConnected();let i={id:Gr.crypto.randomUUID(),sql:s,params:t,model:void 0,operation:sf(s),timestamp:Gr.timing.now()};try{let u=e.observerChain;u&&typeof u.notifyBefore=="function"&&await u.notifyBefore(i);}catch{}let a=Gr.timing.now(),l=u=>{o?.shouldNotLog||it(s,e.logs,t,e.inputDetails.queryFormatOptions,r,u);};try{let u=e.driverAdapter;if(!u)throw new q("ExecSql","CONNECTION_NOT_ESTABLISHED");let d=await mh(()=>u.execute(s,t,{returning:n,sqlLiteOptions:o?.sqlLiteOptions,connection:e.sqlConnection}),e.inputDetails.connectionPolicies?.retry,e.logs);try{let m=Rl(a),c=e.observerChain;if(c&&typeof c.notifyAfter=="function"){let p={...i,duration:m,result:d};await c.notifyAfter(p);}}catch{}return l(Rl(a)),u.extract(d,n)}catch(u){throw l(Rl(a)),u}},Yr=async(s,t,e,r={},n)=>{let o=e.driverAdapter;if(!o)throw new q("ExecSqlStreaming","CONNECTION_NOT_ESTABLISHED");return await o.stream(s,t,{...r,connection:e.sqlConnection??void 0},{onData:n.onData})};async function mh(s,t={maxRetries:0,delay:0},e=false){let r=0,n=t.maxRetries||0,o=t.delay||0;async function i(){try{return s()}catch(a){if(!Object.prototype.hasOwnProperty.call(a,"code")||a.code!=="ECONNREFUSED")throw a;if(r<n)return r++,Zl(`Retrying sql in ${o}ms (attempt ${r}/${n})`,"info",e),await new Promise(l=>setTimeout(l,o)),i();throw a}}return i()}var ne=class extends S{constructor(e,r,n,o){super("select");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="select";this.file="select";this.column=e,this.alias=r,this.sqlFunction=n,this.isRawValue=o??false;}};var Bt=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=Xp(t),this.modelRelationsMap=new Map(this.modelRelations.map(n=>[n.columnName,n]));}getRelationFromModel(t){let e=this.modelRelationsMap.get(t.toString());if(!e)throw new q("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function Zr(s,t,e){return {total:e,perPage:t,currentPage:s,firstPage:1,isEmpty:e===0,lastPage:Math.max(1,Math.ceil(e/t)),hasMorePages:s<Math.max(1,Math.ceil(e/t)),hasPages:e>t}}var Nt=s=>typeof s=="number"?s:parseFloat(s);var Ye=class extends S{constructor(e,r,n=false,o,i,a=false){super("having",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="having";this.file="having";this.column=e,this.chainsWith=`${r} `,this.isNegated=n,this.operator=o,this.value=i;}};var Xr=class extends S{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var en=class extends S{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var We=class extends S{constructor(e,r,n,o="extract",i=false){super("select");this.folder="select";this.file="select_json";this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.column=e,this.jsonPath=r,this.alias=n,this.jsonOperator=o,this.isRawValue=i;}};var le=class extends S{constructor(e,r,n,o="inner",i,a=false,l){super(`${o} join`,a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="join";this.file="join";this.type="inner";this.table=e,this.left=r,this.right=n,this.on=i,this.additionalConditions=l;}};var Qt=class extends S{constructor(e,r=false){super("group by",r);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="group_by";this.file="group_by";this.column=e;}};var tn=class extends S{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var rn=class extends S{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var Kt=class extends S{constructor(e,r="asc",n=false){super("order by",n);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="order_by";this.file="order_by";this.column=e,this.direction=r;}};var on=class on{constructor(t,e){this.model=t,this.sqlDataSource=e,this.groupByNodes=[],this.orderByNodes=[],this.limitNode=null,this.offsetNode=null,this.logs=this.sqlDataSource.logs,typeof t.getColumns=="function"?(this.modelColumns=t.getColumns(),this.modelColumnsMap=t.getColumnsByName?.()??new Map(this.modelColumns.map(r=>[r.columnName,r]))):(this.modelColumns=[],this.modelColumnsMap=on.EMPTY_MAP);}clearGroupBy(){return this.groupByNodes=[],this}clearOrderBy(){return this.orderByNodes=[],this}clearLimit(){return this.limitNode=null,this}clearOffset(){return this.offsetNode=null,this}groupBy(...t){return t.forEach(e=>{this.groupByNodes.push(new Qt(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Qt(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new Kt(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new Kt(t,"asc",true)),this}limit(t){return typeof t!="number"&&g.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new tn(t),this}offset(t){return typeof t!="number"&&g.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new rn(t),this}};on.EMPTY_MAP=new Map;var nn=on;var Ze=class s{constructor(t,e=false){this.sqlDataSource=t;this.isNestedCondition=false;this.whereNodes=[],this.isNestedCondition=e;}getConditions(){return this.whereNodes}where(t,e,r){return typeof t=="function"?this.andWhereGroup(t):this.andWhere(t,e,r)}andWhere(t,e,r){if(typeof t=="function")return this.andWhereGroup(t);let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"and",false,n,o)),this}orWhere(t,e,r){if(typeof t=="function")return this.orWhereGroup(t);let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"or",false,n,o)),this}whereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"and",true,n,o)),this}andWhereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"and",true,n,o)),this}orWhereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"or",true,n,o)),this}whereBetween(t,e,r){return this.andWhereBetween(t,e,r)}andWhereBetween(t,e,r){return this.whereNodes.push(new x(t,"and",false,"between",[e,r])),this}orWhereBetween(t,e,r){return this.whereNodes.push(new x(t,"or",false,"between",[e,r])),this}whereNotBetween(t,e,r){return this.andWhereNotBetween(t,e,r)}andWhereNotBetween(t,e,r){return this.whereNodes.push(new x(t,"and",true,"between",[e,r])),this}orWhereNotBetween(t,e,r){return this.whereNodes.push(new x(t,"or",true,"between",[e,r])),this}whereLike(t,e){return this.andWhereLike(t,e)}andWhereLike(t,e){return this.where(t,"like",e),this}orWhereLike(t,e){return this.orWhere(t,"like",e),this}whereILike(t,e){return this.andWhereILike(t,e)}andWhereILike(t,e){return this.where(t,"ilike",e),this}orWhereILike(t,e){return this.orWhere(t,"ilike",e),this}whereNotLike(t,e){return this.andWhereNotLike(t,e)}andWhereNotLike(t,e){return this.where(t,"not like",e),this}orWhereNotLike(t,e){return this.orWhere(t,"not like",e),this}whereNotILike(t,e){return this.andWhereNotILike(t,e)}andWhereNotILike(t,e){return this.where(t,"not ilike",e),this}orWhereNotILike(t,e){return this.orWhere(t,"not ilike",e),this}whereIn(t,e){return this.andWhereIn(t,e)}andWhereIn(t,e){return e.length?(this.whereNodes.push(new x(t,"and",false,"in",e)),this):(this.whereNodes.push(new x("false","and",true,"=",[],true)),this)}orWhereIn(t,e){return e.length?(this.whereNodes.push(new x(t,"or",false,"in",e)),this):(this.whereNodes.push(new x("false","or",true,"=",[],true)),this)}whereNotIn(t,e){return this.andWhereNotIn(t,e)}andWhereNotIn(t,e){return e.length?(this.whereNodes.push(new x(t,"and",true,"in",e)),this):(this.whereNodes.push(new x("true","and",true,"=",[],true)),this)}orWhereNotIn(t,e){return e.length?(this.whereNodes.push(new x(t,"or",true,"in",e)),this):(this.whereNodes.push(new x("true","or",true,"=",[],true)),this)}whereNull(t){return this.andWhereNull(t)}andWhereNull(t){return this.whereNodes.push(new x(t,"and",false,"is null",void 0)),this}orWhereNull(t){return this.whereNodes.push(new x(t,"or",false,"is null",void 0)),this}whereNotNull(t){return this.andWhereNotNull(t)}andWhereNotNull(t){return this.whereNodes.push(new x(t,"and",false,"is not null",void 0)),this}orWhereNotNull(t){return this.whereNodes.push(new x(t,"or",false,"is not null",void 0)),this}whereRegexp(t,e){return this.andWhereRegexp(t,e)}andWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(t,"and",false,r?"~":"regexp",e.source)),this}orWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(t,"or",false,r?"~":"regexp",e.source)),this}whereNotRegexp(t,e){return this.andWhereNotRegexp(t,e)}andWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(t,"and",true,r?"~":"regexp",e.source)),this}orWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(t,"or",true,r?"~":"regexp",e.source)),this}whereGroup(t){return this.andWhereGroup(t)}andWhereGroup(t){let e=new s(this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new xe(r,"and")),this}orWhereGroup(t){let e=new s(this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new xe(r,"or")),this}whereRaw(t,e){return this.andWhereRaw(t,e)}andWhereRaw(t,e){return this.whereNodes.push(new x(t,"and",true,"=",e??[],true)),this}orWhereRaw(t,e){return this.whereNodes.push(new x(t,"or",true,"=",e??[],true)),this}};var sn=class extends nn{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new le(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new le(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new le(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new le(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new le(t,"","","cross",{operator:"="},true)),this}naturalJoinRaw(t){return this.joinNodes.push(new le(t,"","","natural",{operator:"="},true)),this}innerJoin(t,e,r,n,o){let i=r,a=n,l=typeof n=="function"?n:o;if(!i){if(!this.model.primaryKey)throw new q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");i=`${this.model.table}.${this.model.primaryKey}`;}return this.join(typeof t=="string"?t:t.table,e,i,a,l),this}join(t,e,r,n,o){let i=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!i){if(!this.model.primaryKey)throw new q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");i=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new le(typeof t=="string"?t:t.table,e,i,"inner",{operator:a||"="},false,u)),this}leftJoin(t,e,r,n,o){let i=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!i){if(!this.model.primaryKey)throw new q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");i=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new le(typeof t=="string"?t:t.table,e,i,"left",{operator:a||"="},false,u)),this}rightJoin(t,e,r,n,o){let i=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!i){if(!this.model.primaryKey)throw new q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");i=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new le(typeof t=="string"?t:t.table,e,i,"right",{operator:a||"="},false,u)),this}fullJoin(t,e,r,n,o){let i=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!i){if(!this.model.primaryKey)throw new q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");i=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new le(typeof t=="string"?t:t.table,e,i,"full",{operator:a||"="},false,u)),this}};var an=class extends sn{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.dbType=r.getDbType(),this.fromNode=new U(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return e.forEach(r=>{if(Array.isArray(r)){let[a,l]=r;this.modelSelectedColumns.push(l);let u=this.resolveComputedColumn(a);if(u){this.selectNodes.push(new ne(`(${u.expression}) as ${l}`,void 0,void 0,true));return}let d=H(a,this.model.databaseCaseConvention);this.selectNodes.push(new ne(d,l));return}let n=r;this.modelSelectedColumns.push(n);let o=this.resolveComputedColumn(n);if(o){this.selectNodes.push(new ne(`(${o.expression}) as ${o.alias}`,void 0,void 0,true));return}let i=H(n,this.model.databaseCaseConvention);this.selectNodes.push(new ne(i));}),this}selectRaw(e){return this.selectNodes.push(new ne(e,void 0,void 0,true)),this}selectFunc(e,r,n){return this.selectNodes.push(new ne(r,n,e)),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}resolveComputedColumn(e){let r=this.model.getColumnsByName?.();if(!r||r.size===0)return;let n=e.includes(".")?e.split(".").pop():e,o=r.get(n);if(o?.expression)return {expression:o.expression,alias:o.databaseName||n}}clearFrom(){return this.fromNode=new U(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new U(e),this}distinct(){return this.distinctNode=new Xr,this}distinctOn(...e){return this.distinctOnNode=new en(e),this}selectJson(e,r,n){return this.selectNodes.push(new We(e,r,n,"extract")),this}selectJsonText(e,r,n){return this.selectNodes.push(new We(e,r,n,"extract_text")),this}selectJsonArrayLength(e,r,n){return this.selectNodes.push(new We(e,r,n,"array_length")),this}selectJsonKeys(e,r,n){return this.selectNodes.push(new We(e,r,n,"object_keys")),this}selectJsonRaw(e,r){return this.selectNodes.push(new We(e,"",r,"raw",true)),this}};var ln=class extends an{constructor(e,r,n=false){super(e,r);this.isNestedCondition=false;this.whereNodes=[],this.havingNodes=[],this.isNestedCondition=n;}clearWhere(){return this.whereNodes=[],this}clearHaving(){return this.havingNodes=[],this}strictWhen(e,r){return e==null?this:(r(this),this)}when(e,r){return e?(r(this),this):this}where(e,r,n){return typeof e=="function"?this.andWhereGroup(e):typeof r=="function"&&n===void 0?this.andWhereSubQuery(e,"in",r):r instanceof B&&n===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function")?this.andWhereSubQuery(e,r,n):this.andWhere(e,r,n)}andWhere(e,r,n){if(typeof e=="function")return this.andWhereGroup(e);if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",i;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,i=n):(i=r,o="="),this.whereNodes.push(new x(e,"and",false,o,i)),this}orWhere(e,r,n){if(typeof e=="function")return this.orWhereGroup(e);if(typeof r=="function"&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(r instanceof B&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",i;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,i=n):(i=r,o="="),this.whereNodes.push(new x(e,"or",false,o,i)),this}whereColumn(e,r,n){return this.andWhereColumn(e,r,n)}andWhereColumn(e,r,n){let o="=",i;return n!==void 0?(o=r,i=n):i=r,this.whereNodes.push(new x(e,"and",false,o,new A(i))),this}orWhereColumn(e,r,n){let o="=",i;return n!==void 0?(o=r,i=n):i=r,this.whereNodes.push(new x(e,"or",false,o,new A(i))),this}whereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",i;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,i=n):(i=r,o="="),this.whereNodes.push(new x(e,"and",true,o,i)),this}andWhereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",i;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,i=n):(i=r,o="="),this.whereNodes.push(new x(e,"and",true,o,i)),this}orWhereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",i;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,i=n):(i=r,o="="),this.whereNodes.push(new x(e,"or",true,o,i)),this}whereBetween(e,r,n){return this.andWhereBetween(e,r,n)}andWhereBetween(e,r,n){return this.whereNodes.push(new x(e,"and",false,"between",[r,n])),this}orWhereBetween(e,r,n){return this.whereNodes.push(new x(e,"or",false,"between",[r,n])),this}whereNotBetween(e,r,n){return this.andWhereNotBetween(e,r,n)}andWhereNotBetween(e,r,n){return this.whereNodes.push(new x(e,"and",true,"between",[r,n])),this}orWhereNotBetween(e,r,n){return this.whereNodes.push(new x(e,"or",true,"between",[r,n])),this}whereLike(e,r){return this.andWhereLike(e,r)}andWhereLike(e,r){return this.where(e,"like",r),this}orWhereLike(e,r){return this.orWhere(e,"like",r),this}whereILike(e,r){return this.andWhereILike(e,r)}andWhereILike(e,r){return this.where(e,"ilike",r),this}orWhereILike(e,r){return this.orWhere(e,"ilike",r),this}whereNotLike(e,r){return this.andWhereNotLike(e,r)}andWhereNotLike(e,r){return this.where(e,"not like",r),this}orWhereNotLike(e,r){return this.orWhere(e,"not like",r),this}whereNotILike(e,r){return this.andWhereNotILike(e,r)}andWhereNotILike(e,r){return this.where(e,"not ilike",r),this}orWhereNotILike(e,r){return this.orWhere(e,"not ilike",r),this}whereIn(e,r){return this.andWhereIn(e,r)}andWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new x(e,"and",false,"in",r)),this):(this.whereNodes.push(new x("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new x(e,"or",false,"in",r)),this):(this.whereNodes.push(new x("false","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"in",r)}whereNotIn(e,r){return this.andWhereNotIn(e,r)}andWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new x(e,"and",true,"in",r)),this):(this.whereNodes.push(new x("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new x(e,"or",true,"in",r)),this):(this.whereNodes.push(new x("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new x(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new x(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new x(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new x(e,"or",false,"is not null",void 0)),this}whereRegexp(e,r){return this.andWhereRegexp(e,r)}andWhereRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(e,"and",false,n?"~":"regexp",r.source)),this}orWhereRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(e,"or",false,n?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new x(e,"and",true,n?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new x(e,"and",true,n?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new x(e,"or",true,n?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ne("","exists",r.extractQueryNodes(),"and")),this}orWhereExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ne("","exists",r.extractQueryNodes(),"or")),this}whereNotExists(e){return this.andWhereNotExists(e)}andWhereNotExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ne("","not exists",r.extractQueryNodes(),"and")),this}orWhereNotExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ne("","not exists",r.extractQueryNodes(),"or")),this}whereRaw(e,r=[]){return this.andWhereRaw(e,r)}andWhereRaw(e,r=[]){return this.whereNodes.push(new x(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new x(e,"or",false,"=",r,true)),this}having(e,r,n){return this.andHaving(e,r,n)}andHaving(e,r,n){let o="=",i;return typeof r=="string"&&n?(o=r,i=n):(i=r,o="="),this.havingNodes.push(new Ye(e,"and",false,o,i)),this}orHaving(e,r,n){let o="=",i;return typeof r=="string"&&n?(o=r,i=n):(i=r,o="="),this.havingNodes.push(new Ye(e,"or",false,o,i)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Ye(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Ye(e,"or",false,"=",[],true)),this}buildSubQuery(e){if(e instanceof B)return e;let r=new B(this.model,this.sqlDataSource),n=e(r);return n!=null&&"extractQueryNodes"in n?n:r}andWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new Ne(e,r,o.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new Ne(e,r,o.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new B(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new xe(r.whereNodes,"and");return this.whereNodes.push(n),this}orWhereGroup(e){let r=new B(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new xe(r.whereNodes,"or");return this.whereNodes.push(n),this}};var un=class extends ln{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new ae(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new ae(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new ae(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new ae(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new ae(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new ae(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new ae(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new ae(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new ae(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new ae(t,"or",false,"raw",e)),this}};var B=class s extends un{constructor(e,r){super(e,r);this.isNestedCondition=false;this._interpreterUtils=null;this.insertNode=null;this.onDuplicateNode=null;this.updateNode=null;this.deleteNode=null;this.returningNode=null;this.truncateNode=null;this.replicationMode=null;this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.astParser=new b(this.model,this.dbType);}get interpreterUtils(){return this._interpreterUtils||(this._interpreterUtils=new y(this.model)),this._interpreterUtils}setReplicationMode(e){return this.replicationMode=e,this}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof s)&&typeof e[1]=="string"){let[r,n]=e;if(typeof r=="function"){let o=new s(this.model,this.sqlDataSource),i=r(o),a=i!=null&&"extractQueryNodes"in i?i:o;return this.selectNodes.push(new ne(a.extractQueryNodes(),n)),this}return this.selectNodes.push(new ne(r.extractQueryNodes(),n)),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}clearSelect(){return super.clearSelect(),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}async exists(){return !!await this.one()}async many(){let{sql:e,bindings:r}=this.unWrap();return this.execSqlWithSlaveHandling("read",n=>J(e,r,n,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}))}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async pluck(e){return (await this.many()).map(n=>n[e])}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async oneOrFail(){let e=await this.one();if(!e)throw new q("SqlDataSource::query::oneOrFail","ROW_NOT_FOUND");return e}async stream(e={}){let{sql:r,bindings:n}=this.unWrap();return this.execSqlWithSlaveHandling("read",async o=>await Yr(r,n,o,e,{onData:(a,l)=>{a.write(l);}}))}async*chunk(e){let r=0;for(;;){let n=await this.limit(e).offset(r).many();if(!n.length)break;r+=n.length,yield n;}}async paginateWithCursor(e,r){if(!this.orderByNodes.length)throw new q(this.model.name+"::paginateWithCursor","ORDER_BY_REQUIRED");let n=this.orderByNodes;if(n.some(c=>c.isRawValue))throw new q(this.model.name+"::paginateWithCursor","ORDER_BY_RAW_NOT_SUPPORTED");let o=n.map(c=>c.column),i=n[0].direction==="desc"?"<":">";if(r){let c=Array.isArray(r.value)?r.value:[r.value];this.andWhere(p=>{for(let h=0;h<o.length;h++){let f=h;p.orWhere(T=>{for(let N=0;N<f;N++)T.where(o[N],"=",c[N]);T.where(o[f],i,c[f]);});}});}this.limit(e+1);let a=await this.many(),l=a.length>e,u=l?a.slice(0,e):a,d=u[u.length-1],m=o.map(c=>c.includes(".")?c.slice(c.lastIndexOf(".")+1):c);return {data:u,hasMore:l,nextCursor:d?{key:m.length===1?m[0]:m,value:m.length===1?d[m[0]]:m.map(c=>d[c])}:null}}lockForUpdate(e={}){return this.lockQueryNodes.push(new vt("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new vt("for_share",e.skipLocked,e.noWait)),this}union(e){if(typeof e=="string")return this.unionNodes.push(new He(e)),this;let n=(e instanceof s?e:e(new s(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new He(n)),this}unionAll(e){if(typeof e=="string")return this.unionNodes.push(new He(e,true)),this;let n=(e instanceof s?e:e(new s(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new He(n,true)),this}increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?Nt(r.total):0}needsDerivedTableCount(){return this.groupByNodes.length>0||this.havingNodes.length>0||this.distinctNode!==null||this.distinctOnNode!==null}buildCountQuery(e="*"){if(!this.needsDerivedTableCount()){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);return}this.clearOrderBy(),this.clearLimit(),this.clearOffset();let r=this.extractQueryNodes();this.withNodes=[],this.distinctNode=null,this.distinctOnNode=null,this.clearSelect(),this.fromNode=new U(r,"g"),this.joinNodes=[],this.whereNodes=[],this.groupByNodes=[],this.havingNodes=[],this.lockQueryNodes=[],this.unionNodes=[],this.selectRaw(`count(${e}) as total`);}async getMax(e){this.clearForFunctions(),this.selectRaw(`max(${e}) as total`);let r=await this.one();return r?Nt(r.total):0}async getMin(e){this.clearForFunctions(),this.selectRaw(`min(${e}) as total`);let r=await this.one();return r?Nt(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectRaw(`avg(${e}) as total`);let r=await this.one();return r?Nt(r.total):0}async getSum(e){this.clearForFunctions(),this.selectRaw(`sum(${e}) as total`);let r=await this.one();return r?Nt(r.total):0}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&g.warn(`${this.model.name}::paginate Non numeric values provided to \`paginate\``);let n=this.clone(),o=this.limit(r).offset((e-1)*r),[i,a]=await this.executePaginateQueries(()=>o.many(),()=>n.getCount("*"));return {paginationMetadata:Zr(e,r,a),data:i}}table(e,r){if(typeof e=="function"){if(!r)throw new q("QueryBuilder::table","MISSING_ALIAS_FOR_SUBQUERY");let n=new s(this.model,this.sqlDataSource),o=e(n),a=(o!=null&&"extractQueryNodes"in o?o:n).extractQueryNodes();return this.fromNode=new U(a,r),this}return this.fromNode=new U(e,r),this}with(e,r){let n=new s(this.model,this.sqlDataSource),o=r(n),i=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new bt("normal",e,i.extractQueryNodes())),this}withRecursive(e,r){let n=new s(this.model,this.sqlDataSource),o=r(n),i=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new bt("recursive",e,i.extractQueryNodes())),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new q("QueryBuilder::withMaterialized","MATERIALIZED_CTE_NOT_SUPPORTED",new Error("MATERIALIZED CTE is only supported by postgres"));let n=new s(this.model,this.sqlDataSource),o=r(n),i=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new bt("materialized",e,i.extractQueryNodes())),this}insert(e,r){let n=Object.fromEntries(Object.keys(e).map(i=>[i,e[i]])),o=!r||r.length===0;return this.insertNode=new ee(this.fromNode,[this.interpreterUtils.stripComputedFromData(n)],r,o),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:i,values:a}=this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert",this.dbType),l=Object.fromEntries(i.map((p,h)=>[p,a[h]]));this.insertNode=new ee(this.fromNode,[l],r,o);let{sql:u,bindings:d}=this.astParser.parse([this.insertNode]),m=await this.getSqlDataSource("write"),c=await J(u,d,m,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[e]}});if(!o)return Array.isArray(c)&&c.length?c[0]:c})}insertMany(e,r){let n=e.map(i=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(i).map(a=>[a,i[a]])))),o=!r||r.length===0;return this.insertNode=new ee(this.fromNode,n,r,o),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{if(!e.length)return o?void 0:[];let i=await Promise.all(e.map(async m=>{let{columns:c,values:p}=this.interpreterUtils.prepareColumns(Object.keys(m),Object.values(m),"insert",this.dbType);return Object.fromEntries(c.map((h,f)=>[h,p[f]]))}));this.insertNode=new ee(this.fromNode,i,r,o);let{sql:a,bindings:l}=this.astParser.parse([this.insertNode]),u=await this.getSqlDataSource("write"),d=await J(a,l,u,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:i}});if(!o)return d})}upsert(e,r,n={updateOnConflict:true}){let o=this.interpreterUtils.filterComputedColumns(Object.keys(e)),i=Object.keys(r),a=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(e).map(l=>[l,e[l]])));return this.insertNode=new ee(new U(this.model.table),[a],void 0,true),this.onDuplicateNode=new Se(this.model.table,i,o,n.updateOnConflict??true?"update":"ignore",n.returning),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:u}=this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert",this.dbType),d=Object.fromEntries(l.map((f,T)=>[f,u[T]]));if(this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw([d],i,o,n,[e]);let{sql:m,bindings:c}=this.astParser.parse([new ee(new U(this.model.table),[d],void 0,true),new Se(this.model.table,i,o,n.updateOnConflict??true?"update":"ignore",n.returning)]),p=await this.getSqlDataSource("write"),h=await J(m,c,p,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:[e]}});return Array.isArray(h)?h:[h]})}upsertMany(e,r,n,o={updateOnConflict:true}){let i=this.interpreterUtils.filterComputedColumns(r),a=n.map(l=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(l).map(u=>[u,l[u]]))));return this.insertNode=new ee(new U(this.model.table),a,void 0,true),this.onDuplicateNode=new Se(this.model.table,e,i,o.updateOnConflict??true?"update":"ignore",o.returning),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let l=[];if(await Promise.all(n.map(async p=>{let{columns:h,values:f}=this.interpreterUtils.prepareColumns(Object.keys(p),Object.values(p),"insert",this.dbType),T=Object.fromEntries(h.map((N,w)=>[N,f[w]]));l.push(T);})),this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw(l,e,i,o,n);let{sql:u,bindings:d}=this.astParser.parse([new ee(new U(this.model.table),l,void 0,true),new Se(this.model.table,e,i,o.updateOnConflict??true?"update":"ignore",o.returning)]),m=await this.getSqlDataSource("write"),c=await J(u,d,m,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:n}});return Array.isArray(c)?c:[c]})}async executeMssqlMergeRaw(e,r,n,o,i){if(!e.length)return [];let a=Object.keys(e[0]),l=this.interpreterUtils.formatStringColumn("mssql",this.model.table),u=Q=>this.interpreterUtils.formatStringColumn("mssql",Q),d=[],m=e.map(Q=>`select ${a.map($=>(d.push(Q[$]),`@${d.length}`)).join(", ")}`),c=a.map(u).join(", "),p=m.join(" union all "),h=r.map(Q=>`target.${u(Q)} = source.${u(Q)}`).join(" and "),f=n.filter(Q=>!r.includes(Q)).map(Q=>`target.${u(Q)} = source.${u(Q)}`).join(", "),T=a.map(u).join(", "),N=a.map(Q=>`source.${u(Q)}`).join(", "),w=o.returning&&o.returning.length?o.returning.map(Q=>`inserted.${u(Q)}`).join(", "):a.map(Q=>`inserted.${u(Q)}`).join(", "),_=(o.updateOnConflict??true)&&f?`when matched then update set ${f}`:"",E=`merge into ${l} as target using (${p}) as source (${c}) on ${h} ${_} when not matched then insert (${T}) values (${N}) output ${w};`,O=await this.getSqlDataSource("write"),D=await J(E,d,O,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:i}});return Array.isArray(D)?D:[D]}update(e,r){let n=this.interpreterUtils.stripComputedFromData(e),o=Object.keys(n),i=Object.values(n);this.updateNode=new $e(this.fromNode,o,i),this.returningNode=this.buildReturningNode("update",r);let a=this.returningNode!==null;return new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:u}=this.interpreterUtils.prepareColumns(o,i,"update",this.dbType);this.updateNode=new $e(this.fromNode,l,u);let{sql:d,bindings:m}=this.astParser.parse(this.withReturningNode([this.updateNode,...this.whereNodes,...this.joinNodes])),c=await this.getSqlDataSource("write");return J(d,m,c,this.dbType,a?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:a?"fetch":"affectedRows"}})})}buildReturningNode(e,r){return !r?.length||!this.interpreterUtils.dialectEmitsReturning(this.dbType)?null:new St(r,e==="delete"?"deleted":"inserted")}withReturningNode(e){if(!this.returningNode)return e;if(this.dbType==="mssql"){let[r,...n]=e;return [r,this.returningNode,...n]}return [...e,this.returningNode]}truncate(){return this.truncateNode=new ht(this.fromNode),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:e,bindings:r}=this.astParser.parse([this.truncateNode]),n=await this.getSqlDataSource("write");await J(e,r,n,this.dbType,"rows");})}delete(e){this.deleteNode=new wt(this.fromNode),this.returningNode=this.buildReturningNode("delete",e);let r=this.returningNode!==null;return new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:n,bindings:o}=this.astParser.parse(this.withReturningNode([this.deleteNode,...this.whereNodes,...this.joinNodes])),i=await this.getSqlDataSource("write");return J(n,o,i,this.dbType,r?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:r?"fetch":"affectedRows"}})})}softDelete(e={}){let{column:r="deletedAt",value:n=Tt()}=e||{};return this.updateNode=new $e(this.fromNode,[r],[n]),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:o,values:i}=this.interpreterUtils.prepareColumns([r],[n],"update",this.dbType);this.updateNode=new $e(this.fromNode,o,i);let{sql:a,bindings:l}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),u=await this.getSqlDataSource("write");return J(a,l,u,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return tt(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),n=nt(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${n}`:n,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new ne("*")]);let{sql:e,bindings:r}=this.astParser.parse(this.extractQueryNodes());return {sql:this.withQuery?`${this.withQuery} ${e}`:e,bindings:[...r||[]]}}clone(){let e=new s(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=j(this.modelSelectedColumns),e.distinctNode=j(this.distinctNode),e.distinctOnNode=j(this.distinctOnNode),e.selectNodes=j(this.selectNodes),e.withQuery=j(this.withQuery),e.joinNodes=j(this.joinNodes),e.whereNodes=j(this.whereNodes),e.groupByNodes=j(this.groupByNodes),e.havingNodes=j(this.havingNodes),e.orderByNodes=j(this.orderByNodes),e.lockQueryNodes=j(this.lockQueryNodes),e.unionNodes=j(this.unionNodes),e.withNodes=j(this.withNodes),e.fromNode=j(this.fromNode),e.limitNode=j(this.limitNode),e.offsetNode=j(this.offsetNode),e.returningNode=j(this.returningNode),e.isNestedCondition=this.isNestedCondition,e}clear(){let e=new s(this.model,this.sqlDataSource);return this.fromNode.alias&&e.table(e.model.table,this.fromNode.alias),e}clearLockQuery(){return this.lockQueryNodes=[],this}clearUnionQuery(){return this.unionNodes=[],this}clearWithQuery(){return this.withNodes=[],this}extractQueryNodes(){return this.selectNodes.length||(this.selectNodes=[new ne("*")]),this.insertNode?[this.insertNode,this.onDuplicateNode].filter(Boolean):this.updateNode?this.withReturningNode([this.updateNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode]).filter(Boolean):this.deleteNode?this.withReturningNode([this.deleteNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode]).filter(Boolean):this.truncateNode?[this.truncateNode]:[...this.withNodes,this.distinctNode,this.distinctOnNode,...this.selectNodes,this.fromNode,...this.joinNodes,...this.whereNodes,...this.groupByNodes,...this.havingNodes,...this.orderByNodes,this.limitNode,this.offsetNode,...this.lockQueryNodes,...this.unionNodes].filter(Boolean)}clearForFunctions(){return this.clearSelect(),this.clearGroupBy(),this.clearOrderBy(),this.clearLimit(),this.clearOffset(),this}isMssqlTransaction(){return this.sqlDataSource.type==="mssql"&&!!this.sqlDataSource.sqlConnection}async executePaginateQueries(e,r){if(this.isMssqlTransaction()){let n=await e(),o=await r();return [n,o]}return Promise.all([e(),r()])}async getSqlDataSource(e){return this.replicationMode?this.replicationMode==="master"?this.sqlDataSource:e==="write"?this.sqlDataSource:this.sqlDataSource.getSlave()||this.sqlDataSource:e==="read"?this.sqlDataSource.getSlave()||this.sqlDataSource:this.sqlDataSource}async execSqlWithSlaveHandling(e,r){let n=await this.getSqlDataSource(e);if(!(n!==this.sqlDataSource))return r(n);try{return await r(n)}catch(i){let a=i instanceof Error?i:new Error(String(i)),l=this.sqlDataSource.getOnSlaveServerFailure();if(l)return await l(a,{host:n.host,port:n.port,username:n.username,password:n.password,database:n.database,type:n.getDbType()}),await r(this.sqlDataSource);throw a}}};function af(s,t){return t.strategy&&t.strategy!=="auto"?t.strategy:ph(s)}function ph(s){let{parentCount:t,relationType:e,hasLimitOffset:r}=s;return r&&(e==="hasMany"||e==="manyToMany")?"batched":t===1?"join":e==="manyToMany"?typeof t=="number"&&t<=10?"join":"batched":typeof t=="number"&&t<10?"join":"batched"}var Ml=re(),Xe=class s extends B{constructor(e,r){super(e,r);this.loadOptions={strategy:"auto"};this.sqlModelManagerUtils=new Bt(e,this.dbType,r),this.relationQueryBuilders=[],this.modelSelectedColumns=[],this.modelColumnsMap=this.model.getColumnsByDatabaseName(),this.modelColumnsDatabaseNames=new Map;for(let[n,o]of this.modelColumnsMap)this.modelColumnsDatabaseNames.set(n,o.columnName);}expandModelSelectColumns(){let e=this.selectNodes;if(!e.length){if(this.joinNodes.length)return;for(let[,r]of this.modelColumnsMap)r.expression||e.push(new ne(r.databaseName,r.columnName));return}for(let r of e){if(r.isRawValue||r.alias!==void 0||typeof r.column!="string"||r.column.includes(".")||r.column==="*")continue;let n=this.modelColumnsMap.get(r.column);!n||n.expression||(r.alias=n.columnName);}}get isRelationQueryBuilder(){return !!this.relation}static from(e,r={}){if(r.connection)return new s(e,r.connection);if(r.trx)return new s(e,r.trx.sql);throw new Error("ModelQueryBuilder::from - A connection or transaction is required. Use sql.from(Model) instead.")}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async oneOrFail(e){let r=await this.one();if(!r)throw new q(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return r}async many(){await this.model.beforeFetch?.(this),this.expandModelSelectColumns();let r=await super.many();if(!r.length)return [];let n=pe(r,this.model,this.modelSelectedColumns);if(!n)return [];let o=Array.isArray(n)?n:[n];return this.relationQueryBuilders.length&&await this.processRelationsWithStrategy(o),o}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async*chunk(e){let r=0;for(;;){let n=await this.limit(e).offset(r).many();if(!n.length)break;yield n,r+=n.length;}}async stream(e={}){await this.model.beforeFetch?.(this),this.expandModelSelectColumns();let{sql:r,bindings:n}=this.unWrap(),o=await this.getSqlDataSource("read");return await Yr(r,n,o,e,{onData:async(a,l)=>{let u=pe([l],this.model,this.modelSelectedColumns);u&&(this.relationQueryBuilders.length&&await this.processRelationsRecursively([u]),a.write(u));}})}async paginateWithCursor(e,r){return super.paginateWithCursor(e,r)}insert(e,r={}){return this.getModelManager(r.trx).insert(e,{returning:r.returning})}insertMany(e,r={}){return this.getModelManager(r.trx).insertMany(e,{returning:r.returning})}upsert(e,r,n={updateOnConflict:true}){let o=this.getModelManager(n.trx),i=Object.keys(e),a=Object.keys(r),l={...e,...r};return o.upsertMany(i,a,[l],{updateOnConflict:n.updateOnConflict??true,returning:n.returning}).then(u=>Array.isArray(u)?u[0]:u)}upsertMany(e,r,n={updateOnConflict:true}){let o=this.getModelManager(n.trx),i=r.length>0?Object.keys(r[0]):[];return o.upsertMany(e,i,r,{updateOnConflict:n.updateOnConflict??true,returning:n.returning})}getModelManager(e){let r=e?e.sql:this.sqlDataSource.getTransactionBoundSqlDataSource()??this.sqlDataSource;return new et(this.model,r)}async find(e){return this.getModelManager().find(e)}async findOne(e){return this.getModelManager().findOne(e)}async findOneOrFail(e){return this.getModelManager().findOneOrFail(e)}async findOneByPrimaryKey(e,r){return this.getModelManager().findOneByPrimaryKey(e,r)}async updateRecord(e,r,n){return this.getModelManager(n?.trx).updateRecord(e,r,n)}async deleteRecord(e,r){return this.getModelManager(r?.trx).deleteRecord(e)}async save(e,r){let n=this.model.primaryKey;if(!n)throw new q(this.model.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");let o=e[n],i=o?{[n]:o}:{};return this.upsert(i,e,{updateOnConflict:true,returning:r?.returning,trx:r?.trx})}async softDeleteRecord(e,r,n){let{column:o=this.model.softDeleteColumn,value:i=this.model.softDeleteValue}=r||{},a={[o]:i};return this.getModelManager(n?.trx).updateRecord(e,a,{returning:n?.returning})}async firstOrInsert(e,r,n){let o=this.getModelManager(n?.trx),i=await o.findOne({where:e});if(i)return i;let a={...e,...r};return o.insert(a,{returning:["*"]})}async refresh(e){return this.getModelManager().findOneByPrimaryKey(e)}async sync(e,r,n,o,i={}){if(Array.isArray(n)||(n=[n]),!n.length)return;let a=this.sqlModelManagerUtils.getRelationFromModel(e);if(a.type!=="manyToMany")throw new q(`${this.model.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let l=H(a.leftForeignKey,i.caseConvention||this.model.databaseCaseConvention),u=H(a.rightForeignKey,i.caseConvention||this.model.databaseCaseConvention),d=n.map((p,h)=>({[l]:r[this.model.primaryKey],[u]:p[a.model.primaryKey],...o?o(p,h):{}}));class m extends _e{static get table(){return a.throughModel}}m.databaseCaseConvention="preserve",m.modelCaseConvention="preserve",await new et(m,i.trx?i.trx.sql:this.sqlDataSource).insertMany(d);}truncate(){return super.truncate()}update(e,r={}){let n=r.returning,o=super.update(e,n);return new G(()=>o.unWrap(),()=>o.toSql(),()=>o.toQuery(),async()=>{if(!n||!this.returningNode)return o;let i=await o;return pe(i,this.model,n)})}softDelete(e={}){let r=super.softDelete(e);return new G(()=>r.unWrap(),()=>r.toSql(),()=>r.toQuery(),async()=>r)}delete(e={}){let r=e.returning,n=super.delete(r);return new G(()=>n.unWrap(),()=>n.toSql(),()=>n.toQuery(),async()=>{if(!r||!this.returningNode)return n;let o=await n;return pe(o,this.model,r)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?+r.total:0}async getMax(e){this.clearForFunctions(),this.selectRaw(`max(${e}) as total`);let r=await this.one();return r?+r.total:0}async getMin(e){this.clearForFunctions(),this.selectRaw(`min(${e}) as total`);let r=await this.one();return r?+r.total:0}async getAvg(e){this.clearForFunctions(),this.selectRaw(`avg(${e}) as total`);let r=await this.one();return r?+r.total:0}async getSum(e){this.clearForFunctions(),this.selectRaw(`sum(${e}) as total`);let r=await this.one();return r?+r.total:0}async paginate(e,r){let n=this.clone(),o=this.limit(r).offset((e-1)*r),[i,a]=await this.executePaginateQueries(()=>o.many(),()=>n.getCount("*"));return {paginationMetadata:Zr(e,r,a),data:i}}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof B)&&typeof e[1]=="string"){let[r,n]=e;return super.select(r,n),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}load(e,r,n){let o,i={strategy:"auto"};typeof r=="function"?(o=r,n&&(i=n)):r&&typeof r=="object"&&(i=r);let a=this.sqlModelManagerUtils.getRelationFromModel(e),l=new s(a.model,this.sqlDataSource);return l.relation=a,l.loadOptions=i,o?.(l),this.relationQueryBuilders.push(l),this}clearRelations(){return this.relationQueryBuilders=[],this}havingRelated(e,r,n){return this.andHavingRelated(e,r,n)}andHavingRelated(e,r,n){let o,i,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(i=r,o=n):r!==void 0&&(o=r,i="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new s(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,i,o),this.whereExists(d),this}orHavingRelated(e,r,n){let o,i,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(i=r,o=n):r!==void 0&&(o=r,i="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new s(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,i,o),this.orWhereExists(d),this}notHavingRelated(e,r,n){return this.andNotHavingRelated(e,r,n)}andNotHavingRelated(e,r,n){let o,i,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(i=r,o=n):r!==void 0&&(o=r,i="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new s(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,i,o),this.whereNotExists(d),this}orNotHavingRelated(e,r,n){let o,i,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(i=r,o=n):r!==void 0&&(o=r,i="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new s(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,i,o),this.orWhereNotExists(d),this}clone(){let e=super.clone();return e.relationQueryBuilders=j(this.relationQueryBuilders),e}async processRelationsRecursively(e){await Promise.all(this.relationQueryBuilders.filter(r=>r.isRelationQueryBuilder).map(async r=>{let n=await this.getRelatedModelsForRelation(r,r.relation,e);this.mapRelatedModelsToModels(r.relation,e,n);}));}async processRelationsWithStrategy(e){let r=e.length,n=this.relationQueryBuilders.filter(i=>i.isRelationQueryBuilder),o=async i=>{let a=af({parentCount:r,relationType:i.relation.type,hasLimitOffset:!!i.limitNode||!!i.offsetNode,hasOrderBy:i.orderByNodes.length>0},i.loadOptions),l=i.relationQueryBuilders.length>0;a==="join"&&!l?await this.loadRelationViaJoin(i,e):await this.loadRelationViaBatch(i,e);};if(this.dbType==="mssql"){for(let i of n)await o(i);return}await Promise.all(n.map(o));}async loadRelationViaJoin(e,r){let n=e.relation,o=e.loadOptions.joinSeparator||"__",a=await this.buildJoinQuery(e,n,o).many();this.mapJoinedResultsToModels(a,r,n,o);}buildJoinQuery(e,r,n){let o=new s(this.model,this.sqlDataSource);if(this.modelSelectedColumns.length>0)for(let i of this.selectNodes)o.selectNodes.push(j(i));else for(let[i,a]of this.model.getColumnsByDatabaseName())a.expression||o.selectRaw(`${this.model.table}.${i}`);for(let i of this.whereNodes){let a=j(i);this.qualifyWhereNodeColumns(a,this.model.table),o.whereNodes.push(a);}for(let i of this.groupByNodes)o.groupByNodes.push(j(i));for(let i of this.orderByNodes)o.orderByNodes.push(j(i));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(o.limitNode=j(this.limitNode)),this.offsetNode&&(o.offsetNode=j(this.offsetNode))),r.type){case "hasOne":case "hasMany":o.leftJoin(r.model.table,`${this.model.table}.${this.model.primaryKey}`,`${r.model.table}.${r.foreignKey}`);break;case "belongsTo":o.leftJoin(r.model.table,`${this.model.table}.${r.foreignKey}`,`${r.model.table}.${r.model.primaryKey}`);break;case "manyToMany":{let i=r;o.leftJoin(i.throughModel,`${this.model.table}.${this.model.primaryKey}`,`${i.throughModel}.${i.leftForeignKey}`),o.leftJoin(i.model.table,`${i.throughModel}.${i.rightForeignKey}`,`${i.model.table}.${i.model.primaryKey}`);break}}this.selectRelationColumnsWithAlias(o,r,e,n);for(let i of e.whereNodes)o.whereNodes.push(j(i));for(let i of e.orderByNodes)o.orderByNodes.push(j(i));return o}selectRelationColumnsWithAlias(e,r,n,o){let i=r.columnName,a=r.model,l=a.getColumnsByName(),u=a.getColumnsByDatabaseName(),d=n.selectNodes.filter(c=>typeof c.column=="string"),m=d.some(c=>c.column==="*"||c.column.endsWith(".*"));if(d.length===0||m)for(let[c,p]of u)e.selectRaw(`${a.table}.${c} as ${i}${o}${p.columnName}`);else for(let c of d){let p=c.column,h=p.includes(".")?p.split(".").pop():p,f=u.get(h)||l.get(h),T=f?.databaseName??h,N=c.alias??f?.columnName??h;e.selectRaw(`${a.table}.${T} as ${i}${o}${N}`);}}mapJoinedResultsToModels(e,r,n,o){let{columnName:i,type:a}=n,l=n.model.getColumnsByName();if(a==="hasMany"||a==="manyToMany"){let u=new Map;e.forEach(d=>{let m=d[this.model.primaryKey];u.has(m)||u.set(m,[]);let c=this.extractRelationDataFromRow(d,i,o);c&&(this.serializeRelationData(c,l),u.get(m).push(c));}),r.forEach(d=>{let m=d[this.model.primaryKey];d[i]=u.get(m)||[];});}else {let u=new Map;e.forEach(d=>{let m=d[this.model.primaryKey];if(!u.has(m)){let c=this.extractRelationDataFromRow(d,i,o);c&&(this.serializeRelationData(c,l),u.set(m,c));}}),r.forEach(d=>{let m=d[this.model.primaryKey];d[i]=u.get(m)||null;});}}extractRelationDataFromRow(e,r,n){let o=`${r}${n}`,i={},a=false,l=false;for(let u of Object.keys(e))if(u.startsWith(o)){let d=u.substring(o.length);i[d]=e[u],a=true,e[u]!==null&&e[u]!==void 0&&(l=true);}return a&&l?i:null}qualifyWhereNodeColumns(e,r){if(e instanceof x)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof Ne)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof xe)for(let n of e.nodes)this.qualifyWhereNodeColumns(n,r);}serializeRelationData(e,r){for(let n of Object.keys(e)){let o=r.get(n);o?.serialize&&e[n]!==null&&e[n]!==void 0&&(e[n]=o.serialize(e[n]));}}async loadRelationViaBatch(e,r){let n=await this.getRelatedModelsForRelation(e,e.relation,r);this.mapRelatedModelsToModels(e.relation,r,n);}mapRelatedModelsToModels(e,r,n){switch(e.type){case "hasOne":if(!this.model.primaryKey)throw new q(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let o=new Map;n.forEach(c=>{let p=c[e.foreignKey];p&&o.set(String(p),c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=null;return}let h=o.get(String(p));c[e.columnName]=h||null;});break;case "belongsTo":let i=new Map;n.forEach(c=>{if(!e.model.primaryKey)throw new q(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let p=c[e.model.primaryKey];p&&i.set(String(p),c);}),r.forEach(c=>{let p=c[e.foreignKey];if(!p){c[e.columnName]=null;return}let h=i.get(String(p));c[e.columnName]=h||null;});break;case "hasMany":if(!this.model.primaryKey)throw new q(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;n.forEach(c=>{let p=c[e.foreignKey];if(!p)return;let h=String(p);a.has(h)||a.set(h,[]),a.get(h).push(c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=[];return}let h=a.get(String(p))||[];c[e.columnName]=h;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new q(this.model.name+"::mapRelatedModelsToModels::manyToMany","MODEL_HAS_NO_PRIMARY_KEY");let l=e,u=new Map,d=l.leftForeignKey,m=this.modelColumnsMap.get(d)||this.modelColumnsDatabaseNames.get(d)||H(d,this.model.modelCaseConvention);n.forEach(c=>{let p=c[m];if(p==null)return;let h=String(p);u.has(h)||u.set(h,[]),delete c[m],u.get(h).push(c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=[];return}let h=u.get(String(p))||[];c[e.columnName]=h;});break;default:throw new q(this.model.name+"::mapRelatedModelsToModels","UNSUPPORTED_RELATION_TYPE")}}async getRelatedModelsForRelation(e,r,n){return this.getRelatedModelsQueryForRelation(e,r,n).many()}getRelatedModelsQueryForRelation(e,r,n){let o=this.getFilterValuesFromModelsForRelation(r,n);switch(r.type){case "belongsTo":case "hasOne":return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,o);case "hasMany":let i=e.limitNode?.limit,a=e.offsetNode?.offset;if(!i&&!a)return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,o);let l=ke(Ml.crypto.randomBytes(6)),u=`${r.model.table}_cte_${l}`,d=e.orderByNodes.map(D=>D.isRawValue?D.column:`${this.interpreterUtils.formatStringColumn(this.dbType,D.column)} ${D.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let m=e.with(u,D=>D.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${d}) as rn_${l}`).whereIn(r.foreignKey,o));i&&m.whereRaw(`rn_${l} <= ${i+(a||0)}`),a&&m.whereRaw(`rn_${l} > ${a}`);let c=e.modelSelectedColumns.map(D=>so(D,u,e.model.table));return m.select(...c).table(u);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new q(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!n.length)return e;let h=e.limitNode?.limit,f=e.offsetNode?.offset,T=e.modelSelectedColumns.length?e.modelSelectedColumns.map(D=>D.includes(".")?D:`${r.model.table}.${D}`):[`${r.model.table}.*`];if(!h&&!f)return e.select(...T).select([`${p.throughModel}.${p.leftForeignKey}`,p.leftForeignKey]).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o);let N=ke(Ml.crypto.randomBytes(6)),w=`${r.model.table}_cte_${N}`,R=e.orderByNodes.map(D=>{if(D.isRawValue)return D.column;let Q=D.column.includes(".")?D.column:`${r.model.table}.${D.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,Q)} ${D.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let _=`${ke(Ml.crypto.randomBytes(6))}_left_foreign_key`,E=e.with(w,D=>D.select(...T).select([`${p.throughModel}.${p.leftForeignKey}`,_]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${R}) as rn_${N}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o));h&&E.whereRaw(`rn_${N} <= ${h+(f||0)}`),f&&E.whereRaw(`rn_${N} > ${f}`);let O=T.map(D=>so(D,w,e.model.table));return E.select(...O).select([`${w}.${_}`,p.leftForeignKey]).table(w);default:throw new q(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new q(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);case "belongsTo":return r.map(n=>n[e.foreignKey]);case "manyToMany":if(!this.model.primaryKey)throw new q(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);default:throw new q(this.model.name+"::getFilterValuesFromModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}applyHavingRelatedFilter(e,r,n,o){let i=new y(r.model),a=new y(this.model),l=this.dbType;switch(r.type){case "hasOne":case "hasMany":{if(!this.model.primaryKey||!r.foreignKey)throw new q(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");let u=i.formatStringColumn(l,`${r.model.table}.${r.foreignKey}`),d=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${u} = ${d}`),n&&typeof o=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${n} ${o}`);return}case "belongsTo":{if(!r.model.primaryKey||!r.foreignKey)throw new q(this.model.name+"::applyHavingRelatedFilter",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${r.model.name}`);let u=i.formatStringColumn(l,`${r.model.table}.${r.model.primaryKey}`),d=a.formatStringColumn(l,`${this.model.table}.${r.foreignKey}`);e.whereRaw(`${u} = ${d}`),n&&typeof o=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${n} ${o}`);return}case "manyToMany":{let u=r;if(!this.model.primaryKey||!r.model.primaryKey)throw new q(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");e.joinNodes?.some(p=>!p.isRawValue&&p.table===u.throughModel&&p.type==="left")||e.leftJoin(u.throughModel,`${u.relatedModel}.${r.model.primaryKey}`,`${u.throughModel}.${u.rightForeignKey}`);let m=a.formatStringColumn(l,`${u.throughModel}.${u.leftForeignKey}`),c=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${m} = ${c}`),n&&typeof o=="number"&&e.groupByRaw(m).andHavingRaw(`count(*) ${n} ${o}`);return}default:throw new q(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}};function lf(){return {}}var et=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=lf(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new b(this.model,this.sqlType),this.interpreterUtils=new y(this.model);}setReplicationMode(t){return this.replicationMode=t,this}async find(t){if(!t)return this.query().many();let e=this.query();return t.select&&e.select(...t.select),t.relations&&t.relations.forEach(r=>{e.load(r);}),t.where&&this.handleWhereCondition(e,t.where),t.orderBy&&Object.entries(t.orderBy).forEach(([r,n])=>{e.orderBy(r,n);}),t.limit&&e.limit(t.limit),t.offset&&e.offset(t.offset),t.groupBy&&e.groupBy(...t.groupBy),e.many()}async findOne(t){let e=await this.find({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,offset:t.offset,limit:1});return e.length?e[0]:null}async findOneOrFail(t){let e=await this.findOne({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,offset:t.offset});if(e===null)throw t.customError?t.customError:new q(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new q(this.model.name+"::findOneByPrimaryKey","MODEL_HAS_NO_PRIMARY_KEY");return this.query().select(...e||[]).where(this.model.primaryKey,t).one()}insert(t,e={}){let r=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(t).map(u=>[u,t[u]]))),n=!e.returning||e.returning.length===0,o=new ee(new U(this.model.table),[r],e.returning,n),i=()=>{let u=this.astParser.parse([o]);return {sql:u.sql,bindings:u.bindings}},a=()=>{let u=this.astParser.parse([o]);return {sql:nt(this.sqlDataSource,u.sql),bindings:u.bindings}},l=()=>{let{sql:u,bindings:d}=a();return tt(u,d)};return new G(i,a,l,async()=>{try{await this.model.validate?.(t);}catch(w){throw w}let{columns:u,values:d}=this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert",this.sqlType),m={};u.forEach((w,R)=>{let _=d[R];m[w]=_,t[w]??(t[w]=_);});let c=!e.returning||e.returning.length===0,{sql:p,bindings:h}=this.astParser.parse([new ee(new U(this.model.table),[m],e.returning,c)]),f=await J(p,h,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(c)return;if(this.sqlType==="mysql")return this.handleMysqlInsert(f,[t],"one",e.returning);let T=f[0];return T?pe([T],this.model,e.returning):t})}insertMany(t,e={}){let r=t.map(u=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(u).map(d=>[d,u[d]])))),n=!e.returning||e.returning.length===0,o=new ee(new U(this.model.table),r,e.returning,n),i=()=>{let u=this.astParser.parse([o]);return {sql:u.sql,bindings:u.bindings}},a=()=>{let u=this.astParser.parse([o]);return {sql:nt(this.sqlDataSource,u.sql),bindings:u.bindings}},l=()=>{let{sql:u,bindings:d}=a();return tt(u,d)};return new G(i,a,l,async()=>{try{await this.model.validate?.(t);}catch(T){throw T}let u=t.map(T=>{let{columns:N,values:w}=this.interpreterUtils.prepareColumns(Object.keys(T),Object.values(T),"insert",this.sqlType),R={};return N.forEach((_,E)=>{let O=w[E];R[_]=O,T[_]??(T[_]=O);}),R}),d=!e.returning||e.returning.length===0,{sql:m,bindings:c}=this.astParser.parse([new ee(new U(this.model.table),u,e.returning,d)]),p=await J(m,c,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(d)return [];if(this.sqlType==="mysql")return await this.handleMysqlInsert(p,t,"many",e.returning)||[];let h=p;return h.length?pe(h,this.model,e.returning)||[]:[]})}upsertMany(t,e,r,n={updateOnConflict:true}){let o=this.interpreterUtils.filterComputedColumns(e),i=r.map(p=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(p).map(h=>[h,p[h]])))),a=new ee(new U(this.model.table),i,void 0,true),l=n.returning?.length&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?n.returning:void 0;new Se(this.model.table,t,o,n.updateOnConflict??true?"update":"ignore",l);let d=()=>{let p=this.astParser.parse([a]);return {sql:p.sql,bindings:p.bindings}},m=()=>{let p=this.astParser.parse([a]);return {sql:nt(this.sqlDataSource,p.sql),bindings:p.bindings}},c=()=>{let{sql:p,bindings:h}=m();return tt(p,h)};return new G(d,m,c,async()=>{let p=r.map(O=>{let{columns:D,values:Q}=this.interpreterUtils.prepareColumns(Object.keys(O),Object.values(O),"insert",this.sqlType);return Object.fromEntries(D.map((V,$)=>[V,Q[$]]))});if(this.sqlType==="mssql")return this.executeMssqlMerge(p,t,o,n,r);let h=!n.returning||n.returning.length===0,f=!h&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?n.returning:void 0,{sql:T,bindings:N}=this.astParser.parse([new ee(new U(this.model.table),p,void 0,true),new Se(this.model.table,t,o,n.updateOnConflict??true?"update":"ignore",f)]),w=await J(T,N,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:r}});if(h)return [];if(this.sqlType==="postgres"||this.sqlType==="cockroachdb"){if(w.length<r.length&&!(n.updateOnConflict??true)){let Q=t[0],V=r.map(Y=>Y[Q]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(Q,V).many()}return pe(w,this.model,n.returning)||[]}let R=t[0],_=r.map(O=>O[R]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(R,_).many()})}async executeMssqlMerge(t,e,r,n,o){if(!t.length)return [];let i=Object.keys(t[0]),a=this.interpreterUtils.formatStringColumn("mssql",this.model.table),l=O=>this.interpreterUtils.formatStringColumn("mssql",O),u=[],d=t.map(O=>`select ${i.map(Q=>(u.push(O[Q]),`@${u.length}`)).join(", ")}`),m=i.map(l).join(", "),c=d.join(" union all "),p=e.map(O=>`target.${l(O)} = source.${l(O)}`).join(" and "),h=r.filter(O=>!e.includes(O)).map(O=>`target.${l(O)} = source.${l(O)}`).join(", "),f=i.map(l).join(", "),T=i.map(O=>`source.${l(O)}`).join(", "),N=n.returning&&n.returning.length?n.returning.map(O=>`inserted.${l(O)}${this.interpreterUtils.resolveColumnAlias("mssql",O)}`).join(", "):i.map(O=>`inserted.${l(O)}${this.interpreterUtils.resolveColumnAlias("mssql",O)}`).join(", "),R=(n.updateOnConflict??true)&&h?`when matched then update set ${h}`:"",_=`merge into ${a} as target using (${c}) as source (${m}) on ${p} ${R} when not matched then insert (${f}) values (${T}) output ${N};`,E=await J(_,u,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});if(E.length===0&&!(n.updateOnConflict??true)){let O=e[0],D=o.map(V=>V[O]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(O,D).many()}return E}async updateRecord(t,e,r){let n=new Set(this.model.getColumns().map(N=>N.columnName)),o=Object.keys(e).filter(N=>n.has(N)),i=o.map(N=>e[N]),{columns:a,values:l}=this.interpreterUtils.prepareColumns(o,i,"update",this.sqlType),{primaryKey:u}=this.model;if(!u)throw new q(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let d=a.indexOf(u);d!==-1&&(a.splice(d,1),l.splice(d,1));let m=r?.returning??[],c=m.length>0&&!this.interpreterUtils.hasComputedColumn(m)&&this.interpreterUtils.shouldFetchNatively(this.sqlType,"update"),{sql:p,bindings:h}=this.astParser.parse([new $e(new U(this.model.table),a,l),new x(u,"and",false,"=",t),...c?[new St(m)]:[]]),f=await J(p,h,this.sqlDataSource,this.sqlType,c?"rows":"affectedRows",c?{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}:void 0);if(!m.length)return;if(c){if(!f.length)throw new q(this.model.name+"::updateRecord","ROW_NOT_FOUND");return pe([f[0]],this.model,m)}let T=await this.findOneByPrimaryKey(t,r?.returning);if(!T)throw new q(this.model.name+"::updateRecord","ROW_NOT_FOUND");return T}async deleteRecord(t){if(!this.model.primaryKey)throw new q(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new x(this.model.primaryKey,"and",false,"=",t),{sql:r,bindings:n}=this.astParser.parse([new wt(new U(this.model.table)),e]);await J(r,n,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new Xe(this.model,this.sqlDataSource);return this.replicationMode&&t.setReplicationMode(this.replicationMode),t}async handleMysqlInsert(t,e,r,n){if(!this.model.primaryKey){if(r==="one"){let a=e.length?e[0]:null;return a?pe([a],this.model):null}return pe(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(d=>d[this.model.primaryKey]),l=a.map(d=>`'${d}'`).join(","),u=await this.query().select(...n??["*"]).whereIn(this.model.primaryKey,a).orderByRaw(`FIELD(${this.model.primaryKey}, ${l})`).many();return r==="one"?u.length?u[0]:null:u}let o=Array.from({length:t.affectedRows},(a,l)=>l+t.insertId),i=await this.query().select(...n||["*"]).whereIn(this.model.primaryKey,o).many();return r==="one"?i.length?i[0]:null:i}handleWhereCondition(t,e,r=false){if(e)for(let[n,o]of Object.entries(e))n==="$and"&&Array.isArray(o)?t[r?"orWhere":"where"](a=>{for(let l of o)this.handleWhereCondition(a,l,false);}):n==="$or"&&Array.isArray(o)?t[r?"orWhere":"where"](a=>{let l=true;for(let u of o)this.handleWhereCondition(a,u,!l),l=false;}):this.applyFieldCondition(t,n,o,r);}applyFieldCondition(t,e,r,n=false){if(r==null||typeof r!="object"){r===null?n?t.orWhereNull(e):t.whereNull(e):n?t.orWhere(e,"=",r):t.where(e,"=",r);return}let o=r,i=o.op,a=o.value;switch(i){case "$eq":a===null?n?t.orWhereNull(e):t.whereNull(e):n?t.orWhere(e,"=",a):t.where(e,"=",a);break;case "$ne":a===null?n?t.orWhereNotNull(e):t.whereNotNull(e):n?t.orWhere(e,"!=",a):t.where(e,"!=",a);break;case "$gt":n?t.orWhere(e,">",a):t.where(e,">",a);break;case "$gte":n?t.orWhere(e,">=",a):t.where(e,">=",a);break;case "$lt":n?t.orWhere(e,"<",a):t.where(e,"<",a);break;case "$lte":n?t.orWhere(e,"<=",a):t.where(e,"<=",a);break;case "$between":{let[l,u]=a;n?t.orWhereBetween(e,l,u):t.whereBetween(e,l,u);break}case "$not between":{let[l,u]=a;n?t.orWhereNotBetween(e,l,u):t.whereNotBetween(e,l,u);break}case "$regexp":n?t.orWhereRegexp(e,a):t.whereRegexp(e,a);break;case "$not regexp":n?t.orWhereNotRegexp(e,a):t.whereNotRegexp(e,a);break;case "$is null":n?t.orWhereNull(e):t.whereNull(e);break;case "$is not null":n?t.orWhereNotNull(e):t.whereNotNull(e);break;case "$like":n?t.orWhereLike(e,a):t.whereLike(e,a);break;case "$not like":n?t.orWhereNotLike(e,a):t.whereNotLike(e,a);break;case "$ilike":n?t.orWhereILike(e,a):t.whereILike(e,a);break;case "$not ilike":n?t.orWhereNotILike(e,a):t.whereNotILike(e,a);break;case "$in":n?t.orWhereIn(e,a):t.whereIn(e,a);break;case "$nin":n?t.orWhereNotIn(e,a):t.whereNotIn(e,a);break;default:n?t.orWhere(e,"=",r):t.where(e,"=",r);}}};var uf=(s,t)=>({table:s,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??Tt()});qt();var ye=class{constructor(t){this.options=t;}static async createDriver(t){throw new q("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};se();var Lt=class Lt extends ye{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new Lt(this.mongoClient);let e=await import('mongodb').catch(()=>{throw new L("mongodb")});if(this.mongoClient=e.default??e,!this.mongoClient)throw new L("mongodb");return new Lt(this.mongoClient)}};Lt.mongoClient=null;var dn=Lt;se();var jt=class jt extends ye{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new jt(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new L("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new L("mssql");return new jt(this.mssqlClient)}};jt.mssqlClient=null;var cn=jt;se();var Wt=class Wt extends ye{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new Wt(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new L("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new L("mysql2");return new Wt(this.mysqlClient)}};Wt.mysqlClient=null;var mn=Wt;se();var Ft=class Ft extends ye{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new Ft(this.pgClient);let e=await import('pg').catch(()=>{throw new L("pg")});if("default"in e&&(e.default,this.pgClient=e.default??e),!this.pgClient)throw new L("pg");return new Ft(this.pgClient)}};Ft.pgClient=null;var pn=Ft;se();var Ut=class Ut extends ye{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new Ut(this.sqlite3Client);let e=await import('sqlite3').catch(()=>{throw new L("sqlite3")});if(this.sqlite3Client=e.default??e,!this.sqlite3Client)throw new L("sqlite3");return new Ut(this.sqlite3Client)}};Ut.sqlite3Client=null;var fn=Ut;var ue=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await mn.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await pn.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await fn.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await dn.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await cn.createDriver(),this.mssqlDriver;default:throw new q(`DriverFactory::getDriver Driver ${t} not supported`,"DRIVER_NOT_FOUND")}}static getExistingDriver(t){switch(t){case "mysql":case "mariadb":return this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver;case "sqlite":return this.sqliteDriver;case "mongo":return this.mongodbDriver;case "mssql":return this.mssqlDriver;default:return null}}};ue.mysqlDriver=null,ue.pgDriver=null,ue.sqliteDriver=null,ue.mssqlDriver=null,ue.mongodbDriver=null;qt();se();var yn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=new r.Pool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.connect()}releaseConnection(t){t?.release();}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION"),e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=0,o=t.replace(/\?/g,()=>`$${++n}`);return (r.connection??this.pool).query(o,e)}extract(t,e){return e==="rows"?t.rows:e==="raw"?t:t.rowCount}async stream(t,e,r,n){let o=r.connection,i=!o,a=o??await this.pool.connect(),l=await import('pg-query-stream').catch(()=>{throw new L("pg-query-stream")}),u=new PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),d=0,m=t.replace(/\?/g,()=>`$${++d}`),c=new l.default(m,e,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),p=a.query(c),h=0,f=false,T=false,N=w=>{if(i)try{a.release(w);}catch{}};return p.on("data",w=>{if(n.onData){h++,Promise.resolve(n.onData(u,w)).then(()=>{h--,f&&h===0&&!T&&(N(),u.end());}).catch(R=>{T=true,N(R),u.destroy(R);});return}u.write(w);}),p.on("end",()=>{f=true,h===0&&!T&&(N(),u.end());}),p.on("error",w=>{T=true,N(w),u.destroy(w);}),u}};var hn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=r.createPool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.getConnection()}releaseConnection(t){t?.release();}async beginTransaction(t,e){e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await t.beginTransaction();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){return (r.connection??this.pool).query(t,e)}extract(t,e){let r=t;return e==="affectedRows"?r[0]?.affectedRows??0:e==="raw"?t:r[0]}async stream(t,e,r,n){let o=this.pool,i=r.connection??await o.getConnection(),a=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),u=i.connection.query(t,e).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),d=0,m=false,c=false,p=()=>{try{i.release();}catch{}};return u.on("data",h=>{if(n.onData){d++,Promise.resolve(n.onData(a,h)).then(()=>{d--,m&&d===0&&!c&&(p(),a.end());}).catch(f=>{c=true,p(),a.destroy(f);});return}a.write(h);}),u.on("end",()=>{m=true,d===0&&!c&&(p(),a.end());}),u.on("error",h=>{c=true,p(),a.destroy(h);}),a.on("close",()=>{p();}),a}};var gn=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=new r.Database(String(e.database??":memory:"),e.driverOptions?.mode??void 0,n=>{if(n)throw new q("SqliteDataSource::createSqlPool","CONNECTION_NOT_ESTABLISHED")});}createPool(){}async closePool(){await new Promise((t,e)=>{this.pool.close(r=>{r&&e(r),t();});});}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){return await this.promisify(t,e,r)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.pool;return new _l(o,t,e,{onData:n.onData})}promisify(t,e,r){let n=r.sqlLiteOptions??{},o=n.mode||"fetch",i=n.customConnection??r.connection??this.pool;if(["begin","begin transaction","commit","rollback"].includes(t.trim().toLowerCase()))return new Promise((u,d)=>{i.run(t,e,function(m){m&&d(m),u(this.changes);});});if(o==="fetch")return new Promise((u,d)=>{i.all(t,e,(m,c)=>{m&&d(m),u(c||[]);});});if(!n?.typeofModel)return new Promise((u,d)=>{i.run(t,e,function(m){m?d(new Error(m.message)):u(this.changes);});});if(o==="insertOne"||o==="insertMany"){let u=`${t} returning *`;return new Promise((d,m)=>{i.all(u,e,(c,p)=>{if(c)return m(c);d(p||[]);});})}return new Promise((u,d)=>{i.run(t,e,function(m){m?d(new Error(m.message)):u(this.changes);});})}},_l=class extends Readable{constructor(t,e,r=[],n){super({objectMode:true}),this.db=t,this.query=e,this.params=r,this.started=false,this.events=n;}_read(){this.started||(this.started=true,this.readRows());}readRows(){let t=0,e=false,r=false;this.db.each(this.query,this.params,(n,o)=>{if(n){r=true,this.emit("error",n);return}t++;let i=false,a,l={write:u=>{i=true,a=u;}};Promise.resolve(this.events.onData?.(l,o)).then(()=>{if(!r){if(i){this.push(a);return}this.push(o);}}).catch(u=>{r=true,this.emit("error",u);}).finally(()=>{t--,e&&t===0&&!r&&this.push(null);});},n=>{if(n){r=true,this.emit("error",n);return}e=true,t===0&&!r&&this.push(null);});}};se();var bn=class{constructor(t,e,r){this.dialect="mssql";this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;let n=e.driverOptions,{options:o,...i}=n??{};this.pool=new r.ConnectionPool({server:e.host??"localhost",port:e.port,database:e.database,user:e.username,password:e.password,...i,options:{trustServerCertificate:v.MSSQL_TRUST_SERVER_CERTIFICATE??void 0,...o,abortTransactionOnError:false,enableImplicitTransactions:false}});}async createPool(){await this.pool.connect();}async closePool(){await this.pool.close();}async reserveConnection(){return this.pool.transaction()}releaseConnection(){}async beginTransaction(t,e){if(e.isolationLevel){let r=await this.getMssqlTransactionLevel(e.isolationLevel);await t.begin(r);return}await t.begin();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){let n=this.pool,o=r.connection?r.connection.request():n.request();e.forEach((l,u)=>{o.input(`p${u}`,l);});let i=0,a=t.replace(/\?|@(\d+)/g,()=>`@p${i++}`);return o.query(a)}extract(t,e){return e==="affectedRows"?t.rowsAffected[0]:e==="raw"?t:t.recordset}async stream(t,e,r,n){let o=r.connection??this.pool,i=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),a=o.request();a.stream=true,e.forEach((p,h)=>{a.input(`p${h}`,p);});let l=0,u=t.replace(/\?|@(\d+)/g,()=>`@p${l++}`),d=0,m=false,c=false;return a.on("row",p=>{if(!c){if(n.onData){d++,Promise.resolve(n.onData(i,p)).then(()=>{d--,m&&d===0&&!c&&i.end();}).catch(h=>{c=true,i.destroy(h);});return}i.write(p);}}),a.on("error",p=>{c=true,i.destroy(p);}),a.on("done",()=>{m=true,d===0&&!c&&i.end();}),a.query(u),i}async getMssqlTransactionLevel(t){let e=await import('mssql').then(r=>r.default.ISOLATION_LEVEL).catch(r=>{throw g.error(r),new L("mssql")});switch(t){case "READ UNCOMMITTED":return e.READ_UNCOMMITTED;case "READ COMMITTED":return e.READ_COMMITTED;case "REPEATABLE READ":return e.REPEATABLE_READ;case "SERIALIZABLE":return e.SERIALIZABLE;default:throw new q("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${t}`)}}};var Th=()=>{fe({name:"pg",dialects:["postgres","cockroachdb"],create:async({dialect:s,input:t})=>{let e=(await ue.getDriver(s)).client;return new yn(s,t,e)}}),fe({name:"mysql2",dialects:["mysql","mariadb"],create:async({dialect:s,input:t})=>{let e=(await ue.getDriver(s)).client;return new hn(s,t,e)}}),fe({name:"sqlite3",dialects:["sqlite"],create:async({dialect:s,input:t})=>{let e=(await ue.getDriver(s)).client;return new gn(s,t,e)}}),fe({name:"mssql",dialects:["mssql"],create:async({dialect:s,input:t})=>{let e=(await ue.getDriver(s)).client;return new bn(s,t,e)}});};Th();var Rh=async s=>{if(s==="bun"){await(await Promise.resolve().then(()=>(gf(),hf))).registerBunDrivers();return}if(s==="web"){(await Promise.resolve().then(()=>($l(),Dl))).registerWebDrivers();return}if(s==="react-native"){await(await Promise.resolve().then(()=>($l(),Dl))).registerReactNativeDrivers();return}},qn=async(s,t)=>{let e=nr(t?.jsEnvironment);await Rh(e);let r=await cf(s,e,t?.driver,t);return await r.createPool(),r};var Jt=class Jt{constructor(){}static run(t,e){return Jt.storage.run(t,e)}static getTransaction(){return Jt.storage.getStore()}};Jt.storage=new AsyncLocalStorage;var Fe=Jt;var Ht=class s{constructor(t,e,r=false,n=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=ke(re().crypto.randomBytes(16)),this.isolationLevel=e,this.isNested=r,this.nestingDepth=n;}async nestedTransaction(t){let e=new s(this.sql,this.isolationLevel,true,this.nestingDepth+1);if(await e.transaction(),t)try{let r=await Fe.run(e,()=>t(e));return await e.commit(),r}catch(r){throw await e.rollback(),r}return e}async transaction(){if(this.getIsolationLevelQuery(),this.isNested){let r=this.getSavePointName();this.sql.type==="mssql"?await this.sql.rawQuery(`SAVE TRANSACTION ${r}`):await this.sql.rawQuery(`SAVEPOINT ${r}`),this.isActive=true;return}(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&it("BEGIN TRANSACTION",this.sql.logs);let t=this.sql.driverAdapter,e=this.sql.sqlConnection;if(!t||!e)throw new q("TRANSACTION::transaction","CONNECTION_NOT_ESTABLISHED");await t.beginTransaction(e,{isolationLevel:this.isolationLevel,rawQuery:(r,n)=>this.sql.rawQuery(r,n??[])}),this.isActive=true;}async commit(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new q("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "sqlite":await this.sql.rawQuery(`RELEASE SAVEPOINT ${e}`);break}this.isActive=false;return}try{let e=this.sql.driverAdapter,r=this.sql.sqlConnection;(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&it("COMMIT",this.sql.logs),e&&r&&await e.commitTransaction(r,{rawQuery:(n,o)=>this.sql.rawQuery(n,o??[])});}catch(e){throw g.error(e),e}finally{await this.releaseConnection(),this.isActive=false;}}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new q("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":await this.sql.rawQuery(`ROLLBACK TRANSACTION ${e}`);break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":await this.sql.rawQuery(`ROLLBACK TO SAVEPOINT ${e}`);break;case "sqlite":await this.sql.rawQuery(`ROLLBACK TO ${e}`);break;default:throw new q("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}this.isActive=false;return}try{let e=this.sql.driverAdapter,r=this.sql.sqlConnection;(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&it("ROLLBACK",this.sql.logs),e&&r&&await e.rollbackTransaction(r,{rawQuery:(n,o)=>this.sql.rawQuery(n,o??[])});}catch(e){throw g.error(e),e}finally{await this.releaseConnection(),this.isActive=false;}}async releaseConnection(){if(this.connectionReleased)return;let t=null;try{this.sql.driverAdapter?.releaseConnection(this.sql.sqlConnection);}catch(e){t=e,g.error(e);}this.sql.sqlConnection=null;try{await this.sql.disconnect();}catch(e){g.warn(`Transaction::releaseConnection - disconnect failed: ${e?.message??e}`);}if(this.connectionReleased=true,t)throw t}getIsolationLevelQuery(){if(!this.isolationLevel||this.sql.type==="mssql")return "";if(this.sql.type==="sqlite"&&this.isolationLevel!=="SERIALIZABLE")throw new q("TRANSACTION::getIsolationLevelQuery","SQLITE_ONLY_SUPPORTS_SERIALIZABLE_ISOLATION_LEVEL");if(this.sql.type==="mysql"||this.sql.type==="mariadb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="postgres"||this.sql.type==="cockroachdb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="sqlite")return "";throw new q("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}};var Pl=Symbol.for("hysteria.orm.SqlDataSource"),Nf,qf,Pe=class s extends(qf=$t,Nf=Pl,qf){constructor(e){super(e);this[Nf]=true;this.globalTransaction=null;this.globalTransactionLock=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.driverAdapter=null;this.id=re().crypto.randomUUID();this.logicalSourceId=re().crypto.randomUUID();this.cacheAdapter=new dr;this.migrationConfig={path:v.MIGRATION_PATH||"database/migrations",lock:true,transactional:true,lockTimeout:3e4};this.seederConfig={path:"database/seeders"};this.zodEngine=null;this.lazyLoad=false;this.connecting=null;this.sqlType=e?.type||this.type;let r=e;this.inputDetails={...e,type:this.sqlType,host:r?.host??this.host,port:r?.port??this.port,username:r?.username??this.username,password:r?.password??this.password,database:r?.database??this.database,logs:r?.logs??this.logs},this.inputDetails.connectionPolicies=e?.connectionPolicies||{retry:{maxRetries:0,delay:0}},this.inputDetails.queryFormatOptions=e?.queryFormatOptions||{language:_t(this.sqlType),keywordCase:"lower",dataTypeCase:"lower",functionCase:"lower"},this.cacheKeys=e?.cacheStrategy?.keys??{},this.cacheAdapter=e?.cacheStrategy?.cacheAdapter??this.cacheAdapter,this.adminJsOptions=e?.adminJs,e?.migrations&&(this.migrationConfig={path:e.migrations.path||this.migrationConfig.path,tsconfig:e.migrations.tsconfig,lock:e.migrations.lock??this.migrationConfig.lock,transactional:"transactional"in e.migrations?e.migrations.transactional??this.migrationConfig.transactional:this.migrationConfig.transactional}),e?.seeders&&(this.seederConfig={path:e.seeders.path||this.seederConfig.path,tsconfig:e.seeders.tsconfig}),this._models=e?.models||{},this.slaves=(e?.replication?.slaves||[]).map(n=>new s(n)),this.slaveAlgorithm=e?.replication?.slaveAlgorithm||"roundRobin",this.onSlaveServerFailure=e?.replication?.onSlaveServerFailure,this.lazyLoad=e?.lazyLoad??false,this.clsEnabled=e?.clsEnabled??true;}static isSqlDataSource(e){return typeof e=="object"&&e!==null&&Pl in e&&e[Pl]===true}get isClsEnabled(){return this.clsEnabled}getOnSlaveServerFailure(){return this.onSlaveServerFailure}addObserver(e){return this.observerChain||(this.observerChain=new kt([])),this.observerChain.add(e),this}static async useConnection(e,r){let n=new s(e);await n.connect();try{await r(n),n.isConnected&&await n.disconnect();}catch(o){throw n.isConnected&&await n.disconnect(),o}}async connect(){if(this.isConnected)throw new q("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");try{this.driverAdapter=await qn(this.sqlType,this.inputDetails),this.sqlPool=this.driverAdapter.pool??null,this.ownsPool=!0,this.slaves.length&&await Promise.all(this.slaves.map(async e=>{e.driverAdapter=await qn(e.sqlType,e.inputDetails),e.sqlPool=e.driverAdapter.pool??null,e.ownsPool=!0;}));}catch(e){this.sqlPool=null,this.ownsPool=false;for(let r of this.slaves)r.ownsPool&&(r.sqlPool=null,r.ownsPool=false);throw e}}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new q("SqlDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.connect().finally(()=>{this.connecting=null;})),await this.connecting;}}get isInGlobalTransaction(){return !!this.globalTransaction}get models(){let e=this;return new Proxy(this._models,{get(r,n){if(typeof n=="string"&&n in r)return e.from(r[n])}})}getSlave(){if(!this.slaves.length)return null;if(this.slaveAlgorithm==="random")return this.slaves[Math.floor(Math.random()*this.slaves.length)];let e=this.slaves[this.roundRobinIndex%this.slaves.length];return this.roundRobinIndex=(this.roundRobinIndex+1)%this.slaves.length,e}getTransactionBoundSqlDataSource(){if(this.globalTransaction?.isActive)return this.globalTransaction.sql;if(this.clsEnabled){let e=Fe.getTransaction();if(e?.isActive&&e.sql.logicalSourceId===this.logicalSourceId)return e.sql}return null}async useCache(e,r,...n){if(!this.cacheAdapter)throw new q("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new q("SqlDataSource::useCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);let i=o.length,a=typeof r=="number"&&i===n.length,l,u=[];a?(l=r,u=n):(l=void 0,u=r!==void 0?[r,...n]:n);let d=Ln(JSON.stringify(u)),m=d?`${e}:${d}`:e,c=await this.cacheAdapter.get(m);if(c!==void 0)return c;let p=await o(...u);return await this.cacheAdapter.set(m,p,l),p}async invalidCache(e,...r){if(!this.cacheAdapter)throw new q("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new q("SqlDataSource::invalidCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);if(n.length>0&&r.length===0){let l=e;await this.cacheAdapter.invalidate(l);return}let i=Ln(JSON.stringify(r)),a=i?`${e}:${i}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new q("SqlDataSource::invalidateAllCache","CACHE_ADAPTER_NOT_CONFIGURED");await this.cacheAdapter.invalidateAll(e);}async clone(e){let r=new s(this.inputDetails);return r.id=this.id,r.logicalSourceId=this.logicalSourceId,r.sqlType==="sqlite"||!!e?.shouldRecreatePool?(r.driverAdapter=await qn(r.sqlType,this.inputDetails),r.sqlPool=r.driverAdapter.pool,r.ownsPool=true):(r.driverAdapter=this.driverAdapter,r.sqlPool=this.sqlPool,r.ownsPool=false),r}getDbType(){return this.sqlType}from(e,r){let n=this.getTransactionBoundSqlDataSource()??this;if(typeof e=="string"){let o=new B(uf(e,r),n);return r?.alias&&o.table(e,r.alias),o}return new Xe(e,n)}schema(){if(!this.isConnected&&!this.lazyLoad)throw new q("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new It(this,this.getDbType())}async startGlobalTransaction(e){for(;this.globalTransactionLock;)await this.globalTransactionLock;if(this.globalTransaction?.isActive)throw new q("SqlDataSource::startGlobalTransaction","GLOBAL_TRANSACTION_ALREADY_STARTED");let r=()=>{};this.globalTransactionLock=new Promise(n=>{r=n;});try{let n=await this.clone();return n.sqlConnection=await n.getConnection(),this.globalTransaction=new Ht(n,e?.isolationLevel),await this.globalTransaction.transaction(),this.globalTransaction}finally{r(),this.globalTransactionLock=null;}}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new q("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");try{await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async rollbackGlobalTransaction(e){if(!this.globalTransaction){g.warn("SqlDataSource::rollbackGlobalTransaction - GLOBAL_TRANSACTION_NOT_STARTED");return}try{await this.globalTransaction.rollback({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async transaction(e,r){let n=typeof e=="function"?r:e;if(this.globalTransaction?.isActive)return typeof e=="function"?this.globalTransaction.nestedTransaction(e):this.globalTransaction.nestedTransaction();let o=this.clsEnabled?Fe.getTransaction():void 0;if(o?.isActive&&o.sql.logicalSourceId===this.logicalSourceId)return typeof e=="function"?o.nestedTransaction(e):o.nestedTransaction();let i=await this.clone();i.sqlConnection=await i.getConnection();let a=new Ht(i,n?.isolationLevel);if(await a.transaction(),typeof e=="function")try{let l=this.clsEnabled?await Fe.run(a,()=>e(a)):await e(a);return await a.commit({throwErrorOnInactiveTransaction:!1}),l}catch(l){throw await a.rollback({throwErrorOnInactiveTransaction:false}),l}return a}getModelManager(e){if(!this.isConnected&&!this.lazyLoad)throw new q("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");let r=this.getTransactionBoundSqlDataSource()??this;return new et(e,r)}getPool(){if(!this.sqlPool)throw this.lazyLoad?new q("SqlDataSource::getPool - call ensureConnected() or connect() first when using lazyLoad","CONNECTION_NOT_ESTABLISHED"):new q("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(){if(this.sqlConnection)return this.sqlConnection;await this.ensureConnected();let e=this.driverAdapter;if(!e)throw new q("SqlDataSource::getConnection","CONNECTION_NOT_ESTABLISHED");return e.reserveConnection()}async disconnect(){if(!this.isConnected){g.warn("Connection already closed or not established");return}if(!this.ownsPool){if(this.sqlConnection)try{this.driverAdapter?.releaseConnection(this.sqlConnection);}catch(e){g.warn(`SqlDataSource::disconnect - releasing borrowed connection failed: ${e?.message??e}`);}this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{g.warn("SqlDataSource::disconnect - Error while rolling back global transaction");}await this.cacheAdapter?.disconnect?.(),this.slaves.length&&await Promise.all(this.slaves.map(async e=>{try{await e.disconnect();}catch(r){g.warn(`SqlDataSource::disconnect - Error while closing slave connection: ${r.message}`);}})),g.warn("Closing connection"),await this.driverAdapter?.closePool(),this.sqlPool=null,this.driverAdapter=null,this.sqlConnection=null;}getConnectionDetails(){return {type:this.getDbType(),host:this.host,port:this.port,username:this.username,password:this.password,database:this.database,connectionPolicies:this.inputDetails.connectionPolicies,queryFormatOptions:this.inputDetails.queryFormatOptions,jsEnvironment:this.inputDetails.jsEnvironment,driver:this.inputDetails.driver}}async introspectSchema(){let e=this.getDbType(),r;e==="postgres"||e==="cockroachdb"?r=`
|
|
254
|
+
ORDER BY pk`,bindings:[]}}},xp=new ll;var ul=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Op=new ul;var dl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new y(this.model).formatStringColumn("sqlite",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"sqlite").parse(t),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"sqlite").parse([t]),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new y(this.model).formatStringColumn("sqlite",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"sqlite").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),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 dl;var cl=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=Re.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}},Dp=new cl;var ml=class{toSql(t){let e=t,r=Qe(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 A?s.rawValue:s instanceof $?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}}},$p=new ml;var pl=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return e.keyword="",{sql:e.fromNode,bindings:[]};let r=new y(this.model).getFromForWriteOperations("sqlite",e.fromNode);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},Pp=new pl;var fl=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},vp=new fl;var yl=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.columns.map((a,l)=>{let u=e.values[l];if(u instanceof A)return `${r.formatStringColumn("sqlite",a)} = ${u.rawValue}`;if(u instanceof $){let d=new b(this.model,"sqlite").parse([u],1,true).sql;return `${r.formatStringColumn("sqlite",a)} = ${d}`}return o.push(u),`${r.formatStringColumn("sqlite",a)} = ?`}).join(", ");return {sql:`${n} set ${s}`,bindings:o}}},Ip=new yl;var hl=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 $){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}},Ep=new hl;var gl=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}}},kp=new gl;var bl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new y(this.model).formatStringColumn("sqlite",e.column);switch(e.jsonOperator){case "=":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},Bp=new bl;var Tl=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}}},Kp=new Tl;var wl=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex);return {sql:`${e.alias} as (${o.sql})`,bindings:o.bindings}}},Qp=new wl;var Lp={mssql:{alter_table:{add_column:mu,add_constraint:pu,add_primary_key:fu,alter_column_type:yu,alter_table:gu,drop_column:bu,drop_constraint:Tu,drop_default:wu,drop_not_null:Su,drop_primary_key:Nu,rename_column:qu,rename_table:Cu,set_default:_u,set_not_null:Mu,set_table_options:xu},column:{column_type:Ou},constraint:{after:Au,constraint:Du},create_table:{create_table:$u},delete:{delete:Pu},distinct:{distinct:vu,distinct_on:Iu},drop_table:{drop_table:Eu},extension:{create_extension:ku},from:{from:Bu},group_by:{group_by:Ku},having:{having:Qu},index_op:{create_index:Lu,drop_index:Fu},insert:{insert:ju},join:{join:Wu},limit:{limit:Uu},lock:{lock:Vu},offset:{offset:Ju},on_duplicate:{on_duplicate:Hu},order_by:{order_by:zu},raw:{raw:Gu},returning:{returning:Yu},schema:{check_constraint_info:Zu,foreign_key_info:Xu,get_column_listing:ed,get_tables:td,has_check_constraint:rd,has_column:nd,has_index:od,has_primary_key:sd,has_table:id,index_info:ad,primary_key_info:ld,table_info:ud},select:{select:dd,select_json:cd},sqlfunc:{sqlfunc:md},truncate:{truncate:pd},union:{union:fd},update:{update:yd},where:{where:hd,where_group:gd,where_json:bd,where_subquery:Td},with:{with:wd}},mysql:{alter_table:{add_column:Sd,add_constraint:Nd,add_primary_key:qd,alter_column_type:Cd,alter_table:Rd,drop_column:_d,drop_constraint:Md,drop_default:xd,drop_not_null:Od,drop_primary_key:Ad,rename_column:Dd,rename_table:$d,set_default:Pd,set_not_null:vd,set_table_options:Id},column:{column_type:Ed},constraint:{after:kd,constraint:Bd},create_table:{create_table:Kd},delete:{delete:Qd},distinct:{distinct:Ld,distinct_on:Fd},drop_table:{drop_table:jd},extension:{create_extension:Wd},from:{from:Ud},group_by:{group_by:Vd},having:{having:Jd},index_op:{create_index:Hd,drop_index:zd},insert:{insert:Gd},join:{join:Yd},limit:{limit:Zd},lock:{lock:Xd},offset:{offset:ec},on_duplicate:{on_duplicate:tc},order_by:{order_by:rc},raw:{raw:nc},returning:{returning:oc},schema:{check_constraint_info:sc,foreign_key_info:ic,get_column_listing:ac,get_tables:lc,has_check_constraint:uc,has_column:dc,has_index:cc,has_primary_key:mc,has_table:pc,index_info:fc,primary_key_info:yc,table_info:hc},select:{select:gc,select_json:bc},sqlfunc:{sqlfunc:Tc},truncate:{truncate:wc},union:{union:Sc},update:{update:Nc},where:{where:qc,where_group:Cc,where_json:Rc,where_subquery:_c},with:{with:Mc}},postgres:{alter_table:{add_column:xc,add_constraint:Oc,add_primary_key:Ac,alter_column_type:Dc,alter_table:$c,drop_column:Pc,drop_constraint:vc,drop_default:Ic,drop_not_null:Ec,drop_primary_key:kc,rename_column:Bc,rename_table:Kc,set_default:Qc,set_not_null:Lc,set_table_options:Fc},column:{column_type:jc},constraint:{after:Wc,constraint:Uc},create_table:{create_table:Vc},delete:{delete:Jc},distinct:{distinct:Hc,distinct_on:zc},drop_table:{drop_table:Gc},extension:{create_extension:Yc},from:{from:Zc},group_by:{group_by:Xc},having:{having:em},index_op:{create_index:tm,drop_index:rm},insert:{insert:nm},join:{join:om},limit:{limit:sm},lock:{lock:im},offset:{offset:am},on_duplicate:{on_duplicate:lm},order_by:{order_by:um},raw:{raw:dm},returning:{returning:cm},schema:{check_constraint_info:mm,foreign_key_info:pm,get_column_listing:fm,get_tables:ym,has_check_constraint:hm,has_column:gm,has_index:bm,has_primary_key:Tm,has_table:wm,index_info:Sm,primary_key_info:Nm,table_info:qm},select:{select:Cm,select_json:Rm},sqlfunc:{sqlfunc:_m},truncate:{truncate:Mm},union:{union:xm},update:{update:Om},where:{where:Am,where_group:Dm,where_json:$m,where_subquery:Pm},with:{with:vm}},sqlite:{alter_table:{add_column:Im,add_constraint:Em,alter_column_type:km,alter_table:Bm,drop_column:Km,drop_constraint:Qm,drop_default:Lm,drop_not_null:Fm,drop_primary_key:jm,rename_column:Wm,rename_table:Um,set_default:Vm,set_not_null:Jm,set_table_options:Hm},column:{column_type:zm},constraint:{after:Gm,constraint:Ym},create_table:{create_table:Zm},delete:{delete:Xm},distinct:{distinct:ep,distinct_on:tp},drop_table:{drop_table:rp},extension:{create_extension:np},from:{from:op},group_by:{group_by:sp},having:{having:ip},index_op:{create_index:ap,drop_index:lp},insert:{insert:up},join:{join:dp},limit:{limit:cp},lock:{lock:mp},offset:{offset:pp},on_duplicate:{on_duplicate:fp},order_by:{order_by:yp},raw:{raw:hp},returning:{returning:gp},schema:{check_constraint_info:bp,foreign_key_info:Tp,get_column_listing:wp,get_tables:Sp,has_check_constraint:Np,has_column:qp,has_index:Cp,has_primary_key:Rp,has_table:_p,index_info:Mp,primary_key_info:xp,table_info:Op},select:{select:Ap,select_json:Dp},sqlfunc:{sqlfunc:$p},truncate:{truncate:Pp},union:{union:vp},update:{update:Ip},where:{where:Ep,where_group:kp,where_json:Bp,where_subquery:Kp},with:{with:Qp}}};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=this.dbType==="mssql"?t.find(R=>!!R&&R.folder==="lock")??null:null,a=s?this.getMssqlTableHints(s):"",l=t.filter(R=>R!==null&&R.folder!=="distinct"&&R.folder!=="distinctOn"),u=l.some(R=>R.folder==="offset"),d=l.some(R=>R.folder==="order_by"),m=l.find(R=>R.folder==="limit"),c=l.find(R=>R.folder==="offset"),p=this.dbType==="mssql"&&m&&!u&&!d,h=this.dbType==="mssql"&&!p&&(m||c),f=[],T=[],N=null;p&&m&&T.push(m.limit);for(let R=0;R<l.length;R++){let M=l[R];if(p&&M.folder==="limit"||h&&(M.folder==="limit"||M.folder==="offset"))continue;M.currParamIndex=e+T.length;let k=Lp[this.mapCommonDbType(this.dbType)][M.folder][M.file];if(!k)throw new Error(`Interpreter not found for ${this.dbType} ${M.keyword}`);k.model=this.model,k.dbType=this.dbType;let O=k.toSql(M);if(!O.sql||!O.sql.trim().length)continue;let D=l[R+1],V=!D||D.keyword!==M.keyword?"":D.chainsWith;if(M.folder==="lock"||M.folder==="on_duplicate"||M.folder==="returning"||M.folder==="schema"){f.push(`${O.sql}${V}`),T.push(...O.bindings),N=M.keyword;continue}if(N!==M.keyword||M.canKeywordBeSeenMultipleTimes){if(r)f.push(`${O.sql}${V}`);else {let P=M.keyword;if(M.folder==="with"&&this.dbType!=="mssql"){let Y=R,ve=false;for(;Y<l.length&&l[Y].keyword===M.keyword;){let tr=l[Y];if(tr.folder==="with"&&tr.clause==="recursive"){ve=true;break}Y++;}ve&&(P=`${P} recursive`);}if(P==="select"){let Y=p?`top (@${e}) `:"";if(n){let ve=Array.isArray(n.columns)?n.columns.join(", "):"";f.push(`select ${Y}distinct on (${ve}) ${O.sql}${V}`);}else o?f.push(`select ${Y}distinct ${O.sql}${V}`):f.push(`select ${Y}${O.sql}${V}`);}else P==="from"&&a?f.push(`${P} ${O.sql}${a}${V}`):f.push(`${P} ${O.sql}${V}`);}N=M.keyword;}else f.push(`${O.sql}${V}`);T.push(...O.bindings);}if(h){d||f.push("order by (select null)");let R=c?.offset??0;T.push(R);let k=`offset @${e+T.length-1} rows`;if(m){T.push(m.limit);let O=e+T.length-1;k+=` fetch next @${O} rows only`;}f.push(k);}return {sql:f.join(" "),bindings:T}}mapCommonDbType(t){switch(t){case "mariadb":return "mysql";case "cockroachdb":return "postgres";default:return t}}getMssqlTableHints(t){let e=[];switch(t.lockType){case "UPDATE":e.push("UPDLOCK");break;case "SHARE":e.push("HOLDLOCK");break;case "NO_KEY_UPDATE":e.push("UPDLOCK");break;case "KEY_SHARE":e.push("HOLDLOCK");break}return t.skipLocked&&e.push("READPAST"),t.noWait&&e.push("NOWAIT"),e.length>0?` with (${e.join(", ")})`:""}};var fr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var yr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var hr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var gr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var br=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var Tr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_table";this.table=e;}};var wr=class extends S{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_column";this.table=e,this.column=r;}};var Sr=class extends S{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_index";this.table=e,this.index=r;}};var Nr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_primary_key";this.table=e;}};var qr=class extends S{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_check_constraint";this.table=e,this.constraint=r;}};var Cr=class extends S{constructor(){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_tables";}};var Rr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_column_listing";this.table=e;}};var _r=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var be=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var yt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var Mr=class extends S{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="alter_column_type";this.column=e,this.newType=r,this.options=n;}};var me=class extends S{constructor(e,r=[],n=false){super("alter table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="alter_table";this.table=e,this.children=r,this.ifExists=n;}};var xr=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var Te=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var vt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var Or=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var ht=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var Ar=class extends S{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var Dr=class extends S{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_default";this.column=e,this.defaultValue=r;}};var $r=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var gt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="set_table_options";this.engine=e.engine,this.charset=e.charset,this.collate=e.collate;}};var W=class extends S{constructor(e,r={},n=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="constraint";this.constraintType=e,this.columns=r.columns,this.references=r.references,this.constraintName=r.constraintName,this.onDelete=r.onDelete,this.onUpdate=r.onUpdate,this.defaultValue=r.defaultValue,this.checkExpression=r.checkExpression,this.isRawValue=n;}};var Pr=class extends S{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 vr=class extends S{constructor(e,r=false){super("drop table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="drop_table";this.file="drop_table";this.table=e,this.ifExists=r;}};var Ir=class extends S{constructor(e,r=true){super("create extension");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="extension";this.file="create_extension";this.extensionName=e,this.ifNotExists=r;}};var Er=class extends S{constructor(e,r,n,o=false){super("create index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="index_op";this.file="create_index";this.table=e,this.columns=r,this.indexName=n,this.unique=o;}};var kr=class extends S{constructor(e,r,n){super("drop index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.cascade=false;this.folder="index_op";this.file="drop_index";this.indexName=e,this.table=r,this.cascade=n??false;}};var bt=class extends S{constructor(e,r=false){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e;}};function By(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 Br=Symbol("columns"),Tt=Symbol("primaryKey"),Sl=Symbol("relations"),Fp=Symbol("indexes"),jp=Symbol("uniques"),Wp=Symbol("checks"),Nl=i=>`${By(i)}_id`,ql=(i,t)=>`idx_${i}_${t}`,we=(i,t)=>`uq_${i}_${t}`,Z=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,Se=(i,t)=>`pk_${i}_${t}`;var E=class extends S{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="column";this.file="column_type";this.isRawValue=false;this.column=e,this.dataType=r,this.length=n.length,this.precision=n.precision,this.scale=n.scale,this.enumValues=n.enumValues,this.withTimezone=n.withTimezone,this.autoIncrement=n.autoIncrement,this.autoCreate=n.autoCreate,this.autoUpdate=n.autoUpdate,this.collate=n.collate,this.isRawValue=n.isRawValue??false,this.unsigned=n.unsigned,this.zerofill=n.zerofill;}};var It=class extends S{constructor(e,r=false,n=false){super("lock");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="lock";this.file="lock";this.lockType=e,this.skipLocked=r,this.noWait=n;}};var ze=class extends S{constructor(e,r=false){super(r?"union all":"union");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="union";this.file="union";this.query=e,this.isAll=r;}};var wt=class extends S{constructor(e,r,n){e==="normal"&&(e="");super("with");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="with";this.file="with";this.alias=r,this.body=n,this.clause=e;}};var Le=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var Kr=class extends S{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var Qr=class extends Le{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=Se(this.tableName,C(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new W("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new W("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??e})),this)}foreignKey(t,e){this.columnNode.isForeignKey=true;let[r,n]=t.split("."),o=n.split(","),s=e?.constraintName??Z(this.tableName??"",C(this.columnNode.column),o[0]);return this.context==="alter_table"?(this.nodes.push(new W("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 W("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 W("not_null",{columns:[C(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new W("null",{columns:[C(this.columnNode.column)]})),this}default(t){let e;return t instanceof A||t instanceof $?e=t:t===null?e="NULL":typeof t=="boolean"?e=t?"TRUE":"FALSE":t!==void 0&&(e=t.toString()),this.nodes.push(new W("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new W("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??we(this.tableName??"",C(this.columnNode.column))})),this):(this.namedConstraints.push(new W("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName||we(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 W("check",{columns:[r],checkExpression:t,constraintName:n})),this):(this.namedConstraints.push(new W("check",{columns:[r],checkExpression:t,constraintName:n})),this)}after(t){return this.sqlType!=="mysql"?this:(this.nodes.push(new Kr(t)),this)}collate(t){return this.columnNode.collate=t,this}handleSqliteAutoIncrement(t){return this.isInlineSqlitePrimaryKey()?this:(this.nodes.push(new W("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 Ge=class extends Le{constructor(e,r,n,o){super(r);this.context="create_table";this.tableName=n,this.namedConstraints=[],this.context=o??"create_table",this.sqlType=e;}mysqlOptions(e){return this._mysqlOptions=e,this}getMysqlOptions(){return this._mysqlOptions}build(e){return this.nodes.push(e),new Qr(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new A(e)}char(e,r=1){let n=new E(e,"char",{length:r});return this.build(n)}varchar(e,r=255){let n=new E(e,"varchar",{length:r});return this.build(n)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let n=new E(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 E(e,"uuid");return this.build(r)}ulid(e){let r=new E(e,"ulid");return this.build(r)}integer(e,r=255){let n=new E(e,"integer",{length:r});return this.build(n)}tinyint(e,r=255){let n=new E(e,"tinyint",{length:r});return this.build(n)}smallint(e,r=255){let n=new E(e,"smallint",{length:r});return this.build(n)}mediumint(e,r=255){let n=new E(e,"mediumint",{length:r});return this.build(n)}biginteger(e,r=255){let n=new E(e,"bigint",{length:r});return this.build(n)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let n=new E(e,"float",{precision:r});return this.build(n)}double(e,r=10){let n=new E(e,"double",{precision:r});return this.build(n)}real(e,r=10){let n=new E(e,"real",{precision:r});return this.build(n)}decimal(e,r=10,n=2){let o=new E(e,"decimal",{precision:r,scale:n});return this.build(o)}numeric(e,r=10,n=2){let o=new E(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 E(e,"date",{precision:r});return this.build(n)}time(e,r){let n=new E(e,"time",{precision:r});return this.build(n)}year(e){let r=new E(e,"year");return this.build(r)}datetime(e,r){let n=new E(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 E(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}boolean(e){let r=new E(e,"boolean");return this.build(r)}binary(e){let r=new E(e,"binary");return this.build(r)}varbinary(e,r=255){let n=new E(e,"varbinary",{length:r});return this.build(n)}blob(e){let r=new E(e,"blob");return this.build(r)}tinyblob(e){let r=new E(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new E(e,"mediumblob");return this.build(r)}longblob(e){let r=new E(e,"longblob");return this.build(r)}json(e){let r=new E(e,"json");return this.build(r)}jsonb(e){let r=new E(e,"jsonb");return this.build(r)}enum(e,r){let n=new E(e,"enum",{enumValues:r});return this.build(n)}custom(e,r,n){let o=new E(e,r,{length:n});return this.build(o)}rawColumn(e){let r=new E(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new E(e,"geometry");return this.build(r)}point(e){let r=new E(e,"point");return this.build(r)}linestring(e){let r=new E(e,"linestring");return this.build(r)}polygon(e){let r=new E(e,"polygon");return this.build(r)}multiPoint(e){let r=new E(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var Lr=class extends Le{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new A(t)}addColumn(t){let e=[],r=new Ge(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 _r(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 be(m));});}alterColumn(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new Ge(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 Mr(C(a),s,c)),d&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(d.constraintType==="not_null"?this.nodes.push(new $r(C(a))):d.constraintType==="null"&&this.nodes.push(new Or(C(a)))),m&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(m.defaultValue===void 0||m.defaultValue===null||m.defaultValue==="NULL"?this.nodes.push(new vt(C(a))):this.nodes.push(new Dr(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 xr(t));}renameColumn(t,e){this.nodes.push(new Ar(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new vt(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new yt([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new be(new W(...t)));}foreignKey(t,e,r,n){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new be(new W("foreign_key",{columns:[t],references:{table:e,columns:[r]},constraintName:n?.constraintName??Z(this.table,t,r),onDelete:n?.onDelete,onUpdate:n?.onUpdate})));}unique(t,e){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new be(new W("unique",{columns:[t],constraintName:e?.constraintName??we(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let r=Z(this.table,t,e);this.nodes.push(new Te(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new q("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??we(this.table,t);this.nodes.push(new Te(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Te(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new q("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new q("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new ht(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 gt(t)):r?this.nodes.push(new gt(t)):n&&this.nodes.push(new gt(t)),this)}};var ae=class{constructor(t){if(this.sqlType=t||I.DB_TYPE,!this.sqlType)throw new q("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new A(t)}rawQuery(t){this.queryStatements.push(t);}async execute(){for(let t of this.queryStatements)this.rawQuery(t);}runFile(t){if(!oe.existsSync(t))throw new q("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=ct.basename(t),r=ct.extname(e);if(r!==".sql"&&r!==".txt")throw new q("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let o=oe.readFileSync(t,"utf-8").split(";").map(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 Ge(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 Pr(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 Lr(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 me(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 vr(t,e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}renameTable(t,e){let r=new me(t,[new pt(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}truncateTable(t){let e=new bt(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||ql(t,e.join("_")),o=new Er(t,e,n),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([o]).sql);}dropIndex(t,e){let r=new kr(t,e),n=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addPrimaryKey(t,e){let r=new me(t,[new yt(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??we(t,n.join("_")),s=new W("unique",{columns:n,constraintName:o}),a=new me(t,[new be(s)]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropForeignKey(t,e,r){let n=Z(t,e,r),o=new Te(n),s=new me(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)?we(t,e.join("_")):we(t,e),o=r?.constraintName??n,s=new Te(o),a=new me(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new ht,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new W(...e),n=new me(t,[new be(r)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}dropConstraint(t,e){let r=new Te(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 W("check",{checkExpression:e,constraintName:n}),s=new me(t,[new be(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 Te(e),n=new me(t,[r]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}createExtension(t,e=true){let r=new Ir(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 Fr,Jp,Et=class{constructor(t,e){Vl(this,Fr);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new ae(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=Jl(this,Fr,Jp).call(this)),this.executionPromise.then(t,e)}rawStatement(t){return this.schema.rawStatement(t)}rawQuery(t){return this.schema.rawQuery(t),this}createTable(t,e,r){return this.schema.createTable(t,e,r),this}alterTable(t,e){return this.schema.alterTable(t,e),this}dropTable(t,e=false){return this.schema.dropTable(t,e),this}renameTable(t,e){return this.schema.renameTable(t,e),this}truncateTable(t){return this.schema.truncateTable(t),this}createIndex(t,e,r){return this.schema.createIndex(t,e,r),this}dropIndex(t,e){return this.schema.dropIndex(t,e),this}addPrimaryKey(t,e){return this.schema.addPrimaryKey(t,e),this}addUnique(t,e,r){return this.schema.addUnique(t,e,r),this}addConstraint(t,e,...r){return this.schema.addConstraint(t,e,...r),this}dropPrimaryKey(t){return this.schema.dropPrimaryKey(t),this}dropForeignKey(t,e,r){return this.schema.dropForeignKey(t,e,r),this}dropUnique(t,e,r){return this.schema.dropUnique(t,e,r),this}dropConstraint(t,e){return this.schema.dropConstraint(t,e),this}createExtension(t,e=true){return this.schema.createExtension(t,e),this}toQuery(){let t=this.schema.queryStatements;return t.length===1?t[0]:t}toQueries(){return [...this.schema.queryStatements]}toString(){let t=this.schema.queryStatements;return t.length===1?t[0]||"":t.join(`;
|
|
255
|
+
`)}async execute(){if(this.state!=="executed"){if(this.state==="failed")throw this.executionError;return this.then()}}isExecuted(){return this.state==="executed"}isPending(){return this.state==="pending"}hasFailed(){return this.state==="failed"}async hasTable(t){return this.dataSource.hasTable(t)}async hasColumn(t,e){return this.dataSource.hasColumn(t,e)}async hasColumns(t,...e){return this.dataSource.hasColumns(t,...e)}async hasIndex(t,e){return this.dataSource.hasIndex(t,e)}async hasPrimaryKey(t){return this.dataSource.hasPrimaryKey(t)}async hasUnique(t,e){return this.dataSource.hasUnique(t,e)}async hasForeignKey(t,e){return this.dataSource.hasForeignKey(t,e)}async hasCheckConstraint(t,e){return this.dataSource.hasCheckConstraint(t,e)}async getTables(){return this.dataSource.getTables()}async getColumnListing(t){return this.dataSource.getColumnListing(t)}dropTableIfExists(t){return this.schema.dropTable(t,true),this}async dropIndexIfExists(t,e){if(await this.dataSource.hasIndex(e,t)){let n=new ae(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}};Fr=new WeakSet,Jp=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 _e=class{constructor(t,e){this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var jr=class{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}buildDropDependencies(t){let e=new Map,r=new Map,n=new Map;for(let o of t.relationsToDrop||[]){let 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 zp=i=>String(i??"").replace(/::[a-z_ ]+$/i,"").replace(/[()\s]/g,"").toLowerCase(),Ky=/^(current[ _]?timestamp\d*|now\d*|getdate\d*|localtimestamp\d*|localtime\d*)$/,Qy={postgres:i=>i.includes("nextval"),cockroachdb:i=>i.includes("unique_rowid")};var Gp=(i,t)=>!!i.autoCreate&&Ky.test(zp(t)),Yp=(i,t,e)=>{if(t.type!=="increment"&&t.type!=="bigIncrement")return false;let r=Qy[i];return r?r(zp(e)):false};var Wr=class Wr{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new jr(t);}generateOperations(t){let e=[];e.push(...this.generateStructureCreationOperations(t)),e.push(...this.generateConstraintCreationOperations(t)),e.push(...this.generateDestructiveOperations(t)),e.push(...this.generateColumnModificationOperations(t));let r=l=>l.table&&l.constraint?`${l.table}::${l.constraint}`:void 0,n=new Set(e.filter(l=>l.type==="ADD_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),o=new Set(e.filter(l=>l.type==="DROP_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),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 ae(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||Se(n.table,n.columns[0]),l=this.sql.schema().alterTable(n.table,u=>{let d=a||Se(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 ae(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 ae(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,Z(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"&&Wr.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||Se(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!==""&&!Gp(t.modelColumn,t.dbColumns.defaultValue)&&!Yp(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 ae(this.sql.getDbType());return o.createIndex(t.table,n,{constraintName:t.index}),o.queryStatements[0]||""}generateAddRelationViaAlter(t){let e=t.table,r=t.relation.foreignKey;t.relation.type==="belongsTo"?(e=t.relation.model().table,r=t.relation.model().primaryKey||"id"):t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(e=C(t.relation.manyToManyOptions.throughModel),r=C(t.relation.manyToManyOptions.rightForeignKey),(!r||r==="undefined")&&(r=t.relation.model().primaryKey||"id"));let n=typeof t.relation.constraintName=="string"?t.relation.constraintName:void 0,o=C(r);if(t.relation.type==="belongsTo"){let c=t.relation.model(),p=c.primaryKey,f=c.getColumns().find(T=>T.columnName===p);if(f)o=f.databaseName;else {let T=c?.databaseCaseConvention||"preserve";o=H(p,T);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let c=t.relation.model();if(typeof o=="string"&&o){let p=c.getColumns(),h=p.find(f=>f.columnName===o);if(h)o=h.databaseName;else {let f=c.primaryKey||"id",T=p.find(N=>N.columnName===f);if(T)o=T.databaseName;else {let N=c?.databaseCaseConvention||"preserve";o=H(o||f,N);}}}else {let p=c.primaryKey||"id",f=c.getColumns().find(T=>T.columnName===p);if(f)o=f.databaseName;else {let T=c?.databaseCaseConvention||"preserve";o=H(p,T);}}}let 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(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(),m=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,c=>{let p=n||Z(t.table,l,e);c.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[o]},constraintName:p,onDelete:d,onUpdate:m});}).toQueries()}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};Wr.BUILTIN_COLUMN_TYPES=new Set(["char","varchar","string","text","longtext","mediumtext","tinytext","uuid","ulid","integer","tinyint","smallint","mediumint","bigint","biginteger","float","double","real","decimal","numeric","increment","bigIncrement","boolean","date","time","datetime","timestamp","year","json","jsonb","binary","varbinary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]);var kt=Wr;var Vr=class Vr{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||Z(e.table,r,n),p=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.dropConstraint(${this.quote(c)});`,"});"];return {up:m,down:p}}generateDropForeignKeyCode(t){let e=t.constraint||t.data?.relation?.name;if(!e)return {up:null,down:null};let r=t.table||t.data?.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(e)});`,"});"],o=[`// TODO: reverse FK drop for ${this.quote(e)} on ${this.quote(r)}`];return {up:n,down:o}}generateAddUniqueCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=`[${(e.columns||[]).map(u=>r?.getColumns().find(m=>m.columnName===u)?.databaseName||u).map(u=>this.quote(u)).join(", ")}]`,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||Se(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||Se(t,e.columnName);n+=`.primaryKey({ constraintName: ${this.quote(o)} })`;}return e.unsigned&&(n+=".unsigned()"),e.zerofill&&(n+=".zerofill()"),e.constraints?.default!==void 0&&(n+=`.default(${this.formatDefaultValue(e.constraints.default)})`),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n+";"}generateColumnCodeForModify(t,e,r){let n=this.generateColumnTypeCode(e);return e.constraints?.default!==void 0?n+=`.default(${this.formatDefaultValue(e.constraints.default)})`:r.defaultValue!=null&&r.defaultValue!==""&&(n+=".default(null)"),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n}generateColumnTypeCode(t){let e=t.databaseName;if(Array.isArray(t.type)){let 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)})`:Vr.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))}};Vr.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 Ur=Vr;function Fy(i){return i.replace(/\s+/g," ").trim()}function jy(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function Wy(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 Uy(i,t){return t.length===0?i:`${i} ${t.join(" ")}`}function Fe(i,t){let e=Fy(t.toLowerCase()),r=jy(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}=Wy(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?Uy(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 Ye=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 N of o.indexes)n.indexes.map(w=>w.name).includes(N.name)||e.data.indexesToAdd.push({table:r.table,index:N.name});let f=r.getUniques?.()||[];for(let N of f)e.data.uniquesToAdd.push({table:r.table,name:N.name||"mandatory",columns:N.columns});let T=r.getChecks?.()||[];for(let N of T)e.data.checksToAdd.push({table:r.table,name:N.name,expression:N.expression});for(let N of o.relations){if(N.type!=="belongsTo")continue;let w=C(N.constraintName);n.foreignKeys.find(M=>M.name===w)||e.data.relationsToAdd.push({table:r.table,relation:N,onDelete:N.onDelete,onUpdate:N.onUpdate});}return}for(let f of o.columns)n.columns.some(N=>N.name===f.databaseName||N.name===f.columnName)||e.data.columnsToAdd.push({table:r.table,column:f});let s=r.getColumns();for(let f of n.columns)s.some(N=>N.databaseName===f.name||N.columnName===f.name)||e.data.columnsToDrop.push({table:r.table,column:f.name});for(let f of o.indexes)n.indexes.map(T=>T.name).includes(f.name)||e.data.indexesToAdd.push({table:r.table,index:f.name});let a=r.getUniques?.()||[];for(let f of a)n.indexes.some(N=>N.name===f.name&&N.isUnique)||e.data.uniquesToAdd.push({table:r.table,name:f.name||"mandatory",columns:f.columns});let l=n.foreignKeys.map(f=>f.name);for(let f of n.indexes)f.isUnique||l.includes(f.name)||o.indexes.map(N=>N.name).includes(f.name)||e.data.indexesToDrop.push({table:r.table,index:f.name});for(let f of n.indexes){if(!f.isUnique||f.name==="PRIMARY")continue;(r.getUniques?.()||[]).map(N=>N.name).includes(f.name)||e.data.uniquesToDrop.push({table:r.table,name:f.name});}let u=r.getChecks?.()||[];for(let f of u)n.checkConstraints.some(N=>N.name===f.name)||e.data.checksToAdd.push({table:r.table,name:f.name,expression:f.expression});let d=new Set(u.map(f=>f.name)),m=o.columns.filter(f=>Array.isArray(f.type)),c=new Set(m.map(f=>f.databaseName||f.columnName));for(let f of n.checkConstraints)if(!d.has(f.name)){let T=[...c].find(N=>{let w=N.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),R=new RegExp(`[\\["\\[]?${w}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),M=new RegExp(`[\\("\\[]?${w}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return R.test(f.expression)||M.test(f.expression)});if(T){let N=m.find(R=>(R.databaseName||R.columnName)===T),w=n.columns.find(R=>R.name===T);if(N&&w?.enumValues&&Array.isArray(N.type)){let R=[...N.type].sort(),M=[...w.enumValues].sort();if(!(R.length===M.length&&R.every((O,D)=>O===M[D]))){e.data.checksToDrop.push({table:r.table,name:f.name});let O=e.sql.getDbType(),D=O==="mssql"?"[":'"',K=O==="mssql"?"]":'"',V=N.type.map(P=>`'${P.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:f.name,expression:`${D}${T}${K} IN (${V})`});}}}else e.data.checksToDrop.push({table:r.table,name:f.name});}for(let f of o.columns){let T=n.columns.find(R=>R.name===f.databaseName||R.name===f.columnName);if(!T)continue;let N=!e.areColumnsEqual(T,f,n.indexes),w=e.getDefaultChange({table:r.table,dbColumns:T,modelColumn:f});(N||w)&&e.data.columnsToModify.push({table:r.table,dbColumns:T,modelColumn:f});}for(let f of o.relations){if(f.type!=="belongsTo"&&f.type!=="manyToMany")continue;if(f.type==="manyToMany"&&f.manyToManyOptions){let w=C(f.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:w,relation:{type:"belongsTo",model:()=>r,columnName:C(f.manyToManyOptions.leftForeignKey),foreignKey:f.manyToManyOptions.leftForeignKey,constraintName:f.constraintName?C(f.constraintName):Z(w,C(f.manyToManyOptions.leftForeignKey||Nl(r.table)),r.table),onDelete:f.onDelete,onUpdate:f.onUpdate},onDelete:f.onDelete,onUpdate:f.onUpdate});continue}let T=C(f.constraintName);if(T&&n.foreignKeys.some(w=>w.name===T))continue;n.foreignKeys.find(w=>e.relationMatchesDbRelation(r,f,w))||e.data.relationsToAdd.push({table:r.table,relation:f,onDelete:f.onDelete,onUpdate:f.onUpdate});}let p=new Set(o.relations.filter(f=>f.type==="belongsTo").map(f=>{let T=C(f.foreignKey)||f.columnName,w=r.getColumns().find(R=>R.columnName===T)?.databaseName||T;return C(f.constraintName)||Z(r.table,w,f.model().table)}));for(let f of n.foreignKeys){if(f.name&&p.has(f.name))continue;o.relations.find(N=>N.type!=="belongsTo"&&N.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,N,f))||e.data.relationsToDrop.push({table:r.table,relation:f});}for(let f of o.relations){if(f.type!=="belongsTo"&&f.type!=="manyToMany")continue;let T=n.foreignKeys.find(N=>e.relationMatchesDbRelation(r,f,N));T&&!e.areRelationsEqual(T,f)&&e.data.relationsToModify.push({table:r.table,dbRelation:T,modelRelation:f,onDelete:f.onDelete,onUpdate:f.onUpdate});}let h=r.primaryKey;if(h&&!n.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[h]}),n.primaryKey&&!h&&e.data.primaryKeysToDrop.push({table:r.table,columns:n.primaryKey.columns,name:n.primaryKey.name}),h&&n.primaryKey){let f=r.getColumns().find(T=>T.columnName===h);f&&!e.arePrimaryKeysEqual(n.primaryKey,f)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:n.primaryKey,modelPrimaryKey:h});}})),await e.processManyToMany(),await e.removeFkChurnByName(),e}getSqlStatements(){let t=this.getSqlStatementsByPhase();return Object.values(t).flat().filter(r=>{let n=r.trim();return n?!this.emptyStatements.some(o=>o.test(n)):false})}getCodeStatements(){let e=new kt(this.sql).generateOperations(this.data);return new Ur(this.sql).generateCode(e)}getSqlStatementsByPhase(){let t=new kt(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=Fe(o,t.dataType),a=typeof e.type=="string"?Fe(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 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,m=l.find(f=>f.columnName===d);m&&(d=m.databaseName);let c=n.primaryKey||"id",h=n.getColumns().find(f=>f.columnName===c)?.databaseName||c;return r.columns.length===1&&r.columns[0]===d&&r.referencedColumns.length===1&&r.referencedColumns[0]===h}arePrimaryKeysEqual(t,e){if(t.columns.length!==1)return false;let n=t.columns[0]===e.databaseName,o=this.sql.getDbType();if(["mysql","mariadb"].includes(o))return n;let a=!t.name||!e.primaryKeyConstraintName||t.name===e.primaryKeyConstraintName;return n&&a}getDefaultChange(t){let e=this.sql.getDbType(),r=Fe(e,t.dbColumns.dataType),n=typeof t.modelColumn.type=="string"?Fe(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,l=t.modelColumn.type==="bigIncrement"||t.modelColumn.type==="increment",u=typeof t.dbColumns.defaultValue=="string"&&t.dbColumns.defaultValue.includes("nextval(");if(s&&!a)return "set";if(!s&&a)return l&&u||t.modelColumn.type==="uuid"&&this.isImplicitUuidDefault(e,t.dbColumns.defaultValue)?false:"drop";if(s&&a){let d=String(t.dbColumns.defaultValue),m=String(t.modelColumn.constraints?.default),c=this.normalizeDefaultValue(e,r,d),p=this.normalizeDefaultValue(e,n||r,m);return c!==p?"set":false}return false}isImplicitUuidDefault(t,e){let r=String(e??"").replace(/[()\s]/g,"").toLowerCase();return ({postgres:["gen_random_uuid"],cockroachdb:["gen_random_uuid"],mysql:["uuid"],mariadb:["uuid"],mssql:["newid"],sqlite:["lower(hex(randomblob(16)))"]}[t]??[]).includes(r)}normalizeDefaultValue(t,e,r){let n=String(r).trim();if(!n)return n;if(t==="postgres"||t==="cockroachdb"){if(e==="json"||e==="jsonb")try{n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::(jsonb?|[a-zA-Z_ ]+[\[\]]*)/g,"");let 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),m=a.getColumns().find(P=>P.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 f=this.clonePkAsColumn(d,c),T=this.clonePkAsColumn(m,p),N=h.columns.find(P=>P.name===c),w=h.columns.find(P=>P.name===p),R=N?this.areColumnsEqual(N,f,h.indexes):false,M=w?this.areColumnsEqual(w,T,h.indexes):false;for(let P of h.foreignKeys){let Y=P.referencedTable===s.table,ve=P.referencedTable===a.table;if(!Y&&!ve)continue;let tr=Y?c:p,Mt=P.columns[0];Mt&&Mt!==tr&&(this.data.relationsToDrop.push({table:o,relation:P}),Mt!==c&&Mt!==p&&this.data.columnsToDrop.push({table:o,column:Mt}));}let k={};R||(k[f.databaseName]=f),M||(k[T.databaseName]=k[T.databaseName]||T);for(let P of Object.keys(k))this.data.columnsToAdd.push({table:o,column:k[P]});let O=this.buildBelongsToRelation(o,()=>s,c,l,void 0,n.onDelete,n.onUpdate),D=this.buildBelongsToRelation(o,n.model,p,u,void 0,n.onDelete,n.onUpdate),K=h.foreignKeys.find(P=>P.referencedTable===s.table&&P.columns.length===1&&P.columns[0]===c),V=h.foreignKeys.find(P=>P.referencedTable===a.table&&P.columns.length===1&&P.columns[0]===p);if(!K){let P=h.foreignKeys.find(Y=>Y.referencedTable===s.table);P&&this.data.relationsToDrop.push({table:o,relation:P}),this.data.relationsToAdd.push(O);}if(!V){let P=h.foreignKeys.find(Y=>Y.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(c=>c.columnName===l)?.databaseName||l,m=C(a.constraintName)||Z(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(f=>f.table===n.table),a=s?.getColumns()||[],l=n.relation.columnName;n.relation.type==="belongsTo"?l=a.find(T=>T.columnName===n.relation.foreignKey)?.databaseName||n.relation.foreignKey:l=a.find(T=>T.columnName===l)?.databaseName||l;let u=n.table,d=n.relation.foreignKey;if(n.relation.type==="belongsTo"){let f=n.relation.model();u=f.table;let T=f.primaryKey||"id";d=f.getColumns().find(w=>w.columnName===T)?.databaseName||T;}let m=new Set([l,n.relation.columnName].filter(Boolean)),c=o.foreignKeys.some(f=>{if(f.columns.length!==1||f.referencedColumns.length!==1)return false;let T=m.has(f.columns[0]),N=f.referencedTable===u,w=f.referencedColumns[0]===d;return T&&N&&w}),p=C(n.relation.constraintName)||Z(n.table,l,u),h=e.get(n.table)||new Set;if(c||p&&h.has(p))return null;if(n.relation.type==="manyToMany"&&n.relation.manyToManyOptions){let f=C(n.relation.manyToManyOptions.throughModel),T=C(n.relation.manyToManyOptions.leftForeignKey),N=C(n.relation.manyToManyOptions.rightForeignKey),w=n.table===f&&n.relation.columnName===T&&n.relation.model().table===s?.table,R=n.table===f&&n.relation.columnName===N&&n.relation.model().table!==s?.table,M=await this.sql.getTableSchema(f),k=M.foreignKeys.some(D=>D.columns.length===1&&D.columns[0]===T&&D.referencedTable===(s?.table||"")),O=M.foreignKeys.some(D=>D.columns.length===1&&D.columns[0]===N&&D.referencedTable===n.relation.model().table);if(w&&k||R&&O)return null}return n})).then(n=>n.filter(Boolean)),this.data.relationsToDrop=await Promise.all(this.data.relationsToDrop.map(async n=>{let o=this.models.find(u=>u.table===n.table);if(!o)return n;let s=o.getRelations(),a=o.getColumns();return s.some(u=>{if(u.type!=="belongsTo")return false;let m=a.find(T=>T.columnName===u.foreignKey)?.databaseName||u.foreignKey,c=u.model(),p=c.primaryKey||"id",f=c.getColumns().find(T=>T.columnName===p)?.databaseName||p;return n.relation.columns.length===1&&n.relation.columns[0]===m&&n.relation.referencedTable===c.table&&n.relation.referencedColumns.length===1&&n.relation.referencedColumns[0]===f})?null:n})).then(n=>n.filter(Boolean));}clonePkAsColumn(t,e){let r=t.type;return r==="bigIncrement"?r="bigint":r==="increment"&&(r="integer"),{columnName:e,databaseName:e,isPrimary:false,type:r,length:t.length,precision:t.precision,scale:t.scale,withTimezone:t.withTimezone,constraints:{nullable:false}}}pushM2mFkRelations(t){let e=this.buildBelongsToRelation(t.throughTable,()=>t.leftModel,t.leftFkName,t.leftModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate),r=this.buildBelongsToRelation(t.throughTable,()=>t.rightModel,t.rightFkName,t.rightModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate);this.data.relationsToAdd.push(e),this.data.relationsToAdd.push(r);}buildBelongsToRelation(t,e,r,n,o,s,a){let l=o?C(o):Z(t,r,e().table);return {table:t,relation:{type:"belongsTo",model:e,columnName:r,foreignKey:r,constraintName:l,onDelete:s,onUpdate:a},onDelete:s,onUpdate:a}}};var je=class{};je.modelCaseConvention="camel",je.databaseCaseConvention="snake";var Zp=(i,t)=>{try{let e=De.createHash("sha256").update(i).digest(),r=De.randomBytes(16),n=De.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");return o+=n.final("hex"),`${r.toString("hex")}:${o}`}catch(e){throw new q("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Xp=(i,t)=>{try{let e=De.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=De.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 q("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},ef=(i,t)=>{try{let e=De.randomBytes(32),r=De.randomBytes(16),n=De.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");o+=n.final("hex");let s=publicEncrypt(i,e);return `${r.toString("hex")}:${s.toString("hex")}:${o}`}catch(e){throw new q("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},tf=(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=De.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 q("Encryption::decryptAsymmetric","FAILED_TO_DECRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}};var z=class{static defineMetadata(t,e,r,n){if((typeof r!="object"||r===null)&&typeof r!="function")throw new TypeError("target must be an object or function");let o=this.store.get(r);o||(o=new Map,this.store.set(r,o));let 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 _l="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Rl=_l.length,Hy=10,zy=16,Gy=(i,t)=>{let e="";for(let r=0;r<t;r++){let n=i%Rl;e=_l.charAt(n)+e,i=(i-n)/Rl;}return e},Yy=i=>{let t=re().crypto.randomBytes(i),e="";for(let r=0;r<i;r++){let n=t[r];e+=_l.charAt(n%Rl);}return e},rf=()=>{let i=Math.floor(Date.now()/1e3),t=Gy(i,Hy),e=Yy(zy);return t+e};var Jr=class extends _e{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var Hr=class extends _e{constructor(e,r,n){super(e,r);this.type="hasMany";this.foreignKey=n,this.type="hasMany";}};var zr=class extends _e{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var Gr=class extends _e{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(Tt,e))throw new q("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");z.defineMetadata(Tt,r,e),z.defineMetadata(Tt,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??Se(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(Br,e)||[];a.push(s),z.defineMetadata(Br,a,e);}}_.primary=Zy;_.date=fh;_.datetime=yh;_.timestamp=hh;_.time=gh;_.boolean=ph;_.json=bh;_.uuid=nh;_.ulid=oh;_.integer=eh;_.bigInteger=ah;_.float=Xy;_.decimal=lh;_.increment=th;_.bigIncrement=rh;_.string=sh;_.text=ih;_.binary=uh;_.enum=dh;_.encryption={symmetric:ch,asymmetric:mh};_.computed=Th;function Zy(i={}){return _({...i,primaryKey:true})}function Xy(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 eh(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 th(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 rh(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 nh(i={}){return _({type:"uuid",...i,prepare:t=>t||re().crypto.randomUUID(),openApi:{type:"string",format:"uuid",description:"uuid (Universally Unique Identifier)",...i.openApi||{}}})}function oh(i={}){return _({type:"ulid",...i,prepare:t=>t||rf(),openApi:{type:"string",format:"ulid",description:"ulid (Universally Unique Lexicographically Sortable Identifier)",...i.openApi||{}}})}function sh(i={}){return _({type:"string",...i,openApi:{type:"string",description:"A string value",...i.openApi||{}}})}function ih(i={}){return _({type:"longtext",...i,openApi:{type:"string",description:"A text value",...i.openApi||{}}})}function ah(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 lh(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 uh(i={}){return _({type:"binary",...i,openApi:{type:"string",format:"binary",description:"Binary data",...i.openApi||{}}})}function dh(i,t={}){return _({type:i,...t,openApi:{type:"string",enum:i,description:"An enum value",...t.openApi||{}}})}function ch(i){return _({...i,prepare:t=>t&&Zp(i.key,t),serialize:t=>t&&Xp(i.key,t)})}function mh(i){return _({...i,prepare:t=>t&&ef(i.publicKey,t),serialize:t=>t&&tf(i.privateKey,t)})}function ph(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 fh(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=()=>ie(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?f=>f?a?c():f:s?m():null:f=>f?a?c():f:s?m():null,serialize:t?f=>{if(f!==void 0)return f===null?null:f instanceof Date?ie(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 yh(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=()=>ie(new Date,"ISO",a),h=t?typeof o=="function"?o:p:typeof o=="function"?o:c,f=t?typeof n=="function"?n:p:typeof n=="function"?n:c;return _({type:"datetime",...s,withTimezone:l,autoUpdate:d,autoCreate:m,prepare:t?w=>w?d?f():w:u?h():null:w=>w?d?f():w:u?h():null,serialize:t?w=>{if(w!==void 0)return w===null?null:w instanceof Date?ie(w,"ISO",a):String(w)}:w=>{if(w!==void 0)return w===null?null:w instanceof Date?w:new Date(w)},stringMode:t,openApi:{type:"string",format:"date-time",description:"YYYY-MM-DD HH:mm:ss",...s.openApi||{}}})}function hh(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=()=>ie(new Date,"TIMESTAMP",a),h=t?typeof o=="function"?o:p:typeof o=="function"?o:c,f=t?typeof n=="function"?n:p:typeof n=="function"?n:c;return _({type:"timestamp",...s,withTimezone:l,autoUpdate:d,autoCreate:m,prepare:t?w=>w?d?f():w:u?h():null:w=>w?d?f():w:u?h():null,serialize:t?w=>{if(w!==void 0)return w===null?null:w instanceof Date?ie(w,"TIMESTAMP",a):String(w)}:w=>{if(w!==void 0)return w===null?null:w instanceof Date?w:new Date(w)},stringMode:t,openApi:{type:"string",format:"date-time",description:"Unix timestamp",...s.openApi||{}}})}function gh(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=()=>ie(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?f=>f?a?c():f:s?m():null:f=>f?a?c():f:s?m():null,serialize:t?f=>{if(f!==void 0)return f===null?null:f instanceof Date?ie(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 bh(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 Th(i,t={}){return _({...t,expression:i})}function nf(i){try{return z.getMetadata(Br,i.prototype)||[]}catch{return []}}function of(i){return z.getMetadata(Sl,i.prototype)||[]}function sf(i){return (z.getMetadata(Sl,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 Jr(l,o,a);case "hasOne":return new zr(l,o,a);case "hasMany":return new Hr(l,o,a);case "manyToMany":if(!e.manyToManyOptions)throw new q("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let u=n();return new Gr(u,o,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:C(e.manyToManyOptions.throughModel),leftForeignKey:C(e.manyToManyOptions.leftForeignKey),rightForeignKey:C(e.manyToManyOptions.rightForeignKey)});default:throw new q("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function af(i){return z.getMetadata(Tt,i)||z.getMetadata(Tt,i.prototype)}function lf(i){return z.getMetadata(Fp,i.prototype)||[]}function uf(i){return z.getMetadata(jp,i.prototype)||[]}function df(i){return z.getMetadata(Wp,i.prototype)||[]}var pe=class{};pe.columns=new WeakMap,pe.byName=new WeakMap,pe.byDatabaseName=new WeakMap;var xe=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 af(this)}constructor(t){if(super(),t)for(let e in t)Object.assign(this,{[e]:t[e]});}static getColumns(){let t=pe.columns.get(this);return t||(t=nf(this),pe.columns.set(this,t)),t}static getColumnsByName(){let t=pe.byName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.columnName,e])),pe.byName.set(this,t)),t}static getColumnsByDatabaseName(){let t=pe.byDatabaseName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.databaseName,e])),pe.byDatabaseName.set(this,t)),t}static getRelations(){return of(this)}static getIndexes(){return lf(this)}static getUniques(){return uf(this)}static getChecks(){return df(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 At(r);return {valid:true}}};xe.zodEngine=null,xe.softDeleteColumn="deletedAt",xe.softDeleteValue=ft();var St=class extends S{constructor(e,r=false){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.fromNode=e;}};var U=class extends S{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var ee=class extends S{constructor(e,r=[],n,o=false,s=false){super("insert into",s);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="insert";this.file="insert";this.fromNode=e,this.records=r,this.returning=n,this.disableReturning=o;}};var Ne=class extends S{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 Nt=class extends S{constructor(e=[],r="inserted"){super("returning");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="returning";this.file="returning";this.columns=e,this.prefix=r;}};var $e=class extends S{constructor(e,r=[],n=[],o=false){super("update",o);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="update";this.file="update";this.fromNode=e,this.columns=r,this.values=n;}};var x=class extends S{constructor(e,r,n=false,o,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 Oe=class extends S{constructor(e,r="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`;}};var le=class extends x{constructor(e,r,n=false,o,s,a=false){super(e,r,n,"=",s,a);this.file="where_json";this.jsonOperator=o,this.value=s;}};var qe=class extends S{constructor(e,r,n,o="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_subquery";this.column=e,this.operator=r,this.subquery=n,this.chainsWith=` ${o}`;}};var cf;cf=Symbol.toStringTag;var G=class{constructor(t,e,r,n){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=n;this[cf]="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 wh=(i,t,e,r,n,o=false)=>{let s=Object.create(t.prototype);for(let a of Object.keys(i)){let l=i[a],u=e.get(a),d=a;u||(u=r.get(a),u&&(d=u.columnName));let m=u!==void 0,c=o?true:n?n.has(d):true;if(m){if(!c)continue;if(l===null){s[d]=null;continue}if(u?.serialize){let p=u.serialize(l);if(p!==null&&typeof p?.then=="function")throw new Error(`hysteria-orm: column "${d}" on model "${t.name}" has an async serialize function, but serializers must be synchronous. Move async work to prepare or a getter.`);s[d]=p;continue}s[d]=l;continue}(!o||n&&n.has(d))&&(s[d]=l);}if(n)for(let a of n)a in s||(s[a]=null);return s},fe=(i,t,e=[])=>{if(!i.length)return null;let r=t.getColumnsByName(),n=t.getColumnsByDatabaseName(),o=e.some(u=>u.includes("*")),s=[];for(let u of e){if(u.toLowerCase().includes(" as ")){let p=u.match(/\s+as\s+(.+)$/i);p&&s.push(p[1].trim());continue}let m=u;if(m.includes(".")&&(m=m.split(".").pop()),m==="*")continue;let c=r.get(m)?.columnName??m;s.push(c);}let a=s.length?new Set(s):null,l=i.map(u=>wh(u,t,r,n,a,o));return l.length===1?l[0]:l};var Bt=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);}},mf=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 Yr=re();function Ml(i){let t=Yr.timing.now()-i;return Math.round(t*100)/100}var J=async(i,t,e,r,n="rows",o)=>{await e.ensureConnected();let s={id:Yr.crypto.randomUUID(),sql:i,params:t,model:void 0,operation:mf(i),timestamp:Yr.timing.now()};try{let u=e.observerChain;u&&typeof u.notifyBefore=="function"&&await u.notifyBefore(s);}catch{}let a=Yr.timing.now(),l=u=>{o?.shouldNotLog||at(i,e.logs,t,e.inputDetails.queryFormatOptions,r,u);};try{let u=e.driverAdapter;if(!u)throw new q("ExecSql","CONNECTION_NOT_ESTABLISHED");let d=await Sh(()=>u.execute(i,t,{returning:n,sqlLiteOptions:o?.sqlLiteOptions,connection:e.sqlConnection}),e.inputDetails.connectionPolicies?.retry,e.logs);try{let m=Ml(a),c=e.observerChain;if(c&&typeof c.notifyAfter=="function"){let p={...s,duration:m,result:d};await c.notifyAfter(p);}}catch{}return l(Ml(a)),u.extract(d,n)}catch(u){throw l(Ml(a)),u}},Zr=async(i,t,e,r={},n)=>{let o=e.driverAdapter;if(!o)throw new q("ExecSqlStreaming","CONNECTION_NOT_ESTABLISHED");return await o.stream(i,t,{...r,connection:e.sqlConnection??void 0},{onData:n.onData})};async function Sh(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++,eu(`Retrying sql in ${o}ms (attempt ${r}/${n})`,"info",e),await new Promise(l=>setTimeout(l,o)),s();throw a}}return s()}var ne=class extends S{constructor(e,r,n,o){super("select");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="select";this.file="select";this.column=e,this.alias=r,this.sqlFunction=n,this.isRawValue=o??false;}};var Kt=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=sf(t),this.modelRelationsMap=new Map(this.modelRelations.map(n=>[n.columnName,n]));}getRelationFromModel(t){let e=this.modelRelationsMap.get(t.toString());if(!e)throw new q("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function Xr(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 qt=i=>typeof i=="number"?i:parseFloat(i);var Ze=class extends S{constructor(e,r,n=false,o,s,a=false){super("having",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="having";this.file="having";this.column=e,this.chainsWith=`${r} `,this.isNegated=n,this.operator=o,this.value=s;}};var en=class extends S{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var tn=class extends S{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var We=class extends S{constructor(e,r,n,o="extract",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 ue=class extends S{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.on=s,this.additionalConditions=l;}};var Qt=class extends S{constructor(e,r=false){super("group by",r);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="group_by";this.file="group_by";this.column=e;}};var rn=class extends S{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var nn=class extends S{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var Lt=class extends S{constructor(e,r="asc",n=false){super("order by",n);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="order_by";this.file="order_by";this.column=e,this.direction=r;}};var sn=class sn{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=sn.EMPTY_MAP);}clearGroupBy(){return this.groupByNodes=[],this}clearOrderBy(){return this.orderByNodes=[],this}clearLimit(){return this.limitNode=null,this}clearOffset(){return this.offsetNode=null,this}groupBy(...t){return t.forEach(e=>{this.groupByNodes.push(new Qt(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Qt(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new Lt(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new Lt(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 rn(t),this}offset(t){return typeof t!="number"&&g.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new nn(t),this}};sn.EMPTY_MAP=new Map;var on=sn;var Xe=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 Oe(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 Oe(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 an=class extends on{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new ue(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new ue(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new ue(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new ue(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new ue(t,"","","cross",{operator:"="},true)),this}naturalJoinRaw(t){return this.joinNodes.push(new ue(t,"","","natural",{operator:"="},true)),this}innerJoin(t,e,r,n,o){let s=r,a=n,l=typeof n=="function"?n:o;if(!s){if(!this.model.primaryKey)throw new q("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){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 q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Xe(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ue(typeof t=="string"?t:t.table,e,s,"inner",{operator:a||"="},false,u)),this}leftJoin(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 q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Xe(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ue(typeof t=="string"?t:t.table,e,s,"left",{operator:a||"="},false,u)),this}rightJoin(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 q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Xe(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ue(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 q("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Xe(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ue(typeof t=="string"?t:t.table,e,s,"full",{operator:a||"="},false,u)),this}};var ln=class extends an{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.dbType=r.getDbType(),this.fromNode=new U(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return e.forEach(r=>{if(Array.isArray(r)){let[a,l]=r;this.modelSelectedColumns.push(l);let u=this.resolveComputedColumn(a);if(u){this.selectNodes.push(new ne(`(${u.expression}) as ${l}`,void 0,void 0,true));return}let d=H(a,this.model.databaseCaseConvention);this.selectNodes.push(new ne(d,l));return}let n=r;this.modelSelectedColumns.push(n);let o=this.resolveComputedColumn(n);if(o){this.selectNodes.push(new ne(`(${o.expression}) as ${o.alias}`,void 0,void 0,true));return}let s=H(n,this.model.databaseCaseConvention);this.selectNodes.push(new ne(s));}),this}selectRaw(e){return this.selectNodes.push(new ne(e,void 0,void 0,true)),this}selectFunc(e,r,n){return this.selectNodes.push(new ne(r,n,e)),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}resolveComputedColumn(e){let r=this.model.getColumnsByName?.();if(!r||r.size===0)return;let n=e.includes(".")?e.split(".").pop():e,o=r.get(n);if(o?.expression)return {expression:o.expression,alias:o.databaseName||n}}clearFrom(){return this.fromNode=new U(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new U(e),this}distinct(){return this.distinctNode=new en,this}distinctOn(...e){return this.distinctOnNode=new tn(e),this}selectJson(e,r,n){return this.selectNodes.push(new We(e,r,n,"extract")),this}selectJsonText(e,r,n){return this.selectNodes.push(new We(e,r,n,"extract_text")),this}selectJsonArrayLength(e,r,n){return this.selectNodes.push(new We(e,r,n,"array_length")),this}selectJsonKeys(e,r,n){return this.selectNodes.push(new We(e,r,n,"object_keys")),this}selectJsonRaw(e,r){return this.selectNodes.push(new We(e,"",r,"raw",true)),this}};var un=class extends ln{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 A(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 A(s))),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 qe("","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 qe("","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 qe("","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 qe("","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 Ze(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 Ze(e,"or",false,o,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Ze(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Ze(e,"or",false,"=",[],true)),this}buildSubQuery(e){if(e instanceof B)return e;let r=new B(this.model,this.sqlDataSource),n=e(r);return n!=null&&"extractQueryNodes"in n?n:r}andWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new qe(e,r,o.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new qe(e,r,o.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new B(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new Oe(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 Oe(r.whereNodes,"or");return this.whereNodes.push(n),this}};var dn=class extends un{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new le(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new le(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new le(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new le(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new le(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new le(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new le(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new le(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new le(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new le(t,"or",false,"raw",e)),this}};var B=class i extends dn{constructor(e,r){super(e,r);this.isNestedCondition=false;this._interpreterUtils=null;this.insertNode=null;this.onDuplicateNode=null;this.updateNode=null;this.deleteNode=null;this.returningNode=null;this.truncateNode=null;this.replicationMode=null;this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.astParser=new b(this.model,this.dbType);}get interpreterUtils(){return this._interpreterUtils||(this._interpreterUtils=new y(this.model)),this._interpreterUtils}setReplicationMode(e){return this.replicationMode=e,this}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof 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 ne(a.extractQueryNodes(),n)),this}return this.selectNodes.push(new ne(r.extractQueryNodes(),n)),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}clearSelect(){return super.clearSelect(),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}async exists(){return !!await this.one()}async many(){let{sql:e,bindings:r}=this.unWrap();return this.execSqlWithSlaveHandling("read",n=>J(e,r,n,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}))}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async pluck(e){return (await this.many()).map(n=>n[e])}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async oneOrFail(){let e=await this.one();if(!e)throw new q("SqlDataSource::query::oneOrFail","ROW_NOT_FOUND");return e}async stream(e={}){let{sql:r,bindings:n}=this.unWrap();return this.execSqlWithSlaveHandling("read",async o=>await Zr(r,n,o,e,{onData:(a,l)=>{a.write(l);}}))}async*chunk(e){let r=0;for(;;){let n=await this.limit(e).offset(r).many();if(!n.length)break;r+=n.length,yield n;}}async paginateWithCursor(e,r){if(!this.orderByNodes.length)throw new q(this.model.name+"::paginateWithCursor","ORDER_BY_REQUIRED");let n=this.orderByNodes;if(n.some(c=>c.isRawValue))throw new q(this.model.name+"::paginateWithCursor","ORDER_BY_RAW_NOT_SUPPORTED");let o=n.map(c=>c.column),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 f=h;p.orWhere(T=>{for(let N=0;N<f;N++)T.where(o[N],"=",c[N]);T.where(o[f],s,c[f]);});}});}this.limit(e+1);let a=await this.many(),l=a.length>e,u=l?a.slice(0,e):a,d=u[u.length-1],m=o.map(c=>c.includes(".")?c.slice(c.lastIndexOf(".")+1):c);return {data:u,hasMore:l,nextCursor:d?{key:m.length===1?m[0]:m,value:m.length===1?d[m[0]]:m.map(c=>d[c])}:null}}lockForUpdate(e={}){return this.lockQueryNodes.push(new It("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new It("for_share",e.skipLocked,e.noWait)),this}union(e){if(typeof e=="string")return this.unionNodes.push(new ze(e)),this;let n=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new ze(n)),this}unionAll(e){if(typeof e=="string")return this.unionNodes.push(new ze(e,true)),this;let n=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new ze(n,true)),this}increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?qt(r.total):0}needsDerivedTableCount(){return this.groupByNodes.length>0||this.havingNodes.length>0||this.distinctNode!==null||this.distinctOnNode!==null}buildCountQuery(e="*"){if(!this.needsDerivedTableCount()){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);return}this.clearOrderBy(),this.clearLimit(),this.clearOffset();let r=this.extractQueryNodes();this.withNodes=[],this.distinctNode=null,this.distinctOnNode=null,this.clearSelect(),this.fromNode=new U(r,"g"),this.joinNodes=[],this.whereNodes=[],this.groupByNodes=[],this.havingNodes=[],this.lockQueryNodes=[],this.unionNodes=[],this.selectRaw(`count(${e}) as total`);}async getMax(e){this.clearForFunctions(),this.selectFunc("max",e,"total");let r=await this.one();return r?qt(r.total):0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?qt(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?qt(r.total):0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?qt(r.total):0}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&g.warn(`${this.model.name}::paginate Non numeric values provided to \`paginate\``);let n=this.clone(),o=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>o.many(),()=>n.getCount("*"));return {paginationMetadata:Xr(e,r,a),data:s}}table(e,r){if(typeof e=="function"){if(!r)throw new q("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 U(a,r),this}return this.fromNode=new U(e,r),this}with(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 wt("normal",e,s.extractQueryNodes())),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 wt("recursive",e,s.extractQueryNodes())),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new q("QueryBuilder::withMaterialized","MATERIALIZED_CTE_NOT_SUPPORTED",new Error("MATERIALIZED CTE is only supported by postgres"));let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new wt("materialized",e,s.extractQueryNodes())),this}insert(e,r){let n=Object.fromEntries(Object.keys(e).map(s=>[s,e[s]])),o=!r||r.length===0;return this.insertNode=new ee(this.fromNode,[this.interpreterUtils.stripComputedFromData(n)],r,o),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:s,values:a}=this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert",this.dbType),l=Object.fromEntries(s.map((p,h)=>[p,a[h]]));this.insertNode=new ee(this.fromNode,[l],r,o);let{sql:u,bindings:d}=this.astParser.parse([this.insertNode]),m=await this.getSqlDataSource("write"),c=await J(u,d,m,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[e]}});if(!o)return Array.isArray(c)&&c.length?c[0]:c})}insertMany(e,r){let n=e.map(s=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(s).map(a=>[a,s[a]])))),o=!r||r.length===0;return this.insertNode=new ee(this.fromNode,n,r,o),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{if(!e.length)return o?void 0:[];let s=await Promise.all(e.map(async m=>{let{columns:c,values:p}=this.interpreterUtils.prepareColumns(Object.keys(m),Object.values(m),"insert",this.dbType);return Object.fromEntries(c.map((h,f)=>[h,p[f]]))}));this.insertNode=new ee(this.fromNode,s,r,o);let{sql:a,bindings:l}=this.astParser.parse([this.insertNode]),u=await this.getSqlDataSource("write"),d=await J(a,l,u,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:s}});if(!o)return d})}upsert(e,r,n={updateOnConflict:true}){let o=this.interpreterUtils.filterComputedColumns(Object.keys(e)),s=Object.keys(r),a=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(e).map(l=>[l,e[l]])));return this.insertNode=new ee(new U(this.model.table),[a],void 0,true),this.onDuplicateNode=new Ne(this.model.table,s,o,n.updateOnConflict??true?"update":"ignore",n.returning),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:u}=this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert",this.dbType),d=Object.fromEntries(l.map((f,T)=>[f,u[T]]));if(this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw([d],s,o,n,[e]);let{sql:m,bindings:c}=this.astParser.parse([new ee(new U(this.model.table),[d],void 0,true),new Ne(this.model.table,s,o,n.updateOnConflict??true?"update":"ignore",n.returning)]),p=await this.getSqlDataSource("write"),h=await J(m,c,p,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:[e]}});return Array.isArray(h)?h:[h]})}upsertMany(e,r,n,o={updateOnConflict:true}){let s=this.interpreterUtils.filterComputedColumns(r),a=n.map(l=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(l).map(u=>[u,l[u]]))));return this.insertNode=new ee(new U(this.model.table),a,void 0,true),this.onDuplicateNode=new Ne(this.model.table,e,s,o.updateOnConflict??true?"update":"ignore",o.returning),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let l=[];if(await Promise.all(n.map(async p=>{let{columns:h,values:f}=this.interpreterUtils.prepareColumns(Object.keys(p),Object.values(p),"insert",this.dbType),T=Object.fromEntries(h.map((N,w)=>[N,f[w]]));l.push(T);})),this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw(l,e,s,o,n);let{sql:u,bindings:d}=this.astParser.parse([new ee(new U(this.model.table),l,void 0,true),new Ne(this.model.table,e,s,o.updateOnConflict??true?"update":"ignore",o.returning)]),m=await this.getSqlDataSource("write"),c=await J(u,d,m,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:n}});return Array.isArray(c)?c:[c]})}async executeMssqlMergeRaw(e,r,n,o,s){if(!e.length)return [];let a=Object.keys(e[0]),l=this.interpreterUtils.formatStringColumn("mssql",this.model.table),u=K=>this.interpreterUtils.formatStringColumn("mssql",K),d=[],m=e.map(K=>`select ${a.map(P=>(d.push(K[P]),`@${d.length}`)).join(", ")}`),c=a.map(u).join(", "),p=m.join(" union all "),h=r.map(K=>`target.${u(K)} = source.${u(K)}`).join(" and "),f=n.filter(K=>!r.includes(K)).map(K=>`target.${u(K)} = source.${u(K)}`).join(", "),T=a.map(u).join(", "),N=a.map(K=>`source.${u(K)}`).join(", "),w=o.returning&&o.returning.length?o.returning.map(K=>`inserted.${u(K)}`).join(", "):a.map(K=>`inserted.${u(K)}`).join(", "),M=(o.updateOnConflict??true)&&f?`when matched then update set ${f}`:"",k=`merge into ${l} as target using (${p}) as source (${c}) on ${h} ${M} when not matched then insert (${T}) values (${N}) output ${w};`,O=await this.getSqlDataSource("write"),D=await J(k,d,O,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(D)?D:[D]}update(e,r){let n=this.interpreterUtils.stripComputedFromData(e),o=Object.keys(n),s=Object.values(n);this.updateNode=new $e(this.fromNode,o,s),this.returningNode=this.buildReturningNode("update",r);let a=this.returningNode!==null;return new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:u}=this.interpreterUtils.prepareColumns(o,s,"update",this.dbType);this.updateNode=new $e(this.fromNode,l,u);let{sql:d,bindings:m}=this.astParser.parse(this.withReturningNode([this.updateNode,...this.whereNodes,...this.joinNodes])),c=await this.getSqlDataSource("write");return J(d,m,c,this.dbType,a?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:a?"fetch":"affectedRows"}})})}buildReturningNode(e,r){return !r?.length||!this.interpreterUtils.dialectEmitsReturning(this.dbType)?null:new Nt(r,e==="delete"?"deleted":"inserted")}withReturningNode(e){if(!this.returningNode)return e;if(this.dbType==="mssql"){let[r,...n]=e;return [r,this.returningNode,...n]}return [...e,this.returningNode]}truncate(){return this.truncateNode=new bt(this.fromNode),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:e,bindings:r}=this.astParser.parse([this.truncateNode]),n=await this.getSqlDataSource("write");await J(e,r,n,this.dbType,"rows");})}delete(e){this.deleteNode=new St(this.fromNode),this.returningNode=this.buildReturningNode("delete",e);let r=this.returningNode!==null;return new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:n,bindings:o}=this.astParser.parse(this.withReturningNode([this.deleteNode,...this.whereNodes,...this.joinNodes])),s=await this.getSqlDataSource("write");return J(n,o,s,this.dbType,r?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:r?"fetch":"affectedRows"}})})}softDelete(e={}){let{column:r="deletedAt",value:n=ft()}=e||{};return this.updateNode=new $e(this.fromNode,[r],[n]),new G(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:o,values:s}=this.interpreterUtils.prepareColumns([r],[n],"update",this.dbType);this.updateNode=new $e(this.fromNode,o,s);let{sql:a,bindings:l}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),u=await this.getSqlDataSource("write");return J(a,l,u,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return rt(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),n=ot(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${n}`:n,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new ne("*")]);let{sql:e,bindings:r}=this.astParser.parse(this.extractQueryNodes());return {sql:this.withQuery?`${this.withQuery} ${e}`:e,bindings:[...r||[]]}}clone(){let e=new i(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=F(this.modelSelectedColumns),e.distinctNode=F(this.distinctNode),e.distinctOnNode=F(this.distinctOnNode),e.selectNodes=F(this.selectNodes),e.withQuery=F(this.withQuery),e.joinNodes=F(this.joinNodes),e.whereNodes=F(this.whereNodes),e.groupByNodes=F(this.groupByNodes),e.havingNodes=F(this.havingNodes),e.orderByNodes=F(this.orderByNodes),e.lockQueryNodes=F(this.lockQueryNodes),e.unionNodes=F(this.unionNodes),e.withNodes=F(this.withNodes),e.fromNode=F(this.fromNode),e.limitNode=F(this.limitNode),e.offsetNode=F(this.offsetNode),e.returningNode=F(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}extractQueryNodes(){return this.selectNodes.length||(this.selectNodes=[new ne("*")]),this.insertNode?[this.insertNode,this.onDuplicateNode].filter(Boolean):this.updateNode?this.withReturningNode([this.updateNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode]).filter(Boolean):this.deleteNode?this.withReturningNode([this.deleteNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode]).filter(Boolean):this.truncateNode?[this.truncateNode]:[...this.withNodes,this.distinctNode,this.distinctOnNode,...this.selectNodes,this.fromNode,...this.joinNodes,...this.whereNodes,...this.groupByNodes,...this.havingNodes,...this.orderByNodes,this.limitNode,this.offsetNode,...this.lockQueryNodes,...this.unionNodes].filter(Boolean)}clearForFunctions(){return this.clearSelect(),this.clearGroupBy(),this.clearOrderBy(),this.clearLimit(),this.clearOffset(),this}isMssqlTransaction(){return this.sqlDataSource.type==="mssql"&&!!this.sqlDataSource.sqlConnection}async executePaginateQueries(e,r){if(this.isMssqlTransaction()){let n=await e(),o=await r();return [n,o]}return Promise.all([e(),r()])}async getSqlDataSource(e){return this.replicationMode?this.replicationMode==="master"?this.sqlDataSource:e==="write"?this.sqlDataSource:this.sqlDataSource.getSlave()||this.sqlDataSource:e==="read"?this.sqlDataSource.getSlave()||this.sqlDataSource:this.sqlDataSource}async execSqlWithSlaveHandling(e,r){let n=await this.getSqlDataSource(e);if(!(n!==this.sqlDataSource))return r(n);try{return await r(n)}catch(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 pf(i,t){return t.strategy&&t.strategy!=="auto"?t.strategy:Nh(i)}function Nh(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 xl=re(),et=class i extends B{constructor(e,r){super(e,r);this.loadOptions={strategy:"auto"};this.sqlModelManagerUtils=new Kt(e,this.dbType,r),this.relationQueryBuilders=[],this.modelSelectedColumns=[],this.modelColumnsMap=this.model.getColumnsByDatabaseName(),this.modelColumnsDatabaseNames=new Map;for(let[n,o]of this.modelColumnsMap)this.modelColumnsDatabaseNames.set(n,o.columnName);}expandModelSelectColumns(){let e=this.selectNodes;if(!e.length){if(this.joinNodes.length)return;for(let[,r]of this.modelColumnsMap)r.expression||e.push(new ne(r.databaseName,r.columnName));return}for(let r of e){if(r.isRawValue||r.alias!==void 0||typeof r.column!="string"||r.column.includes(".")||r.column==="*")continue;let n=this.modelColumnsMap.get(r.column);!n||n.expression||(r.alias=n.columnName);}}get isRelationQueryBuilder(){return !!this.relation}static from(e,r={}){if(r.connection)return new 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 q(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return r}async many(){await this.model.beforeFetch?.(this),this.expandModelSelectColumns();let r=await super.many();if(!r.length)return [];let n=fe(r,this.model,this.modelSelectedColumns);if(!n)return [];let o=Array.isArray(n)?n:[n];return this.relationQueryBuilders.length&&await this.processRelationsWithStrategy(o),o}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async*chunk(e){let r=0;for(;;){let n=await this.limit(e).offset(r).many();if(!n.length)break;yield n,r+=n.length;}}async stream(e={}){await this.model.beforeFetch?.(this),this.expandModelSelectColumns();let{sql:r,bindings:n}=this.unWrap(),o=await this.getSqlDataSource("read");return await Zr(r,n,o,e,{onData:async(a,l)=>{let u=fe([l],this.model,this.modelSelectedColumns);u&&(this.relationQueryBuilders.length&&await this.processRelationsRecursively([u]),a.write(u));}})}async paginateWithCursor(e,r){return super.paginateWithCursor(e,r)}insert(e,r={}){return this.getModelManager(r.trx).insert(e,{returning:r.returning})}insertMany(e,r={}){return this.getModelManager(r.trx).insertMany(e,{returning:r.returning})}upsert(e,r,n={updateOnConflict:true}){let o=this.getModelManager(n.trx),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}){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 tt(this.model,r)}async find(e){return this.getModelManager().find(e)}async findOne(e){return this.getModelManager().findOne(e)}async findOneOrFail(e){return this.getModelManager().findOneOrFail(e)}async findOneByPrimaryKey(e,r){return this.getModelManager().findOneByPrimaryKey(e,r)}async updateRecord(e,r,n){return this.getModelManager(n?.trx).updateRecord(e,r,n)}async deleteRecord(e,r){return this.getModelManager(r?.trx).deleteRecord(e)}async save(e,r){let n=this.model.primaryKey;if(!n)throw new q(this.model.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");let o=e[n],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 q(`${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 xe{static get table(){return a.throughModel}}m.databaseCaseConvention="preserve",m.modelCaseConvention="preserve",await new tt(m,s.trx?s.trx.sql:this.sqlDataSource).insertMany(d);}truncate(){return super.truncate()}update(e,r={}){let n=r.returning,o=super.update(e,n);return new G(()=>o.unWrap(),()=>o.toSql(),()=>o.toQuery(),async()=>{if(!n||!this.returningNode)return o;let s=await o;return fe(s,this.model,n)})}softDelete(e={}){let r=super.softDelete(e);return new G(()=>r.unWrap(),()=>r.toSql(),()=>r.toQuery(),async()=>r)}delete(e={}){let r=e.returning,n=super.delete(r);return new G(()=>n.unWrap(),()=>n.toSql(),()=>n.toQuery(),async()=>{if(!r||!this.returningNode)return n;let o=await n;return fe(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:Xr(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}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=F(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=pf({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(F(s));else for(let[s,a]of this.model.getColumnsByDatabaseName())a.expression||o.selectRaw(`${this.model.table}.${s}`);for(let s of this.whereNodes){let a=F(s);this.qualifyWhereNodeColumns(a,this.model.table),o.whereNodes.push(a);}for(let s of this.groupByNodes)o.groupByNodes.push(F(s));for(let s of this.orderByNodes)o.orderByNodes.push(F(s));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(o.limitNode=F(this.limitNode)),this.offsetNode&&(o.offsetNode=F(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(F(s));for(let s of e.orderByNodes)o.orderByNodes.push(F(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,f=u.get(h)||l.get(h),T=f?.databaseName??h,N=c.alias??f?.columnName??h;e.selectRaw(`${a.table}.${T} as ${s}${o}${N}`);}}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 x)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof qe)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof Oe)for(let n of e.nodes)this.qualifyWhereNodeColumns(n,r);}serializeRelationData(e,r){for(let n of Object.keys(e)){let o=r.get(n);o?.serialize&&e[n]!==null&&e[n]!==void 0&&(e[n]=o.serialize(e[n]));}}async loadRelationViaBatch(e,r){let n=await this.getRelatedModelsForRelation(e,e.relation,r);this.mapRelatedModelsToModels(e.relation,r,n);}mapRelatedModelsToModels(e,r,n){switch(e.type){case "hasOne":if(!this.model.primaryKey)throw new q(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let o=new Map;n.forEach(c=>{let p=c[e.foreignKey];p&&o.set(String(p),c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=null;return}let h=o.get(String(p));c[e.columnName]=h||null;});break;case "belongsTo":let s=new Map;n.forEach(c=>{if(!e.model.primaryKey)throw new q(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let p=c[e.model.primaryKey];p&&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 q(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;n.forEach(c=>{let p=c[e.foreignKey];if(!p)return;let h=String(p);a.has(h)||a.set(h,[]),a.get(h).push(c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=[];return}let h=a.get(String(p))||[];c[e.columnName]=h;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new q(this.model.name+"::mapRelatedModelsToModels::manyToMany","MODEL_HAS_NO_PRIMARY_KEY");let l=e,u=new Map,d=l.leftForeignKey,m=this.modelColumnsMap.get(d)||this.modelColumnsDatabaseNames.get(d)||H(d,this.model.modelCaseConvention);n.forEach(c=>{let p=c[m];if(p==null)return;let h=String(p);u.has(h)||u.set(h,[]),delete c[m],u.get(h).push(c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=[];return}let h=u.get(String(p))||[];c[e.columnName]=h;});break;default:throw new q(this.model.name+"::mapRelatedModelsToModels","UNSUPPORTED_RELATION_TYPE")}}async getRelatedModelsForRelation(e,r,n){return this.getRelatedModelsQueryForRelation(e,r,n).many()}getRelatedModelsQueryForRelation(e,r,n){let o=this.getFilterValuesFromModelsForRelation(r,n);switch(r.type){case "belongsTo":case "hasOne":return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,o);case "hasMany":let 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=ke(xl.crypto.randomBytes(6)),u=`${r.model.table}_cte_${l}`,d=e.orderByNodes.map(D=>D.isRawValue?D.column:`${this.interpreterUtils.formatStringColumn(this.dbType,D.column)} ${D.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let m=e.with(u,D=>D.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${d}) as rn_${l}`).whereIn(r.foreignKey,o));s&&m.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&m.whereRaw(`rn_${l} > ${a}`);let c=e.modelSelectedColumns.map(D=>ao(D,u,e.model.table));return m.select(...c).table(u);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new q(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!n.length)return e;let h=e.limitNode?.limit,f=e.offsetNode?.offset,T=e.modelSelectedColumns.length?e.modelSelectedColumns.map(D=>D.includes(".")?D:`${r.model.table}.${D}`):[`${r.model.table}.*`];if(!h&&!f)return e.select(...T).select([`${p.throughModel}.${p.leftForeignKey}`,p.leftForeignKey]).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o);let N=ke(xl.crypto.randomBytes(6)),w=`${r.model.table}_cte_${N}`,R=e.orderByNodes.map(D=>{if(D.isRawValue)return D.column;let K=D.column.includes(".")?D.column:`${r.model.table}.${D.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,K)} ${D.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let M=`${ke(xl.crypto.randomBytes(6))}_left_foreign_key`,k=e.with(w,D=>D.select(...T).select([`${p.throughModel}.${p.leftForeignKey}`,M]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${R}) as rn_${N}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o));h&&k.whereRaw(`rn_${N} <= ${h+(f||0)}`),f&&k.whereRaw(`rn_${N} > ${f}`);let O=T.map(D=>ao(D,w,e.model.table));return k.select(...O).select([`${w}.${M}`,p.leftForeignKey]).table(w);default:throw new q(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new q(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);case "belongsTo":return r.map(n=>n[e.foreignKey]);case "manyToMany":if(!this.model.primaryKey)throw new q(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);default:throw new q(this.model.name+"::getFilterValuesFromModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}applyHavingRelatedFilter(e,r,n,o){let 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 q(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 q(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 q(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");e.joinNodes?.some(p=>!p.isRawValue&&p.table===u.throughModel&&p.type==="left")||e.leftJoin(u.throughModel,`${u.relatedModel}.${r.model.primaryKey}`,`${u.throughModel}.${u.rightForeignKey}`);let m=a.formatStringColumn(l,`${u.throughModel}.${u.leftForeignKey}`),c=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${m} = ${c}`),n&&typeof o=="number"&&e.groupByRaw(m).andHavingRaw(`count(*) ${n} ${o}`);return}default:throw new q(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}};function ff(){return {}}var tt=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=ff(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new b(this.model,this.sqlType),this.interpreterUtils=new y(this.model);}setReplicationMode(t){return this.replicationMode=t,this}async find(t){if(!t)return this.query().many();let e=this.query();return t.select&&e.select(...t.select),t.relations&&t.relations.forEach(r=>{e.load(r);}),t.where&&this.handleWhereCondition(e,t.where),t.orderBy&&Object.entries(t.orderBy).forEach(([r,n])=>{e.orderBy(r,n);}),t.limit&&e.limit(t.limit),t.offset&&e.offset(t.offset),t.groupBy&&e.groupBy(...t.groupBy),e.many()}async findOne(t){let e=await this.find({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,offset:t.offset,limit:1});return e.length?e[0]:null}async findOneOrFail(t){let e=await this.findOne({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,offset:t.offset});if(e===null)throw t.customError?t.customError:new q(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new q(this.model.name+"::findOneByPrimaryKey","MODEL_HAS_NO_PRIMARY_KEY");return this.query().select(...e||[]).where(this.model.primaryKey,t).one()}insert(t,e={}){let r=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(t).map(u=>[u,t[u]]))),n=!e.returning||e.returning.length===0,o=new ee(new U(this.model.table),[r],e.returning,n),s=()=>{let u=this.astParser.parse([o]);return {sql:u.sql,bindings:u.bindings}},a=()=>{let u=this.astParser.parse([o]);return {sql:ot(this.sqlDataSource,u.sql),bindings:u.bindings}},l=()=>{let{sql:u,bindings:d}=a();return rt(u,d)};return new G(s,a,l,async()=>{try{await this.model.validate?.(t);}catch(w){throw w}let{columns:u,values:d}=this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert",this.sqlType),m={};u.forEach((w,R)=>{let M=d[R];m[w]=M,t[w]??(t[w]=M);});let c=!e.returning||e.returning.length===0,{sql:p,bindings:h}=this.astParser.parse([new ee(new U(this.model.table),[m],e.returning,c)]),f=await J(p,h,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(c)return;if(this.sqlType==="mysql")return this.handleMysqlInsert(f,[t],"one",e.returning);let T=f[0];return T?fe([T],this.model,e.returning):t})}insertMany(t,e={}){let r=t.map(u=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(u).map(d=>[d,u[d]])))),n=!e.returning||e.returning.length===0,o=new ee(new U(this.model.table),r,e.returning,n),s=()=>{let u=this.astParser.parse([o]);return {sql:u.sql,bindings:u.bindings}},a=()=>{let u=this.astParser.parse([o]);return {sql:ot(this.sqlDataSource,u.sql),bindings:u.bindings}},l=()=>{let{sql:u,bindings:d}=a();return rt(u,d)};return new G(s,a,l,async()=>{try{await this.model.validate?.(t);}catch(T){throw T}let u=t.map(T=>{let{columns:N,values:w}=this.interpreterUtils.prepareColumns(Object.keys(T),Object.values(T),"insert",this.sqlType),R={};return N.forEach((M,k)=>{let O=w[k];R[M]=O,T[M]??(T[M]=O);}),R}),d=!e.returning||e.returning.length===0,{sql:m,bindings:c}=this.astParser.parse([new ee(new U(this.model.table),u,e.returning,d)]),p=await J(m,c,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(d)return [];if(this.sqlType==="mysql")return await this.handleMysqlInsert(p,t,"many",e.returning)||[];let h=p;return h.length?fe(h,this.model,e.returning)||[]:[]})}upsertMany(t,e,r,n={updateOnConflict:true}){let o=this.interpreterUtils.filterComputedColumns(e),s=r.map(p=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(p).map(h=>[h,p[h]])))),a=new ee(new U(this.model.table),s,void 0,true),l=n.returning?.length&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?n.returning:void 0;new Ne(this.model.table,t,o,n.updateOnConflict??true?"update":"ignore",l);let d=()=>{let p=this.astParser.parse([a]);return {sql:p.sql,bindings:p.bindings}},m=()=>{let p=this.astParser.parse([a]);return {sql:ot(this.sqlDataSource,p.sql),bindings:p.bindings}},c=()=>{let{sql:p,bindings:h}=m();return rt(p,h)};return new G(d,m,c,async()=>{let p=r.map(O=>{let{columns:D,values:K}=this.interpreterUtils.prepareColumns(Object.keys(O),Object.values(O),"insert",this.sqlType);return Object.fromEntries(D.map((V,P)=>[V,K[P]]))});if(this.sqlType==="mssql")return this.executeMssqlMerge(p,t,o,n,r);let h=!n.returning||n.returning.length===0,f=!h&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?n.returning:void 0,{sql:T,bindings:N}=this.astParser.parse([new ee(new U(this.model.table),p,void 0,true),new Ne(this.model.table,t,o,n.updateOnConflict??true?"update":"ignore",f)]),w=await J(T,N,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:r}});if(h)return [];if(this.sqlType==="postgres"||this.sqlType==="cockroachdb"){if(w.length<r.length&&!(n.updateOnConflict??true)){let K=t[0],V=r.map(Y=>Y[K]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(K,V).many()}return fe(w,this.model,n.returning)||[]}let R=t[0],M=r.map(O=>O[R]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(R,M).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=O=>this.interpreterUtils.formatStringColumn("mssql",O),u=[],d=t.map(O=>`select ${s.map(K=>(u.push(O[K]),`@${u.length}`)).join(", ")}`),m=s.map(l).join(", "),c=d.join(" union all "),p=e.map(O=>`target.${l(O)} = source.${l(O)}`).join(" and "),h=r.filter(O=>!e.includes(O)).map(O=>`target.${l(O)} = source.${l(O)}`).join(", "),f=s.map(l).join(", "),T=s.map(O=>`source.${l(O)}`).join(", "),N=n.returning&&n.returning.length?n.returning.map(O=>`inserted.${l(O)}${this.interpreterUtils.resolveColumnAlias("mssql",O)}`).join(", "):s.map(O=>`inserted.${l(O)}${this.interpreterUtils.resolveColumnAlias("mssql",O)}`).join(", "),R=(n.updateOnConflict??true)&&h?`when matched then update set ${h}`:"",M=`merge into ${a} as target using (${c}) as source (${m}) on ${p} ${R} when not matched then insert (${f}) values (${T}) output ${N};`,k=await J(M,u,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});if(k.length===0&&!(n.updateOnConflict??true)){let O=e[0],D=o.map(V=>V[O]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(O,D).many()}return k}async updateRecord(t,e,r){let n=new Set(this.model.getColumns().map(N=>N.columnName)),o=Object.keys(e).filter(N=>n.has(N)),s=o.map(N=>e[N]),{columns:a,values:l}=this.interpreterUtils.prepareColumns(o,s,"update",this.sqlType),{primaryKey:u}=this.model;if(!u)throw new q(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let d=a.indexOf(u);d!==-1&&(a.splice(d,1),l.splice(d,1));let m=r?.returning??[],c=m.length>0&&!this.interpreterUtils.hasComputedColumn(m)&&this.interpreterUtils.shouldFetchNatively(this.sqlType,"update"),{sql:p,bindings:h}=this.astParser.parse([new $e(new U(this.model.table),a,l),new x(u,"and",false,"=",t),...c?[new Nt(m)]:[]]),f=await J(p,h,this.sqlDataSource,this.sqlType,c?"rows":"affectedRows",c?{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}:void 0);if(!m.length)return;if(c){if(!f.length)throw new q(this.model.name+"::updateRecord","ROW_NOT_FOUND");return fe([f[0]],this.model,m)}let T=await this.findOneByPrimaryKey(t,r?.returning);if(!T)throw new q(this.model.name+"::updateRecord","ROW_NOT_FOUND");return T}async deleteRecord(t){if(!this.model.primaryKey)throw new q(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new x(this.model.primaryKey,"and",false,"=",t),{sql:r,bindings:n}=this.astParser.parse([new St(new U(this.model.table)),e]);await J(r,n,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new et(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?fe([a],this.model):null}return fe(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 yf=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??ft()});Ct();var he=class{constructor(t){this.options=t;}static async createDriver(t){throw new q("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};se();var Ft=class Ft extends he{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new Ft(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 Ft(this.mongoClient)}};Ft.mongoClient=null;var cn=Ft;se();var jt=class jt extends he{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new jt(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new L("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new L("mssql");return new jt(this.mssqlClient)}};jt.mssqlClient=null;var mn=jt;se();var Wt=class Wt extends he{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new Wt(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new L("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new L("mysql2");return new Wt(this.mysqlClient)}};Wt.mysqlClient=null;var pn=Wt;se();var Ut=class Ut extends he{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new Ut(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 Ut(this.pgClient)}};Ut.pgClient=null;var fn=Ut;se();var Vt=class Vt extends he{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new Vt(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 Vt(this.sqlite3Client)}};Vt.sqlite3Client=null;var yn=Vt;var de=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await pn.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await fn.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await yn.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await cn.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await mn.createDriver(),this.mssqlDriver;default:throw new q(`DriverFactory::getDriver Driver ${t} not supported`,"DRIVER_NOT_FOUND")}}static getExistingDriver(t){switch(t){case "mysql":case "mariadb":return this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver;case "sqlite":return this.sqliteDriver;case "mongo":return this.mongodbDriver;case "mssql":return this.mssqlDriver;default:return null}}};de.mysqlDriver=null,de.pgDriver=null,de.sqliteDriver=null,de.mssqlDriver=null,de.mongodbDriver=null;Ct();se();var hn=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}`);return (r.connection??this.pool).query(o,e)}extract(t,e){return e==="rows"?t.rows:e==="raw"?t:t.rowCount}async stream(t,e,r,n){let o=r.connection,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,f=false,T=false,N=w=>{if(s)try{a.release(w);}catch{}};return p.on("data",w=>{if(n.onData){h++,Promise.resolve(n.onData(u,w)).then(()=>{h--,f&&h===0&&!T&&(N(),u.end());}).catch(R=>{T=true,N(R),u.destroy(R);});return}u.write(w);}),p.on("end",()=>{f=true,h===0&&!T&&(N(),u.end());}),p.on("error",w=>{T=true,N(w),u.destroy(w);}),u}};var gn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=r.createPool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.getConnection()}releaseConnection(t){t?.release();}async beginTransaction(t,e){e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await t.beginTransaction();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){return (r.connection??this.pool).query(t,e)}extract(t,e){let r=t;return e==="affectedRows"?r[0]?.affectedRows??0:e==="raw"?t:r[0]}async stream(t,e,r,n){let o=this.pool,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(f=>{c=true,p(),a.destroy(f);});return}a.write(h);}),u.on("end",()=>{m=true,d===0&&!c&&(p(),a.end());}),u.on("error",h=>{c=true,p(),a.destroy(h);}),a.on("close",()=>{p();}),a}};var bn=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=new r.Database(String(e.database??":memory:"),e.driverOptions?.mode??void 0,n=>{if(n)throw new q("SqliteDataSource::createSqlPool","CONNECTION_NOT_ESTABLISHED")});}createPool(){}async closePool(){await new Promise((t,e)=>{this.pool.close(r=>{r&&e(r),t();});});}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){return await this.promisify(t,e,r)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.pool;return new Ol(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);});})}},Ol=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);});}};se();var Tn=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:I.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++}`);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 q("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${t}`)}}};var xh=()=>{ye({name:"pg",dialects:["postgres","cockroachdb"],create:async({dialect:i,input:t})=>{let e=(await de.getDriver(i)).client;return new hn(i,t,e)}}),ye({name:"mysql2",dialects:["mysql","mariadb"],create:async({dialect:i,input:t})=>{let e=(await de.getDriver(i)).client;return new gn(i,t,e)}}),ye({name:"sqlite3",dialects:["sqlite"],create:async({dialect:i,input:t})=>{let e=(await de.getDriver(i)).client;return new bn(i,t,e)}}),ye({name:"mssql",dialects:["mssql"],create:async({dialect:i,input:t})=>{let e=(await de.getDriver(i)).client;return new Tn(i,t,e)}});};xh();var vh=async i=>{if(i==="bun"){await(await Promise.resolve().then(()=>(Cf(),qf))).registerBunDrivers();return}if(i==="web"){(await Promise.resolve().then(()=>(vl(),Pl))).registerWebDrivers();return}if(i==="react-native"){await(await Promise.resolve().then(()=>(vl(),Pl))).registerReactNativeDrivers();return}},Cn=async(i,t)=>{let e=or(t?.jsEnvironment);await vh(e);let r=await gf(i,e,t?.driver,t);return await r.createPool(),r};var Ht=class Ht{constructor(){}static run(t,e){return Ht.storage.run(t,e)}static getTransaction(){return Ht.storage.getStore()}};Ht.storage=new AsyncLocalStorage;var Ue=Ht;var zt=class i{constructor(t,e,r=false,n=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=ke(re().crypto.randomBytes(16)),this.isolationLevel=e,this.isNested=r,this.nestingDepth=n;}async nestedTransaction(t){let e=new i(this.sql,this.isolationLevel,true,this.nestingDepth+1);if(await e.transaction(),t)try{let r=await Ue.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")&&at("BEGIN TRANSACTION",this.sql.logs);let t=this.sql.driverAdapter,e=this.sql.sqlConnection;if(!t||!e)throw new q("TRANSACTION::transaction","CONNECTION_NOT_ESTABLISHED");await t.beginTransaction(e,{isolationLevel:this.isolationLevel,rawQuery:(r,n)=>this.sql.rawQuery(r,n??[])}),this.isActive=true;}async commit(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new q("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "sqlite":await this.sql.rawQuery(`RELEASE SAVEPOINT ${e}`);break}this.isActive=false;return}try{let e=this.sql.driverAdapter,r=this.sql.sqlConnection;(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&at("COMMIT",this.sql.logs),e&&r&&await e.commitTransaction(r,{rawQuery:(n,o)=>this.sql.rawQuery(n,o??[])});}catch(e){throw g.error(e),e}finally{await this.releaseConnection(),this.isActive=false;}}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new q("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":await this.sql.rawQuery(`ROLLBACK TRANSACTION ${e}`);break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":await this.sql.rawQuery(`ROLLBACK TO SAVEPOINT ${e}`);break;case "sqlite":await this.sql.rawQuery(`ROLLBACK TO ${e}`);break;default:throw new q("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}this.isActive=false;return}try{let e=this.sql.driverAdapter,r=this.sql.sqlConnection;(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&at("ROLLBACK",this.sql.logs),e&&r&&await e.rollbackTransaction(r,{rawQuery:(n,o)=>this.sql.rawQuery(n,o??[])});}catch(e){throw g.error(e),e}finally{await this.releaseConnection(),this.isActive=false;}}async releaseConnection(){if(this.connectionReleased)return;let t=null;try{this.sql.driverAdapter?.releaseConnection(this.sql.sqlConnection);}catch(e){t=e,g.error(e);}this.sql.sqlConnection=null;try{await this.sql.disconnect();}catch(e){g.warn(`Transaction::releaseConnection - disconnect failed: ${e?.message??e}`);}if(this.connectionReleased=true,t)throw t}getIsolationLevelQuery(){if(!this.isolationLevel||this.sql.type==="mssql")return "";if(this.sql.type==="sqlite"&&this.isolationLevel!=="SERIALIZABLE")throw new q("TRANSACTION::getIsolationLevelQuery","SQLITE_ONLY_SUPPORTS_SERIALIZABLE_ISOLATION_LEVEL");if(this.sql.type==="mysql"||this.sql.type==="mariadb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="postgres"||this.sql.type==="cockroachdb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="sqlite")return "";throw new q("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}};var Il=Symbol.for("hysteria.orm.SqlDataSource"),Of,Af,Pe=class i extends(Af=Pt,Of=Il,Af){constructor(e){super(e);this[Of]=true;this.globalTransaction=null;this.globalTransactionLock=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.driverAdapter=null;this.id=re().crypto.randomUUID();this.logicalSourceId=re().crypto.randomUUID();this.cacheAdapter=new cr;this.migrationConfig={path:I.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:xt(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&&Il in e&&e[Il]===true}get isClsEnabled(){return this.clsEnabled}getOnSlaveServerFailure(){return this.onSlaveServerFailure}addObserver(e){return this.observerChain||(this.observerChain=new Bt([])),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 q("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");try{this.driverAdapter=await Cn(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 Cn(e.sqlType,e.inputDetails),e.sqlPool=e.driverAdapter.pool??null,e.ownsPool=!0;}));}catch(e){this.sqlPool=null,this.ownsPool=false;for(let r of this.slaves)r.ownsPool&&(r.sqlPool=null,r.ownsPool=false);throw e}}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new q("SqlDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.connect().finally(()=>{this.connecting=null;})),await this.connecting;}}get isInGlobalTransaction(){return !!this.globalTransaction}get models(){let e=this;return new Proxy(this._models,{get(r,n){if(typeof n=="string"&&n in r)return e.from(r[n])}})}getSlave(){if(!this.slaves.length)return null;if(this.slaveAlgorithm==="random")return this.slaves[Math.floor(Math.random()*this.slaves.length)];let e=this.slaves[this.roundRobinIndex%this.slaves.length];return this.roundRobinIndex=(this.roundRobinIndex+1)%this.slaves.length,e}getTransactionBoundSqlDataSource(){if(this.globalTransaction?.isActive)return this.globalTransaction.sql;if(this.clsEnabled){let e=Ue.getTransaction();if(e?.isActive&&e.sql.logicalSourceId===this.logicalSourceId)return e.sql}return null}async useCache(e,r,...n){if(!this.cacheAdapter)throw new q("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new q("SqlDataSource::useCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);let 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=Fn(JSON.stringify(u)),m=d?`${e}:${d}`:e,c=await this.cacheAdapter.get(m);if(c!==void 0)return c;let p=await o(...u);return await this.cacheAdapter.set(m,p,l),p}async invalidCache(e,...r){if(!this.cacheAdapter)throw new q("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new q("SqlDataSource::invalidCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);if(n.length>0&&r.length===0){let l=e;await this.cacheAdapter.invalidate(l);return}let s=Fn(JSON.stringify(r)),a=s?`${e}:${s}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new q("SqlDataSource::invalidateAllCache","CACHE_ADAPTER_NOT_CONFIGURED");await this.cacheAdapter.invalidateAll(e);}async clone(e){let r=new i(this.inputDetails);return r.id=this.id,r.logicalSourceId=this.logicalSourceId,r.sqlType==="sqlite"||!!e?.shouldRecreatePool?(r.driverAdapter=await Cn(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(yf(e,r),n);return r?.alias&&o.table(e,r.alias),o}return new et(e,n)}schema(){if(!this.isConnected&&!this.lazyLoad)throw new q("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new Et(this,this.getDbType())}async startGlobalTransaction(e){for(;this.globalTransactionLock;)await this.globalTransactionLock;if(this.globalTransaction?.isActive)throw new q("SqlDataSource::startGlobalTransaction","GLOBAL_TRANSACTION_ALREADY_STARTED");let r=()=>{};this.globalTransactionLock=new Promise(n=>{r=n;});try{let n=await this.clone();return n.sqlConnection=await n.getConnection(),this.globalTransaction=new zt(n,e?.isolationLevel),await this.globalTransaction.transaction(),this.globalTransaction}finally{r(),this.globalTransactionLock=null;}}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new q("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");try{await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async rollbackGlobalTransaction(e){if(!this.globalTransaction){g.warn("SqlDataSource::rollbackGlobalTransaction - GLOBAL_TRANSACTION_NOT_STARTED");return}try{await this.globalTransaction.rollback({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async transaction(e,r){let n=typeof e=="function"?r:e;if(this.globalTransaction?.isActive)return typeof e=="function"?this.globalTransaction.nestedTransaction(e):this.globalTransaction.nestedTransaction();let o=this.clsEnabled?Ue.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 zt(s,n?.isolationLevel);if(await a.transaction(),typeof e=="function")try{let l=this.clsEnabled?await Ue.run(a,()=>e(a)):await e(a);return await a.commit({throwErrorOnInactiveTransaction:!1}),l}catch(l){throw await a.rollback({throwErrorOnInactiveTransaction:false}),l}return a}getModelManager(e){if(!this.isConnected&&!this.lazyLoad)throw new q("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");let r=this.getTransactionBoundSqlDataSource()??this;return new tt(e,r)}getPool(){if(!this.sqlPool)throw this.lazyLoad?new q("SqlDataSource::getPool - call ensureConnected() or connect() first when using lazyLoad","CONNECTION_NOT_ESTABLISHED"):new q("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(){if(this.sqlConnection)return this.sqlConnection;await this.ensureConnected();let e=this.driverAdapter;if(!e)throw new q("SqlDataSource::getConnection","CONNECTION_NOT_ESTABLISHED");return e.reserveConnection()}async disconnect(){if(!this.isConnected){g.warn("Connection already closed or not established");return}if(!this.ownsPool){if(this.sqlConnection)try{this.driverAdapter?.releaseConnection(this.sqlConnection);}catch(e){g.warn(`SqlDataSource::disconnect - releasing borrowed connection failed: ${e?.message??e}`);}this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{g.warn("SqlDataSource::disconnect - Error while rolling back global transaction");}await this.cacheAdapter?.disconnect?.(),this.slaves.length&&await Promise.all(this.slaves.map(async e=>{try{await e.disconnect();}catch(r){g.warn(`SqlDataSource::disconnect - Error while closing slave connection: ${r.message}`);}})),g.warn("Closing connection"),await this.driverAdapter?.closePool(),this.sqlPool=null,this.driverAdapter=null,this.sqlConnection=null;}getConnectionDetails(){return {type:this.getDbType(),host:this.host,port:this.port,username:this.username,password:this.password,database:this.database,connectionPolicies:this.inputDetails.connectionPolicies,queryFormatOptions:this.inputDetails.queryFormatOptions,jsEnvironment:this.inputDetails.jsEnvironment,driver:this.inputDetails.driver}}async introspectSchema(){let e=this.getDbType(),r;e==="postgres"||e==="cockroachdb"?r=`
|
|
256
256
|
SELECT table_schema AS schema_name, table_name
|
|
257
257
|
FROM information_schema.tables
|
|
258
258
|
WHERE table_type = 'BASE TABLE'
|
|
@@ -278,7 +278,7 @@ ORDER BY ordinal_position`,bindings:[]}}},Tm=new ta;var ra=class{toSql(t){let e=
|
|
|
278
278
|
WHERE table_type = 'BASE TABLE'
|
|
279
279
|
AND table_schema NOT IN ('information_schema', 'pg_catalog', 'mysql', 'sys', 'performance_schema')
|
|
280
280
|
ORDER BY table_schema, table_name;
|
|
281
|
-
`;try{let n=await this.rawQuery(r),o=this.extractRowsFromRawResult(n),i={dialect:e,tables:[]},a={};for(let l of o){let u=String(l.schema_name||l.SCHEMA_NAME||"public"),d=String(l.table_name||l.TABLE_NAME||l.name||""),m=`${u}.${d}`;!a[m]&&d&&(a[m]={name:d,columns:[]},i.tables.push(a[m]));}return [i]}catch(n){return g.warn(`Failed to introspect schema: ${n.message}`),[]}}async syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){g.warn("Syncing schema with SQLite is not supported, skipping...");return}let n=(await Ge.makeDiff(this)).getSqlStatements();if(!n.length){g.info("No new changes detected between database schema and models metadata");return}if(g.info(`Generated ${n.length} SQL statements to sync schema`),!e?.transactional){for(let o of n)await this.rawQuery(o);g.info(`Synced schema with ${n.length} SQL statements`);return}await this.transaction(async o=>{for(let i of n)await o.sql.rawQuery(i);}),g.info(`Synced schema with ${n.length} SQL statements`);}extractRowsFromRawResult(e){let r=this.getDbType();if(r==="mysql"||r==="mariadb"){if(Array.isArray(e)&&e.length>=1){let n=e[0];if(Array.isArray(n))return n;if(typeof n=="object"&&n!==null&&("insertId"in n||"affectedRows"in n))return []}return e}return r==="postgres"||r==="cockroachdb"?e&&typeof e=="object"&&"rows"in e?e.rows||[]:e:Array.isArray(e)?e:[]}async rawQuery(e,r=[],n){if(await this.ensureConnected(),(n?.replicationMode||"master")==="slave")return this.executeOnSlave(async a=>J(e,r,a,this.getDbType(),"raw"));let i=this.getTransactionBoundSqlDataSource()??this;return J(e,r,i,this.getDbType(),"raw")}rawStatement(e){return new A(e)}async getTableSchema(e){let[r,n,o,i,a]=await Promise.all([this.getTableInfo(e),this.getIndexInfo(e),this.getForeignKeyInfo(e),this.getPrimaryKeyInfo(e),this.getCheckConstraintInfo(e)]);return {columns:r,indexes:n,foreignKeys:o,primaryKey:i,checkConstraints:a}}getModelOpenApiSchema(){return uu(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new q("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await Kn(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new q("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await lu(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}loadZodEngine(e){return this.zodEngine=e,_e.zodEngine=e,this}isAdminJsEnabled(){return !!this.adminJsOptions?.enabled}async getTableInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new gr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(rt(this.getDbType(),l))return [];throw l}let i=this.getDbType();if(i==="sqlite")return o.map(l=>{let u=String(l.type||"").toLowerCase(),d=Le(i,u),m=new Set(["text","varchar","char"]);return {name:l.name,dataType:d,isNullable:l.notnull===0,defaultValue:l.dflt_value??null,withTimezone:null,stringMode:m.has(d)}});let a=o.map(l=>{let u=String(l.column_name||l.COLUMN_NAME||l.name||""),d=String(l.data_type||l.DATA_TYPE||l.type||"").toLowerCase(),m=Le(i,d),c=l.is_nullable!==void 0?l.is_nullable:l.IS_NULLABLE!==void 0?l.IS_NULLABLE:void 0,p=typeof c=="string"?c.toLowerCase()!=="no":typeof c=="boolean"?c:l.notnull!==void 0?l.notnull===0:true,h=l.column_default??l.COLUMN_DEFAULT??l.defaultValue??l.dflt_value??null,f=i==="mariadb"&&h==="NULL"?null:h,T=l.char_length!=null?Number(l.char_length):null,N=l.numeric_precision!=null?Number(l.numeric_precision):null,w=l.numeric_scale!=null?Number(l.numeric_scale):null,R=l.timezone!=null?!!l.timezone:/with time zone/.test(String(l.column_type||l.udt_name||d||"").toLowerCase()),_=null,E=String(l.column_type||l.COLUMN_TYPE||""),O=E.match(/^enum\((.+)\)$/i);O&&(_=O[1].split(",").map(ve=>ve.trim().replace(/^'|'$/g,"")));let D=E.toLowerCase(),Q=D.includes(" unsigned"),V=D.includes(" zerofill"),Y=new Set(["text","tinytext","mediumtext","longtext","varchar","char","nvarchar","nchar","ntext","character varying","character"]).has(m);return {name:u,dataType:m,isNullable:p,defaultValue:f,length:T,precision:N,scale:w,withTimezone:R,enumValues:_,unsigned:Q,zerofill:V,stringMode:Y}});if(i==="postgres"||i==="mssql"){let l=[];try{l=await this.getCheckConstraintInfo(e);}catch{}if(l.length>0)for(let u of a){let d=u.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),m=l.find(c=>{let p=c.expression,h=new RegExp(`[\\["\\[]?${d}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),f=new RegExp(`[\\("\\[]?${d}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return h.test(p)||f.test(p)});if(m){let c=m.expression,p=c.match(/IN\s*\(([^)]+)\)/i);if(p)u.enumValues=p[1].split(",").map(h=>h.trim().replace(/^'|'$/g,""));else {let h=c.match(/ARRAY\[([^\]]+)\]/i);h&&(u.enumValues=h[1].split(",").map(f=>f.trim().replace(/::[a-z ]+$/i,"").replace(/^'|'$/g,"")));}}}}return a}async hasTable(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new br(e)]).sql,o=this.getDbType(),i=[];try{let a=await this.rawQuery(n);i=this.extractRowsFromRawResult(a);}catch{return false}return o==="postgres"||o==="cockroachdb"?i.length>0&&i[0].exists===true:o==="mysql"||o==="mariadb"||o==="mssql"?i.length>0&&parseInt(i[0].count)>0:o==="sqlite"?i.length>0:false}async hasColumn(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Tr(e,r)]).sql,i=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return i==="postgres"||i==="cockroachdb"?a.length>0&&a[0].exists===true:i==="mysql"||i==="mariadb"||i==="mssql"?a.length>0&&parseInt(a[0].count)>0:i==="sqlite"?a.some(l=>l.name===r):false}async hasColumns(e,...r){if(!r.length)return true;for(let n of r)if(!await this.hasColumn(e,n))return false;return true}async hasIndex(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new wr(e,r)]).sql,i=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return i==="postgres"||i==="cockroachdb"?a.length>0&&a[0].exists===true:i==="mysql"||i==="mariadb"||i==="mssql"?a.length>0&&parseInt(a[0].count)>0:i==="sqlite"?a.length>0:false}async hasPrimaryKey(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Sr(e)]).sql,o=this.getDbType(),i=[];try{let a=await this.rawQuery(n);i=this.extractRowsFromRawResult(a);}catch{return false}return o==="postgres"||o==="cockroachdb"?i.length>0&&i[0].exists===true:o==="mysql"||o==="mariadb"||o==="mssql"?i.length>0&&parseInt(i[0].count)>0:o==="sqlite"?i.some(a=>a.pk>0):false}async hasUnique(e,r){let n=Array.isArray(r)?r:[r];try{return (await this.getIndexInfo(e)).some(i=>{let a=i.unique??i.isUnique??i.Non_unique,l=a===!0||a==="true"||a==="1"||a===0,u=Array.isArray(i.columns)?i.columns:[i.column_name];return l&&u.length===n.length&&u.every((d,m)=>d===n[m])})}catch{return false}}async hasForeignKey(e,r){try{let o=(await this.getForeignKeyInfo(e)).flatMap(a=>a.columns||a.column||[a.from]);return r.every(a=>o.includes(a))&&o.length>=r.length}catch{return false}}async hasCheckConstraint(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Nr(e,r)]).sql,i=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return i==="postgres"||i==="cockroachdb"?a.length>0&&a[0].exists===true:i==="mysql"||i==="mariadb"||i==="mssql"?a.length>0&&parseInt(a[0].count)>0:i==="sqlite"&&a.length>0&&a[0].sql?a[0].sql.includes("CHECK")&&a[0].sql.includes(r):false}async getTables(){let r=new b({databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new qr]).sql,n=[];try{let i=await this.rawQuery(r);n=this.extractRowsFromRawResult(i);}catch{return []}let o=n[0]?.table_name||"name";return n.map(i=>i[o]||i.name)}async getColumnListing(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Cr(e)]).sql,o=[];try{let i=await this.rawQuery(n);o=this.extractRowsFromRawResult(i);}catch{return []}return o.map(i=>i.name??i.column_name)}async getIndexInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new yr(e)]).sql,o=this.getDbType(),i=[];try{let l=await this.rawQuery(n);i=this.extractRowsFromRawResult(l);}catch(l){if(rt(this.getDbType(),l))return [];throw l}if(o==="mysql"||o==="mariadb"){let l=new Map;for(let u of i){let d=u.Key_name,m=u.Non_unique===0,c=l.get(d)||{name:d,columns:[],isUnique:m};c.columns.push(u.Column_name),l.set(d,c);}return Array.from(l.values())}if(o==="postgres"||o==="cockroachdb"){let l=new Map;for(let u of i){let d=u.index_name,m=!!u.is_unique,c=l.get(d)||{name:d,columns:[],isUnique:m};c.columns.push(u.column_name),l.set(d,c);}return Array.from(l.values())}let a=[];for(let l of i){let u=l.name,d=!!l.unique,m=await this.rawQuery(`PRAGMA index_info(${u})`),p=this.extractRowsFromRawResult(m).map(h=>h.name);a.push({name:u,columns:p,isUnique:d});}return a}async getForeignKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new fr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(rt(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let u of o){let d=Number(u.id),m=l.get(d)||{name:void 0,columns:[],referencedTable:String(u.table),referencedColumns:[],onDelete:u.on_delete??null,onUpdate:u.on_update??null};m.columns.push(String(u.from)),m.referencedColumns.push(String(u.to)),l.set(d,m);}return Array.from(l.values())}let a=new Map;for(let l of o){let u=String(l.name||""),d=u||`${l.referenced_table}_${l.column_name}`,m=a.get(d)||{name:u||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};m.columns.push(String(l.column_name)),m.referencedColumns.push(String(l.referenced_column)),a.set(d,m);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new hr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(rt(this.getDbType(),l))return;throw l}if(!o.length)return;let i=o.map(l=>String(l.column_name));return {name:o[0].name||void 0,columns:i}}async getCheckConstraintInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new pr(e)]).sql,o=[];try{let a=await this.rawQuery(n);o=this.extractRowsFromRawResult(a);}catch(a){if(rt(this.getDbType(),a))return [];throw a}let i=a=>this.getDbType()==="mariadb"&&/^json_valid\(/i.test(a);return o.filter(a=>!i(String(a.expression))).map(a=>({name:String(a.name),expression:String(a.expression)}))}async acquireLock(e="hysteria_lock",r=3e4){let n=this.getDbType();try{switch(n){case "postgres":case "cockroachdb":{let o=this.hashStringToLockId(e),a=(await this.rawQuery("SELECT pg_try_advisory_lock($1) as pg_try_advisory_lock",[o])).rows?.[0]?.pg_try_advisory_lock;return a===!0||a==="t"}case "mysql":case "mariadb":{let o=Math.floor(r/1e3);return (await this.rawQuery("SELECT GET_LOCK(?, ?) as lock_result",[e,o]))[0]?.[0]?.lock_result===1}case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_getapplock @Resource = @p0, @LockMode = 'Exclusive', @LockOwner = 'Session', @LockTimeout = @p1; SELECT @result as lock_result",[e,r])).recordset?.[0]?.lock_result??-999)>=0;case "sqlite":return g.info("SQLite uses automatic file-based locking, advisory locks not needed"),!0;default:return g.warn(`Advisory locks not implemented for database type: ${n}`),!0}}catch(o){let i=o instanceof Error?o:new Error(String(o));return g.error(`Failed to acquire lock: ${i.message||JSON.stringify(o)} (dbType: ${n}, lockKey: ${e}). Full error: ${JSON.stringify(o)}`),false}}async ping(){let e=this.getDbType(),r=Date.now();try{await this.ensureConnected();let n;switch(e){case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "mssql":n="SELECT 1";break;case "sqlite":n="PRAGMA integrity_check";break;default:n="SELECT 1";}return await this.rawQuery(n),{ok:!0,latencyMs:Date.now()-r,dialect:e}}catch{return {ok:false,latencyMs:Date.now()-r,dialect:e}}}async isHealthy(){try{return (await this.ping()).ok}catch{return false}}async releaseLock(e="hysteria_lock"){let r=this.getDbType();try{switch(r){case "postgres":case "cockroachdb":{let n=this.hashStringToLockId(e),i=(await this.rawQuery("SELECT pg_advisory_unlock($1) as pg_advisory_unlock",[n])).rows?.[0]?.pg_advisory_unlock;return i===!0||i==="t"}case "mysql":case "mariadb":return (await this.rawQuery("SELECT RELEASE_LOCK(?) as release_result",[e]))[0]?.[0]?.release_result===1;case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_releaseapplock @Resource = @p0, @LockOwner = 'Session'; SELECT @result as release_result",[e])).recordset?.[0]?.release_result??-999)>=0;case "sqlite":return !0;default:return g.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(n){let o=n instanceof Error?n:new Error(String(n));return g.error(`Failed to release lock: ${o.message||JSON.stringify(n)} (dbType: ${r}, lockKey: ${e}). Full error: ${JSON.stringify(n)}`),false}}hashStringToLockId(e){let r=0;for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);r=(r<<5)-r+o,r=r&r;}return Math.abs(r)}async executeOnSlave(e){let r=this.getSlave();if(!r)return e(this);try{return await e(r)}catch(n){let o=n instanceof Error?n:new Error(String(n));if(this.onSlaveServerFailure)return await this.onSlaveServerFailure(o,{host:r.host,port:r.port,username:r.username,password:r.password,database:r.database,type:r.sqlType}),e(this);throw o}}};var Be=class{constructor(t){this.migrationTable="migrations";this.sql=t;}async upMigrations(t){for(let e of t){g.info(`Running migration ${e.migrationName}`),await e.up();let r=e.schema.queryStatements;for(let n of r)n&&await this.sql.rawQuery(n);await this.addMigrationToMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async downMigrations(t){t=t.reverse();for(let e of t){g.info(`Rolling back migration ${e.migrationName}`),await e.down();let r=e.schema.queryStatements;for(let n of r)n&&await this.sql.rawQuery(n);await this.deleteMigrationFromMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async addMigrationToMigrationTable(t){let r=new Date().toISOString().replace("T"," ").replace(/\.\d{3}Z$/,"");await this.sql.from(this.migrationTable).insert({name:t.migrationName,timestamp:r});}async deleteMigrationFromMigrationTable(t){await this.sql.from(this.migrationTable).where("name",t.migrationName).delete();}};async function zt(s,t,e,r,n){let o=s.getDbType(),i=n&&o!=="mssql",a=null;g.info("Rolling back migrations for database type: "+o);try{let l=await ar(o,s),u=await lr(o,e,r),d=l.map(p=>p.name),m=u.filter(p=>d.includes(p.migrationName));if(m.length===0){g.info("No pending migrations.");return}if(t){let p=m.findIndex(T=>T.migrationName===t);if(p===-1){g.error(`Rollback until migration not found: ${t}`);return}let h=m.slice(p);i&&(a=await s.transaction(),s=a.sql),await new Be(s).downMigrations(h),i&&await a?.commit(),g.info("Migrations rolled back successfully");return}i&&(a=await s.transaction(),s=a.sql),await new Be(s).downMigrations(m),i&&await a?.commit();}catch(l){throw i&&await a?.rollback(),l}g.info("Migrations rolled back successfully");}var Gt=class{static async generate(t,e){if(e==="code"||!Array.isArray(t)&&"up"in t){let{up:o,down:i}=t;return `import { Migration } from "hysteria-orm";
|
|
281
|
+
`;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 Ye.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=>J(e,r,a,this.getDbType(),"raw"));let s=this.getTransactionBoundSqlDataSource()??this;return J(e,r,s,this.getDbType(),"raw")}rawStatement(e){return new A(e)}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 cu(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new q("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await Ln(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new q("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await du(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}loadZodEngine(e){return this.zodEngine=e,xe.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 br(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(nt(this.getDbType(),l))return [];throw l}let s=this.getDbType();if(s==="sqlite")return o.map(l=>{let u=String(l.type||"").toLowerCase(),d=Fe(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=Fe(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,f=s==="mariadb"&&h==="NULL"?null:h,T=l.char_length!=null?Number(l.char_length):null,N=l.numeric_precision!=null?Number(l.numeric_precision):null,w=l.numeric_scale!=null?Number(l.numeric_scale):null,R=l.timezone!=null?!!l.timezone:/with time zone/.test(String(l.column_type||l.udt_name||d||"").toLowerCase()),M=null,k=String(l.column_type||l.COLUMN_TYPE||""),O=k.match(/^enum\((.+)\)$/i);O&&(M=O[1].split(",").map(ve=>ve.trim().replace(/^'|'$/g,"")));let D=k.toLowerCase(),K=D.includes(" unsigned"),V=D.includes(" zerofill"),Y=new Set(["text","tinytext","mediumtext","longtext","varchar","char","nvarchar","nchar","ntext","character varying","character"]).has(m);return {name:u,dataType:m,isNullable:p,defaultValue:f,length:T,precision:N,scale:w,withTimezone:R,enumValues:M,unsigned:K,zerofill:V,stringMode:Y}});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"),f=new RegExp(`[\\("\\[]?${d}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return h.test(p)||f.test(p)});if(m){let c=m.expression,p=c.match(/IN\s*\(([^)]+)\)/i);if(p)u.enumValues=p[1].split(",").map(h=>h.trim().replace(/^'|'$/g,""));else {let h=c.match(/ARRAY\[([^\]]+)\]/i);h&&(u.enumValues=h[1].split(",").map(f=>f.trim().replace(/::[a-z ]+$/i,"").replace(/^'|'$/g,"")));}}}}return a}async hasTable(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Tr(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 wr(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 Sr(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 Nr(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 qr(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 Cr]).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 Rr(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 hr(e)]).sql,o=this.getDbType(),s=[];try{let l=await this.rawQuery(n);s=this.extractRowsFromRawResult(l);}catch(l){if(nt(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 yr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(nt(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 gr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(nt(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 fr(e)]).sql,o=[];try{let a=await this.rawQuery(n);o=this.extractRowsFromRawResult(a);}catch(a){if(nt(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),a=(await this.rawQuery("SELECT pg_try_advisory_lock($1) as pg_try_advisory_lock",[o])).rows?.[0]?.pg_try_advisory_lock;return a===!0||a==="t"}case "mysql":case "mariadb":{let o=Math.floor(r/1e3);return (await this.rawQuery("SELECT GET_LOCK(?, ?) as lock_result",[e,o]))[0]?.[0]?.lock_result===1}case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_getapplock @Resource = @p0, @LockMode = 'Exclusive', @LockOwner = 'Session', @LockTimeout = @p1; SELECT @result as lock_result",[e,r])).recordset?.[0]?.lock_result??-999)>=0;case "sqlite":return g.info("SQLite uses automatic file-based locking, advisory locks not needed"),!0;default:return g.warn(`Advisory locks not implemented for database type: ${n}`),!0}}catch(o){let 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.hashStringToLockId(e),s=(await this.rawQuery("SELECT pg_advisory_unlock($1) as pg_advisory_unlock",[n])).rows?.[0]?.pg_advisory_unlock;return s===!0||s==="t"}case "mysql":case "mariadb":return (await this.rawQuery("SELECT RELEASE_LOCK(?) as release_result",[e]))[0]?.[0]?.release_result===1;case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_releaseapplock @Resource = @p0, @LockOwner = 'Session'; SELECT @result as release_result",[e])).recordset?.[0]?.release_result??-999)>=0;case "sqlite":return !0;default:return g.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(n){let o=n instanceof Error?n:new Error(String(n));return g.error(`Failed to release lock: ${o.message||JSON.stringify(n)} (dbType: ${r}, lockKey: ${e}). Full error: ${JSON.stringify(n)}`),false}}hashStringToLockId(e){let r=0;for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);r=(r<<5)-r+o,r=r&r;}return Math.abs(r)}async executeOnSlave(e){let r=this.getSlave();if(!r)return e(this);try{return await e(r)}catch(n){let o=n instanceof Error?n:new Error(String(n));if(this.onSlaveServerFailure)return await this.onSlaveServerFailure(o,{host:r.host,port:r.port,username:r.username,password:r.password,database:r.database,type:r.sqlType}),e(this);throw o}}};var Be=class{constructor(t){this.migrationTable="migrations";this.sql=t;}async upMigrations(t){for(let e of t){g.info(`Running migration ${e.migrationName}`),await e.up();let r=e.schema.queryStatements;for(let n of r)n&&await this.sql.rawQuery(n);await this.addMigrationToMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async downMigrations(t){t=t.reverse();for(let e of t){g.info(`Rolling back migration ${e.migrationName}`),await e.down();let r=e.schema.queryStatements;for(let n of r)n&&await this.sql.rawQuery(n);await this.deleteMigrationFromMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async addMigrationToMigrationTable(t){let r=new Date().toISOString().replace("T"," ").replace(/\.\d{3}Z$/,"");await this.sql.from(this.migrationTable).insert({name:t.migrationName,timestamp:r});}async deleteMigrationFromMigrationTable(t){await this.sql.from(this.migrationTable).where("name",t.migrationName).delete();}};async function Gt(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 lr(o,i),u=await ur(o,e,r),d=l.map(p=>p.name),m=u.filter(p=>d.includes(p.migrationName));if(m.length===0){g.info("No pending migrations.");return}if(t){let p=m.findIndex(T=>T.migrationName===t);if(p===-1){g.error(`Rollback until migration not found: ${t}`);return}let h=m.slice(p);s&&(a=await i.transaction(),i=a.sql),await new Be(i).downMigrations(h),s&&await a?.commit(),g.info("Migrations rolled back successfully");return}s&&(a=await i.transaction(),i=a.sql),await new Be(i).downMigrations(m),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}g.info("Migrations rolled back successfully");}var Yt=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";
|
|
282
282
|
|
|
283
283
|
export default class extends Migration {
|
|
284
284
|
async up() {
|
|
@@ -287,7 +287,7 @@ ${o.map(l=>` ${l}`).join(`
|
|
|
287
287
|
}
|
|
288
288
|
|
|
289
289
|
async down() {
|
|
290
|
-
${
|
|
290
|
+
${s.map(l=>` ${l}`).join(`
|
|
291
291
|
`)}
|
|
292
292
|
}
|
|
293
293
|
}`}return `import { Migration } from "hysteria-orm";
|
|
@@ -299,7 +299,7 @@ ${t.map(o=>` this.schema.rawQuery('${o.replace(/\\/g,"\\\\").replace(/'/g,"\\
|
|
|
299
299
|
}
|
|
300
300
|
|
|
301
301
|
async down() {}
|
|
302
|
-
}`}};var
|
|
302
|
+
}`}};var Rn=class{static initTemplate(t){let e=this.getDefaultPort(t),r=t==="sqlite"?"database.db":"database",n=t==="mongodb"?"mongo":t==="redis"?"redis":"SqlDataSource";return t==="mongodb"||t==="redis"?this.handleNoSqlConnection(t,n==="SqlDataSource"?"sql":n):`
|
|
303
303
|
import { ${n} } from "hysteria-orm";
|
|
304
304
|
|
|
305
305
|
const db = new ${n}({
|
|
@@ -341,7 +341,7 @@ export default db;`:""}static getNoSqlConnectionConfig(t){switch(t){case "mongod
|
|
|
341
341
|
password: "root",
|
|
342
342
|
username: "default",
|
|
343
343
|
db: 0,
|
|
344
|
-
}`;default:return ""}}static getDefaultPort(t){switch(t){case "mysql":return 3306;case "postgres":return 5432;case "mariadb":return 3306;case "cockroachdb":return 26257;case "mssql":return 1433;case "mongodb":return 27017;case "redis":return 6379;default:return 3306}}};async function
|
|
344
|
+
}`;default:return ""}}static getDefaultPort(t){switch(t){case "mysql":return 3306;case "postgres":return 5432;case "mariadb":return 3306;case "cockroachdb":return 26257;case "mssql":return 1433;case "mongodb":return 27017;case "redis":return 6379;default:return 3306}}};async function _n(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=ct.dirname(e);oe.existsSync(o)||oe.mkdirSync(o,{recursive:true}),oe.writeFileSync(e,JSON.stringify(n,null,2)),g.info(`Query result saved to ${e}`);return}g.info(JSON.stringify(n,null,2)),await t.disconnect();}var Mn=class{static seederTemplate(){return `import { BaseSeeder } from "hysteria-orm";
|
|
345
345
|
|
|
346
346
|
export default class extends BaseSeeder {
|
|
347
347
|
/**
|
|
@@ -351,12 +351,12 @@ export default class extends BaseSeeder {
|
|
|
351
351
|
console.log('Seeder completed');
|
|
352
352
|
}
|
|
353
353
|
}
|
|
354
|
-
`}};var
|
|
355
|
-
`)}function
|
|
356
|
-
`)}var
|
|
357
|
-
Summary:`),g.info(` Tables processed: ${l.length}`),n?g.info(" Mode: Dry run (no files written)"):(g.info(` Output directory: ${e}`),g.info(` Files generated: ${u.length+1}`));}var
|
|
354
|
+
`}};var Bh=(i,t,e)=>{let r=e||"database/seeders",n=t?".js":".ts",s=`${Date.now()}_${i}${n}`;oe.existsSync(r)||(oe.mkdirSync(r,{recursive:true}),g.info(`Created seeders directory: ${r}`));let a=ct.join(r,s),l=Mn.seederTemplate();oe.writeFileSync(a,l),g.info(`Seeder created successfully: ${a}`);},Df=Bh;var Kh=async(i,t,e)=>{let r=[];for(let n of t){let o=ct.resolve(process.cwd(),n);oe.existsSync(o)||(g.error(`Path not found: ${o}`),process.exit(1));let s=oe.statSync(o);if(s.isDirectory()){let a=oe.readdirSync(o).filter(l=>l.endsWith(".ts")||l.endsWith(".js")).sort();for(let l of a)r.push({file:l,folder:o});}else if(s.isFile()){let a=ct.basename(o),l=ct.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=ct.resolve(o,n),a=await dt(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");},$f=Kh;function Q(i){return {_phantom:void 0,_apply:i}}function Pf(i){return Q((t,e)=>{_.date(i??{},false)(t,e);})}Pf.string=function(t){return Q((e,r)=>{_.date(t??{},true)(e,r);})};function vf(i){return Q((t,e)=>{_.datetime(i??{},false)(t,e);})}vf.string=function(t){return Q((e,r)=>{_.datetime(t??{},true)(e,r);})};function If(i){return Q((t,e)=>{_.timestamp(i??{},false)(t,e);})}If.string=function(t){return Q((e,r)=>{_.timestamp(t??{},true)(e,r);})};function Ef(i){return Q((t,e)=>{_.time(i??{},false)(t,e);})}Ef.string=function(t){return Q((e,r)=>{_.time(t??{},true)(e,r);})};se();var kf=Symbol("mongoProperties");function Kl(){return (i,t)=>{let e=z.getMetadata(kf,i)||[];e.push(t),z.defineMetadata(kf,e,i);}}var Zt=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}};Ul([Kl()],Zt.prototype,"id");se();Ct();se();function Lh(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 Fh=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 Kf(i,t){let e=Lh(i);switch(t){case "pascal":return Jn(e);case "camel":return pr(e);case "snake":return mr(e);default:return e}}function Qf(i){return Fh.has(i)?{name:`${i}_`,wasSanitized:true}:{name:i,wasSanitized:false}}function Lf(i,t){switch(t){case "snake":return `${mr(i)}.ts`;case "camel":return `${i}.ts`;default:return `${i}.ts`}}function Ff(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 Ve(i){return JSON.stringify(i)}function jf(i){return i==null?"null":typeof i=="string"?Ve(i):typeof i=="boolean"?i?"true":"false":typeof i=="number"?String(i):Array.isArray(i)?`[${i.map(jf).join(", ")}]`:String(i)}function Wf(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(${Ve(i)}, {`),n.push(" columns: {");for(let u of t.columns){let m=Qf(u.name).name,c=o.has(u.name),{method:p,options:h}=Ff(e,u),f=[];for(let[R,M]of Object.entries(h))M!=null&&f.push(`${R}: ${jf(M)}`);let T=f.length>0?`{ ${f.join(", ")} }`:"",N=T?`col.${p}(${T})`:`col.${p}()`,w=s.get(u.name);if(w){let R=w.referencedColumns.join(", "),M=`/** @fk references ${w.referencedTable}(${R})`;w.onDelete&&(M+=` \u2014 onDelete: ${w.onDelete}`),w.onUpdate&&(M+=` \u2014 onUpdate: ${w.onUpdate}`),M+=" */",n.push(` ${M}`);}c&&(n.push(" // Primary key column"),(p==="integer"||p==="bigInteger")&&n.push(" // TODO: may be auto-increment, verify manually")),n.push(` ${m}: ${N},`);}n.push(" },");let a=t.indexes.filter(u=>!u.isUnique);if(a.length>0){n.push(" indexes: [");for(let u of a)u.name?n.push(` { columns: [${u.columns.map(Ve).join(", ")}], name: ${Ve(u.name)} },`):n.push(` [${u.columns.map(Ve).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(Ve).join(", ")}], name: ${Ve(u.name)} },`):n.push(` [${u.columns.map(Ve).join(", ")}],`);n.push(" ],");}return n.push("});"),n.push(""),n.push(`export type ${i}Type = InstanceType<typeof ${i}>;`),n.push(""),n.join(`
|
|
355
|
+
`)}function Uf(i){let t=[];for(let e of i)t.push(`export * from "./${e}";`);return t.push(""),t.join(`
|
|
356
|
+
`)}var jh=["pg_","information_schema","mysql","sys","performance_schema","sqlite_"];function Wh(i){let t=i.toLowerCase();return jh.some(e=>t.startsWith(e))}async function Ql(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)Wh(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=Kf(d,r),p=Lf(c,r),h=Wf(d,m,o,{naming:r});l.push(c),n?(g.info(`[DRY RUN] Would generate: ${p}`),g.info("---"),g.info(h),g.info("---")):u.push({fileName:p,content:h});}catch(m){g.error(`Failed to process table ${d}: ${m}`);}}if(!n){oe.existsSync(e)||(oe.mkdirSync(e,{recursive:true}),g.info(`Created output directory: ${e}`));for(let{fileName:d,content:m}of u){let c=ct.join(e,d);oe.writeFileSync(c,m,"utf-8"),g.info(`Generated: ${c}`);}if(l.length>0){let d=Uf(l),m=ct.join(e,"index.ts");oe.writeFileSync(m,d,"utf-8"),g.info(`Generated: ${m}`);}}g.info(`
|
|
357
|
+
Summary:`),g.info(` Tables processed: ${l.length}`),n?g.info(" Mode: Dry run (no files written)"):(g.info(` Output directory: ${e}`),g.info(` Files generated: ${u.length+1}`));}var Jf={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 zf=()=>oe.existsSync(ct.join(process.cwd(),"yarn.lock"))?["yarn","add"]:oe.existsSync(ct.join(process.cwd(),"pnpm-lock.yaml"))?["pnpm","add"]:oe.existsSync(ct.join(process.cwd(),"package-lock.json"))?["npm","install"]:oe.existsSync(ct.join(process.cwd(),"bun.lockb"))?["bun","add"]:oe.existsSync(ct.join(process.cwd(),"deno.lock"))?["deno","add"]:["npm","install"],Hf=async(i,t,e,r)=>{let n=Jh.createInterface({input:process.stdin,output:process.stdout}),o=e.join(", "),s=`Do you want to install the following dependencies using ${t}?
|
|
358
358
|
${o}
|
|
359
|
-
(y/n): `;return new Promise(a=>{n.question(i,l=>{if(n.close(),l.toLowerCase()==="y"||l.toLowerCase()==="yes"){execSync(s,r),a(true);return}a(false);});})},de=Kf.devDependencies,Wf=async(s,t,e)=>{let r=On.includes(e)?[`typescript@${de.typescript}`,`esbuild@${de.esbuild}`]:[],n="";switch(e){case "mariadb":case "mysql":n=`mysql2@${de.mysql2}`;break;case "cockroachdb":case "postgres":n=`pg@${de.pg}`,r.push(`@types/pg@${de["@types/pg"]}`);break;case "sqlite":n=`sqlite3@${de.sqlite3}`,r.push(`@types/sqlite3@${de["@types/sqlite3"]}`);break;case "mongo":n=`mongodb@${de.mongodb}`,r.push(`@types/mongodb@${de["@types/mongodb"]}`);break;case "redis":n=`ioredis@${de.ioredis}`,r.push(`@types/ioredis@${de["@types/ioredis"]}`);break;case "mssql":n=`mssql@${de.mssql}`,r.push(`@types/mssql@${de["@types/mssql"]}`);break;default:throw new Error(`Invalid database type: ${e}`)}if(n){let i=await Lf(`${s} ${t} ${n}`,s,[n],{stdio:"inherit"});i&&g.info("Driver dependency installed successfully"),i||g.info("Driver dependency installation skipped");}let o=s==="deno"?"--dev":"-D";if(r.length){let i=await Lf(`${s} ${t} ${r.join(" ")} ${o}`,s,r,{stdio:"inherit"});i&&g.info("Dev dependencies installed successfully"),i||g.info("Dev dependencies installation skipped");}};var On=["sqlite","mysql","postgres","mariadb","cockroachdb","mssql"],An=On.concat("mongodb","redis");async function Ve(s,t){let{default:e}=await ut(dt.resolve(process.cwd(),s));return e||(g.error(`The provided datasource file does not export a default export: ${s}`),process.exit(1)),Pe.isSqlDataSource(e)||(g.error(`The provided datasource file does not export a valid SqlDataSource instance: ${s}`),process.exit(1)),e.isConnected||await e.connect(),e}function Ql(s,t,e,r){let n=typeof e=="boolean"?s??e:s??e?.enabled??true,o=typeof e=="object"?e?.timeout:r,i=t?parseInt(t,10):o??3e4,a=typeof e=="object"&&e.customValue!==void 0?typeof e.customValue=="function"?e.customValue():e.customValue:"hysteria_migration_lock";return {enabled:n,timeout:i,key:a}}var he=new Command;he.command("init",{isDefault:false}).option("-t, --type [type]",`Type of the database to connect to, available types: ${An.join(", ")}`,void 0).description("Initialize the hysteria-orm with standard configuration, it will create a database if not exists and a migrations folder inside it if not exists, it will also create a index.ts file in the database folder").action(async s=>{let t=An.join(", ");s.type||(g.error(`Database type is required (-t|--type), available types: ${t}`),process.exit(1)),An.includes(s.type)||(g.error(`Invalid database type: ${s.type}, available types: ${An.join(", ")}`),process.exit(1)),g.info("Initializing hysteria-orm with standard configuration"),g.info(`Database type: ${s.type||"not specified (will use env DB_TYPE)"}`);let[e,r]=jf();g.info(`Package manager: ${e}`),g.info("Installing base dependencies"),await Wf(e,r,s.type);let n=Cn.initTemplate(s.type);oe.existsSync("database")?g.info("database folder already exists, skipping"):oe.mkdirSync("database",{recursive:true}),oe.existsSync("database/index.ts")?g.info("database/index.ts file already exists, skipping"):oe.writeFileSync("database/index.ts",n),On.includes(s.type)&&!oe.existsSync("database/migrations")?oe.mkdirSync("database/migrations",{recursive:true}):g.info("database/migrations folder already exists or is not a sql database, skipping"),g.info("Initialization completed successfully");});he.command("sql [sql]").alias("run:sql").option("-f, --file [path]","Path to the sql file",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-o, --out [query]","File path to save the query result",void 0).option("-t, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).description("Run a sql file or a sql query directly from the command line for the given connection defined in the env file").action(async(s,t)=>{g.info("Starting SQL execution"),t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=t?.file;!s&&!e&&(g.error("SQL query or file path is required"),process.exit(1)),s&&e&&(g.error("Cannot provide both sql query and file path"),process.exit(1));let r=await Ve(t.datasource,t?.tsconfigPath);if(s){g.info("Executing SQL query directly from command line");try{await Rn(s,r,t?.out),g.info("SQL execution completed successfully"),process.exit(0);}catch(o){g.error(`SQL execution failed: ${o}`),process.exit(1);}}e||(g.error("No SQL statement or file provided"),process.exit(1)),g.info(`Reading SQL from file: ${e}`),e=dt.resolve(process.cwd(),e),oe.existsSync(e)||(g.error(`File not found: ${e}`),process.exit(1));let n=oe.readFileSync(e,"utf-8");g.info(`SQL file loaded successfully (${n.length} characters)`);try{await Rn(n,r,t?.out),g.info("SQL file execution completed successfully"),process.exit(0);}catch(o){g.error(`SQL file execution failed: ${o}`),process.exit(1);}});he.command("create:migration <name>").description("Create a new migration file, standard folder is migrations from the current directory you are now, you can change it in the env MIGRATION_PATH").option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-a, --alter","Generate a template for an alter table migration",false).option("-c, --create","Generate a template for a create table migration",false).option("-t, --table <table>","Specifies the target table name for the migration",false).action((s,t)=>{g.info(`Creating migration: ${s}`),g.info(`Migration options: javascript=${t.javascript}, alter=${t.alter}, create=${t.create}, table=${t.table||"not specified"}`),s||(g.error("Migration name is required"),process.exit(1)),t.alter&&t.create&&(g.error("Cannot use --alter and --create at the same time"),process.exit(1)),t.table&&!(t.create||t.alter)&&(g.error("Cannot use --table without --create or --alter"),process.exit(1));let e=t.alter?"alter":t.create?"create":"basic";g.info(`Migration mode: ${e}`),nu(s,t.javascript,e,t.table||s);});he.command("migrate [runUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, only applies to postgres",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Run pending migrations, if runUntil is provided, it will run all migrations until the provided migration name").action(async(s,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ve(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,n=t?.tsconfigPath||e.migrationConfig.tsconfig,o=t?.transactional??e.migrationConfig.transactional,i=Ql(t?.lock,t?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(i.enabled){if(g.info("Acquiring migration lock"),a=await e.acquireLock(typeof i.key=="string"?i.key:String(i.key),i.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await At(e,s,r,n,o);}catch(l){throw console.error(l),l}finally{i.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof i.key=="string"?i.key:String(i.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});he.command("rollback [rollbackUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Rollbacks every migration that has been run, if rollbackUntil is provided, it will rollback all migrations until the provided migration name").action(async(s,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ve(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,n=t?.tsconfigPath||e.migrationConfig.tsconfig,o=t?.transactional??e.migrationConfig.transactional,i=Ql(t?.lock,t?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(i.enabled){if(g.info("Acquiring migration lock"),a=await e.acquireLock(typeof i.key=="string"?i.key:String(i.key),i.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await zt(e,s,r,n,o);}catch(l){throw console.error(l),l}finally{i.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof i.key=="string"?i.key:String(i.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});he.command("refresh").option("-f, --force","Drop all tables in the database before running the migrations instead of running the down migrations",false).option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).option("-m, --migration-path [path]","Path to the migrations",void 0).description("Rollbacks every migration that has been run and then run the migrations").action(async s=>{let t=s?.force||false;s?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ve(s.datasource,s?.tsconfigPath),r=s?.migrationPath||e.migrationConfig.path,n=s?.tsconfigPath||e.migrationConfig.tsconfig,o=s?.transactional??e.migrationConfig.transactional,i=Ql(s?.lock,s?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(i.enabled){if(g.info("Acquiring migration lock for refresh operation"),a=await e.acquireLock(typeof i.key=="string"?i.key:String(i.key),i.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}t?await vn(e,!1,o):await zt(e,void 0,r,n,o),await At(e,void 0,r,n,o);}catch(l){console.error(l);}finally{i.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof i.key=="string"?i.key:String(i.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});he.command("generate:migrations").description("Generate a migration file based on the database schema and the models metadata, supported only for postgres, mysql, mariadb and cockroachdb").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-f, --dry","Does not create a migration file but only outputs sql statements",false).option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-m, --migration-path [path]","Path to the migrations",void 0).option("-n, --name [name]","Name of the migration",void 0).option("-o, --output [mode]","Output mode: 'code' generates schema builder calls, 'raw' generates raw SQL (default: code)","code").action(async s=>{s?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1)),s?.name||(s.name="auto_generated_migration"),s.name=`${Date.now()}_${s.name}`;let t=await Ve(s.datasource,s?.tsconfigPath),e=s?.migrationPath||t.migrationConfig.path;["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(g.error(`generate:migrations is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),process.exit(1));try{let n=await Ge.makeDiff(t);if((s.output==="raw"?"raw":"code")==="code"){let i=n.getCodeStatements();if(i.up.length||(g.info("No new changes detected between database schema and models metadata"),process.exit(0)),s.dry){console.log("// up()");for(let u of i.up)console.log(u);console.log(`
|
|
360
|
-
// down()`);for(let u of
|
|
361
|
-
export{
|
|
359
|
+
(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);});})},ce=Jf.devDependencies,Gf=async(i,t,e)=>{let r=An.includes(e)?[`typescript@${ce.typescript}`,`esbuild@${ce.esbuild}`]:[],n="";switch(e){case "mariadb":case "mysql":n=`mysql2@${ce.mysql2}`;break;case "cockroachdb":case "postgres":n=`pg@${ce.pg}`,r.push(`@types/pg@${ce["@types/pg"]}`);break;case "sqlite":n=`sqlite3@${ce.sqlite3}`,r.push(`@types/sqlite3@${ce["@types/sqlite3"]}`);break;case "mongo":n=`mongodb@${ce.mongodb}`,r.push(`@types/mongodb@${ce["@types/mongodb"]}`);break;case "redis":n=`ioredis@${ce.ioredis}`,r.push(`@types/ioredis@${ce["@types/ioredis"]}`);break;case "mssql":n=`mssql@${ce.mssql}`,r.push(`@types/mssql@${ce["@types/mssql"]}`);break;default:throw new Error(`Invalid database type: ${e}`)}if(n){let s=await Hf(`${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 Hf(`${i} ${t} ${r.join(" ")} ${o}`,i,r,{stdio:"inherit"});s&&g.info("Dev dependencies installed successfully"),s||g.info("Dev dependencies installation skipped");}};var An=["sqlite","mysql","postgres","mariadb","cockroachdb","mssql"],Dn=An.concat("mongodb","redis");async function Je(i,t){let{default:e}=await dt(ct.resolve(process.cwd(),i));return e||(g.error(`The provided datasource file does not export a default export: ${i}`),process.exit(1)),Pe.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 Ll(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 ge=new Command;ge.command("init",{isDefault:false}).option("-t, --type [type]",`Type of the database to connect to, available types: ${Dn.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=Dn.join(", ");i.type||(g.error(`Database type is required (-t|--type), available types: ${t}`),process.exit(1)),Dn.includes(i.type)||(g.error(`Invalid database type: ${i.type}, available types: ${Dn.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]=zf();g.info(`Package manager: ${e}`),g.info("Installing base dependencies"),await Gf(e,r,i.type);let n=Rn.initTemplate(i.type);oe.existsSync("database")?g.info("database folder already exists, skipping"):oe.mkdirSync("database",{recursive:true}),oe.existsSync("database/index.ts")?g.info("database/index.ts file already exists, skipping"):oe.writeFileSync("database/index.ts",n),An.includes(i.type)&&!oe.existsSync("database/migrations")?oe.mkdirSync("database/migrations",{recursive:true}):g.info("database/migrations folder already exists or is not a sql database, skipping"),g.info("Initialization completed successfully");});ge.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 Je(t.datasource,t?.tsconfigPath);if(i){g.info("Executing SQL query directly from command line");try{await _n(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=ct.resolve(process.cwd(),e),oe.existsSync(e)||(g.error(`File not found: ${e}`),process.exit(1));let n=oe.readFileSync(e,"utf-8");g.info(`SQL file loaded successfully (${n.length} characters)`);try{await _n(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);}});ge.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}`),su(i,t.javascript,e,t.table||i);});ge.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 Je(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,n=t?.tsconfigPath||e.migrationConfig.tsconfig,o=t?.transactional??e.migrationConfig.transactional,s=Ll(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 Dt(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();}});ge.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 Je(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,n=t?.tsconfigPath||e.migrationConfig.tsconfig,o=t?.transactional??e.migrationConfig.transactional,s=Ll(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 Gt(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();}});ge.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 Je(i.datasource,i?.tsconfigPath),r=i?.migrationPath||e.migrationConfig.path,n=i?.tsconfigPath||e.migrationConfig.tsconfig,o=i?.transactional??e.migrationConfig.transactional,s=Ll(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 In(e,!1,o):await Gt(e,void 0,r,n,o),await Dt(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();}});ge.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 Je(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 Ye.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(`
|
|
360
|
+
// down()`);for(let u of s.down)console.log(u);process.exit(0);}oe.existsSync(e)||oe.mkdirSync(e,{recursive:!0});let a=await Yt.generate(s,"code"),l=i?.javascript?".js":".ts";oe.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);}oe.existsSync(e)||oe.mkdirSync(e,{recursive:!0});let a=await Yt.generate(s,"raw"),l=i?.javascript?".js":".ts";oe.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);}});ge.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 Je(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 Ye.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);}});ge.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)),Df(i,t.javascript,t.seederPath);});ge.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 Je(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 $f(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);}});ge.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 Je(i.datasource,i?.tsconfig);try{await Ql(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);}});ge.parse(process.argv);
|
|
361
|
+
export{An as sqlDatabaseTypes};//# sourceMappingURL=cli.js.map
|
|
362
362
|
//# sourceMappingURL=cli.js.map
|