hysteria-orm 12.2.1 → 12.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cli.js +36 -36
- package/lib/cli.js.map +1 -1
- package/lib/index.cjs +26 -26
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +160 -21
- package/lib/index.d.ts +160 -21
- package/lib/index.js +26 -26
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
package/lib/cli.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {PassThrough,Readable}from'stream';import {Command}from'commander';import ae,{promises}from'fs';import yt from'path';import qu from'fs/promises';import {format}from'sql-formatter';import {highlight}from'sql-highlight';import {createRequire}from'module';import {pathToFileURL}from'url';import Pe,{privateDecrypt,publicEncrypt}from'crypto';import {AsyncLocalStorage}from'async_hooks';import {execSync}from'child_process';import Ig from'readline';var du=Object.defineProperty;var cu=i=>{throw TypeError(i)};var ve=(i,t)=>()=>(i&&(t=i(i=0)),t);var mu=(i,t)=>{for(var e in t)du(i,e,{get:t[e],enumerable:true});};var pu=(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&&du(t,e,n),n};var Ey=(i,t,e)=>t.has(i)||cu("Cannot "+e);var fu=(i,t,e)=>t.has(i)?cu("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);var yu=(i,t,e)=>(Ey(i,t,"access private method"),e);var L,ue=ve(()=>{L=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};});var Xf,ge,dg,ey,Dt=ve(()=>{ue();Xf=[],ge=i=>{Xf.push(i);},dg=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})},ey=async(i,t,e,r)=>{if(e&&typeof e!="string")return dg(i,e,t,r);let n=Xf.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 At,hg,ry,Xt=ve(()=>{At=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},hg=i=>{if(i.writableNeedDrain)return new Promise(t=>i.once("drain",()=>t()))},ry=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 hg(r);r.end();}catch(n){r.destroy(n);}return r};});var ny,_n,oy=ve(()=>{Xt();ny=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},_n=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 ny(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 ny(l)}let a=Array.isArray(s)?s:[];return At(a,r,n)}};});var Mn,sy=ve(()=>{Xt();Mn=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 ry(o.query(t).iterate(...e),r,n)}};});var iy={};mu(iy,{registerBunDrivers:()=>gg});var gg,ay=ve(()=>{Dt();oy();sy();gg=async()=>{let{SQL:i}=await import('bun'),{Database:t}=await import('bun:sqlite');ge({name:"bun-sql",dialects:["postgres","cockroachdb","mysql","mariadb"],environments:["bun"],create:async({dialect:e,input:r})=>new _n(e,r,i)}),ge({name:"bun-sqlite",dialects:["sqlite"],environments:["bun"],create:async({dialect:e,input:r})=>new Mn(e,r,t)});};});var bg,xn,Yl,Zl=ve(()=>{Xt();bg=async i=>(await(await import('@sqlite.org/sqlite-wasm')).default(i)).oo1,xn=class{constructor(t,e,r=bg,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 Yl(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 At(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}},Yl=i=>["begin","begin transaction","commit","rollback"].includes(i.trim().toLowerCase());});var Xl,On,ly=ve(()=>{Xt();Zl();Xl=i=>Array.isArray(i)?i:i?._array??[],On=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(Yl(t))return a(t);if(s==="fetch"){let u=await n.execute(t,e);return Xl(u.rows)}if(!o?.typeofModel)return a(t);if(s==="insertOne"||s==="insertMany"){let u=await n.execute(`${t} returning *`,e);return Xl(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 At(Xl(s.rows),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-rn: pool not created, await createPool() before querying");return this.db}};});var eu={};mu(eu,{registerReactNativeDrivers:()=>wg,registerWebDrivers:()=>Tg});var uy,dy,Tg,cy,wg,tu=ve(()=>{Dt();ly();Zl();uy=false,Tg=i=>{uy||(uy=true,dy=i,ge({name:"sqlite-wasm",dialects:["sqlite"],environments:["web"],create:({dialect:t,input:e})=>new xn(t,e,void 0,dy)}));},cy=false,wg=async()=>{if(cy)return;cy=true;let i=await import('@op-engineering/op-sqlite');ge({name:"sqlite-rn",dialects:["sqlite"],environments:["react-native"],create:({dialect:t,input:e})=>new On(t,e,i)});};});var vt=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"}},kn=i=>{if(i==null)return "NULL";if(i instanceof Date)return `'${i.toISOString()}'`;let t=typeof i;return t==="boolean"?i?"TRUE":"FALSE":t==="number"&&Number.isFinite(i)||t==="bigint"?String(i):t==="string"?`'${i.replace(/'/g,"''")}'`:Array.isArray(i)||t==="object"&&Object.keys(i).length>0?`'${JSON.stringify(i).replace(/'/g,"''")}'`:String(i)},it=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,kn(t[r]));for(let r=0;r<t.length;r++){let n=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(n,kn(t[r]));}for(let r=0;r<t.length;r++){let n=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(n,kn(t[r]));}return e},at=(i,t)=>t?i==="mysql"||i==="mariadb"?t.code==="ER_NO_SUCH_TABLE"||t.errno===1146:i==="postgres"||i==="cockroachdb"?t.code==="42P01":i==="sqlite"?/no such table/i.test(String(t.message||"")):i==="mssql"?t.number===208:false:false,lt=(i,t)=>{let e=i.getDbType(),r;try{r=format(t,{...i.inputDetails.queryFormatOptions,language:vt(e)});}catch{try{r=format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var gu={info:0,warn:1,error:2};function lr(i){return i?i===true?{level:"info",logQueries:true}:{level:i.level??"info",logQueries:i.logQueries??true,customLogger:i.customLogger}:null}function Ky(i,t="info"){let e=lr(i);if(!e)return false;let r=e.level??"info";return gu[t]>=gu[r]}function Qy(i){let t=lr(i);return t?t.logQueries??true:false}var ke={info:"32",warn:"33",error:"31",query:"35",dim:"2",cyan:"36"},Ly=typeof process<"u"&&!!process.stdout?.isTTY&&!process.env.NO_COLOR,ut=(i,t)=>Ly?`\x1B[${i}m${t}\x1B[0m`:t;function Su(){let i=new Date,t=r=>r.toString().padStart(2,"0"),e=i.getMilliseconds().toString().padStart(3,"0");return `${t(i.getHours())}:${t(i.getMinutes())}:${t(i.getSeconds())}.${e}`}function Kn(i,t){let e=ut(ke.dim,`[${Su()}]`),r=ut(ke[i],i.toUpperCase().padEnd(5));return `${e} ${r} ${t}`}var Wy=60,jy=10,bu=400;function ar(i,t=Wy){return i.length<=t?i:`${i.slice(0,t)}\u2026`}function Fy(i){if(i==null)return "null";if(typeof i=="string")return `'${ar(i)}'`;if(typeof i=="number"||typeof i=="bigint")return String(i);if(typeof i=="boolean")return i?"true":"false";if(i instanceof Date)return `'${ar(i.toISOString())}'`;if(typeof i=="object"){let t;try{t=JSON.stringify(i);}catch{t=String(i);}return `'${ar(t)}'`}return ar(String(i))}function Uy(i){if(!i||i.length===0)return "[]";let t=i.slice(0,jy).map(Fy),e=i.length-t.length;e>0&&t.push(`\u2026 (${e} more)`);let r=`[${t.join(", ")}]`;return r.length>bu&&(r=`${r.slice(0,bu)}\u2026`),r}var Tu=(i,t)=>{let e=" ".repeat(t);return i.split(`
|
|
2
|
+
import {PassThrough,Readable}from'stream';import {Command}from'commander';import ae,{promises}from'fs';import ft from'path';import Ru from'fs/promises';import {format}from'sql-formatter';import {highlight}from'sql-highlight';import {createRequire}from'module';import {pathToFileURL}from'url';import Pe,{privateDecrypt,publicEncrypt}from'crypto';import {AsyncLocalStorage}from'async_hooks';import {execSync}from'child_process';import Kg from'readline';var mu=Object.defineProperty;var pu=i=>{throw TypeError(i)};var Ie=(i,t)=>()=>(i&&(t=i(i=0)),t);var fu=(i,t)=>{for(var e in t)mu(i,e,{get:t[e],enumerable:true});};var yu=(i,t,e,r)=>{for(var n=void 0,o=i.length-1,s;o>=0;o--)(s=i[o])&&(n=(s(t,e,n))||n);return n&&mu(t,e,n),n};var ky=(i,t,e)=>t.has(i)||pu("Cannot "+e);var hu=(i,t,e)=>t.has(i)?pu("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);var gu=(i,t,e)=>(ky(i,t,"access private method"),e);var L,le=Ie(()=>{L=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};});var ty,ge,hg,ry,Ot=Ie(()=>{le();ty=[],ge=i=>{ty.push(i);},hg=async(i,t,e,r)=>{if(!Array.isArray(t?.dialects))throw new Error(`driver must be a registered driver name or a DriverAdapterFactory with a "dialects" array (got ${typeof t}).`);if(!t.dialects.includes(i))throw new Error(`driver "${t.name}" does not support dialect "${i}" (declares: ${t.dialects.join(", ")}).`);return t.create({dialect:i,jsEnvironment:e,input:r})},ry=async(i,t,e,r)=>{if(e&&typeof e!="string")return hg(i,e,t,r);let n=ty.filter(l=>l.dialects.includes(i)),o=(l,u)=>(l.environments??["node"]).includes(u),s=(l,u)=>(e?l.name===e:true)&&o(l,u),a=n.find(l=>s(l,t));if(a)return a.create({dialect:i,jsEnvironment:t,input:r});if(t==="bun"){let l=n.find(u=>s(u,"node"));if(l)return l.create({dialect:i,jsEnvironment:t,input:r})}throw new L(e??i)};});var Dt,Ng,oy,er=Ie(()=>{Dt=async(i,t={},e)=>{let r=new PassThrough({objectMode:t.objectMode??true,highWaterMark:t.highWaterMark});try{for(let n of i)e.onData?await e.onData(r,n):r.write(n);r.end();}catch(n){r.destroy(n);}return r},Ng=i=>{if(i.writableNeedDrain)return new Promise(t=>i.once("drain",()=>t()))},oy=async(i,t={},e)=>{let r=new PassThrough({objectMode:t.objectMode??true,highWaterMark:t.highWaterMark});try{for(let n of i)e.onData?await e.onData(r,n):r.write(n),await Ng(r);r.end();}catch(n){r.destroy(n);}return r};});var sy,Mn,iy=Ie(()=>{er();sy=i=>{if(!i||typeof i!="object")return i;let t=i,e=t.errno,r=typeof e=="string"&&/^[0-9A-Z]{5}$/.test(e),n=typeof t.code=="string"&&t.code.startsWith("ERR_");return !r||!n||(t.cause===void 0&&(t.cause=i),t.code=e),i},Mn=class{constructor(t,e,r){this.jsEnvironment="bun";this.dialect=t;let n={hostname:e.host,port:e.port,username:e.username,password:e.password,database:e.database,...e.driverOptions};(t==="mysql"||t==="mariadb")&&(n.adapter="mysql",n.allowPublicKeyRetrieval=true),this.sql=new r(n),this.pool=this.sql;}createPool(){}async closePool(){this.sql.close();}async reserveConnection(){return this.sql.reserve()}releaseConnection(t){t?.release();}async beginTransaction(t,e){(this.dialect==="mysql"||this.dialect==="mariadb")&&e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await e.rawQuery(this.dialect==="mysql"||this.dialect==="mariadb"?"START TRANSACTION":"BEGIN TRANSACTION"),(this.dialect==="postgres"||this.dialect==="cockroachdb")&&e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.sql,o;try{o=await n.unsafe(t,e);}catch(a){throw sy(a)}if(this.dialect==="mysql"||this.dialect==="mariadb"){let a=/^\s*(select|show|desc(ribe)?|explain)\b/i.test(t);if(Array.isArray(o)&&(a||o.length>0))return [o,void 0];let l=o;return [{affectedRows:Number(l.affectedRows),insertId:Number(l.lastInsertRowid)},void 0]}let s=o;return Array.isArray(o)&&!((s.command==="INSERT"||s.command==="UPDATE"||s.command==="DELETE")&&o.length===0)?{rows:o,rowCount:o.length}:{rows:[],rowCount:s.count??s.affectedRows??0}}extract(t,e){if(e==="raw")return t;if(this.dialect==="mysql"||this.dialect==="mariadb"){let n=t;return e==="affectedRows"?n[0]?.affectedRows??0:n[0]}let r=t;return e==="affectedRows"?r.rowCount:r.rows}async stream(t,e,r,n){let o=r.connection??this.sql,s;try{s=await o.unsafe(t,e);}catch(l){throw sy(l)}let a=Array.isArray(s)?s:[];return Dt(a,r,n)}};});var xn,ay=Ie(()=>{er();xn=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="bun";this.db=new r(String(e.database??":memory:"),e.driverOptions),this.pool=this.db;}createPool(){}async closePool(){this.db.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.db,o=r.sqlLiteOptions??{},s=o.mode||"fetch";return ["begin","begin transaction","commit","rollback"].includes(t.trim().toLowerCase())?n.query(t).run(...e).changes:s==="fetch"?n.query(t).all(...e):o?.typeofModel?s==="insertOne"||s==="insertMany"?n.query(`${t} returning *`).all(...e):n.query(t).run(...e).changes:n.query(t).run(...e).changes}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.db;return oy(o.query(t).iterate(...e),r,n)}};});var ly={};fu(ly,{registerBunDrivers:()=>qg});var qg,uy=Ie(()=>{Ot();iy();ay();qg=async()=>{let{SQL:i}=await import('bun'),{Database:t}=await import('bun:sqlite');ge({name:"bun-sql",dialects:["postgres","cockroachdb","mysql","mariadb"],environments:["bun"],create:async({dialect:e,input:r})=>new Mn(e,r,i)}),ge({name:"bun-sqlite",dialects:["sqlite"],environments:["bun"],create:async({dialect:e,input:r})=>new xn(e,r,t)});};});var Cg,On,Xl,eu=Ie(()=>{er();Cg=async i=>(await(await import('@sqlite.org/sqlite-wasm')).default(i)).oo1,On=class{constructor(t,e,r=Cg,n){this.dialect="sqlite";this.jsEnvironment="web";this.filename=String(e.database??":memory:"),this.loader=r,this.initConfig=n;}async createPool(){let t=await this.loader(this.initConfig),{filename:e}=this;this.db=e.startsWith(":memory:")||e===""?new t.DB(e):t.OpfsDb?new t.OpfsDb(e,"c"):new t.DB(e,"c"),this.pool=this.db;}async closePool(){this.db?.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.requireDb(),o=r.sqlLiteOptions??{},s=o.mode||"fetch",a=u=>(n.exec(u,{bind:e}),n.changes());return Xl(t)?a(t):s==="fetch"?n.selectObjects(t,e):o?.typeofModel&&(s==="insertOne"||s==="insertMany")?n.selectObjects(`${t} returning *`,e):a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.requireDb();return Dt(o.selectObjects(t,e),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-wasm: pool not created, await createPool() before querying");return this.db}},Xl=i=>["begin","begin transaction","commit","rollback"].includes(i.trim().toLowerCase());});var tu,Dn,dy=Ie(()=>{er();eu();tu=i=>Array.isArray(i)?i:i?._array??[],Dn=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="react-native";this.filename=String(e.database??":memory:"),this.engine=r;}createPool(){this.db=this.engine.open({name:this.filename}),this.pool=this.db;}async closePool(){this.db?.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.requireDb(),o=r.sqlLiteOptions??{},s=o.mode||"fetch",a=async u=>(await n.execute(u,e)).rowsAffected??0;if(Xl(t))return a(t);if(s==="fetch"){let u=await n.execute(t,e);return tu(u.rows)}if(!o?.typeofModel)return a(t);if(s==="insertOne"||s==="insertMany"){let u=await n.execute(`${t} returning *`,e);return tu(u.rows)}return a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let s=await(r.connection??this.requireDb()).execute(t,e);return Dt(tu(s.rows),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-rn: pool not created, await createPool() before querying");return this.db}};});var ru={};fu(ru,{registerReactNativeDrivers:()=>_g,registerWebDrivers:()=>Rg});var cy,my,Rg,py,_g,nu=Ie(()=>{Ot();dy();eu();cy=false,Rg=i=>{cy||(cy=true,my=i,ge({name:"sqlite-wasm",dialects:["sqlite"],environments:["web"],create:({dialect:t,input:e})=>new On(t,e,void 0,my)}));},py=false,_g=async()=>{if(py)return;py=true;let i=await import('@op-engineering/op-sqlite');ge({name:"sqlite-rn",dialects:["sqlite"],environments:["react-native"],create:({dialect:t,input:e})=>new Dn(t,e,i)});};});var $t=i=>{switch(i){case "mysql":return "mysql";case "mariadb":return "mariadb";case "postgres":case "cockroachdb":return "postgresql";case "sqlite":return "sqlite";case "mssql":return "transactsql";default:return "sql"}},Qn=i=>{if(i==null)return "NULL";if(i instanceof Date)return `'${i.toISOString()}'`;let t=typeof i;return t==="boolean"?i?"TRUE":"FALSE":t==="number"&&Number.isFinite(i)||t==="bigint"?String(i):t==="string"?`'${i.replace(/'/g,"''")}'`:Array.isArray(i)||t==="object"&&Object.keys(i).length>0?`'${JSON.stringify(i).replace(/'/g,"''")}'`:String(i)},It=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,Qn(t[r]));for(let r=0;r<t.length;r++){let n=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(n,Qn(t[r]));}for(let r=0;r<t.length;r++){let n=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(n,Qn(t[r]));}return e},at=(i,t)=>t?i==="mysql"||i==="mariadb"?t.code==="ER_NO_SUCH_TABLE"||t.errno===1146:i==="postgres"||i==="cockroachdb"?t.code==="42P01":i==="sqlite"?/no such table/i.test(String(t.message||"")):i==="mssql"?t.number===208:false:false,vt=(i,t)=>{let e=i.getDbType(),r;try{r=format(t,{...i.inputDetails.queryFormatOptions,language:$t(e)});}catch{try{r=format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var Tu={info:0,warn:1,error:2};function ur(i){return i?i===true?{level:"info",logQueries:true}:{level:i.level??"info",logQueries:i.logQueries??true,customLogger:i.customLogger}:null}function Ly(i,t="info"){let e=ur(i);if(!e)return false;let r=e.level??"info";return Tu[t]>=Tu[r]}function Wy(i){let t=ur(i);return t?t.logQueries??true:false}var Qe={info:"32",warn:"33",error:"31",query:"35",dim:"2",cyan:"36"},jy=typeof process<"u"&&!!process.stdout?.isTTY&&!process.env.NO_COLOR,lt=(i,t)=>jy?`\x1B[${i}m${t}\x1B[0m`:t;function qu(){let i=new Date,t=r=>r.toString().padStart(2,"0"),e=i.getMilliseconds().toString().padStart(3,"0");return `${t(i.getHours())}:${t(i.getMinutes())}:${t(i.getSeconds())}.${e}`}function Kn(i,t){let e=lt(Qe.dim,`[${qu()}]`),r=lt(Qe[i],i.toUpperCase().padEnd(5));return `${e} ${r} ${t}`}var Fy=60,Uy=10,wu=400;function lr(i,t=Fy){return i.length<=t?i:`${i.slice(0,t)}\u2026`}function Vy(i){if(i==null)return "null";if(typeof i=="string")return `'${lr(i)}'`;if(typeof i=="number"||typeof i=="bigint")return String(i);if(typeof i=="boolean")return i?"true":"false";if(i instanceof Date)return `'${lr(i.toISOString())}'`;if(typeof i=="object"){let t;try{t=JSON.stringify(i);}catch{t=String(i);}return `'${lr(t)}'`}return lr(String(i))}function Jy(i){if(!i||i.length===0)return "[]";let t=i.slice(0,Uy).map(Vy),e=i.length-t.length;e>0&&t.push(`\u2026 (${e} more)`);let r=`[${t.join(", ")}]`;return r.length>wu&&(r=`${r.slice(0,wu)}\u2026`),r}var Su=(i,t)=>{let e=" ".repeat(t);return i.split(`
|
|
3
3
|
`).map(r=>`${e}${r}`).join(`
|
|
4
|
-
`)};function
|
|
5
|
-
`)}var
|
|
4
|
+
`)};function Hy(i){let t=i<10?Qe.info:i<100?Qe.warn:Qe.error;return lt(t,`(${i}ms)`)}function zy(i,t,e){let r=lt(Qe.dim,`[${qu()}]`),n=lt(Qe.query,"QUERY"),s=[e===void 0?`${r} ${n}`:`${r} ${n} ${Hy(e)}`,Su(i,2)];return t&&t.length>0&&s.push(Su(`parameters: ${lt(Qe.cyan,Jy(t))}`,4)),s.join(`
|
|
5
|
+
`)}var Nu={info(i){console.log(Kn("info",i));},error(i){console.error(Kn("error",i));},warn(i){console.warn(Kn("warn",i));}},ut=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===Nu){console.log(t);return}this.loggerInstance.info(t);}};ut.loggerInstance=Nu;function dt(i,t,e,r,n,o){if(!Wy(t))return;let s=i;if(r||n)try{s=format(i,{...r,language:r?.language??(n?$t(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"}});ut.query(zy(a,e,o));}function Cu(i,t,e=false){Ly(e,t)&&ut.loggerInstance[t](i);}var g=ut;var Ln=class{parseGetAllTables(t,e,r){switch(t){case "mysql":case "mariadb":return r[0].map(o=>o[`Tables_in_${e}`]);case "cockroachdb":case "postgres":return r.rows.map(o=>o.table_name);case "mssql":return r.recordset.map(o=>o.TABLE_NAME);default:throw new Error(`Unsupported database type: ${t}`)}}getAllTablesTemplate(t,e){switch(t){case "mysql":case "mariadb":return `SHOW TABLES FROM ${e};`;case "cockroachdb":case "postgres":return `SELECT table_name
|
|
6
6
|
FROM information_schema.tables
|
|
7
7
|
WHERE table_catalog = '${e}'
|
|
8
8
|
AND table_schema = 'public'
|
|
@@ -111,20 +111,20 @@ CREATE TABLE [migrations] (
|
|
|
111
111
|
[name] NVARCHAR(255) NOT NULL,
|
|
112
112
|
[timestamp] DATETIME NOT NULL DEFAULT GETDATE(),
|
|
113
113
|
PRIMARY KEY ([id])
|
|
114
|
-
);`}},
|
|
114
|
+
);`}},te=new Ln;async function Wn(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 Ru.rm(n,{recursive:!0,force:!0}),g.info("Sqlite database dropped successfully"),await Ru.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 m=(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 m)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
|
|
120
|
-
`).forEach(r=>{let[n,o]=r.split("="),s=n.trim(),a=o.trim();switch(s){case "DB_TYPE":I.DB_TYPE||(I.DB_TYPE=a);break;case "DB_HOST":I.DB_HOST||(I.DB_HOST=a);break;case "DB_PORT":I.DB_PORT||(I.DB_PORT=a);break;case "DB_USER":I.DB_USER||(I.DB_USER=a);break;case "DB_PASSWORD":I.DB_PASSWORD||(I.DB_PASSWORD=a);break;case "DB_DATABASE":I.DB_DATABASE||(I.DB_DATABASE=a);break;case "MIGRATION_PATH":I.MIGRATION_PATH||(I.MIGRATION_PATH=a||"database/migrations");break;case "REDIS_HOST":I.REDIS_HOST||(I.REDIS_HOST=a);break;case "REDIS_PORT":I.REDIS_PORT||(I.REDIS_PORT=a);break;case "REDIS_USERNAME":I.REDIS_USERNAME||(I.REDIS_USERNAME=a);break;case "REDIS_PASSWORD":I.REDIS_PASSWORD||(I.REDIS_PASSWORD=a);break;case "REDIS_DATABASE":I.REDIS_DATABASE||(I.REDIS_DATABASE=a);break;case "MONGO_URL":I.MONGO_URL||(I.MONGO_URL=a);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":I.MSSQL_TRUST_SERVER_CERTIFICATE||(I.MSSQL_TRUST_SERVER_CERTIFICATE=a==="true");break}});}catch{}finally{return I}},E=Yy();var Zy=()=>{let i=E.MIGRATION_PATH,t=yt.resolve(process.cwd(),i);return ae.existsSync(t)||ae.mkdirSync(t,{recursive:true}),t},Mu=(i,t=false,e="basic",r="table")=>{let n=Zy(),o=new Date().getTime(),s=t?`${o}_${i}.js`:`${o}_${i}.ts`,a=yt.join(n,s),l;switch(e){case "alter":l=oe.alterMigrationTemplate(t,r);break;case "create":l=oe.createMigrationTemplate(t,r);break;default:l=oe.basicMigrationTemplate(t);break}ae.writeFileSync(a,l),g.info(`Migration created successfully at '${a}'.`),process.exit(0);};var S=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}},Pt=class extends S{constructor(t){super("ValidationError","VALIDATION_ERROR"),this.errors=t;}};async function th(i){try{return import(pathToFileURL(i).href)}catch{let e=createRequire(import.meta.url)(i);return {default:e.default||e,...e}}}async function rh(i){let{build:t}=await import('esbuild').catch(()=>{throw new Error("esbuild is required to import TypeScript files. Install it with: npm install esbuild -D")}),e=Math.random().toString(36).slice(2,8),r=i.replace(/\.ts$/,`.bundled_${e}.mjs`);try{return await t({entryPoints:[i],bundle:!0,platform:"node",format:"esm",sourcemap:"inline",outfile:r,packages:"external",logLevel:"silent"}),await import(pathToFileURL(r).href)}finally{await ae.promises.unlink(r).catch(()=>{});}}async function ft(i,t){let e=yt.isAbsolute(i)?i:yt.resolve(process.cwd(),i);return e.endsWith(".ts")?rh(e):th(e)}var sh=async(i,t)=>{if(i.endsWith(".ts"))return ft(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 S(`MigrationUtils::importMigrationFile Failed to import migration file: ${i}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function pr(i,t){switch(i){case "mariadb":case "mysql":return await t.rawQuery(oe.migrationTableTemplateMysql()),(await t.rawQuery(oe.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":return await t.rawQuery(oe.migrationTableTemplatePg()),(await t.rawQuery(oe.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await t.rawQuery(oe.migrationTableTemplateSQLite()),await t.rawQuery(oe.selectAllFromMigrationsTemplate());case "mssql":return await t.rawQuery(oe.migrationTableTemplateMssql()),(await t.rawQuery(oe.selectAllFromMigrationsTemplate())).recordset;default:throw new S("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function fr(i,t,e){let r=ah(t),n=[];for(let{name:o,fullPath:s}of r){let a=await ih(s),l=new a(i||E.DB_TYPE);l.migrationName=o,n.push(l);}return n}async function ih(i,t){let e=await sh(i);if(!e.default)throw new S("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}function ah(i){let t=process.cwd(),e=i||E.MIGRATION_PATH||"database/migrations",r=/[*?{}\[\]]/.test(e);if(!r){let s=yt.isAbsolute(e)?e:yt.resolve(t,e);if(!ae.existsSync(s))return ae.mkdirSync(s,{recursive:true}),[]}let n=r?e:yt.join(e,"**/*.{ts,js}"),o=yt.isAbsolute(n)?n:yt.resolve(t,n);try{return ae.globSync(o).filter(a=>ae.statSync(a).isFile()).sort().map(a=>({name:yt.basename(a),fullPath:a}))}catch{return []}}async function Et(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 pr(o,i),d=(await fr(o,e,r)).filter(m=>!l.map(p=>p.name).includes(m.migrationName));if(!d.length){g.info("No pending migrations.");return}if(t){let m=d.findIndex(f=>f.migrationName===t);if(m===-1){console.error(`Migration ${t} not found.`);return}let p=d.slice(0,m+1);s&&(a=await i.transaction(),i=a.sql),await new Le(i).upMigrations(p),s&&await a?.commit(),g.info("Migrations ran successfully");return}s&&(a=await i.transaction(),i=a.sql),await new Le(i).upMigrations(d),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}g.info("Migrations ran successfully");}ue();var yr={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 Ze(i,t){return t.getModelManager(i)}function Du(i,t,e){if(!t||typeof t!="object")return;let r=t;if(!r.filters)return;let n=e.getColumns();for(let[o,s]of Object.entries(r.filters)){let a=s.value;if(a==null||a==="")continue;let l=n.find(c=>c.columnName===o||c.databaseName===o);if(!l)continue;let u=typeof l.type=="string"?l.type:"string",d=yr[u]||"string";if(d==="string"||d==="textarea"){i.whereLike(o,`%${a}%`);continue}if(d==="boolean"){i.where(o,a==="true"||a===true);continue}if(d==="date"||d==="datetime"){if(typeof a=="object"&&a!==null){let c=a;c.from&&i.where(o,">=",c.from),c.to&&i.where(o,"<=",c.to);continue}i.where(o,a);continue}i.where(o,a);}}function Bt(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 lh(){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=Au;}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=yr[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=yr[l]||"string";return new r({path:a.columnName,type:u,isId:a.isPrimary,isSortable:true})}async count(o){let a=Ze(this._model,this._db).query();return Du(a,o,this._model),a.getCount()}async find(o,s={}){let l=Ze(this._model,this._db).query();return Du(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(Bt(d,this._model),this))}async findOne(o){if(!this._model.primaryKey)return null;let l=await Ze(this._model,this._db).findOneByPrimaryKey(o);return l?new e(Bt(l,this._model),this):null}async findMany(o){let s=this._model.primaryKey;return s?(await Ze(this._model,this._db).query().whereIn(s,o).many()).map(u=>new e(Bt(u,this._model),this)):[]}async create(o){let a=await Ze(this._model,this._db).insert(o,{returning:["*"]});return Bt(a,this._model)}async update(o,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=Ze(this._model,this._db);if(!await l.findOneByPrimaryKey(o))throw new Error("Record not found");let d=await l.updateRecord(o,s,{returning:["*"]});return Bt(d,this._model)}async delete(o){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=Ze(this._model,this._db);await a.findOneByPrimaryKey(o)&&await a.deleteRecord(o);}}}async function uh(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function dh(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),t=await lh(),e=await uh();i.default.registerAdapter({Database:e,Resource:t});}async function Jn(i,t){Au=i;let e=await import('adminjs').catch(()=>{throw new L("adminjs")});await dh();let r=t.resources||Object.values(i.models);if(!r.length)throw new Error("No models provided for AdminJS. Please provide models in the resources option or register them in SqlDataSource.");let 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 $u(i,t){let{admin:e}=await Jn(i,t),r;try{r=await import('@adminjs/express');}catch{throw new L("@adminjs/express")}let n=r.buildRouter(e);return {admin:e,router:n}}var ht=new Map,We=new Map,hr=class{async get(t){return ht.get(t)}async set(t,e,r){let n=We.get(t);if(n&&(clearTimeout(n),We.delete(t)),ht.set(t,e),r){let o=setTimeout(()=>{ht.delete(t),We.delete(t);},r);We.set(t,o);}}async invalidate(t){let e=We.get(t);e&&(clearTimeout(e),We.delete(t)),ht.delete(t);}async invalidateAll(t){let e=ht.keys();for(let r of e)if(r.startsWith(t)){let n=We.get(r);n&&(clearTimeout(n),We.delete(r)),ht.delete(r);}}};var kt=class{constructor(t){switch(this.type=t?.type||E.DB_TYPE,this.type){case "mongo":this.handleMongoSource(t);break;case "cockroachdb":this.handleCockroachdbSource(t);break;case "postgres":this.handlePostgresSource(t);break;case "mariadb":case "mysql":this.handleMysqlSource(t);break;case "sqlite":this.handleSqliteSource(t);break;case "mssql":this.handleMssqlSource(t);break;default:throw new S(`Invalid database type: ${this.type}, please provide a valid database type in your input or in the .env file with the key DB_TYPE
|
|
121
|
-
Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}let e=lr(this.logs);e?.customLogger&&g.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||E.DB_DATABASE||":memory:",this.logs=t?.logs||E.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||E.MONGO_URL,this.logs=t?.logs||E.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=1433);}};var ch=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},mh=i=>i.openApi?.required??false,ph=i=>{let t=i.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=ch(r));return e},fh=i=>{let t=i.getColumns(),e=[];for(let r of t)mh(r)&&e.push(r.columnName);return e||[]},yh=i=>{let t=ph(i),e=fh(i);return {type:"object",properties:t,required:e.length?e:[]}};var vu=i=>i.map(t=>({...yh(t),modelName:t.table,$id:t.table}));var Hn=(i,t)=>{let e=Pe.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var zn=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:[]}}},Iu=new zn;var Gn=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 Gn;var Yn=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`[${n}]`).join(", ")})`,bindings:[]}}},Eu=new Yn;var Zn=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:[]}}},Bu=new Zn;var N=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var gt=class extends N{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};function gr(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 br(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function Xn(i){if(typeof i!="string"||!i)return i;let t=br(i);return t.charAt(0).toUpperCase()+t.slice(1)}function H(i,t){return t==="preserve"?i:t==="snake"?gr(i):t==="camel"?br(i):t==="pascal"?Xn(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}function xe(i){return String(i).padStart(2,"0")}function gh(i,t){let e=i.getFullYear(),r=xe(i.getMonth()+1),n=xe(i.getDate()),o=xe(i.getHours()),s=xe(i.getMinutes()),a=xe(i.getSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${s}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${s}:${a}`;case "TIMESTAMP":return Math.floor(i.getTime()/1e3).toString()}}function ku(i,t){let e=i.getUTCFullYear(),r=xe(i.getUTCMonth()+1),n=xe(i.getUTCDate()),o=xe(i.getUTCHours()),s=xe(i.getUTCMinutes()),a=xe(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 de=(i,t="ISO",e="UTC")=>{if(!(i instanceof Date)||isNaN(i.getTime()))throw new Error("Invalid date provided");return e==="LOCAL"?gh(i,t):ku(i,t)};var bt=(i=new Date)=>ku(i,"ISO");var bh=i=>{if(i==null||typeof i!="object"||i instanceof Date)return false;if(Array.isArray(i))return true;let t=Object.getPrototypeOf(i);return t===Object.prototype||t===null},eo=i=>!i.expression&&(i.type==="date"||i.type==="datetime"||i.type==="timestamp"),y=class{constructor(t){this.model=t;this.modelColumnsMap=typeof t.getColumnsByName=="function"?t.getColumnsByName():new Map;let e=[],r=[];for(let n of this.modelColumnsMap.values())n.expression||((n.type==="ulid"||n.autoCreate==="js")&&e.push(n),n.autoUpdate&&r.push(n));this.jsInsertColumns=e,this.autoUpdateColumns=r;}formatStringColumn(t,e){if(e==="*")return "*";let r=this.resolveComputedExpression(e);if(r!==void 0)return `(${r})`;if(e.includes(".")){let[s,a]=e.split(".");if(a==="*")switch(t){case "mysql":case "mariadb":return `\`${s}\`.*`;case "postgres":case "cockroachdb":case "sqlite":return `"${s}".*`;case "mssql":return `[${s}].*`;default:throw new Error(`Unsupported database type: ${t}`)}let l=this.modelColumnsMap.get(a)?.databaseName??H(a,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${s}\`.\`${l}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${s}"."${l}"`;case "mssql":return `[${s}].[${l}]`;default:throw new Error(`Unsupported database type: ${t}`)}}let o=this.modelColumnsMap.get(e)?.databaseName??H(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${o}"`;case "mssql":return `[${o}]`;default:throw new Error(`Unsupported database type: ${t}`)}}resolveComputedExpression(t){let e=t.includes(".")?t.split(".").pop():t;return this.modelColumnsMap.get(e)?.expression}isComputedColumn(t){return !!this.modelColumnsMap.get(t)?.expression}filterComputedColumns(t){return this.modelColumnsMap.size===0?t:t.filter(e=>!this.isComputedColumn(e))}stripComputedFromData(t){if(this.modelColumnsMap.size===0)return t;let e={};for(let r of Object.keys(t))this.isComputedColumn(r)||(e[r]=t[r]);return e}formatStringColumnBare(t,e){let r=e.includes(".")?e.split(".")[1]:e;return this.formatStringColumn(t,r)}dialectEmitsReturning(t){switch(t){case "postgres":case "cockroachdb":case "sqlite":case "mssql":return true;default:return false}}shouldFetchNatively(t,e){if(!this.dialectEmitsReturning(t)||t==="mssql")return false;if(t==="sqlite"&&e==="update"){for(let r of this.modelColumnsMap.values())if(r.autoUpdate)return false}return true}hasComputedColumn(t){return t.some(e=>this.isComputedColumn(e))}resolveColumnAlias(t,e){let r=this.modelColumnsMap.get(e);if(!r||r.columnName===r.databaseName)return "";switch(t){case "mssql":return ` as [${r.columnName}]`;case "mysql":case "mariadb":return ` as \`${r.columnName}\``;case "postgres":case "cockroachdb":case "sqlite":return ` as "${r.columnName}"`;default:return ""}}formatStringTable(t,e){e=e.replace(/\s+/g," ").trim();let r="";return e.toLowerCase().includes(" as ")&&([e,r]=e.split(" as ")),`${e.split(".").map(o=>this.quoteIdentifier(t,o)).join(".")}${r?` as ${this.quoteIdentifier(t,r)}`:""}`}quoteIdentifier(t,e){switch(t){case "mysql":case "mariadb":return `\`${e}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${e}"`;case "mssql":return `[${e}]`;default:return e}}formatRawPlaceholders(t,e,r=[],n=1){if(!r.length)return {sql:e,bindings:[]};let o=n;return {sql:e.replace(/\?/g,()=>{switch(t){case "postgres":case "cockroachdb":return `$${o++}`;case "mssql":return `@${o++}`;default:return "?"}}),bindings:r}}prepareColumns(t,e,r="insert",n="postgres"){if(!t.length)return {columns:t,values:e};let o=[],s=[];for(let l=0;l<t.length;l++){let u=t[l],d=e[l];u!=="*"&&(o.push(u),s.push(d));}let a=n==="mysql"||n==="mariadb";for(let l=0;l<o.length;l++){let u=o[l],d=s[l],c=this.modelColumnsMap.get(u);if(c?.expression){o.splice(l,1),s.splice(l,1),l--;continue}if(!(d instanceof N)){if(!c){bh(d)&&(s[l]=JSON.stringify(d));continue}if(d==null&&(c.autoCreate===true||c.type==="uuid"&&n!=="mysql"&&n!=="mariadb")){o.splice(l,1),s.splice(l,1),l--;continue}if(c.prepare){let m=r==="insert"?c.prepare(d):c.prepare(d)??d;if(m!==null&&typeof m?.then=="function")throw new Error(`hysteria-orm: prepare on column "${u}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);s[l]=m;}n==="sqlite"&&s[l]instanceof Date&&eo(c)&&(s[l]=de(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&&eo(u)?de(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&&eo(t)?de(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 to=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 gt){let d=e.children[0];return {sql:`EXEC sp_rename '${e.table}', '${d.newName}'`,bindings:[]}}let o=new b(this.model,"mssql"),s=[],a=[];for(let d of e.children){let{sql:c,bindings:m}=o.parse([d]);s.push(c.trim()),a.push(...m);}let l=s.join(", ");return {sql:`${n} ${l}`,bindings:a}}},Ku=new to;var ro=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},Qu=new ro;var no=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},Lu=new no;var oo=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},Wu=new oo;var so=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:[]}}},ju=new so;var io=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},Fu=new io;var ao=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},Uu=new ao;var lo=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},Vu=new lo;var x=class extends N{constructor(e,r){super("raw",true);this.canKeywordBeSeenMultipleTimes=true;this.chainsWith=" ";this.currParamIndex=0;this.isRawValue=true;this.folder="raw";this.file="raw";this.rawValue=e,this.bindings=r;}};var P=class extends N{constructor(e,r=[]){super("sqlfunc");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="sqlfunc";this.file="sqlfunc";this.fn=e,this.args=r;}};var Ju=new Map;function je(i,t){let e=i===void 0?void 0:Ju.get(i),r=Ju.get("*");return e?.(t)??r?.(t)}var uo=class{toSql(t){let e=t,r;return e.defaultValue instanceof x?r=e.defaultValue.rawValue:e.defaultValue instanceof P?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:[]}}},Hu=new uo;var co=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:[]}}},zu=new co;var mo=class{toSql(t){return {sql:"",bindings:[]}}},Gu=new mo;function po(i){return i.replace(/^[`"]|[`"]$/g,"")}function fo(i,t,e){if(!i.includes(".")){let o=po(i);return `${t}.${o}`}let[r,n]=i.split(".");return r=po(r),n=po(n),r!==e?i:n==="*"?`${t}.*`:`${t}.${n}`}function C(i){return typeof i=="function"?i():i}var W=(i,t=new WeakMap)=>{if(i===null||typeof i!="object")return i;if(t.has(i))return t.get(i);if(Array.isArray(i)){let r=[];t.set(i,r);for(let n=0;n<i.length;n++)r[n]=W(i[n],t);return r}let e=Object.create(Object.getPrototypeOf(i)||{});t.set(i,e);for(let r of Object.getOwnPropertyNames(i)){let n=i[r];if(typeof n=="function"){e[r]=n;continue}e[r]=W(n,t);}return e};var yo=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:[]}}},Yu=new yo;var ho=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
122
|
-
`:e,bindings:[]}}},Zu=new ho;var go=class{toSql(t){return {sql:"",bindings:[]}}},Xu=new go;var bo=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let n=e.constraintName?`constraint [${e.constraintName}] `:"",o=(e.columns??[]).map(s=>r.formatStringColumn("mssql",C(s))).join(", ");return {sql:`${n}primary key (${o})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns??[],o=e.constraintName?`constraint [${e.constraintName}] `:"",s=n.map(a=>r.formatStringColumn("mssql",C(a))).join(", ");return e.constraintName?{sql:`${o}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let n=e.defaultValue;return n instanceof x?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof P?{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:[]}}},ed=new bo;var To=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 w=s.pop()??"",q=f;if(/not null/i.test(q)||/null/i.test(q)||/default/i.test(q)){let D=`${w} ${q}`.trim();D=D.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(D),a.push(...T);continue}s.push(w),s.push(q),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}]`:"",c=e.textImageOn?` TEXTIMAGE_ON [${e.textImageOn}]`:"",m=u.length>0?` WITH (${u.join(", ")})`:"";return {sql:`${n} (${l})${m}${d}${c}`,bindings:a}}},td=new To;var wo=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:[]}}},rd=new wo;var So=class{toSql(t){return {sql:"",bindings:[]}}},nd=new So;var No=class{toSql(t){return g.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},od=new No;var qo=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},sd=new qo;var Co=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},id=new Co;var Ro=class{toSql(t){let e=t,r=new y(this.model),n=e.alias?` as ${r.quoteIdentifier("mssql",e.alias)}`:"";if(e.table instanceof x){let{sql:l,bindings:u}=r.formatRawPlaceholders("mssql",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("mssql",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"mssql").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},ad=new Ro;var _o=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},ld=new _o;var Mo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,n=new b(this.model,"mssql"),o=new y(this.model);if(e.group?.length){let{sql:u,bindings:d}=n.parse(e.group,e.currParamIndex,true);return {sql:`(${u})`,bindings:d}}let s=o.formatStringColumn("mssql",e.column),a="",l=[];if(e.subquery!==void 0){let u=this.parseSubquery(n,e,r);a=`${e.column?`${s} `:""}${e.operator} (${u.sql})`,l=u.bindings;}else if(e.value instanceof P){let u=n.parse([e.value],1,true).sql;a=`${s} ${e.operator} ${u}`;}else if(e.operator==="is null"||e.operator==="is not null")a=`${s} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")a=`${s} ${e.operator} @${r} and @${r+1}`;else {let u=e.value.map((d,c)=>`@${r+c}`).join(", ");a=`${s} ${e.operator} (${u})`;}l=e.value;}else a=`${s} ${e.operator} @${r}`,l=[e.value];return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:l}}parseSubquery(t,e,r){let n=e.subquery;if(typeof n=="string")return {sql:n,bindings:[]};let o=Array.isArray(n)?n:[n];return t.parse(o,r)}},ud=new Mo;var xo=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:[]}}},dd=new xo;var Oo=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},cd=new Oo;var Do=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(m=>o[m]!==void 0);if(!s.length)return {sql:n,bindings:[]};let a=s.map(m=>r.formatStringColumn("mssql",m)).join(", "),l=[],u=[],d=e.currParamIndex;for(let m of e.records){let p=s.map(f=>m[f]),h=[];for(let f of p)f instanceof x?h.push(f.rawValue):(l.push(f),h.push(`@${d++}`));u.push(`(${h.join(", ")})`);}let c=`${n} (${a}) values ${u.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(p=>`inserted.${r.formatStringColumn("mssql",p)}${r.resolveColumnAlias("mssql",p)}`).join(", ");c=c.replace(") values",`) output ${m} values`);}else {let m=this.getOutputColumns(s,r);c=c.replace(") values",`) output ${m} values`);}return {sql:c,bindings:l}}getOutputColumns(t,e){let r=[...t],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(", ")}},md=new Do;var Ao=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};if(e.using?.length)throw new S("JoinQueryBuilder::using","USING_NOT_SUPPORTED_IN_MSSQL");let r=new y(this.model),n=r.formatStringTable("mssql",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let s=e.right;s.includes(".")||(s=`${this.model.table}.${s}`);let a=r.formatStringColumn("mssql",o),l=r.formatStringColumn("mssql",s),u=`${n} on ${a} ${e.on?.operator} ${l}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"mssql");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},pd=new Ao;var Kt=class extends N{constructor(e,r,n,o,s){super("json_mutation");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="json_mutation";this.file="json_mutation";this.operation=e,this.column=r,this.path=n,this.value=o,this.alias=s;}},fd=(i,t,e,r)=>new Kt("set",i,t,e,r),yd=(i,t,e,r)=>new Kt("insert",i,t,e,r),hd=(i,t,e)=>new Kt("remove",i,t,void 0,e),Th=/^[A-Za-z_][A-Za-z0-9_]*$/;function gd(i){if(Array.isArray(i))return i;let t=[],e=i.replace(/^\$/,""),r=/\.([^.[\]]+)|\[(\d+)\]/g,n;for(;(n=r.exec(e))!==null;)n[1]!==void 0?t.push(n[1]):t.push(Number(n[2]));return t}function Tt(i){return "$"+gd(i).map(e=>typeof e=="number"?`[${e}]`:Th.test(e)?`.${e}`:`["${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"]`).join("")}function bd(i){return `'{${gd(i).map(r=>{let n=String(r);return /^[A-Za-z0-9_]+$/.test(n)?n:`"${n.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}).join(",")}}'`}var $o=class{toSql(t){let e=t;if(e.operation!=="set")throw new S("MssqlJsonMutationInterpreter::toSql","NOT_SUPPORTED_IN_MSSQL",new Error(`json${e.operation==="insert"?"Insert":"Remove"} is not supported by mssql; only jsonSet (JSON_MODIFY) is`));let r=new y(this.model).formatStringColumn("mssql",e.column),n=`'${Tt(e.path).replace(/'/g,"''")}'`,o=e.value!==null&&typeof e.value=="object",s=`JSON_MODIFY(${r}, ${n}, @${e.currParamIndex})`;return {sql:this.withAlias(s,e.alias),bindings:[o?JSON.stringify(e.value):e.value]}}withAlias(t,e){return e?`${t} as [${e}]`:t}},Td=new $o;var vo=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},wd=new vo;var Io=class{toSql(t){return {sql:"",bindings:[]}}},Sd=new Io;var Po=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},Nd=new Po;var Eo=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:[]})}},qd=new Eo;var Bo=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:[]}}},Cd=new Bo;var ko=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Rd=new ko;var Ko=class{toSql(t){let e=t,r=new y(this.model);return {sql:`output ${!e.columns.length||e.columns.includes("*")?`${e.prefix}.*`:e.columns.map(o=>`${e.prefix}.${r.formatStringColumn("mssql",o)}${r.resolveColumnAlias("mssql",o)}`).join(", ")}`,bindings:[]}}},_d=new Ko;var Qo=class{toSql(t){return {sql:`SELECT
|
|
119
|
+
`)).recordset;for(let p of m)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 dr(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 Gy=i=>{i[6]=i[6]&15|64,i[8]=i[8]&63|128;let t=Le(i);return [t.slice(0,8),t.slice(8,12),t.slice(12,16),t.slice(16,20),t.slice(20)].join("-")},_u=i=>{let t=globalThis.crypto;if(!t||typeof t.getRandomValues!="function")throw new ct("crypto.getRandomValues \u2014 browsers require a secure context (HTTPS); React Native requires react-native-get-random-values or expo-crypto");return t.getRandomValues(i)},jn=class{unsupported(t){throw new ct(`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")}},Fn=class{join(...t){return t.filter(Boolean).join("/").replace(/\/+/g,"/")}dirname(t){let e=t.lastIndexOf("/");return e<=0?".":t.slice(0,e)}basename(t,e){let r=t.slice(t.lastIndexOf("/")+1);return e&&r.endsWith(e)?r.slice(0,-e.length):r}resolve(...t){let e=t.filter(Boolean).join("/").replace(/\/+/g,"/");return e.startsWith("/")?e:`/${e}`}},Ke=class{constructor(){this.name="web";this.crypto={randomUUID:()=>{let t=globalThis.crypto;return typeof t?.randomUUID=="function"?t.randomUUID():Gy(_u(new Uint8Array(16)))},randomBytes:t=>_u(new Uint8Array(t))};this.timing={now:()=>globalThis.performance.now()};this.fs=new jn;this.path=new Fn;}readEnv(t){}};var mt=class extends Ke{constructor(){super(...arguments);this.name="node";this.fs={exists:e=>ae.existsSync(e),readFileSync:e=>ae.existsSync(e)?new Uint8Array(ae.readFileSync(e)):null,readFile:async e=>promises.readFile(e,"utf8"),readdir:e=>promises.readdir(e),mkdir:async(e,r)=>{await promises.mkdir(e,{recursive:r?.recursive});},writeFile:async(e,r)=>{await promises.writeFile(e,r);},rm:async(e,r)=>{await promises.rm(e,{recursive:r?.recursive,force:r?.force});}};this.path=ft;}readEnv(e){return typeof process>"u"?void 0:process.env[e]}};var Vn=()=>import('bun'),cr=class extends mt{constructor(){super();this.name="bun";let e=this.fs;this.fs={...e,readFile:async r=>(await Vn()).file(r).text(),readdir:async r=>{let n=await Vn(),o=[];for await(let s of new n.Glob("*").scan({cwd:r}))o.push(s);return o},writeFile:async(r,n)=>{await(await Vn()).write(r,n);}};}};var mr=class extends Ke{constructor(){super(...arguments);this.name="react-native";}};var ct=class extends Error{constructor(t){super(`Platform does not support: ${t}`),this.name="PlatformUnsupportedError";}},Le=i=>{let t="";for(let e of i)t+=e.toString(16).padStart(2,"0");return t},Mu=new Map,Zy=i=>{switch(i){case "bun":return new cr;case "node":return new mt;case "react-native":return new mr;default:return new Ke}};function oe(i){let t=dr(i),e=Mu.get(t);return e||(e=Zy(t),Mu.set(t,e)),e}var X=oe(),I={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},Xy=()=>{try{if(!X.fs.exists(".env"))return I;let i=X.fs.readFileSync(".env");if(!i)return I;new TextDecoder().decode(i).split(`
|
|
120
|
+
`).forEach(r=>{let[n,o]=r.split("="),s=n.trim(),a=o.trim();switch(s){case "DB_TYPE":I.DB_TYPE||(I.DB_TYPE=a);break;case "DB_HOST":I.DB_HOST||(I.DB_HOST=a);break;case "DB_PORT":I.DB_PORT||(I.DB_PORT=a);break;case "DB_USER":I.DB_USER||(I.DB_USER=a);break;case "DB_PASSWORD":I.DB_PASSWORD||(I.DB_PASSWORD=a);break;case "DB_DATABASE":I.DB_DATABASE||(I.DB_DATABASE=a);break;case "MIGRATION_PATH":I.MIGRATION_PATH||(I.MIGRATION_PATH=a||"database/migrations");break;case "REDIS_HOST":I.REDIS_HOST||(I.REDIS_HOST=a);break;case "REDIS_PORT":I.REDIS_PORT||(I.REDIS_PORT=a);break;case "REDIS_USERNAME":I.REDIS_USERNAME||(I.REDIS_USERNAME=a);break;case "REDIS_PASSWORD":I.REDIS_PASSWORD||(I.REDIS_PASSWORD=a);break;case "REDIS_DATABASE":I.REDIS_DATABASE||(I.REDIS_DATABASE=a);break;case "MONGO_URL":I.MONGO_URL||(I.MONGO_URL=a);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":I.MSSQL_TRUST_SERVER_CERTIFICATE||(I.MSSQL_TRUST_SERVER_CERTIFICATE=a==="true");break}});}catch{}finally{return I}},E=Xy();var eh=()=>{let i=E.MIGRATION_PATH,t=ft.resolve(process.cwd(),i);return ae.existsSync(t)||ae.mkdirSync(t,{recursive:true}),t},Ou=(i,t=false,e="basic",r="table")=>{let n=eh(),o=new Date().getTime(),s=t?`${o}_${i}.js`:`${o}_${i}.ts`,a=ft.join(n,s),l;switch(e){case "alter":l=te.alterMigrationTemplate(t,r);break;case "create":l=te.createMigrationTemplate(t,r);break;default:l=te.basicMigrationTemplate(t);break}ae.writeFileSync(a,l),g.info(`Migration created successfully at '${a}'.`),process.exit(0);};var T=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}},Et=class extends T{constructor(t){super("ValidationError","VALIDATION_ERROR"),this.errors=t;}};async function nh(i){try{return import(pathToFileURL(i).href)}catch{let e=createRequire(import.meta.url)(i);return {default:e.default||e,...e}}}async function oh(i){let{build:t}=await import('esbuild').catch(()=>{throw new Error("esbuild is required to import TypeScript files. Install it with: npm install esbuild -D")}),e=Math.random().toString(36).slice(2,8),r=i.replace(/\.ts$/,`.bundled_${e}.mjs`);try{return await t({entryPoints:[i],bundle:!0,platform:"node",format:"esm",sourcemap:"inline",outfile:r,packages:"external",logLevel:"silent"}),await import(pathToFileURL(r).href)}finally{await ae.promises.unlink(r).catch(()=>{});}}async function pt(i,t){let e=ft.isAbsolute(i)?i:ft.resolve(process.cwd(),i);return e.endsWith(".ts")?oh(e):nh(e)}var ah=async(i,t)=>{if(i.endsWith(".ts"))return pt(i);try{return import(pathToFileURL(i).href)}catch{let n=createRequire(import.meta.url);try{let o=n(i);return {default:o.default||o,...o}}catch{throw new T(`MigrationUtils::importMigrationFile Failed to import migration file: ${i}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function fr(i,t){switch(i){case "mariadb":case "mysql":return await t.rawQuery(te.migrationTableTemplateMysql()),(await t.rawQuery(te.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":return await t.rawQuery(te.migrationTableTemplatePg()),(await t.rawQuery(te.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await t.rawQuery(te.migrationTableTemplateSQLite()),await t.rawQuery(te.selectAllFromMigrationsTemplate());case "mssql":return await t.rawQuery(te.migrationTableTemplateMssql()),(await t.rawQuery(te.selectAllFromMigrationsTemplate())).recordset;default:throw new T("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function yr(i,t,e){let r=uh(t),n=[];for(let{name:o,fullPath:s}of r){let a=await lh(s),l=new a(i||E.DB_TYPE);l.migrationName=o,n.push(l);}return n}async function lh(i,t){let e=await ah(i);if(!e.default)throw new T("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}function uh(i){let t=process.cwd(),e=i||E.MIGRATION_PATH||"database/migrations",r=/[*?{}\[\]]/.test(e);if(!r){let s=ft.isAbsolute(e)?e:ft.resolve(t,e);if(!ae.existsSync(s))return ae.mkdirSync(s,{recursive:true}),[]}let n=r?e:ft.join(e,"**/*.{ts,js}"),o=ft.isAbsolute(n)?n:ft.resolve(t,n);try{return ae.globSync(o).filter(a=>ae.statSync(a).isFile()).sort().map(a=>({name:ft.basename(a),fullPath:a}))}catch{return []}}async function Bt(i,t,e,r,n){let o=i.getDbType(),s=n&&o!=="mssql",a=null;g.info("Running migrations for database type: "+o);try{let l=await fr(o,i),d=(await yr(o,e,r)).filter(m=>!l.map(p=>p.name).includes(m.migrationName));if(!d.length){g.info("No pending migrations.");return}if(t){let m=d.findIndex(f=>f.migrationName===t);if(m===-1){console.error(`Migration ${t} not found.`);return}let p=d.slice(0,m+1);s&&(a=await i.transaction(),i=a.sql),await new We(i).upMigrations(p),s&&await a?.commit(),g.info("Migrations ran successfully");return}s&&(a=await i.transaction(),i=a.sql),await new We(i).upMigrations(d),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}g.info("Migrations ran successfully");}le();var hr={string:"string",varchar:"string",char:"string",text:"textarea",longtext:"textarea",mediumtext:"textarea",tinytext:"textarea",integer:"number",int:"number",smallint:"number",bigint:"number",tinyint:"number",mediumint:"number",float:"float",double:"float",decimal:"float",numeric:"float",real:"float",boolean:"boolean",bool:"boolean",date:"date",datetime:"datetime",timestamp:"datetime",time:"string",year:"number",json:"mixed",jsonb:"mixed",uuid:"string",ulid:"string",binary:"string",blob:"string",enum:"string"};var Iu=null;function Xe(i,t){return t.getModelManager(i)}function $u(i,t,e){if(!t||typeof t!="object")return;let r=t;if(!r.filters)return;let n=e.getColumns();for(let[o,s]of Object.entries(r.filters)){let a=s.value;if(a==null||a==="")continue;let l=n.find(c=>c.columnName===o||c.databaseName===o);if(!l)continue;let u=typeof l.type=="string"?l.type:"string",d=hr[u]||"string";if(d==="string"||d==="textarea"){i.whereLike(o,`%${a}%`);continue}if(d==="boolean"){i.where(o,a==="true"||a===true);continue}if(d==="date"||d==="datetime"){if(typeof a=="object"&&a!==null){let c=a;c.from&&i.where(o,">=",c.from),c.to&&i.where(o,"<=",c.to);continue}i.where(o,a);continue}i.where(o,a);}}function kt(i,t){let e={},r=t.getColumns();for(let n of r){let o=i[n.columnName];e[n.columnName]=o;}return e}async function dh(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(o){super(o),this._model=o,this._db=Iu;}static isAdapterFor(o){if(typeof o!="function")return false;let s=o;return s.prototype!==void 0&&typeof s.table=="string"&&typeof s.getColumns=="function"}databaseName(){return this._db.database||"hysteria"}databaseType(){return this._db.getDbType()}id(){return this._model.table}properties(){return this._model.getColumns().map(s=>{let a=typeof s.type=="string"?s.type:"string",l=hr[a]||"string";return new r({path:s.columnName,type:l,isId:s.isPrimary,isSortable:true})})}property(o){let a=this._model.getColumns().find(d=>d.columnName===o||d.databaseName===o);if(!a)return null;let l=typeof a.type=="string"?a.type:"string",u=hr[l]||"string";return new r({path:a.columnName,type:u,isId:a.isPrimary,isSortable:true})}async count(o){let a=Xe(this._model,this._db).query();return $u(a,o,this._model),a.getCount()}async find(o,s={}){let l=Xe(this._model,this._db).query();return $u(l,o,this._model),s.limit&&l.limit(s.limit),s.offset&&l.offset(s.offset),s.sort?.sortBy&&l.orderBy(s.sort.sortBy,s.sort.direction||"asc"),(await l.many()).map(d=>new e(kt(d,this._model),this))}async findOne(o){if(!this._model.primaryKey)return null;let l=await Xe(this._model,this._db).findOneByPrimaryKey(o);return l?new e(kt(l,this._model),this):null}async findMany(o){let s=this._model.primaryKey;return s?(await Xe(this._model,this._db).query().whereIn(s,o).many()).map(u=>new e(kt(u,this._model),this)):[]}async create(o){let a=await Xe(this._model,this._db).insert(o,{returning:["*"]});return kt(a,this._model)}async update(o,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=Xe(this._model,this._db);if(!await l.findOneByPrimaryKey(o))throw new Error("Record not found");let d=await l.updateRecord(o,s,{returning:["*"]});return kt(d,this._model)}async delete(o){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=Xe(this._model,this._db);await a.findOneByPrimaryKey(o)&&await a.deleteRecord(o);}}}async function ch(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function mh(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),t=await dh(),e=await ch();i.default.registerAdapter({Database:e,Resource:t});}async function Hn(i,t){Iu=i;let e=await import('adminjs').catch(()=>{throw new L("adminjs")});await mh();let r=t.resources||Object.values(i.models);if(!r.length)throw new Error("No models provided for AdminJS. Please provide models in the resources option or register them in SqlDataSource.");let n=r.map(a=>{let l=t.resourceOptions?.[a.table]||{};return {resource:a,options:l}}),o={rootPath:t.rootPath||"/admin",resources:n};if(t.branding&&(o.branding=t.branding),t.locale?.language&&(o.locale=t.locale),t.assets&&(o.assets=t.assets),t.settings&&(o.settings=t.settings),t.pages){let a={};for(let[l,u]of Object.entries(t.pages))u.component&&(a[l]=u);Object.keys(a).length>0&&(o.pages=a);}return {admin:new e.default(o)}}async function vu(i,t){let{admin:e}=await Hn(i,t),r;try{r=await import('@adminjs/express');}catch{throw new L("@adminjs/express")}let n=r.buildRouter(e);return {admin:e,router:n}}var yt=new Map,je=new Map,gr=class{async get(t){return yt.get(t)}async set(t,e,r){let n=je.get(t);if(n&&(clearTimeout(n),je.delete(t)),yt.set(t,e),r){let o=setTimeout(()=>{yt.delete(t),je.delete(t);},r);je.set(t,o);}}async invalidate(t){let e=je.get(t);e&&(clearTimeout(e),je.delete(t)),yt.delete(t);}async invalidateAll(t){let e=yt.keys();for(let r of e)if(r.startsWith(t)){let n=je.get(r);n&&(clearTimeout(n),je.delete(r)),yt.delete(r);}}};var Qt=class{constructor(t){switch(this.type=t?.type||E.DB_TYPE,this.type){case "mongo":this.handleMongoSource(t);break;case "cockroachdb":this.handleCockroachdbSource(t);break;case "postgres":this.handlePostgresSource(t);break;case "mariadb":case "mysql":this.handleMysqlSource(t);break;case "sqlite":this.handleSqliteSource(t);break;case "mssql":this.handleMssqlSource(t);break;default:throw new T(`Invalid database type: ${this.type}, please provide a valid database type in your input or in the .env file with the key DB_TYPE
|
|
121
|
+
Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}let e=ur(this.logs);e?.customLogger&&g.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||E.DB_DATABASE||":memory:",this.logs=t?.logs||E.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||E.MONGO_URL,this.logs=t?.logs||E.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=1433);}};var ph=i=>{let{required:t,...e}=i.openApi||{},r={...e,type:i.openApi?.type||"string",description:i.openApi?.description??`Property: ${i.columnName}`};return i.openApi?.type?{...r,type:i.openApi.type}:Array.isArray(i.type)?{...r,type:"string",enum:i.type}:i.type==="date"||i.type==="datetime"||i.type==="timestamp"||i.type==="time"?{...r,type:"string",format:"date-time"}:i.type==="boolean"?{...r,type:"boolean"}:i.type==="integer"||i.type==="tinyint"||i.type==="smallint"||i.type==="mediumint"||i.type==="increment"?{...r,type:"integer",format:"int32"}:i.type==="biginteger"||i.type==="bigIncrement"?{...r,type:"integer",format:"int64"}:i.type==="float"||i.type==="real"?{...r,type:"number",format:"float"}:i.type==="double"?{...r,type:"number",format:"double"}:i.type==="decimal"||i.type==="numeric"?{...r,type:"number"}:i.type==="json"||i.type==="jsonb"?{...r,type:"object"}:i.type==="uuid"?{...r,type:"string",format:"uuid"}:i.type==="ulid"?{...r,type:"string",format:"ulid"}:i.type==="string"||i.type==="char"||i.type==="varchar"||i.type==="text"||i.type==="longtext"||i.type==="mediumtext"||i.type==="tinytext"?{...r,type:"string"}:i.type==="blob"||i.type==="binary"||i.type==="varbinary"||i.type==="tinyblob"||i.type==="mediumblob"||i.type==="longblob"?{...r,type:"string",format:"binary"}:i.type==="year"?{...r,type:"integer",format:"int32"}:r},fh=i=>i.openApi?.required??false,yh=i=>{let t=i.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=ph(r));return e},hh=i=>{let t=i.getColumns(),e=[];for(let r of t)fh(r)&&e.push(r.columnName);return e||[]},gh=i=>{let t=yh(i),e=hh(i);return {type:"object",properties:t,required:e.length?e:[]}};var Pu=i=>i.map(t=>({...gh(t),modelName:t.table,$id:t.table}));var zn=(i,t)=>{let e=Pe.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var Gn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(n+=` ${s.join(" ")}`);}return {sql:`add ${n}`,bindings:[]}}},Eu=new Gn;var Yn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Bu=new Yn;var Zn=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`[${n}]`).join(", ")})`,bindings:[]}}},ku=new Zn;var Xn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),s=o.join(" ");e.newType.dataType==="uuid"&&(s=s.replace(/\s+default\s+.+$/i,"").trim());let a="";e.options.nullable!==void 0&&(a=e.options.nullable?" null":" not null");let l=`alter column [${e.column}] ${s}${a}`;if(e.options.dropDefault&&(l=`drop constraint DF_${e.column}, ${l}`),e.options.default!==void 0&&!e.options.dropDefault){let u=e.options.default;u===null?u="null":typeof u=="string"&&(u==="NULL"?u="null":u==="TRUE"||u==="FALSE"?u=u==="TRUE"?"1":"0":u=`'${u}'`),l+=`, add constraint DF_${e.column} default ${u} for [${e.column}]`;}return e.options.unique!==void 0&&e.options.unique&&(l+=`, add constraint UQ_${e.column} unique ([${e.column}])`),{sql:l,bindings:[]}}},Qu=new Xn;var N=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var ht=class extends N{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};function br(i){return typeof i!="string"||!i?i:i.replace(/([a-z])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}function Tr(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function eo(i){if(typeof i!="string"||!i)return i;let t=Tr(i);return t.charAt(0).toUpperCase()+t.slice(1)}function H(i,t){return t==="preserve"?i:t==="snake"?br(i):t==="camel"?Tr(i):t==="pascal"?eo(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}function Me(i){return String(i).padStart(2,"0")}function Th(i,t){let e=i.getFullYear(),r=Me(i.getMonth()+1),n=Me(i.getDate()),o=Me(i.getHours()),s=Me(i.getMinutes()),a=Me(i.getSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${s}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${s}:${a}`;case "TIMESTAMP":return Math.floor(i.getTime()/1e3).toString()}}function Ku(i,t){let e=i.getUTCFullYear(),r=Me(i.getUTCMonth()+1),n=Me(i.getUTCDate()),o=Me(i.getUTCHours()),s=Me(i.getUTCMinutes()),a=Me(i.getUTCSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${s}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${s}:${a}`;case "TIMESTAMP":return Math.floor(i.getTime()/1e3).toString()}}var ue=(i,t="ISO",e="UTC")=>{if(!(i instanceof Date)||isNaN(i.getTime()))throw new Error("Invalid date provided");return e==="LOCAL"?Th(i,t):Ku(i,t)};var gt=(i=new Date)=>Ku(i,"ISO");var wh=i=>{if(i==null||typeof i!="object"||i instanceof Date)return false;if(Array.isArray(i))return true;let t=Object.getPrototypeOf(i);return t===Object.prototype||t===null},to=i=>!i.expression&&(i.type==="date"||i.type==="datetime"||i.type==="timestamp"),y=class{constructor(t){this.model=t;this.modelColumnsMap=typeof t.getColumnsByName=="function"?t.getColumnsByName():new Map;let e=[],r=[];for(let n of this.modelColumnsMap.values())n.expression||((n.type==="ulid"||n.autoCreate==="js")&&e.push(n),n.autoUpdate&&r.push(n));this.jsInsertColumns=e,this.autoUpdateColumns=r;}formatStringColumn(t,e){if(e==="*")return "*";let r=this.resolveComputedExpression(e);if(r!==void 0)return `(${r})`;if(e.includes(".")){let[s,a]=e.split(".");if(a==="*")switch(t){case "mysql":case "mariadb":return `\`${s}\`.*`;case "postgres":case "cockroachdb":case "sqlite":return `"${s}".*`;case "mssql":return `[${s}].*`;default:throw new Error(`Unsupported database type: ${t}`)}let l=this.modelColumnsMap.get(a)?.databaseName??H(a,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${s}\`.\`${l}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${s}"."${l}"`;case "mssql":return `[${s}].[${l}]`;default:throw new Error(`Unsupported database type: ${t}`)}}let o=this.modelColumnsMap.get(e)?.databaseName??H(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${o}"`;case "mssql":return `[${o}]`;default:throw new Error(`Unsupported database type: ${t}`)}}resolveComputedExpression(t){let e=t.includes(".")?t.split(".").pop():t;return this.modelColumnsMap.get(e)?.expression}isComputedColumn(t){return !!this.modelColumnsMap.get(t)?.expression}filterComputedColumns(t){return this.modelColumnsMap.size===0?t:t.filter(e=>!this.isComputedColumn(e))}stripComputedFromData(t){if(this.modelColumnsMap.size===0)return t;let e={};for(let r of Object.keys(t))this.isComputedColumn(r)||(e[r]=t[r]);return e}formatStringColumnBare(t,e){let r=e.includes(".")?e.split(".")[1]:e;return this.formatStringColumn(t,r)}dialectEmitsReturning(t){switch(t){case "postgres":case "cockroachdb":case "sqlite":case "mssql":return true;default:return false}}shouldFetchNatively(t,e){if(!this.dialectEmitsReturning(t)||t==="mssql")return false;if(t==="sqlite"&&e==="update"){for(let r of this.modelColumnsMap.values())if(r.autoUpdate)return false}return true}hasComputedColumn(t){return t.some(e=>this.isComputedColumn(e))}resolveColumnAlias(t,e){let r=this.modelColumnsMap.get(e);if(!r||r.columnName===r.databaseName)return "";switch(t){case "mssql":return ` as [${r.columnName}]`;case "mysql":case "mariadb":return ` as \`${r.columnName}\``;case "postgres":case "cockroachdb":case "sqlite":return ` as "${r.columnName}"`;default:return ""}}formatStringTable(t,e){e=e.replace(/\s+/g," ").trim();let r="";return e.toLowerCase().includes(" as ")&&([e,r]=e.split(" as ")),`${e.split(".").map(o=>this.quoteIdentifier(t,o)).join(".")}${r?` as ${this.quoteIdentifier(t,r)}`:""}`}quoteIdentifier(t,e){switch(t){case "mysql":case "mariadb":return `\`${e}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${e}"`;case "mssql":return `[${e}]`;default:return e}}formatRawPlaceholders(t,e,r=[],n=1){if(!r.length)return {sql:e,bindings:[]};let o=n;return {sql:e.replace(/\?/g,()=>{switch(t){case "postgres":case "cockroachdb":return `$${o++}`;case "mssql":return `@${o++}`;default:return "?"}}),bindings:r}}prepareColumns(t,e,r="insert",n="postgres"){if(!t.length)return {columns:t,values:e};let o=[],s=[];for(let l=0;l<t.length;l++){let u=t[l],d=e[l];u!=="*"&&(o.push(u),s.push(d));}let a=n==="mysql"||n==="mariadb";for(let l=0;l<o.length;l++){let u=o[l],d=s[l],c=this.modelColumnsMap.get(u);if(c?.expression){o.splice(l,1),s.splice(l,1),l--;continue}if(!(d instanceof N)){if(!c){wh(d)&&(s[l]=JSON.stringify(d));continue}if(d==null&&(c.autoCreate===true||c.type==="uuid"&&n!=="mysql"&&n!=="mariadb")){o.splice(l,1),s.splice(l,1),l--;continue}if(c.prepare){let m=r==="insert"?c.prepare(d):c.prepare(d)??d;if(m!==null&&typeof m?.then=="function")throw new Error(`hysteria-orm: prepare on column "${u}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);s[l]=m;}n==="sqlite"&&s[l]instanceof Date&&to(c)&&(s[l]=ue(s[l],"ISO","UTC"));}}if(r==="insert"){let l=new Set(t);for(let u of this.jsInsertColumns)l.has(u.columnName)||this.generateJsInsertColumn(u,o,s,n);if(a){let u=this.model.primaryKey;if(u){let d=this.modelColumnsMap.get(u);d&&d.type==="uuid"&&d.isPrimary&&!l.has(u)&&this.generateJsInsertColumn(d,o,s,n);}}}else {let l=new Set(t);for(let u of this.autoUpdateColumns){if(l.has(u.columnName))continue;let d=u.prepare?.(new Date);if(d!=null){if(typeof d?.then=="function")throw new Error(`hysteria-orm: prepare on column "${u.columnName}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);o.push(u.columnName),s.push(n==="sqlite"&&d instanceof Date&&to(u)?ue(d,"ISO","UTC"):d);}}}return {columns:o,values:s}}generateJsInsertColumn(t,e,r,n){let o=t.prepare?.(void 0);if(o!==null&&typeof o?.then=="function")throw new Error(`hysteria-orm: prepare on column "${t.columnName}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);e.push(t.columnName),r.push(n==="sqlite"&&o instanceof Date&&to(t)?ue(o,"ISO","UTC"):o??void 0);}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new b(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}renderWithNodes(t,e,r){return e?.length?new b(this.model,t).parse(e,r):{sql:"",bindings:[]}}};var ro=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};if(e.children.length===1&&e.children[0]instanceof ht){let d=e.children[0];return {sql:`EXEC sp_rename '${e.table}', '${d.newName}'`,bindings:[]}}let o=new b(this.model,"mssql"),s=[],a=[];for(let d of e.children){let{sql:c,bindings:m}=o.parse([d]);s.push(c.trim()),a.push(...m);}let l=s.join(", ");return {sql:`${n} ${l}`,bindings:a}}},Lu=new ro;var no=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},Wu=new no;var oo=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},ju=new oo;var so=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},Fu=new so;var io=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] null`,bindings:[]}}},Uu=new io;var ao=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},Vu=new ao;var lo=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},Ju=new lo;var uo=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},Hu=new uo;var O=class extends N{constructor(e,r){super("raw",true);this.canKeywordBeSeenMultipleTimes=true;this.chainsWith=" ";this.currParamIndex=0;this.isRawValue=true;this.folder="raw";this.file="raw";this.rawValue=e,this.bindings=r;}};var v=class extends N{constructor(e,r=[]){super("sqlfunc");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="sqlfunc";this.file="sqlfunc";this.fn=e,this.args=r;}};var zu=new Map;function Fe(i,t){let e=i===void 0?void 0:zu.get(i),r=zu.get("*");return e?.(t)??r?.(t)}var co=class{toSql(t){let e=t,r;return e.defaultValue instanceof O?r=e.defaultValue.rawValue:e.defaultValue instanceof v?r=new b(this.model,"mssql").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"||e.defaultValue===null?r="null":e.defaultValue==="TRUE"?r="1":e.defaultValue==="FALSE"?r="0":typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="1"&&e.defaultValue!=="0"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`add constraint DF_${e.column} default ${r} for [${e.column}]`,bindings:[]}}},Gu=new co;var mo=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] not null`,bindings:[]}}},Yu=new mo;var po=class{toSql(t){return {sql:"",bindings:[]}}},Zu=new po;function fo(i){return i.replace(/^[`"]|[`"]$/g,"")}function yo(i,t,e){if(!i.includes(".")){let o=fo(i);return `${t}.${o}`}let[r,n]=i.split(".");return r=fo(r),n=fo(n),r!==e?i:n==="*"?`${t}.*`:`${t}.${n}`}function C(i){return typeof i=="function"?i():i}var W=(i,t=new WeakMap)=>{if(i===null||typeof i!="object")return i;if(t.has(i))return t.get(i);if(Array.isArray(i)){let r=[];t.set(i,r);for(let n=0;n<i.length;n++)r[n]=W(i[n],t);return r}let e=Object.create(Object.getPrototypeOf(i)||{});t.set(i,e);for(let r of Object.getOwnPropertyNames(i)){let n=i[r];if(typeof n=="function"){e[r]=n;continue}e[r]=W(n,t);}return e};var ho=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new y(this.model).formatStringColumn("mssql",C(e.column)),o=e.dataType.toLowerCase();if(o==="char"){let a=e.length??1;return {sql:`${n} char(${a})`,bindings:[]}}if(o==="varchar"){let a=e.length??255;return {sql:`${n} varchar(${a})`,bindings:[]}}if(o==="text"||o==="longtext"||o==="mediumtext"||o==="tinytext")return {sql:`${n} varchar(max)`,bindings:[]};if(o==="uuid"){let a=e.isForeignKey?"":" default NEWID()";return {sql:`${n} uniqueidentifier${a}`,bindings:[]}}if(o==="ulid")return {sql:`${n} varchar(26)`,bindings:[]};if(o==="bigint")return e.autoIncrement?{sql:`${n} bigint identity(1,1)`,bindings:[]}:{sql:`${n} bigint`,bindings:[]};if(o==="tinyint")return {sql:`${n} tinyint`,bindings:[]};if(o==="smallint")return {sql:`${n} smallint`,bindings:[]};if(o==="mediumint")return {sql:`${n} int`,bindings:[]};if(o==="float"||o==="real")return {sql:`${n} real`,bindings:[]};if(o==="double")return {sql:`${n} float`,bindings:[]};if(o==="decimal"||o==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${n} decimal(${a}, ${l})`,bindings:[]}}if(o==="date")return {sql:`${n} date`,bindings:[]};if(o==="year")return {sql:`${n} smallint`,bindings:[]};if(o==="time"){let a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${n} time${a}`,bindings:[]}}if(o==="datetime"||o==="timestamp"){let a=typeof e.precision=="number"?`(${e.precision})`:"",l=`${n} datetime2${a}`;return e.autoCreate&&(l+=" default current_timestamp"),{sql:l,bindings:[]}}if(o==="boolean"||o==="bool")return {sql:`${n} bit`,bindings:[]};if(o==="bytea"||o==="binary"||o==="varbinary"||o==="blob"||o==="longblob"||o==="mediumblob"||o==="tinyblob")return {sql:`${n} varbinary(max)`,bindings:[]};if(o==="json"||o==="jsonb")return {sql:`${n} nvarchar(max)`,bindings:[]};if(o==="enum"){if(e.enumValues&&e.enumValues.length>0){let a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${n} varchar(255) check (${n} in (${a}))`,bindings:[]}}return {sql:`${n} varchar(255)`,bindings:[]}}if(o==="integer"||o==="int")return e.autoIncrement?{sql:`${n} int identity(1,1)`,bindings:[]}:{sql:`${n} int`,bindings:[]};if(o==="geometry")return {sql:`${n} geometry`,bindings:[]};if(o==="point")return {sql:`${n} geometry`,bindings:[]};if(o==="linestring")return {sql:`${n} geometry`,bindings:[]};if(o==="polygon")return {sql:`${n} geometry`,bindings:[]};if(o==="multipoint")return {sql:`${n} geometry`,bindings:[]};let s=e.length?`(${e.length})`:"";return {sql:`${n} ${o}${s}`,bindings:[]}}},Xu=new ho;var go=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
122
|
+
`:e,bindings:[]}}},ed=new go;var bo=class{toSql(t){return {sql:"",bindings:[]}}},td=new bo;var To=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let n=e.constraintName?`constraint [${e.constraintName}] `:"",o=(e.columns??[]).map(s=>r.formatStringColumn("mssql",C(s))).join(", ");return {sql:`${n}primary key (${o})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns??[],o=e.constraintName?`constraint [${e.constraintName}] `:"",s=n.map(a=>r.formatStringColumn("mssql",C(a))).join(", ");return e.constraintName?{sql:`${o}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let n=e.defaultValue;return n instanceof O?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof v?{sql:`default ${new b(this.model,"mssql").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"?{sql:"default 1",bindings:[]}:n==="FALSE"?{sql:"default 0",bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let n=e.columns.map(u=>r.formatStringColumn("mssql",C(u))).join(", ");if(!e.references)return {sql:"",bindings:[]};let o=r.formatStringTable("mssql",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("mssql",C(u))).join(", "),l=`${e.constraintName?`constraint [${e.constraintName}] `:""}foreign key (${n}) references ${o}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint [${e.constraintName}] `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},rd=new To;var wo=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mssql"),s=[],a=[];for(let h of e.children){let{sql:f,bindings:w}=o.parse([h]);if(h.folder==="constraint"){let S=s.pop()??"",q=f;if(/not null/i.test(q)||/null/i.test(q)||/default/i.test(q)){let M=`${S} ${q}`.trim();M=M.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(M),a.push(...w);continue}s.push(S),s.push(q),a.push(...w);continue}s.push(f),a.push(...w);}for(let h of e.namedConstraints){let{sql:f,bindings:w}=o.parse([h]);s.push(f),a.push(...w);}let l=s.join(", "),u=[];e.dataCompression&&u.push(`DATA_COMPRESSION = ${e.dataCompression}`);let d=e.onFilegroup?` ON [${e.onFilegroup}]`:"",c=e.textImageOn?` TEXTIMAGE_ON [${e.textImageOn}]`:"",m=u.length>0?` WITH (${u.join(", ")})`:"";return {sql:`${n} (${l})${m}${d}${c}`,bindings:a}}},nd=new wo;var So=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("mssql",e.fromNode),bindings:[]}}},od=new So;var No=class{toSql(t){return {sql:"",bindings:[]}}},sd=new No;var qo=class{toSql(t){return g.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},id=new qo;var Co=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},ad=new Co;var Ro=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},ld=new Ro;var _o=class{toSql(t){let e=t,r=new y(this.model),n=e.alias?` as ${r.quoteIdentifier("mssql",e.alias)}`:"";if(e.table instanceof O){let{sql:l,bindings:u}=r.formatRawPlaceholders("mssql",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("mssql",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"mssql").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},ud=new _o;var Mo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},dd=new Mo;var xo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,n=new b(this.model,"mssql"),o=new y(this.model);if(e.group?.length){let{sql:u,bindings:d}=n.parse(e.group,e.currParamIndex,true);return {sql:`(${u})`,bindings:d}}let s=o.formatStringColumn("mssql",e.column),a="",l=[];if(e.subquery!==void 0){let u=this.parseSubquery(n,e,r);a=`${e.column?`${s} `:""}${e.operator} (${u.sql})`,l=u.bindings;}else if(e.value instanceof v){let u=n.parse([e.value],1,true).sql;a=`${s} ${e.operator} ${u}`;}else if(e.operator==="is null"||e.operator==="is not null")a=`${s} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")a=`${s} ${e.operator} @${r} and @${r+1}`;else {let u=e.value.map((d,c)=>`@${r+c}`).join(", ");a=`${s} ${e.operator} (${u})`;}l=e.value;}else a=`${s} ${e.operator} @${r}`,l=[e.value];return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:l}}parseSubquery(t,e,r){let n=e.subquery;if(typeof n=="string")return {sql:n,bindings:[]};let o=Array.isArray(n)?n:[n];return t.parse(o,r)}},cd=new xo;var Oo=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mssql",e.table),o=e.columns.map(a=>`[${a}]`).join(", ");return {sql:`${e.unique?"unique ":""}[${e.indexName}] on ${n} (${o})`,bindings:[]}}},md=new Oo;var Do=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},pd=new Do;var Ao=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode),o=r.renderWithNodes("mssql",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u="",d;if(e.source){let m=new b(this.model,"mssql").parse(e.source,a);u=e.targetColumns?.length?` (${e.targetColumns.map(p=>r.formatStringColumn("mssql",p)).join(", ")})`:"",d=m.sql,l.push(...m.bindings);}else {let m=e.records.length?Object.keys(e.records[0]).filter(p=>e.records[0][p]!==void 0):[];if(!m.length)d="default values";else {u=` (${m.map(h=>r.formatStringColumn("mssql",h)).join(", ")})`;let p=[];for(let h of e.records){let f=m.map(S=>h[S]),w=[];for(let S of f)S instanceof O?w.push(S.rawValue):(l.push(S),w.push(`@${a++}`));p.push(`(${w.join(", ")})`);}d=`values ${p.join(", ")}`;}}let c="";return e.disableReturning||(c=` output ${(e.returning?.length?e.returning:this.getOutputColumns(e.source?e.targetColumns??[]:Object.keys(e.records[0]??{}).filter(p=>e.records[0][p]!==void 0),r)).map(p=>`inserted.${r.formatStringColumn("mssql",p)}${r.resolveColumnAlias("mssql",p)}`).join(", ")}`),{sql:`${s}${n}${u}${c} ${d}`,bindings:[...o.bindings,...l]}}getOutputColumns(t,e){let r=[...t],n=this.model.primaryKey;return n&&!t.includes(n)&&r.push(n),r}},fd=new Ao;var $o=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};if(e.using?.length)throw new T("JoinQueryBuilder::using","USING_NOT_SUPPORTED_IN_MSSQL");let r=new y(this.model),n=r.formatStringTable("mssql",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let s=e.right;s.includes(".")||(s=`${this.model.table}.${s}`);let a=r.formatStringColumn("mssql",o),l=r.formatStringColumn("mssql",s),u=`${n} on ${a} ${e.on?.operator} ${l}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"mssql");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},yd=new $o;var Kt=class extends N{constructor(e,r,n,o,s){super("json_mutation");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="json_mutation";this.file="json_mutation";this.operation=e,this.column=r,this.path=n,this.value=o,this.alias=s;}},hd=(i,t,e,r)=>new Kt("set",i,t,e,r),gd=(i,t,e,r)=>new Kt("insert",i,t,e,r),bd=(i,t,e)=>new Kt("remove",i,t,void 0,e),Sh=/^[A-Za-z_][A-Za-z0-9_]*$/;function Td(i){if(Array.isArray(i))return i;let t=[],e=i.replace(/^\$/,""),r=/\.([^.[\]]+)|\[(\d+)\]/g,n;for(;(n=r.exec(e))!==null;)n[1]!==void 0?t.push(n[1]):t.push(Number(n[2]));return t}function bt(i){return "$"+Td(i).map(e=>typeof e=="number"?`[${e}]`:Sh.test(e)?`.${e}`:`["${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"]`).join("")}function wd(i){return `'{${Td(i).map(r=>{let n=String(r);return /^[A-Za-z0-9_]+$/.test(n)?n:`"${n.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}).join(",")}}'`}var Io=class{toSql(t){let e=t;if(e.operation!=="set")throw new T("MssqlJsonMutationInterpreter::toSql","NOT_SUPPORTED_IN_MSSQL",new Error(`json${e.operation==="insert"?"Insert":"Remove"} is not supported by mssql; only jsonSet (JSON_MODIFY) is`));let r=new y(this.model).formatStringColumn("mssql",e.column),n=`'${bt(e.path).replace(/'/g,"''")}'`,o=e.value!==null&&typeof e.value=="object",s=`JSON_MODIFY(${r}, ${n}, @${e.currParamIndex})`;return {sql:this.withAlias(s,e.alias),bindings:[o?JSON.stringify(e.value):e.value]}}withAlias(t,e){return e?`${t} as [${e}]`:t}},Sd=new Io;var vo=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},Nd=new vo;var Po=class{toSql(t){return {sql:"",bindings:[]}}},qd=new Po;var Eo=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},Cd=new Eo;var Bo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:(g.warn("MSSQL does not support ON CONFLICT or ON DUPLICATE KEY. Use MERGE statement for upsert operations. This clause will be ignored. Consider using raw queries for MSSQL upserts."),{sql:"",bindings:[]})}},Rd=new Bo;var ko=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("mssql",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},_d=new ko;var Qo=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Md=new Qo;var Ko=class{toSql(t){let e=t,r=new y(this.model);return {sql:`output ${!e.columns.length||e.columns.includes("*")?`${e.prefix}.*`:e.columns.map(o=>`${e.prefix}.${r.formatStringColumn("mssql",o)}${r.resolveColumnAlias("mssql",o)}`).join(", ")}`,bindings:[]}}},xd=new Ko;var Lo=class{toSql(t){return {sql:`SELECT
|
|
123
123
|
cc.name AS name,
|
|
124
124
|
cc.definition AS expression
|
|
125
125
|
FROM sys.check_constraints cc
|
|
126
126
|
JOIN sys.tables t ON cc.parent_object_id = t.object_id
|
|
127
|
-
WHERE t.name = '${t.table}'`,bindings:[]}}},
|
|
127
|
+
WHERE t.name = '${t.table}'`,bindings:[]}}},Od=new Lo;var Wo=class{toSql(t){return {sql:`SELECT
|
|
128
128
|
fk.name as name,
|
|
129
129
|
c.name as column_name,
|
|
130
130
|
rt.name as referenced_table,
|
|
@@ -136,7 +136,7 @@ INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_i
|
|
|
136
136
|
INNER JOIN sys.columns c ON fkc.parent_object_id = c.object_id AND fkc.parent_column_id = c.column_id
|
|
137
137
|
INNER JOIN sys.tables rt ON fkc.referenced_object_id = rt.object_id
|
|
138
138
|
INNER JOIN sys.columns rc ON fkc.referenced_object_id = rc.object_id AND fkc.referenced_column_id = rc.column_id
|
|
139
|
-
WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},
|
|
139
|
+
WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},Dd=new Wo;var jo=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:[]}}},Ad=new jo;var Fo=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:[]}}},$d=new Fo;var Uo=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:[]}}},Id=new Uo;var Vo=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:[]}}},vd=new Vo;var Jo=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:[]}}},Pd=new Jo;var Ho=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:[]}}},Ed=new Ho;var zo=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = '${t.table}'`,bindings:[]}}},Bd=new zo;var Go=class{toSql(t){return {sql:`SELECT
|
|
140
140
|
i.name as index_name,
|
|
141
141
|
c.name as column_name,
|
|
142
142
|
i.is_unique as is_unique
|
|
@@ -145,7 +145,7 @@ INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = i
|
|
|
145
145
|
INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
|
|
146
146
|
WHERE i.object_id = OBJECT_ID('${t.table}')
|
|
147
147
|
AND i.is_primary_key = 0
|
|
148
|
-
AND i.type > 0`,bindings:[]}}},
|
|
148
|
+
AND i.type > 0`,bindings:[]}}},kd=new Go;var Yo=class{toSql(t){return {sql:`SELECT
|
|
149
149
|
tc.CONSTRAINT_NAME as name,
|
|
150
150
|
kcu.COLUMN_NAME as column_name
|
|
151
151
|
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
|
|
@@ -153,7 +153,7 @@ JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
|
|
|
153
153
|
ON tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
|
|
154
154
|
WHERE tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
|
|
155
155
|
AND tc.TABLE_NAME = '${t.table}'
|
|
156
|
-
ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},
|
|
156
|
+
ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},Qd=new Yo;var Zo=class{toSql(t){return {sql:`SELECT
|
|
157
157
|
c.COLUMN_NAME as column_name,
|
|
158
158
|
c.DATA_TYPE as data_type,
|
|
159
159
|
c.IS_NULLABLE as is_nullable,
|
|
@@ -163,8 +163,8 @@ ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},Bd=new Go;var Yo=class{toSql(t){re
|
|
|
163
163
|
c.NUMERIC_SCALE as numeric_scale
|
|
164
164
|
FROM INFORMATION_SCHEMA.COLUMNS c
|
|
165
165
|
WHERE c.TABLE_NAME = '${t.table}'
|
|
166
|
-
ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},kd=new Yo;var Zo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("mssql",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"mssql").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"mssql").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new y(this.model).formatStringColumn("mssql",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"mssql").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},Kd=new Zo;var te=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 Xo=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=te.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}},Qd=new Xo;var es=class{toSql(t){let e=t,r=je(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof x?s.rawValue:s instanceof P?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}}},Ld=new es;var ts=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:[]}}},Wd=new ts;var rs=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}}},jd=new rs;var ns=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((u,d)=>{let c=e.values[d],m=r.formatStringColumn("mssql",u);if(c instanceof x)return `${m} = ${c.rawValue}`;if(c instanceof N){let h=new b(this.model,"mssql").parse([c],s,true);return o.push(...h.bindings),s+=h.bindings.length,`${m} = ${h.sql}`}let p=`@${s++}`;return o.push(c),`${m} = ${p}`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},Fd=new ns;var os=class{toSql(t){let e=t;if(e.isRawValue){let a=e.value??[];if(a.length===0)return {sql:e.column,bindings:[]};let l=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`@${l++}`),bindings:a}}let r=e.value,n=e.currParamIndex;if(this.isRawNode(r)){let a=this.formatRawIdentifierIfPossible(r.rawValue),u=`${new y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`.trim();return e.isNegated&&(u=`not (${u})`),{sql:u,bindings:[]}}if(Array.isArray(r)){let a=new y(this.model).formatStringColumn("mssql",e.column);if(e.operator.toLowerCase()==="between"){let d=`@${n} AND @${n+1}`,c=`${a} between ${d}`;return e.isNegated&&(c=`not (${c})`),{sql:c.trim(),bindings:r}}let l=r.map((d,c)=>`@${n+c}`).join(", "),u=`${a} ${e.operator} (${l})`;return e.isNegated&&(u=`not (${u})`),{sql:u.trim(),bindings:r}}if(r instanceof P){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}},Ud=new os;var ss=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}}},Vd=new ss;var is=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],s=new y(this.model).formatStringColumn("mssql",e.column);switch(e.jsonOperator){case "=":n=`${s} = @${r}`,o=[JSON.stringify(e.value)];break;case "contains":case "not contains":n=`CHARINDEX(@${r}, ${s}) > 0`,o=[JSON.stringify(e.value)];break;case "path":{let a=te.from(e.path??"");n=`JSON_VALUE(${s}, '${a.toMssql()}') ${e.comparisonOperator??"="} @${r}`,o=[e.value];break}case "subset":case "has none":throw new S("WhereJsonInterpreter::unsupported","NOT_SUPPORTED_IN_MSSQL");case "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`NOT (${n})`),{sql:n.trim(),bindings:o}}},Jd=new is;var as=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}}},Hd=new as;var ls=class{toSql(t){let e=t,r=new y(this.model),n=s=>r.formatStringColumn("mssql",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},zd=new ls;var us=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}}},Gd=new us;var ds=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:[]}}},Yd=new ds;var cs=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Zd=new cs;var ms=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`\`${n}\``).join(", ")})`,bindings:[]}}},Xd=new ms;var ps=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:[]}}},ec=new ps;var fs=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,this.dbType??"mysql"),s=[],a=[];for(let m of e.children){let{sql:p,bindings:h}=o.parse([m]);if(m.file==="add_column")s.push(p);else if(m.file==="add_constraint"||m.folder==="constraint"){let f=s[s.length-1]??"",T=/^\s*add\s+column\b/i.test(f),w=/^\s*add\s+constraint\b/i.test(p);if(T&&!w){let q=p.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${f} ${q}`;}else {let q=/^\s*add\b/i.test(p)?p:`add ${p}`;s.push(q);}}else m.file==="set_default"||m.file==="drop_default"||m.file==="set_not_null"||m.file,s.push(p);a.push(...h);}let l=s.join(", "),u=e.ifExists?"if exists ":"";return {sql:/^\s*drop\s+index\b/i.test(l)?l:`${u}${n} ${l}`,bindings:a}}},tc=new fs;var ys=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},rc=new ys;var hs=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},nc=new hs;var gs=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},oc=new gs;var bs=class{toSql(t){return {sql:"",bindings:[]}}},sc=new bs;var Ts=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},ic=new Ts;var ws=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},ac=new ws;var Ss=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},lc=new Ss;var Ns=class{toSql(t){let e=t,r;return e.defaultValue instanceof x?r=e.defaultValue.rawValue:e.defaultValue instanceof P?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:[]}}},uc=new Ns;var qs=class{toSql(t){return {sql:"",bindings:[]}}},dc=new qs;var Cs=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:[]}}},cc=new Cs;var Rs=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:[]}}},mc=new Rs;var _s=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
167
|
-
`:e,bindings:[]}}},
|
|
166
|
+
ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Kd=new Zo;var Xo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("mssql",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"mssql").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"mssql").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new y(this.model).formatStringColumn("mssql",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"mssql").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},Ld=new Xo;var ee=class i{constructor(t){this.segments=this.normalize(t);}normalize(t){if(Array.isArray(t))return t;if(typeof t=="string"){if(!t||t==="$")return [];let e=t.trim();return e=e.startsWith("$.")?e.slice(2):e,e=e.startsWith("$")?e.slice(1):e,e=e.startsWith(".")?e.slice(1):e,e?e.split(".").map(r=>{let n=Number(r);return isNaN(n)?r:n}):[]}return []}getSegments(){return [...this.segments]}isEmpty(){return this.segments.length===0}toPostgres(t=false){if(this.isEmpty())return "";let e=[];for(let r=0;r<this.segments.length;r++){let n=this.segments[r],o=r===this.segments.length-1,s=typeof n=="number";o&&t?e.push(s?`->>${n}`:`->>'${n}'`):e.push(s?`->${n}`:`->'${n}'`);}return e.join("")}toStandardJsonPath(){return this.isEmpty()?"$":`$.${this.segments.join(".")}`}toMysql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments){if(typeof e=="number"){t.push(`[${e}]`);continue}t.push(`.${e}`);}return t.join("")}toSqlite(){return this.toStandardJsonPath()}toMssql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments)typeof e=="number"?t.push(`[${e}]`):t.push(`.${e}`);return t.join("")}toDbSyntax(t,e=false){switch(t){case "postgres":case "cockroachdb":return this.toPostgres(e);case "mysql":case "mariadb":return this.toMysql();case "sqlite":return this.toSqlite();case "mssql":return this.toMssql();default:return this.toStandardJsonPath()}}static from(t){return new i(t)}static root(){return new i("")}};var es=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("mssql",e.column),n=ee.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMssql();return r==="$"?t:`JSON_VALUE(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toMssql();return `(SELECT COUNT(*) FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}buildObjectKeysSql(t,e){let r=e.toMssql();return `(SELECT [key] FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}formatWithAlias(t,e){return e&&e.length>0?`${t} as [${e}]`:t}},Wd=new es;var ts=class{toSql(t){let e=t,r=Fe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof O?s.rawValue:s instanceof v?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "NEWID()";case "$now":case "$currentTimestamp":return "current_timestamp";default:return}}},jd=new ts;var rs=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:[]};if(e.options&&Object.values(e.options).some(Boolean))throw new T("MssqlTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("MSSQL does not support TRUNCATE options"));return {sql:`table ${new y(this.model).getFromForWriteOperations("mssql",e.fromNode)}`,bindings:[]}}},Fd=new rs;var ns=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new y(this.model).formatRawPlaceholders("mssql",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Ud=new ns;var os=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((u,d)=>{let c=e.values[d],m=r.formatStringColumn("mssql",u);if(c instanceof O)return `${m} = ${c.rawValue}`;if(c instanceof N){let h=new b(this.model,"mssql").parse([c],s,true);return o.push(...h.bindings),s+=h.bindings.length,`${m} = ${h.sql}`}let p=`@${s++}`;return o.push(c),`${m} = ${p}`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},Vd=new os;var ss=class{toSql(t){let e=t;if(e.isRawValue){let a=e.value??[];if(a.length===0)return {sql:e.column,bindings:[]};let l=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`@${l++}`),bindings:a}}let r=e.value,n=e.currParamIndex;if(this.isRawNode(r)){let a=this.formatRawIdentifierIfPossible(r.rawValue),u=`${new y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`.trim();return e.isNegated&&(u=`not (${u})`),{sql:u,bindings:[]}}if(Array.isArray(r)){let a=new y(this.model).formatStringColumn("mssql",e.column);if(e.operator.toLowerCase()==="between"){let d=`@${n} AND @${n+1}`,c=`${a} between ${d}`;return e.isNegated&&(c=`not (${c})`),{sql:c.trim(),bindings:r}}let l=r.map((d,c)=>`@${n+c}`).join(", "),u=`${a} ${e.operator} (${l})`;return e.isNegated&&(u=`not (${u})`),{sql:u.trim(),bindings:r}}if(r instanceof v){let a=new b(this.model,"mssql").parse([r],1,true).sql,u=`${new y(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`;return e.isNegated&&(u=`not (${u})`),{sql:u.trim(),bindings:[]}}let o=new y(this.model).formatStringColumn("mssql",e.column);if(e.operator.includes("null")){let a=`${o} ${e.operator}`;return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:[]}}if(r===void 0)return {sql:"",bindings:[]};let s=`${o} ${e.operator} @${n}`;return e.isNegated&&(s=`not (${s})`),{sql:s.trim(),bindings:[r]}}isRawNode(t){if(!t||!(typeof t=="object"))return false;let r="rawValue"in t,n=t.isRawValue===true;return r&&n}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("mssql",t):t}},Jd=new ss;var is=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"mssql"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},Hd=new is;var as=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],s=new y(this.model).formatStringColumn("mssql",e.column);switch(e.jsonOperator){case "=":n=`${s} = @${r}`,o=[JSON.stringify(e.value)];break;case "contains":case "not contains":n=`CHARINDEX(@${r}, ${s}) > 0`,o=[JSON.stringify(e.value)];break;case "path":{let a=ee.from(e.path??"");n=`JSON_VALUE(${s}, '${a.toMssql()}') ${e.comparisonOperator??"="} @${r}`,o=[e.value];break}case "subset":case "has none":throw new T("WhereJsonInterpreter::unsupported","NOT_SUPPORTED_IN_MSSQL");case "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`NOT (${n})`),{sql:n.trim(),bindings:o}}},zd=new as;var ls=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"mssql"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"mssql"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},Gd=new ls;var us=class{toSql(t){let e=t,r=new y(this.model),n=s=>r.formatStringColumn("mssql",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},Yd=new us;var ds=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex);e.clause==="materialized"&&g.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored.");let s=e.columns?.length?` (${e.columns.map(a=>new y(this.model).formatStringColumnBare("mssql",a)).join(", ")})`:"";return {sql:`[${e.alias}]${s} as (${o.sql})`,bindings:o.bindings}}},Zd=new ds;var cs=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length>0){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length>0&&(n+=` ${s.join(" ")}`);}return this.dbType!=="mariadb"&&(n=n.replace(/\s+default\s+\(uuid\(\)\)/gi,"")),{sql:`add column ${n}`,bindings:[]}}},Xd=new cs;var ms=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},ec=new ms;var ps=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`\`${n}\``).join(", ")})`,bindings:[]}}},tc=new ps;var fs=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),s=o.join(" ");e.newType.dataType==="uuid"&&(s=s.replace(/\s+default\s+.+$/i,"").trim());let a=`modify column \`${e.column}\` ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?" null":" not null";a+=l;}if(!e.options.dropDefault){if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=` default ${l}`;}}return e.options.collate&&(a+=` COLLATE ${e.options.collate}`),e.options.unique!==void 0&&e.options.unique&&(a+=" unique"),{sql:a,bindings:[]}}},rc=new fs;var ys=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,this.dbType??"mysql"),s=[],a=[];for(let m of e.children){let{sql:p,bindings:h}=o.parse([m]);if(m.file==="add_column")s.push(p);else if(m.file==="add_constraint"||m.folder==="constraint"){let f=s[s.length-1]??"",w=/^\s*add\s+column\b/i.test(f),S=/^\s*add\s+constraint\b/i.test(p);if(w&&!S){let q=p.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${f} ${q}`;}else {let q=/^\s*add\b/i.test(p)?p:`add ${p}`;s.push(q);}}else m.file==="set_default"||m.file==="drop_default"||m.file==="set_not_null"||m.file,s.push(p);a.push(...h);}let l=s.join(", "),u=e.ifExists?"if exists ":"";return {sql:/^\s*drop\s+index\b/i.test(l)?l:`${u}${n} ${l}`,bindings:a}}},nc=new ys;var hs=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},oc=new hs;var gs=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},sc=new gs;var bs=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},ic=new bs;var Ts=class{toSql(t){return {sql:"",bindings:[]}}},ac=new Ts;var ws=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},lc=new ws;var Ss=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},uc=new Ss;var Ns=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},dc=new Ns;var qs=class{toSql(t){let e=t,r;return e.defaultValue instanceof O?r=e.defaultValue.rawValue:e.defaultValue instanceof v?r=new b(this.model,"mysql").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column \`${e.column}\` set default ${r}`,bindings:[]}}},cc=new qs;var Cs=class{toSql(t){return {sql:"",bindings:[]}}},mc=new Cs;var Rs=class{toSql(t){let e=t,r=[];return e.engine&&r.push(`ENGINE=${e.engine}`),e.charset&&r.push(`CHARSET=${e.charset}`),e.collate&&r.push(`COLLATE=${e.collate}`),{sql:r.join(" "),bindings:[]}}},pc=new Rs;var _s=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new y(this.model).formatStringColumn("mysql",C(e.column)),o=e.dataType.toLowerCase(),s,a=false,l=false;if(o==="char"){let u=e.length??1;s=`${n} char(${u})`;}else if(o==="varchar"){let u=e.length??255;s=`${n} varchar(${u})`;}else if(o==="uuid")s=e.isForeignKey?`${n} varchar(36)`:`${n} varchar(36) default (uuid())`;else if(o==="ulid")s=`${n} varchar(26)`;else if(o==="longtext"||o==="mediumtext"||o==="tinytext"||o==="text")s=`${n} ${o}`;else if(o==="integer"||o==="int")a=true,l=!!e.autoIncrement,s=`${n} int`;else if(o==="tinyint")a=true,s=`${n} tinyint`;else if(o==="smallint")a=true,s=`${n} smallint`;else if(o==="mediumint")a=true,s=`${n} mediumint`;else if(o==="bigint")a=true,l=!!e.autoIncrement,s=`${n} bigint`;else if(o==="float")a=true,s=`${n} float`;else if(o==="double")a=true,s=`${n} double`;else if(o==="real")a=true,s=`${n} double`;else if(o==="decimal"){a=true;let u=e.precision??10,d=e.scale??0;s=`${n} decimal(${u}, ${d})`;}else if(o==="numeric"){a=true;let u=e.precision??10,d=e.scale??0;s=`${n} numeric(${u}, ${d})`;}else if(o==="date")s=`${n} date`;else if(o==="time"){let u=typeof e.precision=="number"?`(${e.precision})`:"";s=`${n} time${u}`.trimEnd();}else if(o==="datetime"){let u=typeof e.precision=="number"?`(${e.precision})`:"";s=`${n} datetime${u}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${u}`),e.autoUpdate&&(s+=` on update current_timestamp${u}`);}else if(o==="timestamp"){let u=typeof e.precision=="number"?`(${e.precision})`:"";s=`${n} timestamp${u}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${u}`),e.autoUpdate&&(s+=` on update current_timestamp${u}`);}else if(o==="year")s=`${n} year`;else if(o==="boolean")s=`${n} boolean`;else if(o==="varbinary"){let u=e.length??255;s=`${n} varbinary(${u})`;}else if(o==="binary"){let u=e.length??255;s=`${n} binary(${u})`;}else if(o==="bytea"||o==="blob")s=`${n} blob`;else if(o==="json"||o==="jsonb")s=`${n} json`;else if(o==="enum")if(e.enumValues&&e.enumValues.length>0){let u=e.enumValues.map(d=>`'${d}'`).join(", ");s=`${n} enum(${u})`;}else s=`${n} text`;else if(o==="geometry")s=`${n} geometry`;else if(o==="point")s=`${n} point`;else if(o==="linestring")s=`${n} linestring`;else if(o==="polygon")s=`${n} polygon`;else if(o==="multipoint")s=`${n} multipoint`;else {let u=e.length?`(${e.length})`:"";s=`${n} ${o}${u}`;}return a&&(e.zerofill?s+=" ZEROFILL":e.unsigned&&(s+=" UNSIGNED"),l&&(s+=" AUTO_INCREMENT")),e.collate&&(s+=` COLLATE ${e.collate}`),{sql:s,bindings:[]}}},fc=new _s;var Ms=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
167
|
+
`:e,bindings:[]}}},yc=new Ms;var xs=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},hc=new xs;var Os=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){let n=(e.columns??[]).map(s=>r.formatStringColumn("mysql",C(s))).join(", ");return {sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}primary key (${n})`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns.map(s=>r.formatStringColumn("mysql",C(s))).join(", "),o=e.constraintName?`constraint \`${e.constraintName}\` `:"";return e.constraintName?{sql:`${o}unique (${n})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let n=e.defaultValue;return n instanceof O?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof v?{sql:`default ${new b(this.model,"mysql").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let n=(e.columns??[]).map(u=>r.formatStringColumn("mysql",C(u))).join(", "),o=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("mysql",C(u))).join(", "),l=`${e.constraintName?`constraint \`${e.constraintName}\` `:""}foreign key (${n}) references ${o}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},gc=new Os;var Ds=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mysql"),s=[],a=[];for(let p of e.children){let{sql:h,bindings:f}=o.parse([p]);if(p.folder==="constraint"){let w=s.pop()??"",S=h;if(/not null/i.test(S)||/null/i.test(S)||/default/i.test(S)){let q=`${w} ${S}`.trim();q=q.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(q),a.push(...f);continue}s.push(w),s.push(S),a.push(...f);continue}s.push(h),a.push(...f);}for(let p of e.namedConstraints){let{sql:h,bindings:f}=o.parse([p]);s.push(h),a.push(...f);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.engine&&d.push(`ENGINE=${e.engine}`),e.charset&&d.push(`CHARSET=${e.charset}`),e.collate&&d.push(`COLLATE=${e.collate}`);let c=d.length>0?` ${d.join(" ")}`:"";return {sql:`${u}${n} (${l})${c}`,bindings:a}}},bc=new Ds;var As=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},Tc=new As;var $s=class{toSql(t){return {sql:"distinct",bindings:[]}}},wc=new $s;var Is=class{toSql(t){return g.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},Sc=new Is;var vs=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Nc=new vs;var Ps=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},qc=new Ps;var Es=class{toSql(t){let e=t,r=new y(this.model),n=e.alias?` as ${r.quoteIdentifier("mysql",e.alias)}`:"";if(e.table instanceof O){let{sql:l,bindings:u}=r.formatRawPlaceholders("mysql",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("mysql",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"mysql").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},Cc=new Es;var Bs=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},Rc=new Bs;var ks=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=new b(this.model,"mysql"),n=new y(this.model);if(e.group?.length){let{sql:l,bindings:u}=r.parse(e.group,e.currParamIndex,true);return {sql:`(${l})`,bindings:u}}let o=n.formatStringColumn("mysql",e.column),s="",a=[];if(e.subquery!==void 0){let l=this.parseSubquery(r,e);s=`${e.column?`${o} `:""}${e.operator} (${l.sql})`,a=l.bindings;}else if(e.value instanceof v){let l=r.parse([e.value],1,true).sql;s=`${o} ${e.operator} ${l}`;}else if(e.operator==="is null"||e.operator==="is not null")s=`${o} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")s=`${o} ${e.operator} ? and ?`;else {let l=e.value.map(()=>"?").join(", ");s=`${o} ${e.operator} (${l})`;}a=e.value;}else s=`${o} ${e.operator} ?`,a=[e.value];return e.isNegated&&(s=`not (${s})`),{sql:s.trim(),bindings:a}}parseSubquery(t,e){let r=e.subquery;if(typeof r=="string")return {sql:r,bindings:[]};let n=Array.isArray(r)?r:[r];return t.parse(n,e.currParamIndex)}},_c=new ks;var Qs=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("mysql",e.table),o=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${n} (${o})`,bindings:[]}}},Mc=new Qs;var Ks=class{toSql(t){let e=t;if(!e.table)throw new Error("MySQL DROP INDEX requires table name");return {sql:`\`${e.indexName}\` on \`${e.table}\``,bindings:[]}}},xc=new Ks;var Ls=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=this.dbType==="mariadb"?"mariadb":"mysql",n=new y(this.model),o=n.getFromForWriteOperations(r,e.fromNode);if(e.withNodes?.length&&!e.source)throw new T("MysqlInsertInterpreter","CTE_NOT_SUPPORTED_ON_INSERT",new Error("MySQL/MariaDB only support a CTE on INSERT ... SELECT (insertFrom), not on a VALUES insert"));let s=n.renderWithNodes(r,e.withNodes,e.currParamIndex),a=e.currParamIndex+s.bindings.length,l=[],u;if(e.source){let c=new b(this.model,r).parse(e.source,a),m=e.targetColumns?.length?` (${e.targetColumns.map(h=>n.formatStringColumn(r,h)).join(", ")})`:"",p=s.sql?` ${s.sql}`:"";u=`${o}${m}${p} ${c.sql}`,l.push(...c.bindings);}else {let c=e.records.length?Object.keys(e.records[0]):[];if(!c.length)u=`${o} () values ()`;else {let m=c.map(h=>n.formatStringColumn(r,h)).join(", "),p=[];for(let h of e.records){let f=c.map(S=>h[S]),w=[];for(let S of f)S instanceof O?w.push(S.rawValue):(l.push(S),w.push("?"));p.push(`(${w.join(", ")})`);}u=`${o} (${m}) VALUES ${p.join(", ")}`;}}let d=`${u}`;if(this.dbType==="mariadb"&&!e.disableReturning){if(e.returning&&e.returning.length){let c=e.returning.map(m=>n.formatStringColumn("mariadb",m)).join(", ");return {sql:`${d} returning ${c}`,bindings:[...s.bindings,...l]}}return {sql:`${d} returning *`,bindings:[...s.bindings,...l]}}return {sql:d,bindings:[...s.bindings,...l]}}},Oc=new Ls;var Ws=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=r.formatStringTable("mysql",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o;if(e.using?.length){let c=e.using.map(m=>r.formatStringColumn("mysql",m)).join(", ");return o=`${n} using (${c})`,{sql:o,bindings:[]}}let s=e.left;s.includes(".")||(s=`${e.table}.${s}`);let a=e.right;a.includes(".")||(a=`${this.model.table}.${a}`);let l=r.formatStringColumn("mysql",s),u=r.formatStringColumn("mysql",a);o=`${n} on ${l} ${e.on?.operator} ${u}`;let d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"mysql");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");o+=` and ${h}`,d.push(...p.bindings);}}}return {sql:o,bindings:d}}},Dc=new Ws;var Nh={set:"JSON_SET",insert:"JSON_INSERT",remove:"JSON_REMOVE"},js=class{toSql(t){let e=t,r=new y(this.model).formatStringColumn("mysql",e.column),n=`'${bt(e.path).replace(/'/g,"''")}'`,o=Nh[e.operation];if(e.operation==="remove")return {sql:this.withAlias(`${o}(${r}, ${n})`,e.alias),bindings:[]};let s=e.value!==null&&typeof e.value=="object",a=s&&this.dbType!=="mariadb"?"CAST(? AS JSON)":"?",l=s?JSON.stringify(e.value):e.value;return {sql:this.withAlias(`${o}(${r}, ${n}, ${a})`,e.alias),bindings:[l]}}withAlias(t,e){return e?`${t} as \`${e}\``:t}},Ac=new js;var Fs=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},$c=new Fs;var qh={for_update:"for update",for_share:"lock in share mode"},Us=class{toSql(t){let e=t,r=qh[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},Ic=new Us;var Vs=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},vc=new Vs;var Js=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model);if(e.mode==="ignore"){let o=e.conflictColumns?.[0]||"id",s=r.formatStringColumn("mysql",`${e.table}.${o}`);return {sql:`ON DUPLICATE KEY UPDATE ${s} = ${s}`,bindings:[]}}return {sql:`ON DUPLICATE KEY UPDATE ${e.columnsToUpdate.map(o=>`${r.formatStringColumn("mysql",o)} = VALUES(${r.formatStringColumn("mysql",o)})`).join(", ")}`,bindings:[]}}},Pc=new Js;var Hs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("mysql",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},Ec=new Hs;var zs=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Bc=new zs;var Gs=class{toSql(t){return {sql:"",bindings:[]}}},kc=new Gs;var Ys=class{toSql(t){return {sql:`SELECT
|
|
168
168
|
cc.CONSTRAINT_NAME AS name,
|
|
169
169
|
cc.CHECK_CLAUSE AS expression
|
|
170
170
|
FROM information_schema.CHECK_CONSTRAINTS cc
|
|
@@ -173,7 +173,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},kd=new Yo;var Zo=class{toSql(t){let
|
|
|
173
173
|
AND cc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
|
|
174
174
|
WHERE tc.TABLE_SCHEMA = DATABASE()
|
|
175
175
|
AND tc.TABLE_NAME = '${t.table}'
|
|
176
|
-
AND tc.CONSTRAINT_TYPE = 'CHECK'`,bindings:[]}}},
|
|
176
|
+
AND tc.CONSTRAINT_TYPE = 'CHECK'`,bindings:[]}}},Qc=new Ys;var Zs=class{toSql(t){return {sql:`SELECT
|
|
177
177
|
k.CONSTRAINT_NAME AS name,
|
|
178
178
|
k.COLUMN_NAME AS column_name,
|
|
179
179
|
k.REFERENCED_TABLE_NAME AS referenced_table,
|
|
@@ -184,13 +184,13 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},kd=new Yo;var Zo=class{toSql(t){let
|
|
|
184
184
|
JOIN information_schema.REFERENTIAL_CONSTRAINTS r
|
|
185
185
|
ON k.CONSTRAINT_NAME = r.CONSTRAINT_NAME AND k.CONSTRAINT_SCHEMA = r.CONSTRAINT_SCHEMA
|
|
186
186
|
WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.REFERENCED_TABLE_NAME IS NOT NULL
|
|
187
|
-
ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},
|
|
187
|
+
ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},Kc=new Zs;var Xs=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:[]}}},Lc=new Xs;var ei=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:[]}}},Wc=new ei;var ti=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.check_constraints WHERE constraint_schema = DATABASE() AND constraint_name = '${t.constraint}'`,bindings:[]}}},jc=new ti;var ri=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:[]}}},Fc=new ri;var ni=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:[]}}},Uc=new ni;var oi=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:[]}}},Vc=new oi;var si=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = '${t.table}'`,bindings:[]}}},Jc=new si;var ii=class{toSql(t){return {sql:`SHOW INDEX FROM \`${t.table}\``,bindings:[]}}},Hc=new ii;var ai=class{toSql(t){return {sql:`SELECT
|
|
188
188
|
CONSTRAINT_NAME AS name,
|
|
189
189
|
COLUMN_NAME AS column_name
|
|
190
190
|
FROM information_schema.KEY_COLUMN_USAGE k
|
|
191
191
|
WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.CONSTRAINT_NAME = 'PRIMARY'
|
|
192
|
-
ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},Jc=new ii;var ai=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 ai;var li=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("mysql",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"mysql").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"mysql").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new y(this.model).formatStringColumn("mysql",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"mysql").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},zc=new li;var ui=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=te.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}},Gc=new ui;var di=class{toSql(t){let e=t,r=je(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof x?s.rawValue:s instanceof P?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}}},Yc=new di;var ci=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:[]}}},Zc=new ci;var mi=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}}},Xc=new mi;var pi=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((u,d)=>{let c=e.values[d],m=r.formatStringColumn("mysql",u);if(c instanceof x)return `${m} = ${c.rawValue}`;if(c instanceof N){let p=new b(this.model,"mysql").parse([c],s,true);return o.push(...p.bindings),s+=p.bindings.length,`${m} = ${p.sql}`}return o.push(c),`${m} = ?`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},em=new pi;var fi=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 P){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}},tm=new fi;var yi=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}}},rm=new yi;var hi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new y(this.model).formatStringColumn("mysql",e.column);switch(e.jsonOperator){case "=":r=this.dbType==="mariadb"?`${o} = ?`:`${o} = CAST(? AS JSON)`,n=[JSON.stringify(e.value)];break;case "contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "subset":r=`JSON_CONTAINS(?, ${o})`,n=[JSON.stringify(e.value)];break;case "path":{let s=te.from(e.path??"");r=`JSON_UNQUOTE(JSON_EXTRACT(${o}, '${s.toMysql()}')) ${e.comparisonOperator??"="} ?`,n=[e.value];break}case "has none":throw new S("WhereJsonInterpreter::has none","NOT_SUPPORTED_IN_MYSQL");case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},nm=new hi;var gi=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}}},om=new gi;var bi=class{toSql(t){let e=t,r=new y(this.model),n=s=>r.formatStringColumn("mysql",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},sm=new bi;var Ti=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}}},im=new Ti;var wi=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:[]}}},am=new wi;var Si=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},lm=new Si;var Ni=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`"${n}"`).join(", ")})`,bindings:[]}}},um=new Ni;var qi=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:[]}}},dm=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:"",bindings:[]};let o=new b(this.model,"postgres"),s=[],a=[];for(let c of e.children){let{sql:m,bindings:p}=o.parse([c]);s.push(m.trim()),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifExists?"if exists ":""}${n} ${l}`,bindings:a}}},cm=new Ci;var Ri=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},mm=new Ri;var _i=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},pm=new _i;var Mi=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},fm=new Mi;var xi=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},ym=new xi;var Oi=class{toSql(t){return {sql:"",bindings:[]}}},hm=new Oi;var Di=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},gm=new Di;var Ai=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},bm=new Ai;var $i=class{toSql(t){let e=t,r;return e.defaultValue instanceof x?r=e.defaultValue.rawValue:e.defaultValue instanceof P?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:[]}}},Tm=new $i;var vi=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},wm=new vi;var Ii=class{toSql(t){return {sql:"",bindings:[]}}},Sm=new Ii;var Pi=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:[]}}},Nm=new Pi;var Ei=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
193
|
-
`:e,bindings:[]}}},qm=new Ei;var Bi=class{toSql(t){return {sql:"",bindings:[]}}},Cm=new Bi;var ki=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 x?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof P?{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:[]}}},Rm=new ki;var Ki=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"postgres"),s=[],a=[];for(let w of e.children){let{sql:q,bindings:D}=o.parse([w]);if(w.folder==="constraint"){let R=s.pop()??"",$=q;if(/not null/i.test($)||/null/i.test($)||/default/i.test($)){let A=`${R} ${$}`.trim();A=A.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(A),a.push(...D);continue}s.push(R),s.push($),a.push(...D);continue}s.push(q),a.push(...D);}for(let w of e.namedConstraints){let{sql:q,bindings:D}=o.parse([w]);s.push(q),a.push(...D);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.temporary&&d.push("TEMPORARY"),e.unlogged&&d.push("UNLOGGED");let c=[];if(e.postgresWith){let w=Object.entries(e.postgresWith).map(([q,D])=>`${q}=${D}`).join(", ");w&&c.push(`WITH (${w})`);}let m=e.tablespace?`TABLESPACE ${e.tablespace}`:"",p=d.length>0?`${d.join(" ")} `:"",h=c.length>0?` ${c.join(" ")}`:"",f=m?` ${m}`:"";return {sql:`${u}${p}${n} (${l})${h}${f}`,bindings:a}}},_m=new Ki;var Qi=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:[]}}},Mm=new Qi;var Li=class{toSql(t){return {sql:"",bindings:[]}}},xm=new Li;var Wi=class{toSql(t){return {sql:`(${t.columns.map(n=>new y(this.model).formatStringColumn("postgres",n)).join(", ")})`,bindings:[]}}},Om=new Wi;var ji=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Dm=new ji;var Fi=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},Am=new Fi;var Ui=class{toSql(t){let e=t,r=new y(this.model),n=e.alias?` as ${r.quoteIdentifier("postgres",e.alias)}`:"";if(e.table instanceof x){let{sql:l,bindings:u}=r.formatRawPlaceholders("postgres",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("postgres",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"postgres").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},$m=new Ui;var Vi=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},vm=new Vi;var Ji=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,n=new b(this.model,"postgres"),o=new y(this.model);if(e.group?.length){let{sql:u,bindings:d}=n.parse(e.group,e.currParamIndex,true);return {sql:`(${u})`,bindings:d}}let s=o.formatStringColumn("postgres",e.column),a="",l=[];if(e.subquery!==void 0){let u=this.parseSubquery(n,e,r);a=`${e.column?`${s} `:""}${e.operator} (${u.sql})`,l=u.bindings;}else if(e.value instanceof P){let u=n.parse([e.value],1,true).sql;a=`${s} ${e.operator} ${u}`;}else if(e.operator==="is null"||e.operator==="is not null")a=`${s} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")a=`${s} ${e.operator} $${r} and $${r+1}`;else {let u=e.value.map((d,c)=>`$${r+c}`).join(", ");a=`${s} ${e.operator} (${u})`;}l=e.value;}else a=`${s} ${e.operator} $${r}`,l=[e.value];return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:l}}parseSubquery(t,e,r){let n=e.subquery;if(typeof n=="string")return {sql:n,bindings:[]};let o=Array.isArray(n)?n:[n];return t.parse(o,r)}},Im=new Ji;var Hi=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:[]}}},Pm=new Hi;var zi=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},Em=new zi;var Gi=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(p=>r.formatStringColumn("postgres",p)).join(", "),l=[],u=[],d=typeof this.model?.getColumnsByName=="function"?this.model.getColumnsByName():new Map,c=e.currParamIndex;for(let p of e.records){let h=s.map(T=>p[T]),f=[];for(let T=0;T<s.length;T++){let w=h[T];w instanceof x?f.push(w.rawValue):(l.push(w),f.push(`$${c++}${this.formatTypeCast(w,d.get(s[T])?.type)}`));}u.push(`(${f.join(", ")})`);}let m=`${n} (${a}) values ${u.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let p=e.returning.map(h=>r.formatStringColumn("postgres",h)).join(", ");m+=` returning ${p}`;}else m+=" returning *";return {sql:m,bindings:l}}formatTypeCast(t,e){if(typeof t=="string"&&(e==="jsonb"||e==="json"))return "::text::jsonb";let r="";return Buffer.isBuffer(t)?r="::bytea":Array.isArray(t)?r="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?r="::jsonb":typeof t=="boolean"?r="::boolean":typeof t=="bigint"&&(r="::bigint"),r}},Bm=new Gi;var Yi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=r.formatStringTable("postgres",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o;if(e.using?.length){let c=e.using.map(m=>r.formatStringColumn("postgres",m)).join(", ");return o=`${n} using (${c})`,{sql:o,bindings:[]}}let s=e.left;s.includes(".")||(s=`${e.table}.${s}`);let a=e.right;a.includes(".")||(a=`${this.model.table}.${a}`);let l=r.formatStringColumn("postgres",s),u=r.formatStringColumn("postgres",a);o=`${n} on ${l} ${e.on?.operator} ${u}`;let d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"postgres");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");o+=` and ${h}`,d.push(...p.bindings);}}}return {sql:o,bindings:d}}},km=new Yi;var Zi=class{toSql(t){let e=t,r=new y(this.model).formatStringColumn("postgres",e.column),n=bd(e.path);if(e.operation==="remove")return {sql:this.withAlias(`${r} #- ${n}`,e.alias),bindings:[]};let o=`jsonb_set(${r}, ${n}, $${e.currParamIndex}::jsonb, true)`,s=e.operation==="set"?o:`CASE WHEN ${r} #> ${n} IS NULL THEN ${o} ELSE ${r} END`;return {sql:this.withAlias(s,e.alias),bindings:[JSON.stringify(e.value)]}}withAlias(t,e){return e?`${t} as "${e}"`:t}},Km=new Zi;var Xi=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},Qm=new Xi;var Nh={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},ea=class{toSql(t){let e=t,r=Nh[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},Lm=new ea;var ta=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},Wm=new ta;var ra=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:[]}}},jm=new ra;var na=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:[]}}},Fm=new na;var oa=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Um=new oa;var sa=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:[]}}},Vm=new sa;var ia=class{toSql(t){return {sql:`SELECT
|
|
192
|
+
ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},zc=new ai;var li=class{toSql(t){return {sql:`SELECT COLUMN_NAME AS column_name, DATA_TYPE AS data_type, COLUMN_TYPE AS column_type, IS_NULLABLE AS is_nullable, COLUMN_DEFAULT AS column_default, CHARACTER_MAXIMUM_LENGTH AS char_length, NUMERIC_PRECISION AS numeric_precision, NUMERIC_SCALE AS numeric_scale FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${t.table}' ORDER BY ORDINAL_POSITION`,bindings:[]}}},Gc=new li;var ui=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("mysql",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"mysql").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"mysql").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new y(this.model).formatStringColumn("mysql",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"mysql").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},Yc=new ui;var di=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("mysql",e.column),n=ee.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMysql();return r==="$"?t:`JSON_EXTRACT(${t}, '${r}')`}buildExtractTextSql(t,e){let r=e.toMysql();return r==="$"?`JSON_UNQUOTE(${t})`:`JSON_UNQUOTE(JSON_EXTRACT(${t}, '${r}'))`}buildArrayLengthSql(t,e){let r=e.toMysql();return r==="$"?`JSON_LENGTH(${t})`:`JSON_LENGTH(${t}, '${r}')`}buildObjectKeysSql(t,e){let r=e.toMysql();return r==="$"?`JSON_KEYS(${t})`:`JSON_KEYS(${t}, '${r}')`}formatWithAlias(t,e){return e&&e.length>0?`${t} as \`${e}\``:t}},Zc=new di;var ci=class{toSql(t){let e=t,r=Fe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof O?s.rawValue:s instanceof v?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "(uuid())";case "$now":return "now()";case "$currentTimestamp":return "current_timestamp";default:return}}},Xc=new ci;var mi=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:[]};if(e.options&&Object.values(e.options).some(Boolean))throw new T("MysqlTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("MySQL/MariaDB do not support TRUNCATE options"));return {sql:new y(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},em=new mi;var pi=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new y(this.model).formatRawPlaceholders("mysql",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},tm=new pi;var fi=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((u,d)=>{let c=e.values[d],m=r.formatStringColumn("mysql",u);if(c instanceof O)return `${m} = ${c.rawValue}`;if(c instanceof N){let p=new b(this.model,"mysql").parse([c],s,true);return o.push(...p.bindings),s+=p.bindings.length,`${m} = ${p.sql}`}return o.push(c),`${m} = ?`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},rm=new fi;var yi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",n=[];if(this.isRawNode(e.value)){let o=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${o}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,n=e.value;else {let o=e.value.map(s=>"?").join(", ");r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${o})`,n=e.value;}else if(e.value instanceof v){let o=new b(this.model,"mysql").parse([e.value],1,true).sql;r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${o}`,n=[];}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ?`,n=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("mysql",t):t}},nm=new yi;var hi=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"mysql"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},om=new hi;var gi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new y(this.model).formatStringColumn("mysql",e.column);switch(e.jsonOperator){case "=":r=this.dbType==="mariadb"?`${o} = ?`:`${o} = CAST(? AS JSON)`,n=[JSON.stringify(e.value)];break;case "contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "subset":r=`JSON_CONTAINS(?, ${o})`,n=[JSON.stringify(e.value)];break;case "path":{let s=ee.from(e.path??"");r=`JSON_UNQUOTE(JSON_EXTRACT(${o}, '${s.toMysql()}')) ${e.comparisonOperator??"="} ?`,n=[e.value];break}case "has none":throw new T("WhereJsonInterpreter::has none","NOT_SUPPORTED_IN_MYSQL");case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},sm=new gi;var bi=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"mysql"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"mysql"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},im=new bi;var Ti=class{toSql(t){let e=t,r=new y(this.model),n=s=>r.formatStringColumn("mysql",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},am=new Ti;var wi=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.columns?.length?` (${e.columns.map(a=>new y(this.model).formatStringColumnBare("mysql",a)).join(", ")})`:"";return {sql:`${e.alias}${s} as (${o.sql})`,bindings:o.bindings}}},lm=new wi;var Si=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(n+=` ${s.join(" ")}`);}return {sql:`add column ${n}`,bindings:[]}}},um=new Si;var Ni=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},dm=new Ni;var qi=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`"${n}"`).join(", ")})`,bindings:[]}}},cm=new qi;var Ci=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),s=o.join(" ");s=s.replace(/\s*check\s*\(.*\)\s*$/i,"").trim(),e.newType.dataType==="uuid"&&(s=s.replace(/\s+default\s+.+$/i,"").trim());let a=`alter column "${e.column}" type ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?`alter column "${e.column}" drop not null`:`alter column "${e.column}" set not null`;a+=`, ${l}`;}if(e.options.dropDefault)a+=`, alter column "${e.column}" drop default`;else if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=`, alter column "${e.column}" set default ${l}`;}return e.options.unique!==void 0&&(e.options.unique?a+=`, add constraint "unique_${e.column}" unique ("${e.column}")`:a+=`, drop constraint "unique_${e.column}"`),{sql:a,bindings:[]}}},mm=new Ci;var Ri=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"postgres"),s=[],a=[];for(let c of e.children){let{sql:m,bindings:p}=o.parse([c]);s.push(m.trim()),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifExists?"if exists ":""}${n} ${l}`,bindings:a}}},pm=new Ri;var _i=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},fm=new _i;var Mi=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},ym=new Mi;var xi=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},hm=new xi;var Oi=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},gm=new Oi;var Di=class{toSql(t){return {sql:"",bindings:[]}}},bm=new Di;var Ai=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Tm=new Ai;var $i=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},wm=new $i;var Ii=class{toSql(t){let e=t,r;return e.defaultValue instanceof O?r=e.defaultValue.rawValue:e.defaultValue instanceof v?r=new b(this.model,"postgres").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},Sm=new Ii;var vi=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Nm=new vi;var Pi=class{toSql(t){return {sql:"",bindings:[]}}},qm=new Pi;var Ei=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new y(this.model).formatStringColumn("postgres",C(e.column)),o=e.dataType.toLowerCase();if(o==="char"){let a=e.length??1;return {sql:`${n} char(${a})`,bindings:[]}}else if(o==="varchar"){let a=e.length??255;return {sql:`${n} varchar(${a})`,bindings:[]}}else {if(o==="text"||o==="longtext"||o==="mediumtext"||o==="tinytext")return {sql:`${n} text`,bindings:[]};if(o==="uuid"){let a=e.isForeignKey?"":" default gen_random_uuid()";return {sql:`${n} uuid${a}`,bindings:[]}}else {if(o==="ulid")return {sql:`${n} varchar(26)`,bindings:[]};if(o==="bigint")return e.autoIncrement?{sql:`${n} bigserial`,bindings:[]}:{sql:`${n} bigint`,bindings:[]};if(o==="tinyint")return {sql:`${n} smallint`,bindings:[]};if(o==="smallint")return {sql:`${n} smallint`,bindings:[]};if(o==="mediumint")return {sql:`${n} integer`,bindings:[]};if(o==="float"||o==="real")return {sql:`${n} real`,bindings:[]};if(o==="double")return {sql:`${n} double precision`,bindings:[]};if(o==="decimal"||o==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${n} numeric(${a}, ${l})`,bindings:[]}}else {if(o==="date")return {sql:`${n} date`,bindings:[]};if(o==="year")return {sql:`${n} smallint`,bindings:[]};if(o==="time"){let a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${n} time${a}`,bindings:[]}}else if(o==="datetime"||o==="timestamp"){let a=e.withTimezone?" with time zone":" without time zone",l=typeof e.precision=="number"?`(${e.precision})`:"",u=`${n} timestamp${l}${a}`.trimEnd();return e.autoCreate&&(u+=" default current_timestamp"),{sql:u,bindings:[]}}else {if(o==="boolean"||o==="bool")return {sql:`${n} boolean`,bindings:[]};if(o==="bytea"||o==="binary"||o==="varbinary"||o==="blob"||o==="longblob"||o==="mediumblob"||o==="tinyblob")return {sql:`${n} bytea`,bindings:[]};if(o==="json")return {sql:`${n} json`,bindings:[]};if(o==="jsonb")return {sql:`${n} jsonb`,bindings:[]};if(o==="enum"){if(e.enumValues&&e.enumValues.length>0){let a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${n} text check (${n} in (${a}))`,bindings:[]}}return {sql:`${n} text`,bindings:[]}}else {if(o==="integer"||o==="int")return e.autoIncrement?{sql:`${n} serial`,bindings:[]}:{sql:`${n} integer`,bindings:[]};if(o==="geometry")return {sql:`${n} geometry`,bindings:[]};if(o==="point")return {sql:`${n} point`,bindings:[]};if(o==="linestring")return {sql:`${n} linestring`,bindings:[]};if(o==="polygon")return {sql:`${n} polygon`,bindings:[]};if(o==="multipoint")return {sql:`${n} multipoint`,bindings:[]}}}}}}let s=e.length?`(${e.length})`:"";return {sql:`${n} ${o}${s}`,bindings:[]}}},Cm=new Ei;var Bi=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
193
|
+
`:e,bindings:[]}}},Rm=new Bi;var ki=class{toSql(t){return {sql:"",bindings:[]}}},_m=new ki;var Qi=class{toSql(t){let e=t,r=new y(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let n=e.constraintName?`constraint "${e.constraintName}" `:"",o=(e.columns??[]).map(s=>r.formatStringColumn("postgres",C(s))).join(", ");return {sql:`${n}primary key (${o})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns??[],o=e.constraintName?`constraint "${e.constraintName}" `:"",s=n.map(a=>r.formatStringColumn("postgres",C(a))).join(", ");return e.constraintName?{sql:`${o}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let n=e.defaultValue;return n instanceof O?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof v?{sql:`default ${new b(this.model,"postgres").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let n=e.columns.map(u=>r.formatStringColumn("postgres",C(u))).join(", ");if(!e.references)return {sql:"",bindings:[]};let o=r.formatStringTable("postgres",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("postgres",C(u))).join(", "),l=`${e.constraintName?`constraint "${e.constraintName}" `:""}foreign key (${n}) references ${o}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint "${e.constraintName}" `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Mm=new Qi;var Ki=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"postgres"),s=[],a=[];for(let S of e.children){let{sql:q,bindings:M}=o.parse([S]);if(S.folder==="constraint"){let R=s.pop()??"",$=q;if(/not null/i.test($)||/null/i.test($)||/default/i.test($)){let A=`${R} ${$}`.trim();A=A.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(A),a.push(...M);continue}s.push(R),s.push($),a.push(...M);continue}s.push(q),a.push(...M);}for(let S of e.namedConstraints){let{sql:q,bindings:M}=o.parse([S]);s.push(q),a.push(...M);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.temporary&&d.push("TEMPORARY"),e.unlogged&&d.push("UNLOGGED");let c=[];if(e.postgresWith){let S=Object.entries(e.postgresWith).map(([q,M])=>`${q}=${M}`).join(", ");S&&c.push(`WITH (${S})`);}let m=e.tablespace?`TABLESPACE ${e.tablespace}`:"",p=d.length>0?`${d.join(" ")} `:"",h=c.length>0?` ${c.join(" ")}`:"",f=m?` ${m}`:"";return {sql:`${u}${p}${n} (${l})${h}${f}`,bindings:a}}},xm=new Ki;var Li=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},Om=new Li;var Wi=class{toSql(t){return {sql:"",bindings:[]}}},Dm=new Wi;var ji=class{toSql(t){return {sql:`(${t.columns.map(n=>new y(this.model).formatStringColumn("postgres",n)).join(", ")})`,bindings:[]}}},Am=new ji;var Fi=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},$m=new Fi;var Ui=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},Im=new Ui;var Vi=class{toSql(t){let e=t,r=new y(this.model),n=e.alias?` as ${r.quoteIdentifier("postgres",e.alias)}`:"";if(e.table instanceof O){let{sql:l,bindings:u}=r.formatRawPlaceholders("postgres",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("postgres",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"postgres").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},vm=new Vi;var Ji=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},Pm=new Ji;var Hi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,n=new b(this.model,"postgres"),o=new y(this.model);if(e.group?.length){let{sql:u,bindings:d}=n.parse(e.group,e.currParamIndex,true);return {sql:`(${u})`,bindings:d}}let s=o.formatStringColumn("postgres",e.column),a="",l=[];if(e.subquery!==void 0){let u=this.parseSubquery(n,e,r);a=`${e.column?`${s} `:""}${e.operator} (${u.sql})`,l=u.bindings;}else if(e.value instanceof v){let u=n.parse([e.value],1,true).sql;a=`${s} ${e.operator} ${u}`;}else if(e.operator==="is null"||e.operator==="is not null")a=`${s} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")a=`${s} ${e.operator} $${r} and $${r+1}`;else {let u=e.value.map((d,c)=>`$${r+c}`).join(", ");a=`${s} ${e.operator} (${u})`;}l=e.value;}else a=`${s} ${e.operator} $${r}`,l=[e.value];return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:l}}parseSubquery(t,e,r){let n=e.subquery;if(typeof n=="string")return {sql:n,bindings:[]};let o=Array.isArray(n)?n:[n];return t.parse(o,r)}},Em=new Hi;var zi=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("postgres",e.table),o=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${n} (${o})`,bindings:[]}}},Bm=new zi;var Gi=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},km=new Gi;var Yi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode),o=r.renderWithNodes("postgres",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u;if(e.source){let c=new b(this.model,"postgres").parse(e.source,a),m=e.targetColumns?.length?` (${e.targetColumns.map(p=>r.formatStringColumn("postgres",p)).join(", ")})`:"";u=`${n}${m} ${c.sql}`,l.push(...c.bindings);}else {let c=e.records.length?Object.keys(e.records[0]):[];if(!c.length)u=`${n} default values`;else {let m=c.map(f=>r.formatStringColumn("postgres",f)).join(", "),p=[],h=typeof this.model?.getColumnsByName=="function"?this.model.getColumnsByName():new Map;for(let f of e.records){let w=c.map(q=>f[q]),S=[];for(let q=0;q<c.length;q++){let M=w[q];M instanceof O?S.push(M.rawValue):(l.push(M),S.push(`$${a++}${this.formatTypeCast(M,h.get(c[q])?.type)}`));}p.push(`(${S.join(", ")})`);}u=`${n} (${m}) values ${p.join(", ")}`;}}let d=`${s}${u}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let c=e.returning.map(m=>r.formatStringColumn("postgres",m)).join(", ");d+=` returning ${c}`;}else d+=" returning *";return {sql:d,bindings:[...o.bindings,...l]}}formatTypeCast(t,e){if(typeof t=="string"&&(e==="jsonb"||e==="json"))return "::text::jsonb";let r="";return Buffer.isBuffer(t)?r="::bytea":Array.isArray(t)?r="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?r="::jsonb":typeof t=="boolean"?r="::boolean":typeof t=="bigint"&&(r="::bigint"),r}},Qm=new Yi;var Zi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=r.formatStringTable("postgres",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o;if(e.using?.length){let c=e.using.map(m=>r.formatStringColumn("postgres",m)).join(", ");return o=`${n} using (${c})`,{sql:o,bindings:[]}}let s=e.left;s.includes(".")||(s=`${e.table}.${s}`);let a=e.right;a.includes(".")||(a=`${this.model.table}.${a}`);let l=r.formatStringColumn("postgres",s),u=r.formatStringColumn("postgres",a);o=`${n} on ${l} ${e.on?.operator} ${u}`;let d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"postgres");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");o+=` and ${h}`,d.push(...p.bindings);}}}return {sql:o,bindings:d}}},Km=new Zi;var Xi=class{toSql(t){let e=t,r=new y(this.model).formatStringColumn("postgres",e.column),n=wd(e.path);if(e.operation==="remove")return {sql:this.withAlias(`${r} #- ${n}`,e.alias),bindings:[]};let o=`jsonb_set(${r}, ${n}, $${e.currParamIndex}::jsonb, true)`,s=e.operation==="set"?o:`CASE WHEN ${r} #> ${n} IS NULL THEN ${o} ELSE ${r} END`;return {sql:this.withAlias(s,e.alias),bindings:[JSON.stringify(e.value)]}}withAlias(t,e){return e?`${t} as "${e}"`:t}},Lm=new Xi;var ea=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},Wm=new ea;var Ch={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},ta=class{toSql(t){let e=t,r=Ch[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},jm=new ta;var ra=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},Fm=new ra;var na=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.conflictColumns.map(l=>r.formatStringColumnBare("postgres",l)).join(", "),o=n?` (${n})`:"";if(e.mode==="ignore"){let l=`on conflict${o} do nothing`;if(e.returning&&e.returning.length){let u=e.returning.map(d=>r.formatStringColumn("postgres",d)).join(", ");l+=` returning ${u}`;}return {sql:l,bindings:[]}}let s=e.columnsToUpdate.map(l=>`${r.formatStringColumnBare("postgres",l)} = excluded.${r.formatStringColumnBare("postgres",l)}`).join(", "),a=`on conflict${o} do update set ${s}`;if(e.returning&&e.returning.length){let l=e.returning.map(u=>r.formatStringColumn("postgres",u)).join(", ");a+=` returning ${l}`;}return {sql:a,bindings:[]}}},Um=new na;var oa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("postgres",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},Vm=new oa;var sa=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Jm=new sa;var ia=class{toSql(t){let e=t,r=new y(this.model);return {sql:`returning ${!e.columns.length||e.columns.includes("*")?"*":e.columns.map(o=>r.formatStringColumn("postgres",o)).join(", ")}`,bindings:[]}}},Hm=new ia;var aa=class{toSql(t){return {sql:`SELECT
|
|
194
194
|
con.conname AS name,
|
|
195
195
|
pg_get_constraintdef(con.oid) AS expression
|
|
196
196
|
FROM pg_constraint con
|
|
@@ -198,7 +198,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},kd=new Yo;var Zo=class{toSql(t){let
|
|
|
198
198
|
JOIN pg_namespace nsp ON nsp.oid = rel.relnamespace
|
|
199
199
|
WHERE con.contype = 'c'
|
|
200
200
|
AND rel.relname = '${t.table}'
|
|
201
|
-
AND nsp.nspname = current_schema()`,bindings:[]}}},
|
|
201
|
+
AND nsp.nspname = current_schema()`,bindings:[]}}},zm=new aa;var la=class{toSql(t){return {sql:`SELECT
|
|
202
202
|
tc.constraint_name as name,
|
|
203
203
|
kcu.column_name as column_name,
|
|
204
204
|
ccu.table_name as referenced_table,
|
|
@@ -213,7 +213,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},kd=new Yo;var Zo=class{toSql(t){let
|
|
|
213
213
|
JOIN information_schema.referential_constraints rc
|
|
214
214
|
ON rc.constraint_name = tc.constraint_name AND rc.constraint_schema = tc.table_schema
|
|
215
215
|
WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
|
|
216
|
-
ORDER BY kcu.ordinal_position`,bindings:[]}}},
|
|
216
|
+
ORDER BY kcu.ordinal_position`,bindings:[]}}},Gm=new la;var ua=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:[]}}},Ym=new ua;var da=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:[]}}},Zm=new da;var ca=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:[]}}},Xm=new ca;var ma=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:[]}}},ep=new ma;var pa=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:[]}}},tp=new pa;var fa=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:[]}}},rp=new fa;var ya=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:[]}}},np=new ya;var ha=class{toSql(t){return {sql:`SELECT
|
|
217
217
|
i.relname as index_name,
|
|
218
218
|
a.attname as column_name,
|
|
219
219
|
ix.indisunique as is_unique
|
|
@@ -232,14 +232,14 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},kd=new Yo;var Zo=class{toSql(t){let
|
|
|
232
232
|
AND t.relname = '${t.table}'
|
|
233
233
|
AND t.relnamespace = n.oid
|
|
234
234
|
AND n.nspname = current_schema()
|
|
235
|
-
AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},
|
|
235
|
+
AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},op=new ha;var ga=class{toSql(t){return {sql:`SELECT
|
|
236
236
|
tc.constraint_name as name,
|
|
237
237
|
kcu.column_name as column_name
|
|
238
238
|
FROM information_schema.table_constraints tc
|
|
239
239
|
JOIN information_schema.key_column_usage kcu
|
|
240
240
|
ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
|
|
241
241
|
WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
|
|
242
|
-
ORDER BY kcu.ordinal_position`,bindings:[]}}},
|
|
242
|
+
ORDER BY kcu.ordinal_position`,bindings:[]}}},sp=new ga;var ba=class{toSql(t){return {sql:`SELECT column_name,
|
|
243
243
|
data_type,
|
|
244
244
|
is_nullable,
|
|
245
245
|
column_default,
|
|
@@ -249,14 +249,14 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},kd=new Yo;var Zo=class{toSql(t){let
|
|
|
249
249
|
FROM information_schema.columns
|
|
250
250
|
WHERE table_schema = current_schema()
|
|
251
251
|
AND table_name = '${t.table}'
|
|
252
|
-
ORDER BY ordinal_position`,bindings:[]}}},op=new ga;var ba=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("postgres",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"postgres").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"postgres").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new y(this.model).formatStringColumn("postgres",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"postgres").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},sp=new ba;var Ta=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=te.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}},ip=new Ta;var wa=class{toSql(t){let e=t,r=je(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof x?s.rawValue:s instanceof P?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}}},ap=new wa;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:[]}}},lp=new Sa;var Na=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}}},up=new Na;var qa=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=typeof this.model?.getColumnsByName=="function"?this.model.getColumnsByName():new Map,l=e.columns.map((d,c)=>{let m=e.values[c],p=r.formatStringColumn("postgres",d);if(m instanceof x)return `${p} = ${m.rawValue}`;if(m instanceof N){let f=new b(this.model,"postgres").parse([m],s,true);return o.push(...f.bindings),s+=f.bindings.length,`${p} = ${f.sql}`}let h=`$${s++}`;return o.push(m),`${p} = ${h}${this.formatTypeCast(m,a.get(d)?.type)}`}).join(", ");return {sql:`${n} set ${l}`,bindings:o}}formatTypeCast(t,e){if(typeof t=="string"&&(e==="jsonb"||e==="json"))return "::text::jsonb";let r="";return Buffer.isBuffer(t)?r="::bytea":Array.isArray(t)?r="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?r="::jsonb":typeof t=="boolean"?r="::boolean":typeof t=="bigint"&&(r="::bigint"),r}},dp=new qa;var Ca=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 P){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}},cp=new Ca;var Ra=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}}},mp=new Ra;var _a=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],s=new y(this.model).formatStringColumn("postgres",e.column);switch(e.jsonOperator){case "=":n=`${s} = $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "contains":n=`${s} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "not contains":n=`${s} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "subset":n=`${s} <@ $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "path":{let a=te.from(e.path??"");n=`${s}${a.toPostgres(true)} ${e.comparisonOperator??"="} $${r}`,o=[e.value];break}case "has none":{let a=e.value??[],l=a.map((u,d)=>`$${r+d}`).join(", ");n=`not (jsonb_exists_any(${s}, array[${l}]))`,o=a;break}case "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},pp=new _a;var Ma=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}}},fp=new Ma;var xa=class{toSql(t){let e=t,r=new y(this.model),n=s=>r.formatStringColumn("postgres",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},yp=new xa;var Oa=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" materialized":e.clause==="not materialized"?" not materialized":"";return {sql:`${e.alias} as${s} (${o.sql})`,bindings:o.bindings}}},hp=new Oa;var Da=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:[]}}},gp=new Da;var Aa=class{toSql(t){return {sql:"",bindings:[]}}},bp=new Aa;var $a=class{toSql(t){return {sql:"",bindings:[]}}},Tp=new $a;var va=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"sqlite"),s=[],a=[],l=false;for(let m of e.children){let{sql:p,bindings:h}=o.parse([m]);if(!(!p||!p.trim())){if(m.file==="add_column")s.push(p),l=true;else if(m.file==="add_constraint"&&l){let f=s.pop()??"",T=p.replace(/^\s*add\s+/i,"").trimStart();s.push(`${f} ${T}`);}else {if(m.file==="set_not_null"||m.file==="drop_not_null")continue;if(m.file==="set_default"||m.file==="drop_default")continue;s.push(p),l=false;}a.push(...h);}}let u=s.join(", "),d=e.ifExists?"if exists ":"";return u.trim()?{sql:`${d}${n} ${u}`,bindings:a}:{sql:"",bindings:[]}}},wp=new va;var Ia=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Sp=new Ia;var Pa=class{toSql(t){return {sql:"",bindings:[]}}},Np=new Pa;var Ea=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},qp=new Ea;var Ba=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Cp=new Ba;var ka=class{toSql(t){return {sql:"",bindings:[]}}},Rp=new ka;var Ka=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},_p=new Ka;var Qa=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Mp=new Qa;var La=class{toSql(t){let e=t,r;return e.defaultValue instanceof x?r=e.defaultValue.rawValue:e.defaultValue instanceof P?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:[]}}},xp=new La;var Wa=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Op=new Wa;var ja=class{toSql(t){return {sql:"",bindings:[]}}},Dp=new ja;var Fa=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:[]}}},Ap=new Fa;var Ua=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
253
|
-
`:e,bindings:[]}}},$p=new Ua;var Va=class{toSql(t){return {sql:"",bindings:[]}}},vp=new Va;var Ja=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 x?{sql:`default ${o.rawValue}`,bindings:[]}:o instanceof P?{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:[]}}},Ip=new Ja;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:`${n} ()`,bindings:[]};let o=new b(this.model,"sqlite"),s=[],a=[];for(let f of e.children){let{sql:T,bindings:w}=o.parse([f]);if(f.folder==="constraint"){let q=s.pop()??"",D=T;if(/not null/i.test(D)||/null/i.test(D)||/default/i.test(D)||/primary key/i.test(D)){let R=`${q} ${D}`.trim();R=R.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(R),a.push(...w);continue}s.push(q),s.push(D),a.push(...w);continue}s.push(T),a.push(...w);}for(let f of e.namedConstraints){let{sql:T,bindings:w}=o.parse([f]);s.push(T),a.push(...w);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.sqliteTemporary&&d.push("TEMPORARY");let c=d.length>0?`${d.join(" ")} `:"",m=e.withoutRowId?" WITHOUT ROWID":"",p=e.strict?" STRICT":"";return {sql:`${u}${c}${n} (${l})${m}${p}`,bindings:a}}},Pp=new Ha;var za=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:[]}}},Ep=new za;var Ga=class{toSql(t){return {sql:"distinct",bindings:[]}}},Bp=new Ga;var Ya=class{toSql(t){return g.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},kp=new Ya;var Za=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Kp=new Za;var Xa=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},Qp=new Xa;var el=class{toSql(t){let e=t,r=new y(this.model),n=e.alias?` as ${r.quoteIdentifier("sqlite",e.alias)}`:"";if(e.table instanceof x){let{sql:l,bindings:u}=r.formatRawPlaceholders("sqlite",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("sqlite",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"sqlite").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},Lp=new el;var tl=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},Wp=new tl;var rl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=new b(this.model,"sqlite"),n=new y(this.model);if(e.group?.length){let{sql:l,bindings:u}=r.parse(e.group,e.currParamIndex,true);return {sql:`(${l})`,bindings:u}}let o=n.formatStringColumn("sqlite",e.column),s="",a=[];if(e.subquery!==void 0){let l=this.parseSubquery(r,e);s=`${e.column?`${o} `:""}${e.operator} (${l.sql})`,a=l.bindings;}else if(e.value instanceof P){let l=r.parse([e.value],1,true).sql;s=`${o} ${e.operator} ${l}`;}else if(e.operator==="is null"||e.operator==="is not null")s=`${o} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")s=`${o} ${e.operator} ? and ?`;else {let l=e.value.map(()=>"?").join(", ");s=`${o} ${e.operator} (${l})`;}a=e.value;}else s=`${o} ${e.operator} ?`,a=[e.value];return e.isNegated&&(s=`not (${s})`),{sql:s.trim(),bindings:a}}parseSubquery(t,e){let r=e.subquery;if(typeof r=="string")return {sql:r,bindings:[]};let n=Array.isArray(r)?r:[r];return t.parse(n,e.currParamIndex)}},jp=new rl;var nl=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:[]}}},Fp=new nl;var ol=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},Up=new ol;var sl=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(c=>r.formatStringColumn("sqlite",c)).join(", "),l=[],u=[];for(let c of e.records){let m=s.map(h=>c[h]),p=[];for(let h of m)h instanceof x?p.push(h.rawValue):(l.push(h),p.push("?"));u.push(`(${p.join(", ")})`);}return {sql:`${n} (${a}) VALUES ${u.join(", ")}`,bindings:l}}},Vp=new sl;var il=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=r.formatStringTable("sqlite",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o;if(e.using?.length){let c=e.using.map(m=>r.formatStringColumn("sqlite",m)).join(", ");return o=`${n} using (${c})`,{sql:o,bindings:[]}}let s=e.left;s.includes(".")||(s=`${e.table}.${s}`);let a=e.right;a.includes(".")||(a=`${this.model.table}.${a}`);let l=r.formatStringColumn("sqlite",s),u=r.formatStringColumn("sqlite",a);o=`${n} on ${l} ${e.on?.operator} ${u}`;let d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"sqlite");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");o+=` and ${h}`,d.push(...p.bindings);}}}return {sql:o,bindings:d}}},Jp=new il;var qh={set:"json_set",insert:"json_insert",remove:"json_remove"},al=class{toSql(t){let e=t,r=new y(this.model).formatStringColumn("sqlite",e.column),n=`'${Tt(e.path).replace(/'/g,"''")}'`,o=qh[e.operation];if(e.operation==="remove")return {sql:this.withAlias(`${o}(${r}, ${n})`,e.alias),bindings:[]};let s=e.value!==null&&typeof e.value=="object",a=s?"json(?)":"?",l=s?JSON.stringify(e.value):e.value;return {sql:this.withAlias(`${o}(${r}, ${n}, ${a})`,e.alias),bindings:[l]}}withAlias(t,e){return e?`${t} as "${e}"`:t}},Hp=new al;var ll=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},zp=new ll;var ul=class{toSql(t){return {sql:"",bindings:[]}}},Gp=new ul;var dl=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Yp=new dl;var cl=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:[]}}},Zp=new cl;var ml=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:[]}}},Xp=new ml;var pl=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},ef=new pl;var fl=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:[]}}},tf=new fl;var yl=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},rf=new yl;var hl=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},nf=new hl;var gl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},of=new gl;var bl=class{toSql(t){return {sql:"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name",bindings:[]}}},sf=new bl;var Tl=class{toSql(t){return {sql:`SELECT sql FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},af=new Tl;var wl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},lf=new wl;var Sl=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:[]}}},uf=new Sl;var Nl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},df=new Nl;var ql=class{toSql(t){return {sql:`SELECT name FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},cf=new ql;var Cl=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},mf=new Cl;var Rl=class{toSql(t){return {sql:`SELECT
|
|
252
|
+
ORDER BY ordinal_position`,bindings:[]}}},ip=new ba;var Ta=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("postgres",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"postgres").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"postgres").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new y(this.model).formatStringColumn("postgres",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"postgres").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},ap=new Ta;var wa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("postgres",e.column),n=ee.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toPostgres(false);return r?`${t}${r}`:t}buildExtractTextSql(t,e){if(e.isEmpty())return `${t}::text`;let r=e.toPostgres(true);return `${t}${r}`}buildArrayLengthSql(t,e){return `jsonb_array_length(${this.buildExtractSql(t,e)})`}buildObjectKeysSql(t,e){return `jsonb_object_keys(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},lp=new wa;var Sa=class{toSql(t){let e=t,r=Fe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof O?s.rawValue:s instanceof v?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "gen_random_uuid()";case "$now":return "now()";case "$currentTimestamp":return "current_timestamp";default:return}}},up=new Sa;var Na=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:[]};let r=e.options;if(this.dbType==="cockroachdb"&&(r?.restartIdentity||r?.continueIdentity))throw new T("PostgresTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("CockroachDB does not support the identity TRUNCATE options"));let n=new y(this.model).getFromForWriteOperations("postgres",e.fromNode),o="";return r?.restartIdentity?o+=" restart identity":r?.continueIdentity&&(o+=" continue identity"),r?.cascade&&(o+=" cascade"),{sql:`${n}${o}`,bindings:[]}}},dp=new Na;var qa=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new y(this.model).formatRawPlaceholders("postgres",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},cp=new qa;var Ca=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=typeof this.model?.getColumnsByName=="function"?this.model.getColumnsByName():new Map,l=e.columns.map((d,c)=>{let m=e.values[c],p=r.formatStringColumn("postgres",d);if(m instanceof O)return `${p} = ${m.rawValue}`;if(m instanceof N){let f=new b(this.model,"postgres").parse([m],s,true);return o.push(...f.bindings),s+=f.bindings.length,`${p} = ${f.sql}`}let h=`$${s++}`;return o.push(m),`${p} = ${h}${this.formatTypeCast(m,a.get(d)?.type)}`}).join(", ");return {sql:`${n} set ${l}`,bindings:o}}formatTypeCast(t,e){if(typeof t=="string"&&(e==="jsonb"||e==="json"))return "::text::jsonb";let r="";return Buffer.isBuffer(t)?r="::bytea":Array.isArray(t)?r="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?r="::jsonb":typeof t=="boolean"?r="::boolean":typeof t=="bigint"&&(r="::bigint"),r}},mp=new Ca;var Ra=class{toSql(t){let e=t;if(e.isRawValue){let s=e.value??[];if(s.length===0)return {sql:e.column,bindings:[]};let a=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`$${a++}`),bindings:s}}let r=e.currParamIndex,n="",o=[];if(this.isRawNode(e.value)){let s=this.formatRawIdentifierIfPossible(e.value.rawValue);n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between"){let s=`$${r} AND $${r+1}`;n=`${new y(this.model).formatStringColumn("postgres",e.column)} between ${s}`,o=e.value;}else {let s=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,o=e.value;}else if(e.value instanceof v){let s=new b(this.model,"postgres").parse([e.value],1,true).sql;n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,o=[];}else if(e.operator.includes("null"))n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};n=`${new y(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,o=[e.value];}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("postgres",t):t}},pp=new Ra;var _a=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"postgres"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},fp=new _a;var Ma=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],s=new y(this.model).formatStringColumn("postgres",e.column);switch(e.jsonOperator){case "=":n=`${s} = $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "contains":n=`${s} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "not contains":n=`${s} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "subset":n=`${s} <@ $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "path":{let a=ee.from(e.path??"");n=`${s}${a.toPostgres(true)} ${e.comparisonOperator??"="} $${r}`,o=[e.value];break}case "has none":{let a=e.value??[],l=a.map((u,d)=>`$${r+d}`).join(", ");n=`not (jsonb_exists_any(${s}, array[${l}]))`,o=a;break}case "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},yp=new Ma;var xa=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},hp=new xa;var Oa=class{toSql(t){let e=t,r=new y(this.model),n=s=>r.formatStringColumn("postgres",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},gp=new Oa;var Da=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" materialized":e.clause==="not materialized"?" not materialized":"",a=e.columns?.length?` (${e.columns.map(l=>new y(this.model).formatStringColumnBare("postgres",l)).join(", ")})`:"";return {sql:`${e.alias}${a} as${s} (${o.sql})`,bindings:o.bindings}}},bp=new Da;var Aa=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length>0){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length>0&&(n+=` ${s.join(" ")}`);}return {sql:`add column ${n}`,bindings:[]}}},Tp=new Aa;var $a=class{toSql(t){return {sql:"",bindings:[]}}},wp=new $a;var Ia=class{toSql(t){return {sql:"",bindings:[]}}},Sp=new Ia;var va=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"sqlite"),s=[],a=[],l=false;for(let m of e.children){let{sql:p,bindings:h}=o.parse([m]);if(!(!p||!p.trim())){if(m.file==="add_column")s.push(p),l=true;else if(m.file==="add_constraint"&&l){let f=s.pop()??"",w=p.replace(/^\s*add\s+/i,"").trimStart();s.push(`${f} ${w}`);}else {if(m.file==="set_not_null"||m.file==="drop_not_null")continue;if(m.file==="set_default"||m.file==="drop_default")continue;s.push(p),l=false;}a.push(...h);}}let u=s.join(", "),d=e.ifExists?"if exists ":"";return u.trim()?{sql:`${d}${n} ${u}`,bindings:a}:{sql:"",bindings:[]}}},Np=new va;var Pa=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},qp=new Pa;var Ea=class{toSql(t){return {sql:"",bindings:[]}}},Cp=new Ea;var Ba=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Rp=new Ba;var ka=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},_p=new ka;var Qa=class{toSql(t){return {sql:"",bindings:[]}}},Mp=new Qa;var Ka=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},xp=new Ka;var La=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Op=new La;var Wa=class{toSql(t){let e=t,r;return e.defaultValue instanceof O?r=e.defaultValue.rawValue:e.defaultValue instanceof v?r=new b(this.model,"sqlite").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},Dp=new Wa;var ja=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Ap=new ja;var Fa=class{toSql(t){return {sql:"",bindings:[]}}},$p=new Fa;var Ua=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new y(this.model).formatStringColumn("sqlite",C(e.column)),o=e.dataType.toLowerCase();if(o==="bigincrement")return {sql:`${n} integer primary key autoincrement`,bindings:[]};if(o==="char"||o==="varchar")return {sql:`${n} text`,bindings:[]};if(o==="uuid"){let a=e.isForeignKey?"":" default (lower(hex(randomblob(16))))";return {sql:`${n} varchar(36)${a}`,bindings:[]}}else if(o==="ulid")return {sql:`${n} varchar(26)`,bindings:[]};if(o.includes("text"))return {sql:`${n} text`,bindings:[]};if(o==="integer"||o==="bigint"||o==="int")return e.autoIncrement?{sql:`${n} integer primary key autoincrement`,bindings:[]}:{sql:`${n} integer`,bindings:[]};if(o==="tinyint")return {sql:`${n} integer`,bindings:[]};if(o==="smallint")return {sql:`${n} integer`,bindings:[]};if(o==="mediumint")return {sql:`${n} integer`,bindings:[]};if(o==="float"||o==="double")return {sql:`${n} real`,bindings:[]};if(o==="decimal"||o==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${n} numeric(${a}, ${l})`,bindings:[]}}if(o==="date"||o==="datetime"||o==="timestamp"||o==="time"||o==="year"){let a=`${n} text`;return (o==="datetime"||o==="timestamp")&&e.autoCreate&&(a+=" default current_timestamp"),{sql:a,bindings:[]}}else {if(o==="boolean")return {sql:`${n} integer`,bindings:[]};if(o==="json"||o==="jsonb")return {sql:`${n} text`,bindings:[]};if(o==="enum")return {sql:`${n} text`,bindings:[]};if(o==="bytea"||o==="blob"||o==="binary"||o==="longblob"||o==="mediumblob"||o==="tinyblob")return {sql:`${n} blob`,bindings:[]};if(o==="geometry"||o==="point"||o==="linestring"||o==="polygon"||o==="multipoint")return {sql:`${n} ${o}`,bindings:[]}}let s=e.length?`(${e.length})`:"";return {sql:`${n} ${o}${s}`,bindings:[]}}},Ip=new Ua;var Va=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
253
|
+
`:e,bindings:[]}}},vp=new Va;var Ja=class{toSql(t){return {sql:"",bindings:[]}}},Pp=new Ja;var Ha=class{toSql(t){let e=t,r=new y(this.model),n=e.constraintName?`constraint "${e.constraintName}" `:"";if(e.constraintType==="primary_key"){let o=!!e.autoIncrement,s=(e.columnType||"").toLowerCase();return o&&(s==="integer"||s==="bigint")?{sql:`${n}primary key autoincrement`,bindings:[]}:{sql:`${n}primary key`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length){let o=e.columns.map(s=>r.formatStringColumn("sqlite",C(s))).join(", ");return e.constraintName?{sql:`${n}unique (${o})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let o=e.defaultValue;return o instanceof O?{sql:`default ${o.rawValue}`,bindings:[]}:o instanceof v?{sql:`default ${new b(this.model,"sqlite").parse([o],1,true).sql}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let o=(e.columns??[]).map(u=>r.formatStringColumn("sqlite",C(u))).join(", "),s=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(u=>r.formatStringColumn("sqlite",C(u))).join(", "),l=`${n}foreign key (${o}) references ${s}(${a})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${n}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Ep=new Ha;var za=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"sqlite"),s=[],a=[];for(let f of e.children){let{sql:w,bindings:S}=o.parse([f]);if(f.folder==="constraint"){let q=s.pop()??"",M=w;if(/not null/i.test(M)||/null/i.test(M)||/default/i.test(M)||/primary key/i.test(M)){let R=`${q} ${M}`.trim();R=R.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(R),a.push(...S);continue}s.push(q),s.push(M),a.push(...S);continue}s.push(w),a.push(...S);}for(let f of e.namedConstraints){let{sql:w,bindings:S}=o.parse([f]);s.push(w),a.push(...S);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.sqliteTemporary&&d.push("TEMPORARY");let c=d.length>0?`${d.join(" ")} `:"",m=e.withoutRowId?" WITHOUT ROWID":"",p=e.strict?" STRICT":"";return {sql:`${u}${c}${n} (${l})${m}${p}`,bindings:a}}},Bp=new za;var Ga=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new y(this.model).getFromForWriteOperations("sqlite",e.fromNode),bindings:[]}}},kp=new Ga;var Ya=class{toSql(t){return {sql:"distinct",bindings:[]}}},Qp=new Ya;var Za=class{toSql(t){return g.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},Kp=new Za;var Xa=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Lp=new Xa;var el=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},Wp=new el;var tl=class{toSql(t){let e=t,r=new y(this.model),n=e.alias?` as ${r.quoteIdentifier("sqlite",e.alias)}`:"";if(e.table instanceof O){let{sql:l,bindings:u}=r.formatRawPlaceholders("sqlite",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("sqlite",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"sqlite").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},jp=new tl;var rl=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new y(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},Fp=new rl;var nl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=new b(this.model,"sqlite"),n=new y(this.model);if(e.group?.length){let{sql:l,bindings:u}=r.parse(e.group,e.currParamIndex,true);return {sql:`(${l})`,bindings:u}}let o=n.formatStringColumn("sqlite",e.column),s="",a=[];if(e.subquery!==void 0){let l=this.parseSubquery(r,e);s=`${e.column?`${o} `:""}${e.operator} (${l.sql})`,a=l.bindings;}else if(e.value instanceof v){let l=r.parse([e.value],1,true).sql;s=`${o} ${e.operator} ${l}`;}else if(e.operator==="is null"||e.operator==="is not null")s=`${o} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")s=`${o} ${e.operator} ? and ?`;else {let l=e.value.map(()=>"?").join(", ");s=`${o} ${e.operator} (${l})`;}a=e.value;}else s=`${o} ${e.operator} ?`,a=[e.value];return e.isNegated&&(s=`not (${s})`),{sql:s.trim(),bindings:a}}parseSubquery(t,e){let r=e.subquery;if(typeof r=="string")return {sql:r,bindings:[]};let n=Array.isArray(r)?r:[r];return t.parse(n,e.currParamIndex)}},Up=new nl;var ol=class{toSql(t){let e=t,n=new y(this.model).formatStringTable("sqlite",e.table),o=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${n} (${o})`,bindings:[]}}},Vp=new ol;var sl=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},Jp=new sl;var Rh=new Set(["where","group_by","having","order_by","limit","offset","union"]),il=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new y(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode),o=r.renderWithNodes("sqlite",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u;if(e.source){let d=new b(this.model,"sqlite").parse(e.source,a),c=e.targetColumns?.length?` (${e.targetColumns.map(p=>r.formatStringColumn("sqlite",p)).join(", ")})`:"",m=e.disambiguateSource&&!e.source.some(p=>Rh.has(p.folder));u=`${n}${c} ${d.sql}${m?" where true":""}`,l.push(...d.bindings);}else {let d=e.records.length?Object.keys(e.records[0]):[];if(!d.length)u=`${n} default values`;else {let c=d.map(p=>r.formatStringColumn("sqlite",p)).join(", "),m=[];for(let p of e.records){let h=d.map(w=>p[w]),f=[];for(let w of h)w instanceof O?f.push(w.rawValue):(l.push(w),f.push("?"));m.push(`(${f.join(", ")})`);}u=`${n} (${c}) VALUES ${m.join(", ")}`;}}return {sql:`${s}${u}`,bindings:[...o.bindings,...l]}}},Hp=new il;var al=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=r.formatStringTable("sqlite",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o;if(e.using?.length){let c=e.using.map(m=>r.formatStringColumn("sqlite",m)).join(", ");return o=`${n} using (${c})`,{sql:o,bindings:[]}}let s=e.left;s.includes(".")||(s=`${e.table}.${s}`);let a=e.right;a.includes(".")||(a=`${this.model.table}.${a}`);let l=r.formatStringColumn("sqlite",s),u=r.formatStringColumn("sqlite",a);o=`${n} on ${l} ${e.on?.operator} ${u}`;let d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"sqlite");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");o+=` and ${h}`,d.push(...p.bindings);}}}return {sql:o,bindings:d}}},zp=new al;var _h={set:"json_set",insert:"json_insert",remove:"json_remove"},ll=class{toSql(t){let e=t,r=new y(this.model).formatStringColumn("sqlite",e.column),n=`'${bt(e.path).replace(/'/g,"''")}'`,o=_h[e.operation];if(e.operation==="remove")return {sql:this.withAlias(`${o}(${r}, ${n})`,e.alias),bindings:[]};let s=e.value!==null&&typeof e.value=="object",a=s?"json(?)":"?",l=s?JSON.stringify(e.value):e.value;return {sql:this.withAlias(`${o}(${r}, ${n}, ${a})`,e.alias),bindings:[l]}}withAlias(t,e){return e?`${t} as "${e}"`:t}},Gp=new ll;var ul=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Yp=new ul;var dl=class{toSql(t){return {sql:"",bindings:[]}}},Zp=new dl;var cl=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Xp=new cl;var ml=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new y(this.model),n=e.conflictColumns.map(a=>r.formatStringColumnBare("sqlite",a)).join(", "),o=n?` (${n})`:"";if(e.mode==="ignore")return {sql:`ON CONFLICT${o} DO NOTHING`,bindings:[]};let s=e.columnsToUpdate.map(a=>`${r.formatStringColumnBare("sqlite",a)} = EXCLUDED.${r.formatStringColumnBare("sqlite",a)}`).join(", ");return {sql:`ON CONFLICT${o} DO UPDATE SET ${s}`,bindings:[]}}},ef=new ml;var pl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new y(this.model).formatStringColumn("sqlite",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},tf=new pl;var fl=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},rf=new fl;var yl=class{toSql(t){let e=t,r=new y(this.model);return {sql:`returning ${!e.columns.length||e.columns.includes("*")?"*":e.columns.map(o=>r.formatStringColumn("sqlite",o)).join(", ")}`,bindings:[]}}},nf=new yl;var hl=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},of=new hl;var gl=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},sf=new gl;var bl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},af=new bl;var Tl=class{toSql(t){return {sql:"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name",bindings:[]}}},lf=new Tl;var wl=class{toSql(t){return {sql:`SELECT sql FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},uf=new wl;var Sl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},df=new Sl;var Nl=class{toSql(t){let e=t;return {sql:`SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='${e.table}' AND name='${e.index}'`,bindings:[]}}},cf=new Nl;var ql=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},mf=new ql;var Cl=class{toSql(t){return {sql:`SELECT name FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},pf=new Cl;var Rl=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},ff=new Rl;var _l=class{toSql(t){return {sql:`SELECT
|
|
254
254
|
'PRIMARY' as name,
|
|
255
255
|
name as column_name
|
|
256
256
|
FROM pragma_table_info('${t.table}')
|
|
257
257
|
WHERE pk > 0
|
|
258
|
-
ORDER BY pk`,bindings:[]}}},pf=new Rl;var _l=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},ff=new _l;var Ml=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("sqlite",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"sqlite").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"sqlite").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new y(this.model).formatStringColumn("sqlite",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"sqlite").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},yf=new Ml;var xl=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=te.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}},hf=new xl;var Ol=class{toSql(t){let e=t,r=je(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof x?s.rawValue:s instanceof P?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}}},gf=new Ol;var Dl=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:[]}}},bf=new Dl;var Al=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}}},Tf=new Al;var $l=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((l,u)=>{let d=e.values[u],c=r.formatStringColumn("sqlite",l);if(d instanceof x)return `${c} = ${d.rawValue}`;if(d instanceof N){let m=new b(this.model,"sqlite").parse([d],s,true);return o.push(...m.bindings),s+=m.bindings.length,`${c} = ${m.sql}`}return o.push(d),`${c} = ?`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},wf=new $l;var vl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",n=[];if(this.isRawNode(e.value)){let o=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${o}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,n=e.value;else {let o=e.value.map(s=>"?").join(", ");r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${o})`,n=e.value;}else if(e.value instanceof P){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}},Sf=new vl;var Il=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}}},Nf=new Il;var Pl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new y(this.model).formatStringColumn("sqlite",e.column);switch(e.jsonOperator){case "=":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "path":{let s=te.from(e.path??"");r=`json_extract(${o}, '${s.toSqlite()}') ${e.comparisonOperator??"="} ?`,n=[e.value];break}case "subset":case "has none":throw new S("WhereJsonInterpreter::unsupported","NOT_SUPPORTED_IN_SQLITE");case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},qf=new Pl;var El=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}}},Cf=new El;var Bl=class{toSql(t){let e=t,r=new y(this.model),n=s=>r.formatStringColumn("sqlite",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},Rf=new Bl;var kl=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}}},_f=new kl;var Kl={mssql:{alter_table:{add_column:Iu,add_constraint:Pu,add_primary_key:Eu,alter_column_type:Bu,alter_table:Ku,drop_column:Qu,drop_constraint:Lu,drop_default:Wu,drop_not_null:ju,drop_primary_key:Fu,rename_column:Uu,rename_table:Vu,set_default:Hu,set_not_null:zu,set_table_options:Gu},column:{column_type:Yu},comment:{comment:Zu},constraint:{after:Xu,constraint:ed},create_table:{create_table:td},delete:{delete:rd},distinct:{distinct:nd,distinct_on:od},drop_table:{drop_table:sd},extension:{create_extension:id},from:{from:ad},group_by:{group_by:ld},having:{having:ud},index_op:{create_index:dd,drop_index:cd},insert:{insert:md},join:{join:pd},json_mutation:{json_mutation:Td},limit:{limit:wd},lock:{lock:Sd},offset:{offset:Nd},on_duplicate:{on_duplicate:qd},order_by:{order_by:Cd},raw:{raw:Rd},returning:{returning:_d},schema:{check_constraint_info:Md,foreign_key_info:xd,get_column_listing:Od,get_tables:Dd,has_check_constraint:Ad,has_column:$d,has_index:vd,has_primary_key:Id,has_table:Pd,index_info:Ed,primary_key_info:Bd,table_info:kd},select:{select:Kd,select_json:Qd},sqlfunc:{sqlfunc:Ld},truncate:{truncate:Wd},union:{union:jd},update:{update:Fd},where:{where:Ud,where_group:Vd,where_json:Jd,where_subquery:Hd},window:{window:zd},with:{with:Gd}},mysql:{alter_table:{add_column:Yd,add_constraint:Zd,add_primary_key:Xd,alter_column_type:ec,alter_table:tc,drop_column:rc,drop_constraint:nc,drop_default:oc,drop_not_null:sc,drop_primary_key:ic,rename_column:ac,rename_table:lc,set_default:uc,set_not_null:dc,set_table_options:cc},column:{column_type:mc},comment:{comment:pc},constraint:{after:fc,constraint:yc},create_table:{create_table:hc},delete:{delete:gc},distinct:{distinct:bc,distinct_on:Tc},drop_table:{drop_table:wc},extension:{create_extension:Sc},from:{from:Nc},group_by:{group_by:qc},having:{having:Cc},index_op:{create_index:Rc,drop_index:_c},insert:{insert:Mc},join:{join:xc},json_mutation:{json_mutation:Oc},limit:{limit:Dc},lock:{lock:Ac},offset:{offset:$c},on_duplicate:{on_duplicate:vc},order_by:{order_by:Ic},raw:{raw:Pc},returning:{returning:Ec},schema:{check_constraint_info:Bc,foreign_key_info:kc,get_column_listing:Kc,get_tables:Qc,has_check_constraint:Lc,has_column:Wc,has_index:jc,has_primary_key:Fc,has_table:Uc,index_info:Vc,primary_key_info:Jc,table_info:Hc},select:{select:zc,select_json:Gc},sqlfunc:{sqlfunc:Yc},truncate:{truncate:Zc},union:{union:Xc},update:{update:em},where:{where:tm,where_group:rm,where_json:nm,where_subquery:om},window:{window:sm},with:{with:im}},postgres:{alter_table:{add_column:am,add_constraint:lm,add_primary_key:um,alter_column_type:dm,alter_table:cm,drop_column:mm,drop_constraint:pm,drop_default:fm,drop_not_null:ym,drop_primary_key:hm,rename_column:gm,rename_table:bm,set_default:Tm,set_not_null:wm,set_table_options:Sm},column:{column_type:Nm},comment:{comment:qm},constraint:{after:Cm,constraint:Rm},create_table:{create_table:_m},delete:{delete:Mm},distinct:{distinct:xm,distinct_on:Om},drop_table:{drop_table:Dm},extension:{create_extension:Am},from:{from:$m},group_by:{group_by:vm},having:{having:Im},index_op:{create_index:Pm,drop_index:Em},insert:{insert:Bm},join:{join:km},json_mutation:{json_mutation:Km},limit:{limit:Qm},lock:{lock:Lm},offset:{offset:Wm},on_duplicate:{on_duplicate:jm},order_by:{order_by:Fm},raw:{raw:Um},returning:{returning:Vm},schema:{check_constraint_info:Jm,foreign_key_info:Hm,get_column_listing:zm,get_tables:Gm,has_check_constraint:Ym,has_column:Zm,has_index:Xm,has_primary_key:ep,has_table:tp,index_info:rp,primary_key_info:np,table_info:op},select:{select:sp,select_json:ip},sqlfunc:{sqlfunc:ap},truncate:{truncate:lp},union:{union:up},update:{update:dp},where:{where:cp,where_group:mp,where_json:pp,where_subquery:fp},window:{window:yp},with:{with:hp}},sqlite:{alter_table:{add_column:gp,add_constraint:bp,alter_column_type:Tp,alter_table:wp,drop_column:Sp,drop_constraint:Np,drop_default:qp,drop_not_null:Cp,drop_primary_key:Rp,rename_column:_p,rename_table:Mp,set_default:xp,set_not_null:Op,set_table_options:Dp},column:{column_type:Ap},comment:{comment:$p},constraint:{after:vp,constraint:Ip},create_table:{create_table:Pp},delete:{delete:Ep},distinct:{distinct:Bp,distinct_on:kp},drop_table:{drop_table:Kp},extension:{create_extension:Qp},from:{from:Lp},group_by:{group_by:Wp},having:{having:jp},index_op:{create_index:Fp,drop_index:Up},insert:{insert:Vp},join:{join:Jp},json_mutation:{json_mutation:Hp},limit:{limit:zp},lock:{lock:Gp},offset:{offset:Yp},on_duplicate:{on_duplicate:Zp},order_by:{order_by:Xp},raw:{raw:ef},returning:{returning:tf},schema:{check_constraint_info:rf,foreign_key_info:nf,get_column_listing:of,get_tables:sf,has_check_constraint:af,has_column:lf,has_index:uf,has_primary_key:df,has_table:cf,index_info:mf,primary_key_info:pf,table_info:ff},select:{select:yf,select_json:hf},sqlfunc:{sqlfunc:gf},truncate:{truncate:bf},union:{union:Tf},update:{update:wf},where:{where:Sf,where_group:Nf,where_json:qf,where_subquery:Cf},window:{window:Rf},with:{with:_f}}};var b=class{constructor(t,e){this.dbType=e,this.model=t;}parse(t,e=1,r=false){if(!t.length)return {sql:"",bindings:[]};let n=t.find(R=>!!R&&R.folder==="distinctOn"),o=!n&&t.find(R=>!!R&&R.folder==="distinct"),s=t.filter(R=>!!R&&R.folder==="comment"&&R.isHint).map(R=>this.renderNode(R)).filter(R=>R.length>0).join(" "),a=this.dbType==="mssql"?t.find(R=>!!R&&R.folder==="lock")??null:null,l=a?this.getMssqlTableHints(a):"",u=t.filter(R=>R!==null&&R.folder!=="distinct"&&R.folder!=="distinctOn"&&!(R.folder==="comment"&&R.isHint)),d=u.some(R=>R.folder==="offset"),c=u.some(R=>R.folder==="order_by"),m=u.find(R=>R.folder==="limit"),p=u.find(R=>R.folder==="offset"),h=this.dbType==="mssql"&&m&&!d&&!c,f=this.dbType==="mssql"&&!h&&(m||p),T=[],w=[],q=null;h&&m&&w.push(m.limit);for(let R=0;R<u.length;R++){let $=u[R];if(h&&$.folder==="limit"||f&&($.folder==="limit"||$.folder==="offset"))continue;$.currParamIndex=e+w.length;let A=Kl[this.mapCommonDbType(this.dbType)][$.folder][$.file];if(!A)throw new Error(`Interpreter not found for ${this.dbType} ${$.keyword}`);A.model=this.model,A.dbType=this.dbType;let O=A.toSql($);if(!O.sql||!O.sql.trim().length)continue;let K=u[R+1],v=!K||K.keyword!==$.keyword?"":K.chainsWith;if($.folder==="lock"||$.folder==="on_duplicate"||$.folder==="returning"||$.folder==="schema"||$.folder==="comment"){T.push(`${O.sql}${v}`),w.push(...O.bindings),q=$.keyword;continue}if(q!==$.keyword||$.canKeywordBeSeenMultipleTimes){if(r)T.push(`${O.sql}${v}`);else {let ne=$.keyword;if($.folder==="with"&&this.dbType!=="mssql"){let _e=R,Me=false;for(;_e<u.length&&u[_e].keyword===$.keyword;){let uu=u[_e];if(uu.folder==="with"&&uu.clause==="recursive"){Me=true;break}_e++;}Me&&(ne=`${ne} recursive`);}let Ye=s?`${s} `:"";if(ne==="select"){let _e=h?`top (@${e}) `:"";if(n){let Me=Array.isArray(n.columns)?n.columns.join(", "):"";T.push(`select ${_e}${Ye}distinct on (${Me}) ${O.sql}${v}`);}else o?T.push(`select ${_e}${Ye}distinct ${O.sql}${v}`):T.push(`select ${_e}${Ye}${O.sql}${v}`);}else ne==="from"&&l?T.push(`${ne} ${O.sql}${l}${v}`):T.push(`${ne} ${O.sql}${v}`);}q=$.keyword;}else T.push(`${O.sql}${v}`);w.push(...O.bindings);}if(f){c||T.push("order by (select null)");let R=p?.offset??0;w.push(R);let A=`offset @${e+w.length-1} rows`;if(m){w.push(m.limit);let O=e+w.length-1;A+=` fetch next @${O} rows only`;}T.push(A);}return {sql:T.join(" "),bindings:w}}renderNode(t){let e=Kl[this.mapCommonDbType(this.dbType)][t.folder][t.file];if(!e)throw new Error(`Interpreter not found for ${this.dbType} ${t.keyword}`);return e.model=this.model,e.dbType=this.dbType,e.toSql(t).sql}mapCommonDbType(t){switch(t){case "mariadb":return "mysql";case "cockroachdb":return "postgres";default:return t}}getMssqlTableHints(t){let e=[];switch(t.lockType){case "UPDATE":e.push("UPDLOCK");break;case "SHARE":e.push("HOLDLOCK");break;case "NO_KEY_UPDATE":e.push("UPDLOCK");break;case "KEY_SHARE":e.push("HOLDLOCK");break}return t.skipLocked&&e.push("READPAST"),t.noWait&&e.push("NOWAIT"),e.length>0?` with (${e.join(", ")})`:""}};var Tr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var wr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var Sr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var Nr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var qr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var Cr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_table";this.table=e;}};var Rr=class extends N{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_column";this.table=e,this.column=r;}};var _r=class extends N{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_index";this.table=e,this.index=r;}};var Mr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_primary_key";this.table=e;}};var xr=class extends N{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_check_constraint";this.table=e,this.constraint=r;}};var Or=class extends N{constructor(){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_tables";}};var Dr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_column_listing";this.table=e;}};var Ar=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var we=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var wt=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var $r=class extends N{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="alter_column_type";this.column=e,this.newType=r,this.options=n;}};var fe=class extends N{constructor(e,r=[],n=false){super("alter table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="alter_table";this.table=e,this.children=r,this.ifExists=n;}};var vr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var Se=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var Qt=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var Ir=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var St=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var Pr=class extends N{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var Er=class extends N{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_default";this.column=e,this.defaultValue=r;}};var Br=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var Nt=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="set_table_options";this.engine=e.engine,this.charset=e.charset,this.collate=e.collate;}};var V=class extends N{constructor(e,r={},n=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="constraint";this.constraintType=e,this.columns=r.columns,this.references=r.references,this.constraintName=r.constraintName,this.onDelete=r.onDelete,this.onUpdate=r.onUpdate,this.defaultValue=r.defaultValue,this.checkExpression=r.checkExpression,this.isRawValue=n;}};var kr=class extends N{constructor(e,r=[],n=[],o=false,s){super("create table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="create_table";this.file="create_table";this.table=e,this.children=r,this.namedConstraints=n,this.ifNotExists=o,s&&Object.assign(this,s);}};var Kr=class extends N{constructor(e,r=false){super("drop table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="drop_table";this.file="drop_table";this.table=e,this.ifExists=r;}};var Qr=class extends N{constructor(e,r=true){super("create extension");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="extension";this.file="create_extension";this.extensionName=e,this.ifNotExists=r;}};var Lr=class extends N{constructor(e,r,n,o=false){super("create index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="index_op";this.file="create_index";this.table=e,this.columns=r,this.indexName=n,this.unique=o;}};var Wr=class extends N{constructor(e,r,n){super("drop index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.cascade=false;this.folder="index_op";this.file="drop_index";this.indexName=e,this.table=r,this.cascade=n??false;}};var qt=class extends N{constructor(e,r=false){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e;}};function Ch(i){return i.endsWith("ies")?i.slice(0,-3)+"y":i.endsWith("sses")||i.endsWith("shes")||i.endsWith("ches")||i.endsWith("xes")||i.endsWith("zes")?i.slice(0,-2):i.endsWith("s")&&!i.endsWith("ss")?i.slice(0,-1):i}var jr=Symbol("columns"),Ct=Symbol("primaryKey"),Ql=Symbol("relations"),Mf=Symbol("indexes"),xf=Symbol("uniques"),Of=Symbol("checks"),Ll=i=>`${Ch(i)}_id`,Wl=(i,t)=>`idx_${i}_${t}`,Ne=(i,t)=>`uq_${i}_${t}`,Z=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,qe=(i,t)=>`pk_${i}_${t}`;var k=class extends N{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="column";this.file="column_type";this.isRawValue=false;this.column=e,this.dataType=r,this.length=n.length,this.precision=n.precision,this.scale=n.scale,this.enumValues=n.enumValues,this.withTimezone=n.withTimezone,this.autoIncrement=n.autoIncrement,this.autoCreate=n.autoCreate,this.autoUpdate=n.autoUpdate,this.collate=n.collate,this.isRawValue=n.isRawValue??false,this.unsigned=n.unsigned,this.zerofill=n.zerofill;}};var Lt=class extends N{constructor(e,r=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="comment";this.file="comment";this.value=e,this.isHint=r;}};var Xe=class extends N{constructor(e,r=false,n=false){super("lock");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="lock";this.file="lock";this.lockType=e,this.skipLocked=r,this.noWait=n;}};var Fr=class extends N{constructor(e,r=[],n=[]){super("window");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="window";this.file="window";this.fn=e,this.partitionBy=r,this.orderBy=n;}};function Df(i){return i?Array.isArray(i)?i:[i]:[]}function Af(i){return i?(Array.isArray(i)?i:[i]).map(e=>typeof e=="string"?{column:e}:e):[]}var Ie=class extends N{constructor(e,r=false,n="union"){super(r?`${n} all`:n);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="union";this.file="union";this.query=e,this.isAll=r,this.type=n;}};var et=class extends N{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 Fe=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var Ur=class extends N{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var Vr=class extends Fe{constructor(t,e,r,n,o=[],s="create_table"){super(e),this.columnNode=r,this.tableName=n,this.namedConstraints=o,this.context=s,this.sqlType=t;}primaryKey(t){let e=qe(this.tableName,C(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new V("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new V("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 V("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 V("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 V("not_null",{columns:[C(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new V("null",{columns:[C(this.columnNode.column)]})),this}default(t){let e;return t instanceof x||t instanceof P?e=t:t===null?e="NULL":typeof t=="boolean"?e=t?"TRUE":"FALSE":t!==void 0&&(e=t.toString()),this.nodes.push(new V("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new V("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??Ne(this.tableName??"",C(this.columnNode.column))})),this):(this.namedConstraints.push(new V("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName||Ne(this.tableName??"",C(this.columnNode.column))})),this)}check(t,e){let r=C(this.columnNode.column),n=e?.constraintName??`chk_${this.tableName}_${r}`.substring(0,63);return this.context==="alter_table"?(this.nodes.push(new V("check",{columns:[r],checkExpression:t,constraintName:n})),this):(this.namedConstraints.push(new V("check",{columns:[r],checkExpression:t,constraintName:n})),this)}after(t){return this.sqlType!=="mysql"?this:(this.nodes.push(new Ur(t)),this)}collate(t){return this.columnNode.collate=t,this}handleSqliteAutoIncrement(t){return this.isInlineSqlitePrimaryKey()?this:(this.nodes.push(new V("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 tt=class extends Fe{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 Vr(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new x(e)}char(e,r=1){let n=new k(e,"char",{length:r});return this.build(n)}varchar(e,r=255){let n=new k(e,"varchar",{length:r});return this.build(n)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let n=new k(e,r);return this.build(n)}longtext(e){return this.text(e,"longtext")}mediumtext(e){return this.text(e,"mediumtext")}tinytext(e){return this.text(e,"tinytext")}uuid(e){let r=new k(e,"uuid");return this.build(r)}ulid(e){let r=new k(e,"ulid");return this.build(r)}integer(e,r=255){let n=new k(e,"integer",{length:r});return this.build(n)}tinyint(e,r=255){let n=new k(e,"tinyint",{length:r});return this.build(n)}smallint(e,r=255){let n=new k(e,"smallint",{length:r});return this.build(n)}mediumint(e,r=255){let n=new k(e,"mediumint",{length:r});return this.build(n)}biginteger(e,r=255){let n=new k(e,"bigint",{length:r});return this.build(n)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let n=new k(e,"float",{precision:r});return this.build(n)}double(e,r=10){let n=new k(e,"double",{precision:r});return this.build(n)}real(e,r=10){let n=new k(e,"real",{precision:r});return this.build(n)}decimal(e,r=10,n=2){let o=new k(e,"decimal",{precision:r,scale:n});return this.build(o)}numeric(e,r=10,n=2){let o=new k(e,"numeric",{precision:r,scale:n});return this.build(o)}increment(e,r=255){return this.integer(e,r).increment()}bigIncrement(e,r=255){return this.biginteger(e,r).increment()}date(e,r){let n=new k(e,"date",{precision:r});return this.build(n)}time(e,r){let n=new k(e,"time",{precision:r});return this.build(n)}year(e){let r=new k(e,"year");return this.build(r)}datetime(e,r){let n=new k(e,"datetime",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}timestamp(e,r){let n=new k(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}boolean(e){let r=new k(e,"boolean");return this.build(r)}binary(e){let r=new k(e,"binary");return this.build(r)}varbinary(e,r=255){let n=new k(e,"varbinary",{length:r});return this.build(n)}blob(e){let r=new k(e,"blob");return this.build(r)}tinyblob(e){let r=new k(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new k(e,"mediumblob");return this.build(r)}longblob(e){let r=new k(e,"longblob");return this.build(r)}json(e){let r=new k(e,"json");return this.build(r)}jsonb(e){let r=new k(e,"jsonb");return this.build(r)}enum(e,r){let n=new k(e,"enum",{enumValues:r});return this.build(n)}custom(e,r,n){let o=new k(e,r,{length:n});return this.build(o)}rawColumn(e){let r=new k(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new k(e,"geometry");return this.build(r)}point(e){let r=new k(e,"point");return this.build(r)}linestring(e){let r=new k(e,"linestring");return this.build(r)}polygon(e){let r=new k(e,"polygon");return this.build(r)}multiPoint(e){let r=new k(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var Jr=class extends Fe{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new x(t)}addColumn(t){let e=[],r=new tt(this.sqlType,e,this.table,"alter_table"),n=t(r);if(!e.length)return;let o=r.getNamedConstraints(),s=e.filter(c=>c.folder==="column");if(e=e.concat(o),s.length!==1)throw new Error("addColumn callback must define exactly one column");let a=s[0],l=n.getNodes().filter(c=>{let m=c;return m.constraintType==="not_null"||m.constraintType==="null"||m.constraintType==="default"}),u=new Ar(a);u.inlineConstraints=l,this.nodes.push(u),n.getNodes().filter(c=>{let m=c;return m.constraintType==="unique"||m.constraintType==="foreign_key"||m.constraintType==="primary_key"}).forEach(c=>{this.nodes.push(new we(c));});}alterColumn(t){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new tt(this.sqlType,e,this.table,"alter_table"),n=t(r);if(!e.length)return;let o=e.filter(p=>p.folder==="column");if(o.length!==1)throw new Error("alterColumn callback must define exactly one column");let s=o[0],a=C(s.column),l=n.getNodes().find(p=>p.constraintType==="null"),d=n.getNodes().find(p=>p.constraintType==="not_null")||l,c=n.getNodes().find(p=>p.constraintType==="default"),m={};d&&(m.nullable=d.constraintType==="null"),c&&(c.defaultValue===void 0||c.defaultValue===null||c.defaultValue==="NULL"?m.dropDefault=true:m.default=c.defaultValue),s.collate&&(this.sqlType==="mysql"||this.sqlType==="mariadb")&&(m.collate=s.collate),this.nodes.push(new $r(C(a),s,m)),d&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(d.constraintType==="not_null"?this.nodes.push(new Br(C(a))):d.constraintType==="null"&&this.nodes.push(new Ir(C(a)))),c&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(c.defaultValue===void 0||c.defaultValue===null||c.defaultValue==="NULL"?this.nodes.push(new Qt(C(a))):this.nodes.push(new Er(C(a),c.defaultValue))),n.getNodes().forEach(p=>{let h=p;switch(h.constraintType){case "primary_key":this.addPrimaryKey(C(a));break;case "unique":this.unique(C(a),{constraintName:h.constraintName});break;case "foreign_key":this.foreignKey(C(a),h.references?.table??"",C(h.references?.columns?.[0]??""),{constraintName:h.constraintName,onDelete:h.onDelete,onUpdate:h.onUpdate});break}});}dropColumn(t){this.nodes.push(new vr(t));}renameColumn(t,e){this.nodes.push(new Pr(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Qt(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new wt([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new we(new V(...t)));}foreignKey(t,e,r,n){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new we(new V("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 S("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new we(new V("unique",{columns:[t],constraintName:e?.constraintName??Ne(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let r=Z(this.table,t,e);this.nodes.push(new Se(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new S("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??Ne(this.table,t);this.nodes.push(new Se(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Se(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new S("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new S("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new St(t));}setTableOptions(t){let e=this.sqlType==="mysql"||this.sqlType==="mariadb",r=this.sqlType==="postgres"||this.sqlType==="cockroachdb",n=this.sqlType==="mssql";return this.sqlType==="sqlite"?this:(e?this.nodes.push(new Nt(t)):r?this.nodes.push(new Nt(t)):n&&this.nodes.push(new Nt(t)),this)}};var ce=class{constructor(t){if(this.sqlType=t||E.DB_TYPE,!this.sqlType)throw new S("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new x(t)}rawQuery(t){this.queryStatements.push(t);}async execute(){for(let t of this.queryStatements)this.rawQuery(t);}runFile(t){if(!ae.existsSync(t))throw new S("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=yt.basename(t),r=yt.extname(e);if(r!==".sql"&&r!==".txt")throw new S("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let o=ae.readFileSync(t,"utf-8").split(";").map(s=>s.trim()).filter(s=>s.length>0&&!s.startsWith("--"));for(let s of o)this.rawQuery(s);}createTable(t,e,r){let n=new tt(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 kr(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 Jr(t,r,this.sqlType);if(e(n),!r.length)return;let o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"}),s=[],a=()=>{if(!s.length)return;let u=new fe(t,s),d=o.parse([u]).sql;if(!d||!d.trim())return;let c=d.startsWith("alter table")?d:`alter table ${d}`;this.rawQuery(c),s=[];};for(let u of r)u.file==="add_constraint"&&s.length&&s[0].file==="add_column"||a(),s.push(u);a();let l=r.filter(u=>u.file==="add_column").map(u=>u.column);this.generateAutoUpdateTriggers(t,l);}dropTable(t,e=false){let r=new Kr(t,e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}renameTable(t,e){let r=new fe(t,[new gt(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}truncateTable(t){let e=new qt(t,true),r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}createIndex(t,e,r={}){Array.isArray(e)||(e=[e]);let n=r.constraintName||Wl(t,e.join("_")),o=new Lr(t,e,n),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([o]).sql);}dropIndex(t,e){let r=new Wr(t,e),n=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addPrimaryKey(t,e){let r=new fe(t,[new wt(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addUnique(t,e,r){let n=Array.isArray(e)?e:[e],o=r?.constraintName??Ne(t,n.join("_")),s=new V("unique",{columns:n,constraintName:o}),a=new fe(t,[new we(s)]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropForeignKey(t,e,r){let n=Z(t,e,r),o=new Se(n),s=new fe(t,[o]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropUnique(t,e,r){let n=Array.isArray(e)?Ne(t,e.join("_")):Ne(t,e),o=r?.constraintName??n,s=new Se(o),a=new fe(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new St,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new V(...e),n=new fe(t,[new we(r)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}dropConstraint(t,e){let r=new Se(e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addCheck(t,e,r){let n=r?.constraintName??`chk_${t}_custom`.substring(0,63),o=new V("check",{checkExpression:e,constraintName:n}),s=new fe(t,[new we(o)]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropCheck(t,e){if(this.sqlType==="mysql"){this.rawQuery(`ALTER TABLE \`${t}\` DROP CHECK \`${e}\``);return}let r=new Se(e),n=new fe(t,[r]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}createExtension(t,e=true){let r=new Qr(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 Hr,If,Wt=class{constructor(t,e){fu(this,Hr);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new ce(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=yu(this,Hr,If).call(this)),this.executionPromise.then(t,e)}rawStatement(t){return this.schema.rawStatement(t)}rawQuery(t){return this.schema.rawQuery(t),this}createTable(t,e,r){return this.schema.createTable(t,e,r),this}alterTable(t,e){return this.schema.alterTable(t,e),this}dropTable(t,e=false){return this.schema.dropTable(t,e),this}renameTable(t,e){return this.schema.renameTable(t,e),this}truncateTable(t){return this.schema.truncateTable(t),this}createIndex(t,e,r){return this.schema.createIndex(t,e,r),this}dropIndex(t,e){return this.schema.dropIndex(t,e),this}addPrimaryKey(t,e){return this.schema.addPrimaryKey(t,e),this}addUnique(t,e,r){return this.schema.addUnique(t,e,r),this}addConstraint(t,e,...r){return this.schema.addConstraint(t,e,...r),this}dropPrimaryKey(t){return this.schema.dropPrimaryKey(t),this}dropForeignKey(t,e,r){return this.schema.dropForeignKey(t,e,r),this}dropUnique(t,e,r){return this.schema.dropUnique(t,e,r),this}dropConstraint(t,e){return this.schema.dropConstraint(t,e),this}createExtension(t,e=true){return this.schema.createExtension(t,e),this}toQuery(){let t=this.schema.queryStatements;return t.length===1?t[0]:t}toQueries(){return [...this.schema.queryStatements]}toString(){let t=this.schema.queryStatements;return t.length===1?t[0]||"":t.join(`;
|
|
259
|
-
`)}async execute(){if(this.state!=="executed"){if(this.state==="failed")throw this.executionError;return this.then()}}isExecuted(){return this.state==="executed"}isPending(){return this.state==="pending"}hasFailed(){return this.state==="failed"}async hasTable(t){return this.dataSource.hasTable(t)}async hasColumn(t,e){return this.dataSource.hasColumn(t,e)}async hasColumns(t,...e){return this.dataSource.hasColumns(t,...e)}async hasIndex(t,e){return this.dataSource.hasIndex(t,e)}async hasPrimaryKey(t){return this.dataSource.hasPrimaryKey(t)}async hasUnique(t,e){return this.dataSource.hasUnique(t,e)}async hasForeignKey(t,e){return this.dataSource.hasForeignKey(t,e)}async hasCheckConstraint(t,e){return this.dataSource.hasCheckConstraint(t,e)}async getTables(){return this.dataSource.getTables()}async getColumnListing(t){return this.dataSource.getColumnListing(t)}dropTableIfExists(t){return this.schema.dropTable(t,true),this}async dropIndexIfExists(t,e){if(await this.dataSource.hasIndex(e,t)){let n=new ce(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}};Hr=new WeakSet,If=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 Oe=class{constructor(t,e){this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var zr=class{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}buildDropDependencies(t){let e=new Map,r=new Map,n=new Map;for(let o of t.relationsToDrop||[]){let s=`${o.table}.${o.relation.name}`,a=[];if(o.relation.referencedTable&&a.push(`table.${o.relation.referencedTable}`),o.relation.referencedColumns)for(let l of o.relation.referencedColumns)a.push(`column.${o.relation.referencedTable}.${l}`);e.set(s,a);}for(let o of t.tablesToDrop||[]){let s=`table.${o.table}`,a=[];for(let l of this.models){let u=l.getRelations();for(let d of u)d.type==="belongsTo"&&d.model().table===o.table&&a.push(`fk.${l.table}.${d.constraintName}`);}r.set(s,a);}for(let o of t.columnsToDrop||[]){let s=`column.${o.table}.${o.column}`,a=[],l=this.models.find(u=>u.table===o.table);if(l){let u=l.getColumns().find(d=>d.databaseName===o.column);if(u){u.isPrimary&&a.push(`pk.${o.table}`);let d=l.getRelations();for(let c of d)c.columnName===u.columnName&&a.push(`fk.${o.table}.${c.constraintName}`);}}n.set(s,a);}return {foreignKeys:e,tables:r,constraints:n}}topologicalSortReverse(t,e){let r=new Set,n=new Set,o=[],s=a=>{if(n.has(a))throw new Error(`Circular dependency detected: ${a}`);if(r.has(a))return;n.add(a);let l=e(a);for(let u of l)s(u);n.delete(a),r.add(a),o.push(a);};for(let a of t.keys())r.has(a)||s(a);return o}generateDropOperations(t){let e=this.buildDropDependencies(t),r=[],n=this.topologicalSortReverse(e.foreignKeys,s=>e.foreignKeys.get(s)||[]);for(let s of n){let[a,l]=s.split("."),u=t.relationsToDrop?.find(d=>d.table===a&&d.relation.name===l);u&&r.push({type:"DROP_FOREIGN_KEY",phase:"DESTRUCTIVE_OPERATIONS",table:a,constraint:l,data:u,dependencies:e.foreignKeys.get(s)||[],sqlStatements:this.generateDropForeignKeySql(u)});}let o=this.topologicalSortReverse(e.tables,s=>e.tables.get(s)||[]);for(let s of t.columnsToDrop||[]){let a=`column.${s.table}.${s.column}`,l=e.constraints.get(a)||[];for(let u of l)u.startsWith("pk.")?r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:"PRIMARY KEY",data:{type:"primary_key",table:s.table},dependencies:[a],sqlStatements:this.generateDropPrimaryKeySql(s.table)}):u.startsWith("unique.")&&r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:`UNIQUE_${s.column}`,data:{type:"unique",table:s.table,column:s.column},dependencies:[a],sqlStatements:this.generateDropUniqueConstraintSql(s.table,s.column)});}for(let s of t.columnsToDrop||[])r.push({type:"DROP_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,column:s.column,data:s,dependencies:[],sqlStatements:this.generateDropColumnSql(s)});for(let s of o){let a=s.replace("table.",""),l=t.tablesToDrop?.find(u=>u.table===a);l&&r.push({type:"DROP_TABLE",phase:"DESTRUCTIVE_OPERATIONS",table:a,data:l,dependencies:e.tables.get(s)||[],sqlStatements:this.generateDropTableSql(l)});}return r}analyzeConstraintImpact(t){let e=new Map;for(let r of t.columnsToDrop||[]){let n=[],o=this.models.find(s=>s.table===r.table);if(o){let s=o.getColumns().find(a=>a.databaseName===r.column);if(s){s.isPrimary&&n.push(`PRIMARY KEY on ${r.table}`);let a=o.getRelations();for(let l of a)l.columnName===s.columnName&&n.push(`FOREIGN KEY ${l.constraintName} on ${r.table}`);}}e.set(`${r.table}.${r.column}`,n);}return e}detectMixedOperations(t){let e=[];for(let r of t.columnsToModify||[]){let n=this.models.find(o=>o.table===r.table);n&&n.getColumns().find(s=>s.databaseName===r.dbColumns.name)&&this.hasConstraintChanges(r.dbColumns,r.modelColumn)&&e.push({type:"column_modification_with_constraints",table:r.table,column:r.dbColumns.name,description:`Column ${r.dbColumns.name} modification requires constraint recreation`});}for(let r of t.primaryKeysToModify||[])e.push({type:"primary_key_modification",table:r.table,description:`Primary key modification on ${r.table} requires FK recreation`});return e}hasConstraintChanges(t,e){return t.isNullable!==!e.constraints?.nullable||t.isUnique!==!!e.constraints?.unique||t.defaultValue!==e.constraints?.default}generateDropForeignKeySql(t){if(this.sql.getDbType()==="sqlite")return [];if(!t.relation.name)return [];let e=this.sql.schema().alterTable(t.table,n=>{n.dropConstraint(t.relation.name);}).toQueries(),r=this.sql.getDbType();return (r==="mysql"||r==="mariadb")&&e.push(`DROP INDEX \`${t.relation.name}\` ON \`${t.table}\``),e}generateDropPrimaryKeySql(t){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,e=>{e.dropPrimaryKey();}).toQueries()}generateDropUniqueConstraintSql(t,e){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,r=>{r.dropConstraint(`UNIQUE_${e}`);}).toQueries()}generateDropColumnSql(t){return this.sql.schema().alterTable(t.table,e=>{e.dropColumn(t.column);}).toQueries()}generateDropTableSql(t){return [`DROP TABLE ${t.table}`]}};var Fl=i=>String(i??"").replace(/::[a-z_ ]+$/i,"").replace(/[()\s]/g,"").toLowerCase(),Rh=/^(current[ _]?timestamp\d*|now\d*|getdate\d*|localtimestamp\d*|localtime\d*)$/,_h={postgres:i=>i.includes("nextval"),cockroachdb:i=>i.includes("unique_rowid")},Mh={postgres:["gen_random_uuid"],cockroachdb:["gen_random_uuid"],mysql:["uuid"],mariadb:["uuid"],mssql:["newid"],sqlite:["lower(hex(randomblob(16)))"]},Ef=(i,t)=>(Mh[i]??[]).includes(Fl(t)),Rt=(i,t)=>!!i.autoCreate&&Rh.test(Fl(t)),_t=(i,t,e)=>{if(t.type!=="increment"&&t.type!=="bigIncrement")return false;let r=_h[i];return r?r(Fl(e)):false};var Gr=class Gr{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new zr(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 ce(this.sql.getDbType());o.dropIndex(n.index,n.table);let s=o.queryStatements[0];e.push({type:"DROP_INDEX",phase:"CONSTRAINT_CREATION",table:n.table,index:n.index,data:n,dependencies:[`table.${n.table}`],sqlStatements:[s]});}for(let n of t.primaryKeysToAdd){let a=this.models.find(u=>u.table===n.table)?.getColumns().find(u=>u.columnName===n.columns[0])?.primaryKeyConstraintName||qe(n.table,n.columns[0]),l=this.sql.schema().alterTable(n.table,u=>{let d=a||qe(n.table,n.columns[0]);u.addConstraint("primary_key",{columns:[n.columns[0]],constraintName:d});}).toQueries();e.push({type:"ADD_PRIMARY_KEY",phase:"CONSTRAINT_CREATION",table:n.table,constraint:a,data:n,dependencies:[`table.${n.table}`],sqlStatements:l});}for(let n of t.relationsToAdd){if(n.relation.type==="manyToMany")continue;let o=this.generateAddRelationViaAlter(n),s=this.computeFkConstraintName(n);e.push({type:"ADD_FOREIGN_KEY",phase:"CONSTRAINT_CREATION",table:n.table,constraint:s,data:n,dependencies:this.getForeignKeyDependencies(n),sqlStatements:o});}for(let n of t.uniquesToAdd||[]){let o=this.models.find(l=>l.table===n.table),s=(n.columns||[]).map(l=>o?.getColumns().find(d=>d.columnName===l)?.databaseName||l),a=this.sql.schema().alterTable(n.table,l=>{l.addConstraint("unique",{columns:s,constraintName:n.name||"mandatory"});}).toQueries();e.push({type:"ADD_UNIQUE_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name||"mandatory",data:n,dependencies:[`table.${n.table}`],sqlStatements:a});}for(let n of t.indexesToAdd){let o=this.generateCreateIndexSql(n);e.push({type:"CREATE_INDEX",phase:"CONSTRAINT_CREATION",table:n.table,index:n.index,data:n,dependencies:[`table.${n.table}`],sqlStatements:[o]});}for(let n of t.checksToDrop||[]){let o=new ce(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 ce(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"&&Gr.BUILTIN_COLUMN_TYPES.has(r.type))s=e[r.type](...n);else if(typeof r.type=="string")s=e.custom(n[0],r.type,r.length);else throw new Error(`Unknown column type: ${String(r.type)} for column ${r.columnName}`);return o&&(r.isPrimary&&s.primaryKey({constraintName:r.primaryKeyConstraintName||qe(t,r.columnName)}),r.unsigned&&s.unsigned(),r.zerofill&&s.zerofill(),r.constraints?.default!==void 0&&s.default(r.constraints.default),this.applyNullableConstraint(s,r.constraints?.nullable)),s}generateAddColumnViaAlter(t){let e=[t.column.databaseName,t.column.length,t.column.precision&&!t.column.withTimezone?t.column.precision:void 0,t.column.scale,t.column.withTimezone?{withTimezone:t.column.withTimezone,precision:t.column.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,r=>{r.addColumn(n=>{let o=this.executeBuilderMethod(t.table,n,t.column,e,false);return t.column.constraints?.default!==void 0&&o.default(t.column.constraints.default),this.applyNullableConstraint(o,t.column.constraints?.nullable),o});}).toQueries()}generateModifyColumnViaAlter(t){if(this.sql.getDbType()==="sqlite")return [];let e=[t.modelColumn.databaseName,t.modelColumn.length,t.modelColumn.precision&&!t.modelColumn.withTimezone?t.modelColumn.precision:void 0,t.modelColumn.scale,t.modelColumn.withTimezone?{withTimezone:t.modelColumn.withTimezone,precision:t.modelColumn.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,n=>{n.alterColumn(o=>{let s=this.executeBuilderMethod(t.table,o,t.modelColumn,e,false);return t.modelColumn.constraints?.default!==void 0?s.default(t.modelColumn.constraints.default):t.dbColumns.defaultValue!=null&&t.dbColumns.defaultValue!==""&&!Rt(t.modelColumn,t.dbColumns.defaultValue)&&!_t(this.sql.getDbType(),t.modelColumn,t.dbColumns.defaultValue)&&s.default(null),this.applyNullableConstraint(s,t.modelColumn.constraints?.nullable),s});}).toQueries()}generateCreateIndexSql(t){let e=this.models.find(s=>s.table===t.table),n=(e?.getIndexes().find(s=>s.name===t.index)?.columns||[]).map(s=>e?.getColumns().find(l=>l.columnName===s)?.databaseName||s),o=new ce(this.sql.getDbType());return o.createIndex(t.table,n,{constraintName:t.index}),o.queryStatements[0]||""}generateAddRelationViaAlter(t){let e=t.table,r=t.relation.foreignKey;t.relation.type==="belongsTo"?(e=t.relation.model().table,r=t.relation.model().primaryKey||"id"):t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(e=C(t.relation.manyToManyOptions.throughModel),r=C(t.relation.manyToManyOptions.rightForeignKey),(!r||r==="undefined")&&(r=t.relation.model().primaryKey||"id"));let n=typeof t.relation.constraintName=="string"?t.relation.constraintName:void 0,o=C(r);if(t.relation.type==="belongsTo"){let m=t.relation.model(),p=m.primaryKey,f=m.getColumns().find(T=>T.columnName===p);if(f)o=f.databaseName;else {let T=m?.databaseCaseConvention||"preserve";o=H(p,T);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.model();if(typeof o=="string"&&o){let p=m.getColumns(),h=p.find(f=>f.columnName===o);if(h)o=h.databaseName;else {let f=m.primaryKey||"id",T=p.find(w=>w.columnName===f);if(T)o=T.databaseName;else {let w=m?.databaseCaseConvention||"preserve";o=H(o||f,w);}}}else {let p=m.primaryKey||"id",f=m.getColumns().find(T=>T.columnName===p);if(f)o=f.databaseName;else {let T=m?.databaseCaseConvention||"preserve";o=H(p,T);}}}let s=this.models.find(m=>m.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,u=a.find(m=>m.columnName===l);if(u)l=u.databaseName;else {let m=s?.databaseCaseConvention||"preserve";l=H(l,m);}if(t.relation.type==="belongsTo"){let m=a.find(p=>p.columnName===t.relation.foreignKey);if(m)l=m.databaseName;else {let p=s?.databaseCaseConvention||"preserve";l=H(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.manyToManyOptions.leftForeignKey,p=C(m),h=a.find(f=>f.columnName===p);if(h)l=h.databaseName;else {let f=s?.databaseCaseConvention||"preserve";l=H(p,f);}}let d=t.relation.onDelete?.toLowerCase(),c=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,m=>{let p=n||Z(t.table,l,e);m.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[o]},constraintName:p,onDelete:d,onUpdate:c});}).toQueries()}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};Gr.BUILTIN_COLUMN_TYPES=new Set(["char","varchar","string","text","longtext","mediumtext","tinytext","uuid","ulid","integer","tinyint","smallint","mediumint","bigint","biginteger","float","double","real","decimal","numeric","increment","bigIncrement","boolean","date","time","datetime","timestamp","year","json","jsonb","binary","varbinary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]);var jt=Gr;var Zr=class Zr{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}generateCode(t){let e=[],r=[],n=null,o={STRUCTURE_CREATION:"Structure creation",CONSTRAINT_CREATION:"Constraints and indexes",DESTRUCTIVE_OPERATIONS:"Destructive operations"};for(let s of t){s.phase!==n&&(n=s.phase,e.length>0&&e.push(""),e.push(`// ${o[n]}`));let{up:a,down:l}=this.generateOperationCode(s);a&&e.push(...a),l&&r.push(...l);}return {up:e,down:r}}generateOperationCode(t){switch(t.type){case "CREATE_TABLE":return this.generateCreateTableCode(t);case "ADD_COLUMN":return this.generateAddColumnCode(t);case "MODIFY_COLUMN":return this.generateModifyColumnCode(t);case "DROP_COLUMN":return this.generateDropColumnCode(t);case "CREATE_INDEX":return this.generateCreateIndexCode(t);case "DROP_INDEX":return this.generateDropIndexCode(t);case "ADD_FOREIGN_KEY":return this.generateAddForeignKeyCode(t);case "DROP_FOREIGN_KEY":return this.generateDropForeignKeyCode(t);case "ADD_UNIQUE_CONSTRAINT":return this.generateAddUniqueCode(t);case "DROP_CONSTRAINT":return this.generateDropConstraintCode(t);case "ADD_CHECK_CONSTRAINT":return this.generateAddCheckCode(t);case "ADD_PRIMARY_KEY":return this.generateAddPrimaryKeyCode(t);case "DROP_TABLE":return this.generateDropTableCode(t);case "MODIFY_PRIMARY_KEY":return this.generateModifyPrimaryKeyCode(t);default:return {up:null,down:null}}}generateCreateTableCode(t){let e=t.data,r=[];r.push(`this.schema.createTable(${this.quote(e.table)}, (table) => {`);for(let o of e.columns){let s=this.generateColumnCode(e.table,o,true);r.push(` ${s}`);}r.push("});");let n=[`this.schema.dropTable(${this.quote(e.table)});`];return {up:r,down:n}}generateAddColumnCode(t){let{table:e,column:r}=t.data,n=this.generateColumnCode(e,r,false),o=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.addColumn((col) => ${n.replace(/^table\./,"col.")});`,"});"],s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r.databaseName)});`,"});"];return {up:o,down:s}}generateModifyColumnCode(t){let{table:e,modelColumn:r,dbColumns:n}=t.data,o=this.generateColumnCodeForModify(e,r,n),s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.alterColumn((col) => ${o.replace(/^table\./,"col.")});`,"});"],a=[`// TODO: reverse column modification for ${this.quote(n.name)} on ${this.quote(e)}`];return {up:s,down:a}}generateDropColumnCode(t){let{table:e,column:r}=t.data,n=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r)});`,"});"],o=[`// TODO: reverse column drop for ${this.quote(r)} on ${this.quote(e)}`];return {up:n,down:o}}generateCreateIndexCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=(r?.getIndexes().find(u=>u.name===e.index)?.columns||[]).map(u=>r?.getColumns().find(c=>c.columnName===u)?.databaseName||u),s=o.length===1?this.quote(o[0]):`[${o.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.createIndex(${this.quote(e.table)}, ${s}, { constraintName: ${this.quote(e.index)} });`],l=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`];return {up:a,down:l}}generateDropIndexCode(t){let e=t.data,r=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`],n=[`// TODO: reverse index drop for ${this.quote(e.index)} on ${this.quote(e.table)}`];return {up:r,down:n}}generateAddForeignKeyCode(t){let e=t.data,{sourceColumn:r,referencedTable:n,referencedColumn:o,constraintName:s}=this.resolveRelationDetails(e),a=e.relation.onDelete?.toLowerCase(),l=e.relation.onUpdate?.toLowerCase(),u=[];s&&u.push(`constraintName: ${this.quote(s)}`),a&&u.push(`onDelete: ${this.quote(a)}`),l&&u.push(`onUpdate: ${this.quote(l)}`);let d=u.length>0?`, { ${u.join(", ")} }`:"",c=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.foreignKey(${this.quote(r)}, ${this.quote(n)}, ${this.quote(o)}${d});`,"});"],m=s||Z(e.table,r,n),p=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.dropConstraint(${this.quote(m)});`,"});"];return {up:c,down:p}}generateDropForeignKeyCode(t){let e=t.constraint||t.data?.relation?.name;if(!e)return {up:null,down:null};let r=t.table||t.data?.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(e)});`,"});"],o=[`// TODO: reverse FK drop for ${this.quote(e)} on ${this.quote(r)}`];return {up:n,down:o}}generateAddUniqueCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=`[${(e.columns||[]).map(u=>r?.getColumns().find(c=>c.columnName===u)?.databaseName||u).map(u=>this.quote(u)).join(", ")}]`,s=e.name||"mandatory",a=[`this.schema.addUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(s)} });`],l=[`this.schema.dropUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(s)} });`];return {up:a,down:l}}generateDropConstraintCode(t){let e=t.data,r=t.table||e.table,n=t.constraint||e.name;if(!n||!r)return {up:null,down:null};if(e.type==="primary_key"){let a=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});"],l=[`// TODO: reverse primary key drop on ${this.quote(r)}`];return {up:a,down:l}}if(e.type==="unique"){let a=e.column,l=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],u=[`// TODO: reverse unique constraint drop for ${this.quote(a)} on ${this.quote(r)}`];return {up:l,down:u}}if(e.expression!==void 0){let a=[`this.schema.dropCheck(${this.quote(r)}, ${this.quote(n)});`],l=[`// TODO: reverse check constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:a,down:l}}let o=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],s=[`// TODO: reverse constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:o,down:s}}generateAddCheckCode(t){let e=t.data,r=[`this.schema.addCheck(${this.quote(e.table)}, ${this.quote(e.expression)}, { constraintName: ${this.quote(e.name)} });`],n=[`this.schema.dropCheck(${this.quote(e.table)}, ${this.quote(e.name)});`];return {up:r,down:n}}generateAddPrimaryKeyCode(t){let e=t.data,o=this.models.find(u=>u.table===e.table)?.getColumns().find(u=>u.columnName===e.columns[0])?.primaryKeyConstraintName||qe(e.table,e.columns[0]),s=`[${e.columns.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.addConstraint("primary_key", { columns: ${s}, constraintName: ${this.quote(o)} });`,"});"],l=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`," table.dropPrimaryKey();","});"];return {up:a,down:l}}generateDropTableCode(t){let e=t.table||t.data?.table,r=[`this.schema.dropTable(${this.quote(e)});`],n=[`// TODO: reverse table drop for ${this.quote(e)}`];return {up:r,down:n}}generateModifyPrimaryKeyCode(t){let e=t.data,r=e.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});",`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.addPrimaryKey(${this.quote(e.modelPrimaryKey)});`,"});"],o=[`// TODO: reverse primary key modification on ${this.quote(r)}`];return {up:n,down:o}}generateColumnCode(t,e,r){let n=this.generateColumnTypeCode(e);if(!r)return n;if(e.isPrimary){let o=e.primaryKeyConstraintName||qe(t,e.columnName);n+=`.primaryKey({ constraintName: ${this.quote(o)} })`;}return e.unsigned&&(n+=".unsigned()"),e.zerofill&&(n+=".zerofill()"),e.constraints?.default!==void 0&&(n+=`.default(${this.formatDefaultValue(e.constraints.default)})`),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n+";"}generateColumnCodeForModify(t,e,r){let n=this.generateColumnTypeCode(e);return e.constraints?.default!==void 0?n+=`.default(${this.formatDefaultValue(e.constraints.default)})`:r.defaultValue!=null&&r.defaultValue!==""&&!Rt(e,r.defaultValue)&&!_t(this.sql.getDbType(),e,r.defaultValue)&&(n+=".default(null)"),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n}generateColumnTypeCode(t){let e=t.databaseName;if(Array.isArray(t.type)){let s=t.type.map(a=>this.quote(a)).join(", ");return `table.enum(${this.quote(e)}, [${s}])`}let r=t.type;if(new Set(["uuid","ulid","boolean","year","json","jsonb","binary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]).has(r))return `table.${r}(${this.quote(e)})`;if(r==="timestamp"||r==="datetime"){let s=[];return t.withTimezone&&s.push("withTimezone: true"),t.precision!=null&&s.push(`precision: ${t.precision}`),s.length>0?`table.${r}(${this.quote(e)}, { ${s.join(", ")} })`:`table.${r}(${this.quote(e)})`}return r==="date"||r==="time"?t.precision!=null?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="increment"||r==="bigIncrement"?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:r==="decimal"||r==="numeric"?t.precision!=null?t.scale!=null?`table.${r}(${this.quote(e)}, ${t.precision}, ${t.scale})`:`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="float"||r==="double"||r==="real"?t.precision!=null&&t.precision!==10?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="longtext"||r==="mediumtext"||r==="tinytext"?`table.${r}(${this.quote(e)})`:new Set(["varchar","char","string","integer","tinyint","smallint","mediumint","bigint","biginteger","varbinary"]).has(r)?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:Zr.BUILTIN_COLUMN_TYPES.has(r)?`table.${r}(${this.quote(e)})`:t.length!=null?`table.custom(${this.quote(e)}, ${this.quote(r)}, ${t.length})`:`table.custom(${this.quote(e)}, ${this.quote(r)})`}resolveRelationDetails(t){let e=t.table,r="id";if(t.relation.type==="belongsTo"){let l=t.relation.model();e=l.table;let u=l.primaryKey||"id";r=l.getColumns().find(m=>m.columnName===u)?.databaseName||u;}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){e=C(t.relation.manyToManyOptions.throughModel);let l=C(t.relation.manyToManyOptions.rightForeignKey);l&&l!=="undefined"?r=l:r=t.relation.model().primaryKey||"id";}let o=this.models.find(l=>l.table===t.table)?.getColumns()||[],s=t.relation.columnName;if(t.relation.type==="belongsTo")s=o.find(u=>u.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey;else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let l=C(t.relation.manyToManyOptions.leftForeignKey);s=o.find(d=>d.columnName===l)?.databaseName||l;}else s=o.find(u=>u.columnName===s)?.databaseName||s;let a=typeof t.relation.constraintName=="string"?t.relation.constraintName:C(t.relation.constraintName)||void 0;return {sourceColumn:s,referencedTable:e,referencedColumn:r,constraintName:a}}quote(t){return `"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}formatDefaultValue(t){return t==null?"null":t==="NULL"?'"NULL"':typeof t=="boolean"||typeof t=="number"?t.toString():t==="TRUE"||t==="true"?"true":t==="FALSE"||t==="false"?"false":this.quote(String(t))}};Zr.BUILTIN_COLUMN_TYPES=new Set(["char","varchar","string","text","longtext","mediumtext","tinytext","uuid","ulid","integer","tinyint","smallint","mediumint","bigint","biginteger","float","double","real","decimal","numeric","increment","bigIncrement","boolean","date","time","datetime","timestamp","year","json","jsonb","binary","varbinary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]);var Yr=Zr;function Oh(i){return i.replace(/\s+/g," ").trim()}function Dh(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function Ah(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 $h(i,t){return t.length===0?i:`${i} ${t.join(" ")}`}function Ue(i,t){let e=Oh(t.toLowerCase()),r=Dh(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}=Ah(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?$h(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 rt=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 w of o.indexes)n.indexes.map(q=>q.name).includes(w.name)||e.data.indexesToAdd.push({table:r.table,index:w.name});let f=r.getUniques?.()||[];for(let w of f)e.data.uniquesToAdd.push({table:r.table,name:w.name||"mandatory",columns:w.columns});let T=r.getChecks?.()||[];for(let w of T)e.data.checksToAdd.push({table:r.table,name:w.name,expression:w.expression});for(let w of o.relations){if(w.type!=="belongsTo")continue;let q=C(w.constraintName);n.foreignKeys.find(R=>R.name===q)||e.data.relationsToAdd.push({table:r.table,relation:w,onDelete:w.onDelete,onUpdate:w.onUpdate});}return}for(let f of o.columns)n.columns.some(w=>w.name===f.databaseName||w.name===f.columnName)||e.data.columnsToAdd.push({table:r.table,column:f});let s=r.getColumns();for(let f of n.columns)s.some(w=>w.databaseName===f.name||w.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(w=>w.name===f.name&&w.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(w=>w.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(w=>w.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(w=>w.name===f.name)||e.data.checksToAdd.push({table:r.table,name:f.name,expression:f.expression});let d=new Set(u.map(f=>f.name)),c=o.columns.filter(f=>Array.isArray(f.type)),m=new Set(c.map(f=>f.databaseName||f.columnName));for(let f of n.checkConstraints)if(!d.has(f.name)){let T=[...m].find(w=>{let q=w.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),D=new RegExp(`[\\["\\[]?${q}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),R=new RegExp(`[\\("\\[]?${q}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return D.test(f.expression)||R.test(f.expression)});if(T){let w=c.find(D=>(D.databaseName||D.columnName)===T),q=n.columns.find(D=>D.name===T);if(w&&q?.enumValues&&Array.isArray(w.type)){let D=[...w.type].sort(),R=[...q.enumValues].sort();if(!(D.length===R.length&&D.every((A,O)=>A===R[O]))){e.data.checksToDrop.push({table:r.table,name:f.name});let A=e.sql.getDbType(),O=A==="mssql"?"[":'"',K=A==="mssql"?"]":'"',le=w.type.map(v=>`'${v.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:f.name,expression:`${O}${T}${K} IN (${le})`});}}}else e.data.checksToDrop.push({table:r.table,name:f.name});}for(let f of o.columns){let T=n.columns.find(D=>D.name===f.databaseName||D.name===f.columnName);if(!T)continue;let w=!e.areColumnsEqual(T,f,n.indexes),q=e.getDefaultChange({table:r.table,dbColumns:T,modelColumn:f});(w||q)&&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 q=C(f.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:q,relation:{type:"belongsTo",model:()=>r,columnName:C(f.manyToManyOptions.leftForeignKey),foreignKey:f.manyToManyOptions.leftForeignKey,constraintName:f.constraintName?C(f.constraintName):Z(q,C(f.manyToManyOptions.leftForeignKey||Ll(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(q=>q.name===T))continue;n.foreignKeys.find(q=>e.relationMatchesDbRelation(r,f,q))||e.data.relationsToAdd.push({table:r.table,relation:f,onDelete:f.onDelete,onUpdate:f.onUpdate});}let p=new Set(o.relations.filter(f=>f.type==="belongsTo").map(f=>{let T=C(f.foreignKey)||f.columnName,q=r.getColumns().find(D=>D.columnName===T)?.databaseName||T;return C(f.constraintName)||Z(r.table,q,f.model().table)}));for(let f of n.foreignKeys){if(f.name&&p.has(f.name))continue;o.relations.find(w=>w.type!=="belongsTo"&&w.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,w,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(w=>e.relationMatchesDbRelation(r,f,w));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 jt(this.sql).generateOperations(this.data);return new Yr(this.sql).generateCode(e)}getSqlStatementsByPhase(){let t=new jt(this.sql),e=t.generateOperations(this.data),r=t.formatSqlStatements(e),n={STRUCTURE_CREATION:[],CONSTRAINT_CREATION:[],DESTRUCTIVE_OPERATIONS:[]};for(let o of r)n[o.phase].push(...o.sqlStatements);return n}areColumnsEqual(t,e,r=[]){let n=t.name===e.databaseName,o=this.sql.getDbType(),s=Ue(o,t.dataType),a=typeof e.type=="string"?Ue(o,e.type):void 0,l=s.split(" ").filter(d=>d!=="unsigned"&&d!=="zerofill").join(" ");if(a&&n&&(n=l===a),Array.isArray(e.type)&&(o==="mysql"||o==="mariadb")){let d=[...e.type].sort(),c=t.enumValues?[...t.enumValues].sort():null;c&&n&&(n=d.length===c.length&&d.every((m,p)=>m===c[p]));}e.length!=null&&t.length!=null&&n&&(n=t.length===e.length);let u=a==="real"||a==="double"||a==="float";if(e.precision!=null&&t.precision!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.precision===e.precision)),e.scale!=null&&t.scale!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.scale===e.scale)),typeof e.type=="string"&&(a==="timestamp"||a==="time")&&(o==="postgres"||o==="cockroachdb")&&e.withTimezone!==void 0&&t.withTimezone!==void 0&&n&&(n=!!t.withTimezone==!!e.withTimezone),e.constraints?.nullable!==void 0){let d=e.constraints.nullable,c=t.isNullable;n=n&&d===c;}if(o==="mysql"||o==="mariadb"){if(e.unsigned!==void 0){let d=e.unsigned??false,c=t.unsigned??false;n&&(n=d===c);}if(e.zerofill!==void 0){let d=e.zerofill??false,c=t.zerofill??false;n&&(n=d===c);}}if(e.stringMode!==void 0){let d=e.stringMode??false,c=t.stringMode??false;n&&(n=d===c);}return n}areRelationsEqual(t,e){let r=C(e.constraintName),n=r?t.name===r:true;if(e.type==="belongsTo"){let u=e.model(),d=u.primaryKey||"id",c=u.getColumns().find(h=>h.columnName===d),m=u.table,p=c?.databaseName||d;n=n&&t.referencedTable===m&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===p;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let u=C(e.manyToManyOptions.throughModel);n=n&&t.referencedTable===u;}let o=t.onDelete?.toLowerCase(),s=t.onUpdate?.toLowerCase(),a=e.onDelete?.toLowerCase(),l=e.onUpdate?.toLowerCase();return a&&n&&(n=o===a),l&&n&&(n=s===l),n}relationMatchesDbRelation(t,e,r){let n,o=e;if(o&&o.model){if(typeof o.model=="function"&&o.model.table)n=o.model;else if(typeof o.model=="function")try{let f=o.model();f&&f.table&&(n=f);}catch{}}if(!n)return false;let s=e.type==="belongsTo"?n.table:e.type==="manyToMany"&&e.manyToManyOptions?C(e.manyToManyOptions.throughModel):void 0;if(s&&r.referencedTable!==s)return false;let a=C(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),d=(o.type||"belongsTo")==="belongsTo"?C(o.foreignKey):o.columnName,c=l.find(f=>f.columnName===d);c&&(d=c.databaseName);let m=n.primaryKey||"id",h=n.getColumns().find(f=>f.columnName===m)?.databaseName||m;return r.columns.length===1&&r.columns[0]===d&&r.referencedColumns.length===1&&r.referencedColumns[0]===h}arePrimaryKeysEqual(t,e){if(t.columns.length!==1)return false;let n=t.columns[0]===e.databaseName,o=this.sql.getDbType();if(["mysql","mariadb"].includes(o))return n;let a=!t.name||!e.primaryKeyConstraintName||t.name===e.primaryKeyConstraintName;return n&&a}getDefaultChange(t){let e=this.sql.getDbType(),r=Ue(e,t.dbColumns.dataType),n=typeof t.modelColumn.type=="string"?Ue(e,t.modelColumn.type):void 0;if(n&&r!==n||t.modelColumn.length!=null&&t.dbColumns.length!=null&&t.dbColumns.length!==t.modelColumn.length||t.modelColumn.precision!=null&&t.dbColumns.precision!=null&&t.dbColumns.precision!==t.modelColumn.precision||t.modelColumn.scale!=null&&t.dbColumns.scale!=null&&t.dbColumns.scale!==t.modelColumn.scale||(this.sql.getDbType()==="postgres"||this.sql.getDbType()==="cockroachdb")&&typeof t.modelColumn.type=="string"&&(n==="timestamp"||n==="time")&&t.modelColumn.withTimezone!==void 0&&t.dbColumns.withTimezone!==void 0&&!!t.dbColumns.withTimezone!=!!t.modelColumn.withTimezone)return false;let s=t.modelColumn.constraints?.default!==void 0,a=t.dbColumns.defaultValue!==null&&t.dbColumns.defaultValue!==void 0;if(s&&!a)return "set";if(!s&&a){let l=t.dbColumns.defaultValue;return _t(e,t.modelColumn,l)||Rt(t.modelColumn,l)||t.modelColumn.type==="uuid"&&Ef(e,l)?false:"drop"}if(s&&a){let l=String(t.dbColumns.defaultValue),u=String(t.modelColumn.constraints?.default),d=this.normalizeDefaultValue(e,r,l),c=this.normalizeDefaultValue(e,n||r,u);return d!==c?"set":false}return false}normalizeDefaultValue(t,e,r){let n=String(r).trim();if(!n)return n;if(t==="postgres"||t==="cockroachdb"){if(e==="json"||e==="jsonb")try{n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::(jsonb?|[a-zA-Z_ ]+[\[\]]*)/g,"");let s=n.match(/^'(.*)'$/s);if(s&&(n=s[1]),n==="{}"||n==="")return "{}";let a=JSON.parse(n);return JSON.stringify(a)}catch{}n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::[a-zA-Z_ ]+[\[\]]*/g,"");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),/^true$/i.test(n)?"true":/^false$/i.test(n)?"false":/^null$/i.test(n)?"null":(n)}if(t==="mysql"||t==="mariadb"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);if(o&&(n=o[1]),/^current_timestamp(?:\(\d+\))?$/i.test(n))return "current_timestamp";if(e==="boolean"){if(/^1$/.test(n))return "true";if(/^0$/.test(n))return "false"}return n}if(t==="sqlite"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),n.toLowerCase()}return n}async processManyToMany(){let t=new Set;for(let e of this.models){let r=e.getRelations();for(let n of r){if(n.type!=="manyToMany"||!n.manyToManyOptions||n.manyToManyOptions.wasModelProvided)continue;let o=C(n.manyToManyOptions.throughModel);if(t.has(o))continue;t.add(o);let s=this.models.find(v=>v.table===n?.manyToManyOptions?.primaryModel),a=n.model();if(!s||!a)continue;let l=s.primaryKey||"id",u=a.primaryKey||"id",d=s.getColumns().find(v=>v.columnName===l),c=a.getColumns().find(v=>v.columnName===u);if(!d||!c)continue;let m=C(n.manyToManyOptions.leftForeignKey)||l,p=C(n.manyToManyOptions.rightForeignKey)||u,h=await this.sql.getTableSchema(o);if(!h.columns.length){this.data.tablesToAdd.push({table:o,columns:[this.clonePkAsColumn(d,m),this.clonePkAsColumn(c,p)]}),this.pushM2mFkRelations({throughTable:o,leftModel:s,rightModel:a,leftFkName:m,rightFkName:p,onDelete:n.onDelete,onUpdate:n.onUpdate,constraintName:void 0});continue}let f=this.clonePkAsColumn(d,m),T=this.clonePkAsColumn(c,p),w=h.columns.find(v=>v.name===m),q=h.columns.find(v=>v.name===p),D=w?this.areColumnsEqual(w,f,h.indexes):false,R=q?this.areColumnsEqual(q,T,h.indexes):false;for(let v of h.foreignKeys){let ne=v.referencedTable===s.table,Ye=v.referencedTable===a.table;if(!ne&&!Ye)continue;let _e=ne?m:p,Me=v.columns[0];Me&&Me!==_e&&(this.data.relationsToDrop.push({table:o,relation:v}),Me!==m&&Me!==p&&this.data.columnsToDrop.push({table:o,column:Me}));}let $={};D||($[f.databaseName]=f),R||($[T.databaseName]=$[T.databaseName]||T);for(let v of Object.keys($))this.data.columnsToAdd.push({table:o,column:$[v]});let A=this.buildBelongsToRelation(o,()=>s,m,l,void 0,n.onDelete,n.onUpdate),O=this.buildBelongsToRelation(o,n.model,p,u,void 0,n.onDelete,n.onUpdate),K=h.foreignKeys.find(v=>v.referencedTable===s.table&&v.columns.length===1&&v.columns[0]===m),le=h.foreignKeys.find(v=>v.referencedTable===a.table&&v.columns.length===1&&v.columns[0]===p);if(!K){let v=h.foreignKeys.find(ne=>ne.referencedTable===s.table);v&&this.data.relationsToDrop.push({table:o,relation:v}),this.data.relationsToAdd.push(A);}if(!le){let v=h.foreignKeys.find(ne=>ne.referencedTable===a.table);v&&this.data.relationsToDrop.push({table:o,relation:v}),this.data.relationsToAdd.push(O);}}}}async removeFkChurnByName(){let t=new Set;for(let n of this.data.relationsToAdd)t.add(n.table);for(let n of this.data.relationsToDrop)t.add(n.table);let e=new Map;for(let n of t){let o=await this.sql.getTableSchema(n),s=new Set((o.foreignKeys||[]).map(a=>a.name).filter(Boolean));e.set(n,s);}let r=new Map;for(let n of this.models){let o=n.getRelations(),s=new Set;for(let a of o){if(a.type!=="belongsTo")continue;let l=a.foreignKey||a.columnName,d=n.getColumns().find(m=>m.columnName===l)?.databaseName||l,c=C(a.constraintName)||Z(n.table,d,a.model().table);s.add(c);}r.set(n.table,s);}this.data.relationsToAdd=await Promise.all(this.data.relationsToAdd.map(async n=>{let o=await this.sql.getTableSchema(n.table),s=this.models.find(f=>f.table===n.table),a=s?.getColumns()||[],l=n.relation.columnName;n.relation.type==="belongsTo"?l=a.find(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(q=>q.columnName===T)?.databaseName||T;}let c=new Set([l,n.relation.columnName].filter(Boolean)),m=o.foreignKeys.some(f=>{if(f.columns.length!==1||f.referencedColumns.length!==1)return false;let T=c.has(f.columns[0]),w=f.referencedTable===u,q=f.referencedColumns[0]===d;return T&&w&&q}),p=C(n.relation.constraintName)||Z(n.table,l,u),h=e.get(n.table)||new Set;if(m||p&&h.has(p))return null;if(n.relation.type==="manyToMany"&&n.relation.manyToManyOptions){let f=C(n.relation.manyToManyOptions.throughModel),T=C(n.relation.manyToManyOptions.leftForeignKey),w=C(n.relation.manyToManyOptions.rightForeignKey),q=n.table===f&&n.relation.columnName===T&&n.relation.model().table===s?.table,D=n.table===f&&n.relation.columnName===w&&n.relation.model().table!==s?.table,R=await this.sql.getTableSchema(f),$=R.foreignKeys.some(O=>O.columns.length===1&&O.columns[0]===T&&O.referencedTable===(s?.table||"")),A=R.foreignKeys.some(O=>O.columns.length===1&&O.columns[0]===w&&O.referencedTable===n.relation.model().table);if(q&&$||D&&A)return null}return n})).then(n=>n.filter(Boolean)),this.data.relationsToDrop=await Promise.all(this.data.relationsToDrop.map(async n=>{let o=this.models.find(u=>u.table===n.table);if(!o)return n;let s=o.getRelations(),a=o.getColumns();return s.some(u=>{if(u.type!=="belongsTo")return false;let c=a.find(T=>T.columnName===u.foreignKey)?.databaseName||u.foreignKey,m=u.model(),p=m.primaryKey||"id",f=m.getColumns().find(T=>T.columnName===p)?.databaseName||p;return n.relation.columns.length===1&&n.relation.columns[0]===c&&n.relation.referencedTable===m.table&&n.relation.referencedColumns.length===1&&n.relation.referencedColumns[0]===f})?null:n})).then(n=>n.filter(Boolean));}clonePkAsColumn(t,e){let r=t.type;return r==="bigIncrement"?r="bigint":r==="increment"&&(r="integer"),{columnName:e,databaseName:e,isPrimary:false,type:r,length:t.length,precision:t.precision,scale:t.scale,withTimezone:t.withTimezone,constraints:{nullable:false}}}pushM2mFkRelations(t){let e=this.buildBelongsToRelation(t.throughTable,()=>t.leftModel,t.leftFkName,t.leftModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate),r=this.buildBelongsToRelation(t.throughTable,()=>t.rightModel,t.rightFkName,t.rightModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate);this.data.relationsToAdd.push(e),this.data.relationsToAdd.push(r);}buildBelongsToRelation(t,e,r,n,o,s,a){let l=o?C(o):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 Ve=class{};Ve.modelCaseConvention="camel",Ve.databaseCaseConvention="snake";var Bf=(i,t)=>{try{let e=Pe.createHash("sha256").update(i).digest(),r=Pe.randomBytes(16),n=Pe.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");return o+=n.final("hex"),`${r.toString("hex")}:${o}`}catch(e){throw new S("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},kf=(i,t)=>{try{let e=Pe.createHash("sha256").update(i).digest(),r=String(t).trim(),[n,o]=r.split(":");if(!n||!o)throw new Error(`Invalid encrypted value format: expected "iv:data" but got "${r.substring(0,50)}..."`);let s=n.toLowerCase(),a=o.toLowerCase(),l=Pe.createDecipheriv("aes-256-cbc",e,Buffer.from(s,"hex")),u=l.update(a,"hex","utf8");return u+=l.final("utf8"),u}catch(e){throw new S("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Kf=(i,t)=>{try{let e=Pe.randomBytes(32),r=Pe.randomBytes(16),n=Pe.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");o+=n.final("hex");let s=publicEncrypt(i,e);return `${r.toString("hex")}:${s.toString("hex")}:${o}`}catch(e){throw new S("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},Qf=(i,t)=>{try{let e=String(t).trim(),[r,n,o]=e.split(":");if(!r||!n||!o)throw new Error(`Invalid encrypted value format: expected "iv:key:data" but got "${e.substring(0,50)}..."`);let s=privateDecrypt(i,Buffer.from(n,"hex")),a=Pe.createDecipheriv("aes-256-cbc",s,Buffer.from(r,"hex")),l=a.update(o,"hex","utf8");return l+=a.final("utf8"),l}catch(e){throw new S("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 Vl="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Ul=Vl.length,Ph=10,Eh=16,Bh=(i,t)=>{let e="";for(let r=0;r<t;r++){let n=i%Ul;e=Vl.charAt(n)+e,i=(i-n)/Ul;}return e},kh=i=>{let t=ie().crypto.randomBytes(i),e="";for(let r=0;r<i;r++){let n=t[r];e+=Vl.charAt(n%Ul);}return e},Lf=()=>{let i=Math.floor(Date.now()/1e3),t=Bh(i,Ph),e=kh(Eh);return t+e};var Xr=class extends Oe{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var en=class extends Oe{constructor(e,r,n){super(e,r);this.type="hasMany";this.foreignKey=n,this.type="hasMany";}};var tn=class extends Oe{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var rn=class extends Oe{constructor(e,r,n){super(e,r);this.type="manyToMany";this.primaryModel=n.primaryModel,this.relatedModel=e.table,this.throughModel=n.throughModel,this.leftForeignKey=n.leftForeignKey,this.rightForeignKey=n.rightForeignKey;}};function _(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let n=e.constructor;if(t){if(z.getMetadata(Ct,e))throw new S("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");z.defineMetadata(Ct,r,e),z.defineMetadata(Ct,r,e.constructor);}let o=i.databaseName??H(r,n.databaseCaseConvention),s={columnName:r,serialize:i.serialize,prepare:i.prepare,isPrimary:t,primaryKeyConstraintName:i.primaryKeyConstraintName??qe(n.table,r),autoUpdate:i.autoUpdate,autoCreate:i.autoCreate,databaseName:o,openApi:i.openApi,type:i.type,length:i?.length,precision:i?.precision,scale:i?.scale,withTimezone:i?.withTimezone,unsigned:i.unsigned,zerofill:i.zerofill,stringMode:i.stringMode,expression:i.expression,constraints:{nullable:i.nullable,default:i.default}};s.validate=i.validate;let a=z.getMetadata(jr,e)||[];a.push(s),z.defineMetadata(jr,a,e);}}_.primary=Kh;_.date=tg;_.datetime=rg;_.timestamp=ng;_.time=og;_.boolean=eg;_.json=sg;_.uuid=Fh;_.ulid=Uh;_.integer=Lh;_.bigInteger=Hh;_.float=Qh;_.decimal=zh;_.increment=Wh;_.bigIncrement=jh;_.string=Vh;_.text=Jh;_.binary=Gh;_.enum=Yh;_.encryption={symmetric:Zh,asymmetric:Xh};_.computed=ig;function Kh(i={}){return _({...i,primaryKey:true})}function Qh(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 Lh(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 Wh(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 jh(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 Fh(i={}){return _({type:"uuid",...i,prepare:t=>t||ie().crypto.randomUUID(),openApi:{type:"string",format:"uuid",description:"uuid (Universally Unique Identifier)",...i.openApi||{}}})}function Uh(i={}){return _({type:"ulid",...i,prepare:t=>t||Lf(),openApi:{type:"string",format:"ulid",description:"ulid (Universally Unique Lexicographically Sortable Identifier)",...i.openApi||{}}})}function Vh(i={}){return _({type:"string",...i,openApi:{type:"string",description:"A string value",...i.openApi||{}}})}function Jh(i={}){return _({type:"longtext",...i,openApi:{type:"string",description:"A text value",...i.openApi||{}}})}function Hh(i={}){return _({type:"bigint",...i,serialize:t=>{if(t!==void 0){if(t===null)return null;if(typeof t=="number")return t;if(typeof t=="string")return Number.parseInt(t);if(typeof t=="bigint")return Number(t)}},openApi:{type:"integer",format:"int64",description:"A bigint number",...i.openApi||{}}})}function zh(i={}){return _({type:"decimal",precision:i.precision??10,scale:i.scale??2,...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseFloat(t)},openApi:{type:"number",format:"double",description:"A decimal number",...i.openApi||{}}})}function Gh(i={}){return _({type:"binary",...i,openApi:{type:"string",format:"binary",description:"Binary data",...i.openApi||{}}})}function Yh(i,t={}){return _({type:i,...t,openApi:{type:"string",enum:i,description:"An enum value",...t.openApi||{}}})}function Zh(i){return _({...i,prepare:t=>t&&Bf(i.key,t),serialize:t=>t&&kf(i.key,t)})}function Xh(i){return _({...i,prepare:t=>t&&Kf(i.publicKey,t),serialize:t=>t&&Qf(i.privateKey,t)})}function eg(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 tg(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=()=>de(new Date,"DATE_ONLY",e),c=t?typeof n=="function"?n:d:typeof n=="function"?n:u,m=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return _({type:"date",...o,autoUpdate:a,autoCreate:l,prepare:t?f=>f?a?m():f:s?c():null:f=>f?a?m():f:s?c():null,serialize:t?f=>{if(f!==void 0)return f===null?null:f instanceof Date?de(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 rg(i={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...s}=i,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,c=typeof o=="function"?"js":u?true:void 0,m=()=>new Date,p=()=>de(new Date,"ISO",a),h=t?typeof o=="function"?o:p:typeof o=="function"?o:m,f=t?typeof n=="function"?n:p:typeof n=="function"?n:m;return _({type:"datetime",...s,withTimezone:l,autoUpdate:d,autoCreate:c,prepare:t?q=>q?d?f():q:u?h():null:q=>q?d?f():q:u?h():null,serialize:t?q=>{if(q!==void 0)return q===null?null:q instanceof Date?de(q,"ISO",a):String(q)}:q=>{if(q!==void 0)return q===null?null:q instanceof Date?q:new Date(q)},stringMode:t,openApi:{type:"string",format:"date-time",description:"YYYY-MM-DD HH:mm:ss",...s.openApi||{}}})}function ng(i={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...s}=i,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,c=typeof o=="function"?"js":u?true:void 0,m=()=>new Date,p=()=>de(new Date,"TIMESTAMP",a),h=t?typeof o=="function"?o:p:typeof o=="function"?o:m,f=t?typeof n=="function"?n:p:typeof n=="function"?n:m;return _({type:"timestamp",...s,withTimezone:l,autoUpdate:d,autoCreate:c,prepare:t?q=>q?d?f():q:u?h():null:q=>q?d?f():q:u?h():null,serialize:t?q=>{if(q!==void 0)return q===null?null:q instanceof Date?de(q,"TIMESTAMP",a):String(q)}:q=>{if(q!==void 0)return q===null?null:q instanceof Date?q:new Date(q)},stringMode:t,openApi:{type:"string",format:"date-time",description:"Unix timestamp",...s.openApi||{}}})}function og(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=i,s=!!n,a=!!r,l=typeof n=="function"?"js":s?true:void 0,u=()=>new Date,d=()=>de(new Date,"TIME_ONLY",e),c=t?typeof n=="function"?n:d:typeof n=="function"?n:u,m=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return _({type:"time",...o,autoUpdate:a,autoCreate:l,prepare:t?f=>f?a?m():f:s?c():null:f=>f?a?m():f:s?c():null,serialize:t?f=>{if(f!==void 0)return f===null?null:f instanceof Date?de(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 sg(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 ig(i,t={}){return _({...t,expression:i})}function Wf(i){try{return z.getMetadata(jr,i.prototype)||[]}catch{return []}}function jf(i){return z.getMetadata(Ql,i.prototype)||[]}function Ff(i){return (z.getMetadata(Ql,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 Xr(l,o,a);case "hasOne":return new tn(l,o,a);case "hasMany":return new en(l,o,a);case "manyToMany":if(!e.manyToManyOptions)throw new S("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let u=n();return new rn(u,o,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:C(e.manyToManyOptions.throughModel),leftForeignKey:C(e.manyToManyOptions.leftForeignKey),rightForeignKey:C(e.manyToManyOptions.rightForeignKey)});default:throw new S("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function Uf(i){return z.getMetadata(Ct,i)||z.getMetadata(Ct,i.prototype)}function Vf(i){return z.getMetadata(Mf,i.prototype)||[]}function Jf(i){return z.getMetadata(xf,i.prototype)||[]}function Hf(i){return z.getMetadata(Of,i.prototype)||[]}var ye=class{};ye.columns=new WeakMap,ye.byName=new WeakMap,ye.byDatabaseName=new WeakMap;var Ae=class extends Ve{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 Uf(this)}constructor(t){if(super(),t)for(let e in t)Object.assign(this,{[e]:t[e]});}static getColumns(){let t=ye.columns.get(this);return t||(t=Wf(this),ye.columns.set(this,t)),t}static getColumnsByName(){let t=ye.byName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.columnName,e])),ye.byName.set(this,t)),t}static getColumnsByDatabaseName(){let t=ye.byDatabaseName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.databaseName,e])),ye.byDatabaseName.set(this,t)),t}static getRelations(){return jf(this)}static getIndexes(){return Vf(this)}static getUniques(){return Jf(this)}static getChecks(){return Hf(this)}static async validate(t){var s,a;let e=this.getColumns(),r={},n=this.primaryKey,o=n&&t?.[n]!==void 0?"update":"insert";for(let l of e){if(l.expression)continue;let u=l.validate;if(!u)continue;let d=t?t[l.columnName]:void 0,c=Array.isArray(u)?u:[u];for(let m of c)try{let p=await m(d,{model:this,column:l.columnName,operation:o,data:t});if(!(p&&p.valid)){let h=p&&p.message||"Validation failed";(r[s=l.columnName]||(r[s]=[])).push(h);}}catch{(r[a=l.columnName]||(r[a]=[])).push("Validation error");}}if(Object.keys(r).length>0)throw new Pt(r);return {valid:true}}};Ae.zodEngine=null,Ae.softDeleteColumn="deletedAt",Ae.softDeleteValue=bt();var Mt=class extends N{constructor(e,r=false){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.fromNode=e;}};var U=class extends N{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var re=class extends N{constructor(e,r=[],n,o=false,s=false){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 Ce=class extends N{constructor(e,r,n,o="update",s,a=false){super("on duplicate",a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="on_duplicate";this.file="on_duplicate";this.table=e,this.conflictColumns=r,this.columnsToUpdate=n,this.mode=o,this.returning=s;}};var xt=class extends N{constructor(e=[],r="inserted"){super("returning");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="returning";this.file="returning";this.columns=e,this.prefix=r;}};var Ee=class extends N{constructor(e,r=[],n=[],o=false){super("update",o);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="update";this.file="update";this.fromNode=e,this.columns=r,this.values=n;}};var M=class extends N{constructor(e,r,n=false,o,s,a=false){super("where",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where";this.column=e,this.chainsWith=` ${r}`,this.isNegated=n,this.operator=o,this.value=s;}};var $e=class extends N{constructor(e,r="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`;}};var j=class extends M{constructor(e,r,n=false,o,s,a=false,l,u){super(e,r,n,"=",s,a);this.file="where_json";this.jsonOperator=o,this.value=s,this.path=l,this.comparisonOperator=u;}};var Re=class extends N{constructor(e,r,n,o="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_subquery";this.column=e,this.operator=r,this.subquery=n,this.chainsWith=` ${o}`;}};var zf;zf=Symbol.toStringTag;var G=class{constructor(t,e,r,n){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=n;this[zf]="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 ag=(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 c=u!==void 0,m=o?true:n?n.has(d):true;if(c){if(!m)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},he=(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 c=u;if(c.includes(".")&&(c=c.split(".").pop()),c==="*")continue;let m=r.get(c)?.columnName??c;s.push(m);}let a=s.length?new Set(s):null,l=i.map(u=>ag(u,t,r,n,a,o));return l.length===1?l[0]:l};var Ft=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);}},Gf=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 nn=ie();function Jl(i){let t=nn.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:nn.crypto.randomUUID(),sql:i,params:t,model:void 0,operation:Gf(i),timestamp:nn.timing.now()};try{let u=e.observerChain;u&&typeof u.notifyBefore=="function"&&await u.notifyBefore(s);}catch{}let a=nn.timing.now(),l=u=>{o?.shouldNotLog||ct(i,e.logs,t,e.inputDetails.queryFormatOptions,r,u);};try{let u=e.driverAdapter;if(!u)throw new S("ExecSql","CONNECTION_NOT_ESTABLISHED");let d=o?.timeout,c=d?new AbortController:void 0,m,p=lg(()=>u.execute(i,t,{returning:n,sqlLiteOptions:o?.sqlLiteOptions,signal:c?.signal,connection:e.sqlConnection}),e.inputDetails.connectionPolicies?.retry,e.logs),h;try{d&&c?(h=await Promise.race([p,new Promise((f,T)=>{m=setTimeout(()=>{let w=new S("ExecSql::timeout","QUERY_TIMEOUT",new Error(`Query exceeded the ${d.ms}ms timeout`));d.cancel&&c.abort(w),T(w);},d.ms);})]),p.catch(()=>{})):h=await p;}finally{m&&clearTimeout(m);}try{let f=Jl(a),T=e.observerChain;if(T&&typeof T.notifyAfter=="function"){let w={...s,duration:f,result:h};await T.notifyAfter(w);}}catch{}return l(Jl(a)),u.extract(h,n)}catch(u){throw l(Jl(a)),u}},on=async(i,t,e,r={},n)=>{let o=e.driverAdapter;if(!o)throw new S("ExecSqlStreaming","CONNECTION_NOT_ESTABLISHED");return await o.stream(i,t,{...r,connection:e.sqlConnection??void 0},{onData:n.onData})};async function lg(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++,Nu(`Retrying sql in ${o}ms (attempt ${r}/${n})`,"info",e),await new Promise(l=>setTimeout(l,o)),s();throw a}}return s()}var Y=class extends N{constructor(e,r,n,o,s){super("select");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="select";this.file="select";this.column=e,this.alias=r,this.sqlFunction=n,this.isRawValue=o??false,this.distinct=s;}};var Ut=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=Ff(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 S("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function sn(i,t,e){return {total:e,perPage:t,currentPage:i,firstPage:1,isEmpty:e===0,lastPage:Math.max(1,Math.ceil(e/t)),hasMorePages:i<Math.max(1,Math.ceil(e/t)),hasPages:e>t}}var Ot=i=>typeof i=="number"?i:parseFloat(i);var X=class extends N{constructor(e,r,n=false,o,s,a=false,l,u){super("having",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="having";this.file="having";this.column=e,this.chainsWith=` ${r}`,this.isNegated=n,this.operator=o,this.value=s,this.subquery=l,this.group=u;}};var an=class extends N{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var ln=class extends N{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var Je=class extends N{constructor(e,r,n,o="extract",s=false){super("select");this.folder="select";this.file="select_json";this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.column=e,this.jsonPath=r,this.alias=n,this.jsonOperator=o,this.isRawValue=s;}};var se=class extends N{constructor(e,r,n,o="inner",s,a=false,l){super(`${o} join`,a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="join";this.file="join";this.type="inner";this.table=e,this.left=r,this.right=n,this.type=o,this.on=s,this.additionalConditions=l;}};var Vt=class extends N{constructor(e,r=false){super("group by",r);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="group_by";this.file="group_by";this.column=e;}};var un=class extends N{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var dn=class extends N{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var Jt=class extends N{constructor(e,r="asc",n=false){super("order by",n);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="order_by";this.file="order_by";this.column=e,this.direction=r;}};var mn=class mn{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=mn.EMPTY_MAP);}clearGroupBy(){return this.groupByNodes=[],this}clearOrderBy(){return this.orderByNodes=[],this}clearLimit(){return this.limitNode=null,this}clearOffset(){return this.offsetNode=null,this}groupBy(...t){return t.forEach(e=>{this.groupByNodes.push(new Vt(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Vt(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new Jt(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new Jt(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 un(t),this}offset(t){return typeof t!="number"&&g.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new dn(t),this}};mn.EMPTY_MAP=new Map;var cn=mn;var nt=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 M(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 M(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 M(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 M(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 M(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 M(t,"and",false,"between",[e,r])),this}orWhereBetween(t,e,r){return this.whereNodes.push(new M(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 M(t,"and",true,"between",[e,r])),this}orWhereNotBetween(t,e,r){return this.whereNodes.push(new M(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 M(t,"and",false,"in",e)),this):(this.whereNodes.push(new M("false","and",true,"=",[],true)),this)}orWhereIn(t,e){return e.length?(this.whereNodes.push(new M(t,"or",false,"in",e)),this):(this.whereNodes.push(new M("false","or",true,"=",[],true)),this)}whereNotIn(t,e){return this.andWhereNotIn(t,e)}andWhereNotIn(t,e){return e.length?(this.whereNodes.push(new M(t,"and",true,"in",e)),this):(this.whereNodes.push(new M("true","and",true,"=",[],true)),this)}orWhereNotIn(t,e){return e.length?(this.whereNodes.push(new M(t,"or",true,"in",e)),this):(this.whereNodes.push(new M("true","or",true,"=",[],true)),this)}whereNull(t){return this.andWhereNull(t)}andWhereNull(t){return this.whereNodes.push(new M(t,"and",false,"is null",void 0)),this}orWhereNull(t){return this.whereNodes.push(new M(t,"or",false,"is null",void 0)),this}whereNotNull(t){return this.andWhereNotNull(t)}andWhereNotNull(t){return this.whereNodes.push(new M(t,"and",false,"is not null",void 0)),this}orWhereNotNull(t){return this.whereNodes.push(new M(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 M(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 M(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 M(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 M(t,"or",true,r?"~":"regexp",e.source)),this}whereGroup(t){return this.andWhereGroup(t)}andWhereGroup(t){let e=new i(this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new $e(r,"and")),this}orWhereGroup(t){let e=new i(this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new $e(r,"or")),this}whereRaw(t,e){return this.andWhereRaw(t,e)}andWhereRaw(t,e){return this.whereNodes.push(new M(t,"and",true,"=",e??[],true)),this}orWhereRaw(t,e){return this.whereNodes.push(new M(t,"or",true,"=",e??[],true)),this}};var pn=class extends cn{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new se(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new se(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new se(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new se(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new se(t,"","","cross",{operator:"="},true)),this}crossJoin(t,e){let r=typeof t=="string"?t:t.table;return this.joinNodes.push(new se(e?`${r} as ${e}`:r,"","","cross",{operator:"="})),this}using(...t){let e=this.joinNodes[this.joinNodes.length-1];if(!e||!t.length||e.isRawValue||e.type==="cross"||e.type==="natural")throw new S("JoinQueryBuilder::using","USING_REQUIRES_JOIN");return e.using=t.map(r=>String(r)),this}naturalJoinRaw(t){return this.joinNodes.push(new se(t,"","","natural",{operator:"="},true)),this}innerJoin(t,e,r,n,o){if(e===void 0)return this.join(typeof t=="string"?t:t.table);let s=r,a=n,l=typeof n=="function"?n:o;if(!s){if(!this.model.primaryKey)throw new S("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}return this.join(typeof t=="string"?t:t.table,e,s,a,l),this}join(t,e,r,n,o){if(e===void 0)return this.joinNodes.push(new se(typeof t=="string"?t:t.table,"","","inner",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new S("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new nt(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new se(typeof t=="string"?t:t.table,e,s,"inner",{operator:a||"="},false,u)),this}leftJoin(t,e,r,n,o){if(e===void 0)return this.joinNodes.push(new se(typeof t=="string"?t:t.table,"","","left",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new S("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new nt(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new se(typeof t=="string"?t:t.table,e,s,"left",{operator:a||"="},false,u)),this}rightJoin(t,e,r,n,o){if(e===void 0)return this.joinNodes.push(new se(typeof t=="string"?t:t.table,"","","right",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new S("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new nt(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new se(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 S("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new nt(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new se(typeof t=="string"?t:t.table,e,s,"full",{operator:a||"="},false,u)),this}};var fn=class extends pn{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 Y(`(${u.expression}) as ${l}`,void 0,void 0,true));return}let d=H(a,this.model.databaseCaseConvention);this.selectNodes.push(new Y(d,l));return}let n=r;this.modelSelectedColumns.push(n);let o=this.resolveComputedColumn(n);if(o){this.selectNodes.push(new Y(`(${o.expression}) as ${o.alias}`,void 0,void 0,true));return}let s=H(n,this.model.databaseCaseConvention);this.selectNodes.push(new Y(s));}),this}selectRaw(e){return this.selectNodes.push(new Y(e,void 0,void 0,true)),this}selectFunc(e,r,n){return this.selectNodes.push(new Y(r,n,e)),this}countDistinct(e,r){return this.selectNodes.push(new Y(e,r,"count",false,true)),this}sumDistinct(e,r){return this.selectNodes.push(new Y(e,r,"sum",false,true)),this}avgDistinct(e,r){return this.selectNodes.push(new Y(e,r,"avg",false,true)),this}rank(e,r={}){return this.pushWindow("rank",e,r)}denseRank(e,r={}){return this.pushWindow("dense_rank",e,r)}rowNumber(e,r={}){return this.pushWindow("row_number",e,r)}pushWindow(e,r,n){return this.selectNodes.push(new Y(new Fr(e,Df(n.partitionBy),Af(n.orderBy)),r)),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 an,this}distinctOn(...e){return this.distinctOnNode=new ln(e),this}selectJson(e,r,n){return this.selectNodes.push(new Je(e,r,n,"extract")),this}selectJsonText(e,r,n){return this.selectNodes.push(new Je(e,r,n,"extract_text")),this}selectJsonArrayLength(e,r,n){return this.selectNodes.push(new Je(e,r,n,"array_length")),this}selectJsonKeys(e,r,n){return this.selectNodes.push(new Je(e,r,n,"object_keys")),this}selectJsonRaw(e,r){return this.selectNodes.push(new Je(e,"",r,"raw",true)),this}};var yn=class extends fn{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 M(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 M(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 M(e,"and",false,o,new x(s))),this}orWhereColumn(e,r,n){let o="=",s;return n!==void 0?(o=r,s=n):s=r,this.whereNodes.push(new M(e,"or",false,o,new x(s))),this}whereNotColumn(e,r,n){return this.andWhereNotColumn(e,r,n)}andWhereNotColumn(e,r,n){return this.pushNotColumnWhere("and",e,r,n)}orWhereNotColumn(e,r,n){return this.pushNotColumnWhere("or",e,r,n)}pushNotColumnWhere(e,r,n,o){let s="!=",a=false,l;return o!==void 0?(s=n,l=o,a=true):l=n,this.whereNodes.push(new M(r,e,a,s,new x(l))),this}whereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new M(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 M(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 M(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 M(e,"and",false,"between",[r,n])),this}orWhereBetween(e,r,n){return this.whereNodes.push(new M(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 M(e,"and",true,"between",[r,n])),this}orWhereNotBetween(e,r,n){return this.whereNodes.push(new M(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 M(e,"and",false,"in",r)),this):(this.whereNodes.push(new M("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new M(e,"or",false,"in",r)),this):(this.whereNodes.push(new M("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 M(e,"and",true,"in",r)),this):(this.whereNodes.push(new M("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new M(e,"or",true,"in",r)),this):(this.whereNodes.push(new M("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new M(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new M(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new M(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new M(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 M(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 M(e,"or",false,n?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new M(e,"and",true,n?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new M(e,"and",true,n?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new M(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 Re("","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 Re("","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 Re("","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 Re("","not exists",r.extractQueryNodes(),"or")),this}whereRaw(e,r=[]){return this.andWhereRaw(e,r)}andWhereRaw(e,r=[]){return this.whereNodes.push(new M(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new M(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 X(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 X(e,"or",false,o,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new X(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new X(e,"or",false,"=",[],true)),this}havingNull(e){return this.andHavingNull(e)}andHavingNull(e){return this.havingNodes.push(new X(e,"and",false,"is null",void 0)),this}orHavingNull(e){return this.havingNodes.push(new X(e,"or",false,"is null",void 0)),this}havingNotNull(e){return this.andHavingNotNull(e)}andHavingNotNull(e){return this.havingNodes.push(new X(e,"and",false,"is not null",void 0)),this}orHavingNotNull(e){return this.havingNodes.push(new X(e,"or",false,"is not null",void 0)),this}havingIn(e,r){return this.andHavingIn(e,r)}andHavingIn(e,r){return this.pushHavingIn("and",e,r,false)}orHavingIn(e,r){return this.pushHavingIn("or",e,r,false)}havingNotIn(e,r){return this.andHavingNotIn(e,r)}andHavingNotIn(e,r){return this.pushHavingIn("and",e,r,true)}orHavingNotIn(e,r){return this.pushHavingIn("or",e,r,true)}havingBetween(e,r){return this.andHavingBetween(e,r)}andHavingBetween(e,r){return this.havingNodes.push(new X(e,"and",false,"between",r)),this}orHavingBetween(e,r){return this.havingNodes.push(new X(e,"or",false,"between",r)),this}havingNotBetween(e,r){return this.andHavingNotBetween(e,r)}andHavingNotBetween(e,r){return this.havingNodes.push(new X(e,"and",false,"not between",r)),this}orHavingNotBetween(e,r){return this.havingNodes.push(new X(e,"or",false,"not between",r)),this}havingExists(e){return this.andHavingExists(e)}andHavingExists(e){return this.pushHavingExists("and",e,false)}orHavingExists(e){return this.pushHavingExists("or",e,false)}havingNotExists(e){return this.andHavingNotExists(e)}andHavingNotExists(e){return this.pushHavingExists("and",e,true)}orHavingNotExists(e){return this.pushHavingExists("or",e,true)}havingWrapped(e){return this.andHavingWrapped(e)}andHavingWrapped(e){return this.pushHavingGroup("and",e)}orHavingWrapped(e){return this.pushHavingGroup("or",e)}pushHavingIn(e,r,n,o){let s=o?"not in":"in";if(Array.isArray(n))return this.havingNodes.push(new X(r,e,false,s,n)),this;let a=this.buildSubQuery(n);return this.havingNodes.push(new X(r,e,false,s,[],false,a.extractQueryNodes())),this}pushHavingExists(e,r,n){let o=r instanceof B?r:new B(this.model,this.sqlDataSource);return o.isNestedCondition=true,typeof r=="function"&&r(o),this.havingNodes.push(new X("",e,false,n?"not exists":"exists",[],false,o.extractQueryNodes())),this}pushHavingGroup(e,r){let n=new B(this.model,this.sqlDataSource);return n.isNestedCondition=true,r(n),this.havingNodes.push(new X("",e,false,"=",[],false,void 0,n.havingNodes)),this}buildSubQuery(e){if(e instanceof B)return e;let r=new B(this.model,this.sqlDataSource),n=e(r);return n!=null&&"extractQueryNodes"in n?n:r}andWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new Re(e,r,o.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new Re(e,r,o.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new B(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new $e(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 $e(r.whereNodes,"or");return this.whereNodes.push(n),this}};var hn=class extends yn{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new j(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new j(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new j(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new j(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new j(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new j(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new j(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new j(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new j(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new j(t,"or",false,"raw",e)),this}whereJsonObject(t,e){return this.andWhereJsonObject(t,e)}andWhereJsonObject(t,e){return this.whereNodes.push(new j(t,"and",false,"=",e)),this}orWhereJsonObject(t,e){return this.whereNodes.push(new j(t,"or",false,"=",e)),this}whereNotJsonObject(t,e){return this.andWhereNotJsonObject(t,e)}andWhereNotJsonObject(t,e){return this.whereNodes.push(new j(t,"and",true,"=",e)),this}orWhereNotJsonObject(t,e){return this.whereNodes.push(new j(t,"or",true,"=",e)),this}whereJsonPath(t,e,r,n){return this.andWhereJsonPath(t,e,r,n)}andWhereJsonPath(t,e,r,n){return this.pushJsonPath("and",t,e,r,n,false),this}orWhereJsonPath(t,e,r,n){return this.pushJsonPath("or",t,e,r,n,false),this}whereJsonSupersetOf(t,e){return this.andWhereJsonSupersetOf(t,e)}andWhereJsonSupersetOf(t,e){return this.whereNodes.push(new j(t,"and",false,"contains",e)),this}orWhereJsonSupersetOf(t,e){return this.whereNodes.push(new j(t,"or",false,"contains",e)),this}whereJsonNotSupersetOf(t,e){return this.andWhereJsonNotSupersetOf(t,e)}andWhereJsonNotSupersetOf(t,e){return this.whereNodes.push(new j(t,"and",true,"contains",e)),this}orWhereJsonNotSupersetOf(t,e){return this.whereNodes.push(new j(t,"or",true,"contains",e)),this}whereJsonSubsetOf(t,e){return this.andWhereJsonSubsetOf(t,e)}andWhereJsonSubsetOf(t,e){return this.whereNodes.push(new j(t,"and",false,"subset",e)),this}orWhereJsonSubsetOf(t,e){return this.whereNodes.push(new j(t,"or",false,"subset",e)),this}whereJsonNotSubsetOf(t,e){return this.andWhereJsonNotSubsetOf(t,e)}andWhereJsonNotSubsetOf(t,e){return this.whereNodes.push(new j(t,"and",true,"subset",e)),this}orWhereJsonNotSubsetOf(t,e){return this.whereNodes.push(new j(t,"or",true,"subset",e)),this}whereJsonHasNone(t,e){return this.andWhereJsonHasNone(t,e)}andWhereJsonHasNone(t,e){return this.whereNodes.push(new j(t,"and",false,"has none",e)),this}orWhereJsonHasNone(t,e){return this.whereNodes.push(new j(t,"or",false,"has none",e)),this}pushJsonPath(t,e,r,n,o,s){let a=new j(e,t,s,"path",o,false,r,n);this.whereNodes.push(a);}};var B=class i extends hn{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.comments=[],this.hints=[],this.astParser=new b(this.model,this.dbType);}get interpreterUtils(){return this._interpreterUtils||(this._interpreterUtils=new y(this.model)),this._interpreterUtils}setReplicationMode(e){return this.replicationMode=e,this}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof i)&&typeof e[1]=="string"){let[r,n]=e;if(typeof r=="function"){let o=new i(this.model,this.sqlDataSource),s=r(o),a=s!=null&&"extractQueryNodes"in s?s:o;return this.selectNodes.push(new Y(a.extractQueryNodes(),n)),this}return this.selectNodes.push(new Y(r.extractQueryNodes(),n)),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}clearSelect(){return super.clearSelect(),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}countDistinct(e,r){return super.countDistinct(e,r),this}sumDistinct(e,r){return super.sumDistinct(e,r),this}avgDistinct(e,r){return super.avgDistinct(e,r),this}rank(e,r){return super.rank(e,r),this}denseRank(e,r){return super.denseRank(e,r),this}rowNumber(e,r){return super.rowNumber(e,r),this}async exists(){return !!await this.one()}async many(){let{sql:e,bindings:r}=this.unWrap();return this.execSqlWithSlaveHandling("read",n=>J(e,r,n,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}))}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async pluck(e){return (await this.many()).map(n=>n[e])}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async oneOrFail(){let e=await this.one();if(!e)throw new S("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 on(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 S(this.model.name+"::paginateWithCursor","ORDER_BY_REQUIRED");let n=this.orderByNodes;if(n.some(m=>m.isRawValue))throw new S(this.model.name+"::paginateWithCursor","ORDER_BY_RAW_NOT_SUPPORTED");let o=n.map(m=>m.column),s=n[0].direction==="desc"?"<":">";if(r){let m=Array.isArray(r.value)?r.value:[r.value];this.andWhere(p=>{for(let h=0;h<o.length;h++){let f=h;p.orWhere(T=>{for(let w=0;w<f;w++)T.where(o[w],"=",m[w]);T.where(o[f],s,m[f]);});}});}this.limit(e+1);let a=await this.many(),l=a.length>e,u=l?a.slice(0,e):a,d=u[u.length-1],c=o.map(m=>m.includes(".")?m.slice(m.lastIndexOf(".")+1):m);return {data:u,hasMore:l,nextCursor:d?{key:c.length===1?c[0]:c,value:c.length===1?d[c[0]]:c.map(m=>d[m])}:null}}lockForUpdate(e={}){return this.lockQueryNodes.push(new Xe("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new Xe("for_share",e.skipLocked,e.noWait)),this}forNoKeyUpdate(e={}){return this.assertPgLockStrength("forNoKeyUpdate","FOR NO KEY UPDATE"),this.lockQueryNodes.push(new Xe("for_no_key_update",e.skipLocked,e.noWait)),this}forKeyShare(e={}){return this.assertPgLockStrength("forKeyShare","FOR KEY SHARE"),this.lockQueryNodes.push(new Xe("for_key_share",e.skipLocked,e.noWait)),this}assertPgLockStrength(e,r){if(this.dbType!=="postgres")throw new S(`QueryBuilder::${e}`,`LOCK_STRENGTH_NOT_SUPPORTED_IN_${this.dbType.toUpperCase()}`,new Error(`${r} is only supported by postgres`))}timeout(e,r={}){return this.queryTimeout={ms:e,cancel:r.cancel??false},this}comment(e){return this.assertValidSqlComment(e),this.comments.push(e),this}hintComment(e){this.assertValidSqlComment(e);let r=e.slice(3,-2).trim(),n=this.hints[0];return this.hints=[n?`${n.slice(0,-2).trimEnd()} ${r} */`:`/*+ ${r} */`],this}clearComment(){return this.comments=[],this}clearHintComment(){return this.hints=[],this}assertValidSqlComment(e){let r=()=>{throw new S("QueryBuilder::comment","INVALID_SQL_COMMENT")};(!e.trim().length||e.includes("?"))&&r();let n=(this.dbType==="mysql"||this.dbType==="mariadb")&&e.startsWith("#");if(e.startsWith("--")||n){/[\r\n]/.test(e)&&r();return}if(e.startsWith("/*")&&e.endsWith("*/")&&e.length>=4){let o=e.slice(2,-2);(o.includes("/*")||o.includes("*/"))&&r();return}r();}union(e){if(typeof e=="string")return this.unionNodes.push(new Ie(e)),this;let n=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Ie(n)),this}unionAll(e){if(typeof e=="string")return this.unionNodes.push(new Ie(e,true)),this;let n=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Ie(n,true)),this}intersect(e){return this.unionNodes.push(new Ie(this.resolveSetOperationNodes(e),false,"intersect")),this}except(e){return this.unionNodes.push(new Ie(this.resolveSetOperationNodes(e),false,"except")),this}resolveSetOperationNodes(e){return typeof e=="string"?e:(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes()}increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?Ot(r.total):0}needsDerivedTableCount(){return this.groupByNodes.length>0||this.havingNodes.length>0||this.distinctNode!==null||this.distinctOnNode!==null}buildCountQuery(e="*"){if(!this.needsDerivedTableCount()){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);return}this.clearOrderBy(),this.clearLimit(),this.clearOffset();let r=this.extractQueryNodes();this.withNodes=[],this.distinctNode=null,this.distinctOnNode=null,this.clearSelect(),this.fromNode=new U(r,"g"),this.joinNodes=[],this.whereNodes=[],this.groupByNodes=[],this.havingNodes=[],this.lockQueryNodes=[],this.unionNodes=[],this.comments=[],this.hints=[],this.selectRaw(`count(${e}) as total`);}async getMax(e){this.clearForFunctions(),this.selectFunc("max",e,"total");let r=await this.one();return r?Ot(r.total):0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?Ot(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?Ot(r.total):0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?Ot(r.total):0}async columnInfo(e){let r=typeof this.fromNode.table=="string"?this.fromNode.table:this.model.table,o=await(await this.getSqlDataSource("read")).getTableInfo(r);return e===void 0?o:o.find(s=>s.name===e)}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&g.warn(`${this.model.name}::paginate Non numeric values provided to \`paginate\``);let n=this.clone(),o=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>o.many(),()=>n.getCount("*"));return {paginationMetadata:sn(e,r,a),data:s}}table(e,r){if(typeof e=="function"){if(!r)throw new S("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}withSchema(e){return this.schemaName=e,this}fromRaw(e,r=[]){return this.fromNode=new U(new x(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 et("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 et("recursive",e,s.extractQueryNodes())),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new S("QueryBuilder::withMaterialized","MATERIALIZED_CTE_NOT_SUPPORTED",new Error("MATERIALIZED CTE is only supported by postgres"));let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new et("materialized",e,s.extractQueryNodes())),this}withNotMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new S("QueryBuilder::withNotMaterialized","NOT_MATERIALIZED_CTE_NOT_SUPPORTED",new Error("NOT MATERIALIZED CTE is only supported by postgres"));let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new et("not 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 re(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 re(this.fromNode,[l],r,o);let{sql:u,bindings:d}=this.astParser.parse([this.insertNode]),c=await this.getSqlDataSource("write"),m=await J(u,d,c,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[e]}});if(!o)return Array.isArray(m)&&m.length?m[0]:m})}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 re(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 c=>{let{columns:m,values:p}=this.interpreterUtils.prepareColumns(Object.keys(c),Object.values(c),"insert",this.dbType);return Object.fromEntries(m.map((h,f)=>[h,p[f]]))}));this.insertNode=new re(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",{timeout:this.queryTimeout,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 re(new U(this.model.table),[a],void 0,true),this.onDuplicateNode=new Ce(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:c,bindings:m}=this.astParser.parse([new re(new U(this.model.table),[d],void 0,true),new Ce(this.model.table,s,o,n.updateOnConflict??true?"update":"ignore",n.returning)]),p=await this.getSqlDataSource("write"),h=await J(c,m,p,this.dbType,"rows",{timeout:this.queryTimeout,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 re(new U(this.model.table),a,void 0,true),this.onDuplicateNode=new Ce(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((w,q)=>[w,f[q]]));l.push(T);})),this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw(l,e,s,o,n);let{sql:u,bindings:d}=this.astParser.parse([new re(new U(this.model.table),l,void 0,true),new Ce(this.model.table,e,s,o.updateOnConflict??true?"update":"ignore",o.returning)]),c=await this.getSqlDataSource("write"),m=await J(u,d,c,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:n}});return Array.isArray(m)?m:[m]})}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=[],c=e.map(K=>`select ${a.map(v=>(d.push(K[v]),`@${d.length}`)).join(", ")}`),m=a.map(u).join(", "),p=c.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(", "),w=a.map(K=>`source.${u(K)}`).join(", "),q=o.returning&&o.returning.length?o.returning.map(K=>`inserted.${u(K)}`).join(", "):a.map(K=>`inserted.${u(K)}`).join(", "),R=(o.updateOnConflict??true)&&f?`when matched then update set ${f}`:"",$=`merge into ${l} as target using (${p}) as source (${m}) on ${h} ${R} when not matched then insert (${T}) values (${w}) output ${q};`,A=await this.getSqlDataSource("write"),O=await J($,d,A,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(O)?O:[O]}update(e,r){let n=this.interpreterUtils.stripComputedFromData(e),o=Object.keys(n),s=Object.values(n);this.updateNode=new Ee(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 Ee(this.fromNode,l,u);let{sql:d,bindings:c}=this.astParser.parse(this.withReturningNode([this.updateNode,...this.whereNodes,...this.joinNodes])),m=await this.getSqlDataSource("write");return J(d,c,m,this.dbType,a?"rows":"affectedRows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:a?"fetch":"affectedRows"}})})}buildReturningNode(e,r){return !r?.length||!this.interpreterUtils.dialectEmitsReturning(this.dbType)?null:new xt(r,e==="delete"?"deleted":"inserted")}withReturningNode(e){if(!this.returningNode)return e;if(this.dbType==="mssql"){let[r,...n]=e;return [r,this.returningNode,...n]}return [...e,this.returningNode]}truncate(){return this.truncateNode=new qt(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",{timeout:this.queryTimeout});})}delete(e){this.deleteNode=new Mt(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",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:r?"fetch":"affectedRows"}})})}softDelete(e={}){let{column:r="deletedAt",value:n=bt()}=e||{};return this.updateNode=new Ee(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 Ee(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",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return it(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),n=lt(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${n}`:n,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new Y("*")]);let{sql:e,bindings:r}=this.astParser.parse(this.extractQueryNodes());return {sql:this.withQuery?`${this.withQuery} ${e}`:e,bindings:[...r||[]]}}clone(){let e=new i(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=W(this.modelSelectedColumns),e.distinctNode=W(this.distinctNode),e.distinctOnNode=W(this.distinctOnNode),e.selectNodes=W(this.selectNodes),e.withQuery=W(this.withQuery),e.joinNodes=W(this.joinNodes),e.whereNodes=W(this.whereNodes),e.groupByNodes=W(this.groupByNodes),e.havingNodes=W(this.havingNodes),e.orderByNodes=W(this.orderByNodes),e.lockQueryNodes=W(this.lockQueryNodes),e.unionNodes=W(this.unionNodes),e.withNodes=W(this.withNodes),e.comments=[...this.comments],e.hints=[...this.hints],e.schemaName=this.schemaName,e.fromNode=W(this.fromNode),e.limitNode=W(this.limitNode),e.offsetNode=W(this.offsetNode),e.returningNode=W(this.returningNode),e.isNestedCondition=this.isNestedCondition,e}clear(){let e=new i(this.model,this.sqlDataSource);return this.fromNode.alias&&e.table(e.model.table,this.fromNode.alias),e}clearLockQuery(){return this.lockQueryNodes=[],this}clearUnionQuery(){return this.unionNodes=[],this}clearWithQuery(){return this.withNodes=[],this}extractQueryNodes(){if(this.selectNodes.length||(this.selectNodes=[new Y("*")]),this.schemaName){this.fromNode&&typeof this.fromNode.table=="string"&&(this.fromNode.schema=this.schemaName);for(let n of this.joinNodes)n.schema=this.schemaName;}if(this.insertNode)return [this.insertNode,this.onDuplicateNode].filter(Boolean);if(this.updateNode)return this.withReturningNode([this.updateNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode]).filter(Boolean);if(this.deleteNode)return this.withReturningNode([this.deleteNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode]).filter(Boolean);if(this.truncateNode)return [this.truncateNode];let e=this.comments.map(n=>new Lt(n)),r=this.hints.length?[new Lt(this.hints.join(" "),true)]:[];return [...this.withNodes,...e,this.distinctNode,this.distinctOnNode,...this.selectNodes,...r,this.fromNode,...this.joinNodes,...this.whereNodes,...this.groupByNodes,...this.havingNodes,...this.orderByNodes,this.limitNode,this.offsetNode,...this.lockQueryNodes,...this.unionNodes].filter(Boolean)}clearForFunctions(){return this.clearSelect(),this.clearGroupBy(),this.clearOrderBy(),this.clearLimit(),this.clearOffset(),this}isMssqlTransaction(){return this.sqlDataSource.type==="mssql"&&!!this.sqlDataSource.sqlConnection}async executePaginateQueries(e,r){if(this.isMssqlTransaction()){let n=await e(),o=await r();return [n,o]}return Promise.all([e(),r()])}async getSqlDataSource(e){return this.replicationMode?this.replicationMode==="master"?this.sqlDataSource:e==="write"?this.sqlDataSource:this.sqlDataSource.getSlave()||this.sqlDataSource:e==="read"?this.sqlDataSource.getSlave()||this.sqlDataSource:this.sqlDataSource}async execSqlWithSlaveHandling(e,r){let n=await this.getSqlDataSource(e);if(!(n!==this.sqlDataSource))return r(n);try{return await r(n)}catch(s){let a=s instanceof Error?s:new Error(String(s)),l=this.sqlDataSource.getOnSlaveServerFailure();if(l)return await l(a,{host:n.host,port:n.port,username:n.username,password:n.password,database:n.database,type:n.getDbType()}),await r(this.sqlDataSource);throw a}}};function Yf(i,t){return t.strategy&&t.strategy!=="auto"?t.strategy:ug(i)}function ug(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 Hl=ie(),ot=class i extends B{constructor(e,r){super(e,r);this.loadOptions={strategy:"auto"};this.sqlModelManagerUtils=new Ut(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 Y(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 S(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=he(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 on(r,n,o,e,{onData:async(a,l)=>{let u=he([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 st(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 S(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 S(`${this.model.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let l=H(a.leftForeignKey,s.caseConvention||this.model.databaseCaseConvention),u=H(a.rightForeignKey,s.caseConvention||this.model.databaseCaseConvention),d=n.map((p,h)=>({[l]:r[this.model.primaryKey],[u]:p[a.model.primaryKey],...o?o(p,h):{}}));class c extends Ae{static get table(){return a.throughModel}}c.databaseCaseConvention="preserve",c.modelCaseConvention="preserve",await new st(c,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 he(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 he(o,this.model,r)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?+r.total:0}async getMax(e){this.clearForFunctions(),this.selectFunc("max",e,"total");let r=await this.one();return r?+r.total:0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?+r.total:0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?+r.total:0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?+r.total:0}async paginate(e,r){let n=this.clone(),o=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>o.many(),()=>n.getCount("*"));return {paginationMetadata:sn(e,r,a),data:s}}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof B)&&typeof e[1]=="string"){let[r,n]=e;return super.select(r,n),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}countDistinct(e,r){return super.countDistinct(e,r),this}sumDistinct(e,r){return super.sumDistinct(e,r),this}avgDistinct(e,r){return super.avgDistinct(e,r),this}rank(e,r){return super.rank(e,r),this}denseRank(e,r){return super.denseRank(e,r),this}rowNumber(e,r){return super.rowNumber(e,r),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}load(e,r,n){let o,s={strategy:"auto"};typeof r=="function"?(o=r,n&&(s=n)):r&&typeof r=="object"&&(s=r);let a=this.sqlModelManagerUtils.getRelationFromModel(e),l=new i(a.model,this.sqlDataSource);return l.relation=a,l.loadOptions=s,o?.(l),this.relationQueryBuilders.push(l),this}clearRelations(){return this.relationQueryBuilders=[],this}havingRelated(e,r,n){return this.andHavingRelated(e,r,n)}andHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.whereExists(d),this}orHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.orWhereExists(d),this}notHavingRelated(e,r,n){return this.andNotHavingRelated(e,r,n)}andNotHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.whereNotExists(d),this}orNotHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.orWhereNotExists(d),this}clone(){let e=super.clone();return e.relationQueryBuilders=W(this.relationQueryBuilders),e}async processRelationsRecursively(e){await Promise.all(this.relationQueryBuilders.filter(r=>r.isRelationQueryBuilder).map(async r=>{let n=await this.getRelatedModelsForRelation(r,r.relation,e);this.mapRelatedModelsToModels(r.relation,e,n);}));}async processRelationsWithStrategy(e){let r=e.length,n=this.relationQueryBuilders.filter(s=>s.isRelationQueryBuilder),o=async s=>{let a=Yf({parentCount:r,relationType:s.relation.type,hasLimitOffset:!!s.limitNode||!!s.offsetNode,hasOrderBy:s.orderByNodes.length>0},s.loadOptions),l=s.relationQueryBuilders.length>0;a==="join"&&!l?await this.loadRelationViaJoin(s,e):await this.loadRelationViaBatch(s,e);};if(this.dbType==="mssql"){for(let s of n)await o(s);return}await Promise.all(n.map(o));}async loadRelationViaJoin(e,r){let n=e.relation,o=e.loadOptions.joinSeparator||"__",a=await this.buildJoinQuery(e,n,o).many();this.mapJoinedResultsToModels(a,r,n,o);}buildJoinQuery(e,r,n){let o=new i(this.model,this.sqlDataSource);if(this.modelSelectedColumns.length>0)for(let s of this.selectNodes)o.selectNodes.push(W(s));else for(let[s,a]of this.model.getColumnsByDatabaseName())a.expression||o.selectRaw(`${this.model.table}.${s}`);for(let s of this.whereNodes){let a=W(s);this.qualifyWhereNodeColumns(a,this.model.table),o.whereNodes.push(a);}for(let s of this.groupByNodes)o.groupByNodes.push(W(s));for(let s of this.orderByNodes)o.orderByNodes.push(W(s));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(o.limitNode=W(this.limitNode)),this.offsetNode&&(o.offsetNode=W(this.offsetNode))),r.type){case "hasOne":case "hasMany":o.leftJoin(r.model.table,`${this.model.table}.${this.model.primaryKey}`,`${r.model.table}.${r.foreignKey}`);break;case "belongsTo":o.leftJoin(r.model.table,`${this.model.table}.${r.foreignKey}`,`${r.model.table}.${r.model.primaryKey}`);break;case "manyToMany":{let s=r;o.leftJoin(s.throughModel,`${this.model.table}.${this.model.primaryKey}`,`${s.throughModel}.${s.leftForeignKey}`),o.leftJoin(s.model.table,`${s.throughModel}.${s.rightForeignKey}`,`${s.model.table}.${s.model.primaryKey}`);break}}this.selectRelationColumnsWithAlias(o,r,e,n);for(let s of e.whereNodes)o.whereNodes.push(W(s));for(let s of e.orderByNodes)o.orderByNodes.push(W(s));return o}selectRelationColumnsWithAlias(e,r,n,o){let s=r.columnName,a=r.model,l=a.getColumnsByName(),u=a.getColumnsByDatabaseName(),d=n.selectNodes.filter(m=>typeof m.column=="string"),c=d.some(m=>m.column==="*"||m.column.endsWith(".*"));if(d.length===0||c)for(let[m,p]of u)e.selectRaw(`${a.table}.${m} as ${s}${o}${p.columnName}`);else for(let m of d){let p=m.column,h=p.includes(".")?p.split(".").pop():p,f=u.get(h)||l.get(h),T=f?.databaseName??h,w=m.alias??f?.columnName??h;e.selectRaw(`${a.table}.${T} as ${s}${o}${w}`);}}mapJoinedResultsToModels(e,r,n,o){let{columnName:s,type:a}=n,l=n.model.getColumnsByName();if(a==="hasMany"||a==="manyToMany"){let u=new Map;e.forEach(d=>{let c=d[this.model.primaryKey];u.has(c)||u.set(c,[]);let m=this.extractRelationDataFromRow(d,s,o);m&&(this.serializeRelationData(m,l),u.get(c).push(m));}),r.forEach(d=>{let c=d[this.model.primaryKey];d[s]=u.get(c)||[];});}else {let u=new Map;e.forEach(d=>{let c=d[this.model.primaryKey];if(!u.has(c)){let m=this.extractRelationDataFromRow(d,s,o);m&&(this.serializeRelationData(m,l),u.set(c,m));}}),r.forEach(d=>{let c=d[this.model.primaryKey];d[s]=u.get(c)||null;});}}extractRelationDataFromRow(e,r,n){let o=`${r}${n}`,s={},a=false,l=false;for(let u of Object.keys(e))if(u.startsWith(o)){let d=u.substring(o.length);s[d]=e[u],a=true,e[u]!==null&&e[u]!==void 0&&(l=true);}return a&&l?s:null}qualifyWhereNodeColumns(e,r){if(e instanceof M)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof Re)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof $e)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 S(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let o=new Map;n.forEach(m=>{let p=m[e.foreignKey];p&&o.set(String(p),m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=null;return}let h=o.get(String(p));m[e.columnName]=h||null;});break;case "belongsTo":let s=new Map;n.forEach(m=>{if(!e.model.primaryKey)throw new S(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let p=m[e.model.primaryKey];p&&s.set(String(p),m);}),r.forEach(m=>{let p=m[e.foreignKey];if(!p){m[e.columnName]=null;return}let h=s.get(String(p));m[e.columnName]=h||null;});break;case "hasMany":if(!this.model.primaryKey)throw new S(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;n.forEach(m=>{let p=m[e.foreignKey];if(!p)return;let h=String(p);a.has(h)||a.set(h,[]),a.get(h).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let h=a.get(String(p))||[];m[e.columnName]=h;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new S(this.model.name+"::mapRelatedModelsToModels::manyToMany","MODEL_HAS_NO_PRIMARY_KEY");let l=e,u=new Map,d=l.leftForeignKey,c=this.modelColumnsMap.get(d)||this.modelColumnsDatabaseNames.get(d)||H(d,this.model.modelCaseConvention);n.forEach(m=>{let p=m[c];if(p==null)return;let h=String(p);u.has(h)||u.set(h,[]),delete m[c],u.get(h).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let h=u.get(String(p))||[];m[e.columnName]=h;});break;default:throw new S(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=Qe(Hl.crypto.randomBytes(6)),u=`${r.model.table}_cte_${l}`,d=e.orderByNodes.map(O=>O.isRawValue?O.column:`${this.interpreterUtils.formatStringColumn(this.dbType,O.column)} ${O.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let c=e.with(u,O=>O.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${d}) as rn_${l}`).whereIn(r.foreignKey,o));s&&c.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&c.whereRaw(`rn_${l} > ${a}`);let m=e.modelSelectedColumns.map(O=>fo(O,u,e.model.table));return c.select(...m).table(u);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new S(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!n.length)return e;let h=e.limitNode?.limit,f=e.offsetNode?.offset,T=e.modelSelectedColumns.length?e.modelSelectedColumns.map(O=>O.includes(".")?O:`${r.model.table}.${O}`):[`${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 w=Qe(Hl.crypto.randomBytes(6)),q=`${r.model.table}_cte_${w}`,D=e.orderByNodes.map(O=>{if(O.isRawValue)return O.column;let K=O.column.includes(".")?O.column:`${r.model.table}.${O.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,K)} ${O.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let R=`${Qe(Hl.crypto.randomBytes(6))}_left_foreign_key`,$=e.with(q,O=>O.select(...T).select([`${p.throughModel}.${p.leftForeignKey}`,R]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${D}) as rn_${w}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o));h&&$.whereRaw(`rn_${w} <= ${h+(f||0)}`),f&&$.whereRaw(`rn_${w} > ${f}`);let A=T.map(O=>fo(O,q,e.model.table));return $.select(...A).select([`${q}.${R}`,p.leftForeignKey]).table(q);default:throw new S(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new S(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);case "belongsTo":return r.map(n=>n[e.foreignKey]);case "manyToMany":if(!this.model.primaryKey)throw new S(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);default:throw new S(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 S(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");let u=s.formatStringColumn(l,`${r.model.table}.${r.foreignKey}`),d=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${u} = ${d}`),n&&typeof o=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${n} ${o}`);return}case "belongsTo":{if(!r.model.primaryKey||!r.foreignKey)throw new S(this.model.name+"::applyHavingRelatedFilter",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${r.model.name}`);let u=s.formatStringColumn(l,`${r.model.table}.${r.model.primaryKey}`),d=a.formatStringColumn(l,`${this.model.table}.${r.foreignKey}`);e.whereRaw(`${u} = ${d}`),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 S(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");e.joinNodes?.some(p=>!p.isRawValue&&p.table===u.throughModel&&p.type==="left")||e.leftJoin(u.throughModel,`${u.relatedModel}.${r.model.primaryKey}`,`${u.throughModel}.${u.rightForeignKey}`);let c=a.formatStringColumn(l,`${u.throughModel}.${u.leftForeignKey}`),m=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${c} = ${m}`),n&&typeof o=="number"&&e.groupByRaw(c).andHavingRaw(`count(*) ${n} ${o}`);return}default:throw new S(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}};function Zf(){return {}}var st=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=Zf(),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 S(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new S(this.model.name+"::findOneByPrimaryKey","MODEL_HAS_NO_PRIMARY_KEY");return this.query().select(...e||[]).where(this.model.primaryKey,t).one()}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 re(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:lt(this.sqlDataSource,u.sql),bindings:u.bindings}},l=()=>{let{sql:u,bindings:d}=a();return it(u,d)};return new G(s,a,l,async()=>{try{await this.model.validate?.(t);}catch(q){throw q}let{columns:u,values:d}=this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert",this.sqlType),c={};u.forEach((q,D)=>{let R=d[D];c[q]=R,t[q]??(t[q]=R);});let m=!e.returning||e.returning.length===0,{sql:p,bindings:h}=this.astParser.parse([new re(new U(this.model.table),[c],e.returning,m)]),f=await J(p,h,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(m)return;if(this.sqlType==="mysql")return this.handleMysqlInsert(f,[t],"one",e.returning);let T=f[0];return T?he([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 re(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:lt(this.sqlDataSource,u.sql),bindings:u.bindings}},l=()=>{let{sql:u,bindings:d}=a();return it(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:w,values:q}=this.interpreterUtils.prepareColumns(Object.keys(T),Object.values(T),"insert",this.sqlType),D={};return w.forEach((R,$)=>{let A=q[$];D[R]=A,T[R]??(T[R]=A);}),D}),d=!e.returning||e.returning.length===0,{sql:c,bindings:m}=this.astParser.parse([new re(new U(this.model.table),u,e.returning,d)]),p=await J(c,m,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(d)return [];if(this.sqlType==="mysql")return await this.handleMysqlInsert(p,t,"many",e.returning)||[];let h=p;return h.length?he(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 re(new U(this.model.table),s,void 0,true),l=n.returning?.length&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?n.returning:void 0;new Ce(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}},c=()=>{let p=this.astParser.parse([a]);return {sql:lt(this.sqlDataSource,p.sql),bindings:p.bindings}},m=()=>{let{sql:p,bindings:h}=c();return it(p,h)};return new G(d,c,m,async()=>{let p=r.map(A=>{let{columns:O,values:K}=this.interpreterUtils.prepareColumns(Object.keys(A),Object.values(A),"insert",this.sqlType);return Object.fromEntries(O.map((le,v)=>[le,K[v]]))});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:w}=this.astParser.parse([new re(new U(this.model.table),p,void 0,true),new Ce(this.model.table,t,o,n.updateOnConflict??true?"update":"ignore",f)]),q=await J(T,w,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:r}});if(h)return [];if(this.sqlType==="postgres"||this.sqlType==="cockroachdb"){if(q.length<r.length&&!(n.updateOnConflict??true)){let K=t[0],le=r.map(ne=>ne[K]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(K,le).many()}return he(q,this.model,n.returning)||[]}let D=t[0],R=r.map(A=>A[D]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(D,R).many()})}async executeMssqlMerge(t,e,r,n,o){if(!t.length)return [];let s=Object.keys(t[0]),a=this.interpreterUtils.formatStringColumn("mssql",this.model.table),l=A=>this.interpreterUtils.formatStringColumn("mssql",A),u=[],d=t.map(A=>`select ${s.map(K=>(u.push(A[K]),`@${u.length}`)).join(", ")}`),c=s.map(l).join(", "),m=d.join(" union all "),p=e.map(A=>`target.${l(A)} = source.${l(A)}`).join(" and "),h=r.filter(A=>!e.includes(A)).map(A=>`target.${l(A)} = source.${l(A)}`).join(", "),f=s.map(l).join(", "),T=s.map(A=>`source.${l(A)}`).join(", "),w=n.returning&&n.returning.length?n.returning.map(A=>`inserted.${l(A)}${this.interpreterUtils.resolveColumnAlias("mssql",A)}`).join(", "):s.map(A=>`inserted.${l(A)}${this.interpreterUtils.resolveColumnAlias("mssql",A)}`).join(", "),D=(n.updateOnConflict??true)&&h?`when matched then update set ${h}`:"",R=`merge into ${a} as target using (${m}) as source (${c}) on ${p} ${D} when not matched then insert (${f}) values (${T}) output ${w};`,$=await J(R,u,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});if($.length===0&&!(n.updateOnConflict??true)){let A=e[0],O=o.map(le=>le[A]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(A,O).many()}return $}async updateRecord(t,e,r){let n=new Set(this.model.getColumns().map(w=>w.columnName)),o=Object.keys(e).filter(w=>n.has(w)),s=o.map(w=>e[w]),{columns:a,values:l}=this.interpreterUtils.prepareColumns(o,s,"update",this.sqlType),{primaryKey:u}=this.model;if(!u)throw new S(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let d=a.indexOf(u);d!==-1&&(a.splice(d,1),l.splice(d,1));let c=r?.returning??[],m=c.length>0&&!this.interpreterUtils.hasComputedColumn(c)&&this.interpreterUtils.shouldFetchNatively(this.sqlType,"update"),{sql:p,bindings:h}=this.astParser.parse([new Ee(new U(this.model.table),a,l),new M(u,"and",false,"=",t),...m?[new xt(c)]:[]]),f=await J(p,h,this.sqlDataSource,this.sqlType,m?"rows":"affectedRows",m?{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}:void 0);if(!c.length)return;if(m){if(!f.length)throw new S(this.model.name+"::updateRecord","ROW_NOT_FOUND");return he([f[0]],this.model,c)}let T=await this.findOneByPrimaryKey(t,r?.returning);if(!T)throw new S(this.model.name+"::updateRecord","ROW_NOT_FOUND");return T}async deleteRecord(t){if(!this.model.primaryKey)throw new S(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new M(this.model.primaryKey,"and",false,"=",t),{sql:r,bindings:n}=this.astParser.parse([new Mt(new U(this.model.table)),e]);await J(r,n,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new ot(this.model,this.sqlDataSource);return this.replicationMode&&t.setReplicationMode(this.replicationMode),t}async handleMysqlInsert(t,e,r,n){if(!this.model.primaryKey){if(r==="one"){let a=e.length?e[0]:null;return a?he([a],this.model):null}return he(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(d=>d[this.model.primaryKey]),l=a.map(d=>`'${d}'`).join(","),u=await this.query().select(...n??["*"]).whereIn(this.model.primaryKey,a).orderByRaw(`FIELD(${this.model.primaryKey}, ${l})`).many();return r==="one"?u.length?u[0]:null:u}let o=Array.from({length:t.affectedRows},(a,l)=>l+t.insertId),s=await this.query().select(...n||["*"]).whereIn(this.model.primaryKey,o).many();return r==="one"?s.length?s[0]:null:s}handleWhereCondition(t,e,r=false){if(e)for(let[n,o]of Object.entries(e))n==="$and"&&Array.isArray(o)?t[r?"orWhere":"where"](a=>{for(let l of o)this.handleWhereCondition(a,l,false);}):n==="$or"&&Array.isArray(o)?t[r?"orWhere":"where"](a=>{let l=true;for(let u of o)this.handleWhereCondition(a,u,!l),l=false;}):this.applyFieldCondition(t,n,o,r);}applyFieldCondition(t,e,r,n=false){if(r==null||typeof r!="object"){r===null?n?t.orWhereNull(e):t.whereNull(e):n?t.orWhere(e,"=",r):t.where(e,"=",r);return}let o=r,s=o.op,a=o.value;switch(s){case "$eq":a===null?n?t.orWhereNull(e):t.whereNull(e):n?t.orWhere(e,"=",a):t.where(e,"=",a);break;case "$ne":a===null?n?t.orWhereNotNull(e):t.whereNotNull(e):n?t.orWhere(e,"!=",a):t.where(e,"!=",a);break;case "$gt":n?t.orWhere(e,">",a):t.where(e,">",a);break;case "$gte":n?t.orWhere(e,">=",a):t.where(e,">=",a);break;case "$lt":n?t.orWhere(e,"<",a):t.where(e,"<",a);break;case "$lte":n?t.orWhere(e,"<=",a):t.where(e,"<=",a);break;case "$between":{let[l,u]=a;n?t.orWhereBetween(e,l,u):t.whereBetween(e,l,u);break}case "$not between":{let[l,u]=a;n?t.orWhereNotBetween(e,l,u):t.whereNotBetween(e,l,u);break}case "$regexp":n?t.orWhereRegexp(e,a):t.whereRegexp(e,a);break;case "$not regexp":n?t.orWhereNotRegexp(e,a):t.whereNotRegexp(e,a);break;case "$is null":n?t.orWhereNull(e):t.whereNull(e);break;case "$is not null":n?t.orWhereNotNull(e):t.whereNotNull(e);break;case "$like":n?t.orWhereLike(e,a):t.whereLike(e,a);break;case "$not like":n?t.orWhereNotLike(e,a):t.whereNotLike(e,a);break;case "$ilike":n?t.orWhereILike(e,a):t.whereILike(e,a);break;case "$not ilike":n?t.orWhereNotILike(e,a):t.whereNotILike(e,a);break;case "$in":n?t.orWhereIn(e,a):t.whereIn(e,a);break;case "$nin":n?t.orWhereNotIn(e,a):t.whereNotIn(e,a);break;default:n?t.orWhere(e,"=",r):t.where(e,"=",r);}}};var zl=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??bt()});Dt();var be=class{constructor(t){this.options=t;}static async createDriver(t){throw new S("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};ue();var Ht=class Ht extends be{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new Ht(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 Ht(this.mongoClient)}};Ht.mongoClient=null;var gn=Ht;ue();var zt=class zt extends be{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new zt(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 zt(this.mssqlClient)}};zt.mssqlClient=null;var bn=zt;ue();var Gt=class Gt extends be{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new Gt(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 Gt(this.mysqlClient)}};Gt.mysqlClient=null;var Tn=Gt;ue();var Yt=class Yt extends be{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new Yt(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 Yt(this.pgClient)}};Yt.pgClient=null;var wn=Yt;ue();var Zt=class Zt extends be{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new Zt(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 Zt(this.sqlite3Client)}};Zt.sqlite3Client=null;var Sn=Zt;var me=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await Tn.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await wn.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await Sn.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await gn.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await bn.createDriver(),this.mssqlDriver;default:throw new S(`DriverFactory::getDriver Driver ${t} not supported`,"DRIVER_NOT_FOUND")}}static getExistingDriver(t){switch(t){case "mysql":case "mariadb":return this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver;case "sqlite":return this.sqliteDriver;case "mongo":return this.mongodbDriver;case "mssql":return this.mssqlDriver;default:return null}}};me.mysqlDriver=null,me.pgDriver=null,me.sqliteDriver=null,me.mssqlDriver=null,me.mongodbDriver=null;Dt();ue();var Nn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;let n=e.coerceNumericTypes&&!e.driverOptions?.types?{getTypeParser:(o,s)=>{let a=!s||s==="text";return a&&o===20?l=>BigInt(l):a&&o===1700?l=>Number.parseFloat(l):r.types.getTypeParser(o,s)}}:void 0;this.pool=new r.Pool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions,...n?{types:n}:{}});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.connect()}releaseConnection(t){t?.release();}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION"),e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=0,o=t.replace(/\?/g,()=>`$${++n}`);if(!r.signal)return (r.connection??this.pool).query(o,e);let s=r.connection??await this.pool.connect(),a=!r.connection,l=()=>{let u=s.processID;u!=null&&this.pool.query("SELECT pg_cancel_backend($1)",[u]).catch(()=>{});};r.signal.addEventListener("abort",l,{once:true});try{return await s.query(o,e)}finally{r.signal.removeEventListener("abort",l),a&&s.release();}}extract(t,e){return e==="rows"?t.rows:e==="raw"?t:t.rowCount}async stream(t,e,r,n){let o=r.connection,s=!o,a=o??await this.pool.connect(),l=await import('pg-query-stream').catch(()=>{throw new L("pg-query-stream")}),u=new PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),d=0,c=t.replace(/\?/g,()=>`$${++d}`),m=new l.default(c,e,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),p=a.query(m),h=0,f=false,T=false,w=q=>{if(s)try{a.release(q);}catch{}};return p.on("data",q=>{if(n.onData){h++,Promise.resolve(n.onData(u,q)).then(()=>{h--,f&&h===0&&!T&&(w(),u.end());}).catch(D=>{T=true,w(D),u.destroy(D);});return}u.write(q);}),p.on("end",()=>{f=true,h===0&&!T&&(w(),u.end());}),p.on("error",q=>{T=true,w(q),u.destroy(q);}),u}};var qn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=r.createPool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.getConnection()}releaseConnection(t){t?.release();}async beginTransaction(t,e){e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await t.beginTransaction();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){if(!r.signal)return (r.connection??this.pool).query(t,e);let n=r.connection??await this.pool.getConnection(),o=!r.connection,s=()=>{let a=n.threadId;a!=null&&this.pool.query(`KILL QUERY ${Number(a)}`).catch(()=>{});};r.signal.addEventListener("abort",s,{once:true});try{return await n.query(t,e)}finally{r.signal.removeEventListener("abort",s),o&&n.release();}}extract(t,e){let r=t;return e==="affectedRows"?r[0]?.affectedRows??0:e==="raw"?t:r[0]}async stream(t,e,r,n){let o=this.pool,s=r.connection??await o.getConnection(),a=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),u=s.connection.query(t,e).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),d=0,c=false,m=false,p=()=>{try{s.release();}catch{}};return u.on("data",h=>{if(n.onData){d++,Promise.resolve(n.onData(a,h)).then(()=>{d--,c&&d===0&&!m&&(p(),a.end());}).catch(f=>{m=true,p(),a.destroy(f);});return}a.write(h);}),u.on("end",()=>{c=true,d===0&&!m&&(p(),a.end());}),u.on("error",h=>{m=true,p(),a.destroy(h);}),a.on("close",()=>{p();}),a}};var Cn=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 S("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 Gl(o,t,e,{onData:n.onData})}promisify(t,e,r){let n=r.sqlLiteOptions??{},o=n.mode||"fetch",s=n.customConnection??r.connection??this.pool;if(["begin","begin transaction","commit","rollback"].includes(t.trim().toLowerCase()))return new Promise((u,d)=>{s.run(t,e,function(c){c&&d(c),u(this.changes);});});if(o==="fetch")return new Promise((u,d)=>{s.all(t,e,(c,m)=>{c&&d(c),u(m||[]);});});if(!n?.typeofModel)return new Promise((u,d)=>{s.run(t,e,function(c){c?d(new Error(c.message)):u(this.changes);});});if(o==="insertOne"||o==="insertMany"){let u=`${t} returning *`;return new Promise((d,c)=>{s.all(u,e,(m,p)=>{if(m)return c(m);d(p||[]);});})}return new Promise((u,d)=>{s.run(t,e,function(c){c?d(new Error(c.message)):u(this.changes);});})}},Gl=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);});}};ue();var Rn=class{constructor(t,e,r){this.dialect="mssql";this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;let n=e.driverOptions,{options:o,...s}=n??{};this.pool=new r.ConnectionPool({server:e.host??"localhost",port:e.port,database:e.database,user:e.username,password:e.password,...s,options:{trustServerCertificate:E.MSSQL_TRUST_SERVER_CERTIFICATE??void 0,...o,abortTransactionOnError:false,enableImplicitTransactions:false}});}async createPool(){await this.pool.connect();}async closePool(){await this.pool.close();}async reserveConnection(){return this.pool.transaction()}releaseConnection(){}async beginTransaction(t,e){if(e.isolationLevel){let r=await this.getMssqlTransactionLevel(e.isolationLevel);await t.begin(r);return}await t.begin();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){let n=this.pool,o=r.connection?r.connection.request():n.request();e.forEach((l,u)=>{o.input(`p${u}`,l);});let s=0,a=t.replace(/\?|@(\d+)/g,()=>`@p${s++}`);if(r.signal){let l=()=>{try{o.cancel();}catch{}};r.signal.addEventListener("abort",l,{once:true});try{return await o.query(a)}finally{r.signal.removeEventListener("abort",l);}}return o.query(a)}extract(t,e){return e==="affectedRows"?t.rowsAffected[0]:e==="raw"?t:t.recordset}async stream(t,e,r,n){let o=r.connection??this.pool,s=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),a=o.request();a.stream=true,e.forEach((p,h)=>{a.input(`p${h}`,p);});let l=0,u=t.replace(/\?|@(\d+)/g,()=>`@p${l++}`),d=0,c=false,m=false;return a.on("row",p=>{if(!m){if(n.onData){d++,Promise.resolve(n.onData(s,p)).then(()=>{d--,c&&d===0&&!m&&s.end();}).catch(h=>{m=true,s.destroy(h);});return}s.write(p);}}),a.on("error",p=>{m=true,s.destroy(p);}),a.on("done",()=>{c=true,d===0&&!m&&s.end();}),a.query(u),s}async getMssqlTransactionLevel(t){let e=await import('mssql').then(r=>r.default.ISOLATION_LEVEL).catch(r=>{throw g.error(r),new L("mssql")});switch(t){case "READ UNCOMMITTED":return e.READ_UNCOMMITTED;case "READ COMMITTED":return e.READ_COMMITTED;case "REPEATABLE READ":return e.REPEATABLE_READ;case "SERIALIZABLE":return e.SERIALIZABLE;default:throw new S("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${t}`)}}};var yg=()=>{ge({name:"pg",dialects:["postgres","cockroachdb"],create:async({dialect:i,input:t})=>{let e=(await me.getDriver(i)).client;return new Nn(i,t,e)}}),ge({name:"mysql2",dialects:["mysql","mariadb"],create:async({dialect:i,input:t})=>{let e=(await me.getDriver(i)).client;return new qn(i,t,e)}}),ge({name:"sqlite3",dialects:["sqlite"],create:async({dialect:i,input:t})=>{let e=(await me.getDriver(i)).client;return new Cn(i,t,e)}}),ge({name:"mssql",dialects:["mssql"],create:async({dialect:i,input:t})=>{let e=(await me.getDriver(i)).client;return new Rn(i,t,e)}});};yg();var Sg=async i=>{if(i==="bun"){await(await Promise.resolve().then(()=>(ay(),iy))).registerBunDrivers();return}if(i==="web"){(await Promise.resolve().then(()=>(tu(),eu))).registerWebDrivers();return}if(i==="react-native"){await(await Promise.resolve().then(()=>(tu(),eu))).registerReactNativeDrivers();return}},Dn=async(i,t)=>{let e=ur(t?.jsEnvironment);await Sg(e);let r=await ey(i,e,t?.driver,t);return await r.createPool(),r};var er=class er{constructor(){}static run(t,e){return er.storage.run(t,e)}static getTransaction(){return er.storage.getStore()}};er.storage=new AsyncLocalStorage;var He=er;var tr=class i{constructor(t,e,r=false,n=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=Qe(ie().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 He.run(e,()=>t(e));return await e.commit(),r}catch(r){throw await e.rollback(),r}return e}async transaction(){if(this.getIsolationLevelQuery(),this.isNested){let r=this.getSavePointName();this.sql.type==="mssql"?await this.sql.rawQuery(`SAVE TRANSACTION ${r}`):await this.sql.rawQuery(`SAVEPOINT ${r}`),this.isActive=true;return}(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&ct("BEGIN TRANSACTION",this.sql.logs);let t=this.sql.driverAdapter,e=this.sql.sqlConnection;if(!t||!e)throw new S("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 S("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":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")&&ct("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 S("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":await this.sql.rawQuery(`ROLLBACK TRANSACTION ${e}`);break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":await this.sql.rawQuery(`ROLLBACK TO SAVEPOINT ${e}`);break;case "sqlite":await this.sql.rawQuery(`ROLLBACK TO ${e}`);break;default:throw new S("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}this.isActive=false;return}try{let e=this.sql.driverAdapter,r=this.sql.sqlConnection;(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&ct("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 S("TRANSACTION::getIsolationLevelQuery","SQLITE_ONLY_SUPPORTS_SERIALIZABLE_ISOLATION_LEVEL");if(this.sql.type==="mysql"||this.sql.type==="mariadb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="postgres"||this.sql.type==="cockroachdb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="sqlite")return "";throw new S("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}};var ru=Symbol.for("hysteria.orm.SqlDataSource"),my,py,Be=class i extends(py=kt,my=ru,py){constructor(e){super(e);this[my]=true;this.globalTransaction=null;this.globalTransactionLock=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.lockConnection=null;this.lockKeyToId=new Map;this.driverAdapter=null;this.id=ie().crypto.randomUUID();this.logicalSourceId=ie().crypto.randomUUID();this.cacheAdapter=new hr;this.migrationConfig={path:E.MIGRATION_PATH||"database/migrations",lock:true,transactional:true,lockTimeout:3e4};this.seederConfig={path:"database/seeders"};this.zodEngine=null;this.lazyLoad=false;this.connecting=null;this.sqlType=e?.type||this.type;let r=e;this.inputDetails={...e,type:this.sqlType,host:r?.host??this.host,port:r?.port??this.port,username:r?.username??this.username,password:r?.password??this.password,database:r?.database??this.database,logs:r?.logs??this.logs},this.inputDetails.connectionPolicies=e?.connectionPolicies||{retry:{maxRetries:0,delay:0}},this.inputDetails.queryFormatOptions=e?.queryFormatOptions||{language:vt(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&&ru in e&&e[ru]===true}get isClsEnabled(){return this.clsEnabled}getOnSlaveServerFailure(){return this.onSlaveServerFailure}addObserver(e){return this.observerChain||(this.observerChain=new Ft([])),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 S("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");try{this.driverAdapter=await Dn(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 Dn(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 S("SqlDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.connect().finally(()=>{this.connecting=null;})),await this.connecting;}}get isInGlobalTransaction(){return !!this.globalTransaction}get models(){let e=this;return new Proxy(this._models,{get(r,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=He.getTransaction();if(e?.isActive&&e.sql.logicalSourceId===this.logicalSourceId)return e.sql}return null}async useCache(e,r,...n){if(!this.cacheAdapter)throw new S("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new S("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=Hn(JSON.stringify(u)),c=d?`${e}:${d}`:e,m=await this.cacheAdapter.get(c);if(m!==void 0)return m;let p=await o(...u);return await this.cacheAdapter.set(c,p,l),p}async invalidCache(e,...r){if(!this.cacheAdapter)throw new S("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new S("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=Hn(JSON.stringify(r)),a=s?`${e}:${s}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new S("SqlDataSource::invalidateAllCache","CACHE_ADAPTER_NOT_CONFIGURED");await this.cacheAdapter.invalidateAll(e);}async clone(e){let r=new i(this.inputDetails);return r.id=this.id,r.logicalSourceId=this.logicalSourceId,r.sqlType==="sqlite"||!!e?.shouldRecreatePool?(r.driverAdapter=await Dn(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(zl(e,r),n);return r?.alias&&o.table(e,r.alias),o}return new ot(e,n)}fromRaw(e,r=[],n){let o=this.getTransactionBoundSqlDataSource()??this;return new B(zl("",n),o).fromRaw(e,r)}schema(){if(!this.isConnected&&!this.lazyLoad)throw new S("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new Wt(this,this.getDbType())}async startGlobalTransaction(e){for(;this.globalTransactionLock;)await this.globalTransactionLock;if(this.globalTransaction?.isActive)throw new S("SqlDataSource::startGlobalTransaction","GLOBAL_TRANSACTION_ALREADY_STARTED");let r=()=>{};this.globalTransactionLock=new Promise(n=>{r=n;});try{let n=await this.clone();return n.sqlConnection=await n.getConnection(),this.globalTransaction=new tr(n,e?.isolationLevel),await this.globalTransaction.transaction(),this.globalTransaction}finally{r(),this.globalTransactionLock=null;}}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new S("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");try{await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async rollbackGlobalTransaction(e){if(!this.globalTransaction){g.warn("SqlDataSource::rollbackGlobalTransaction - GLOBAL_TRANSACTION_NOT_STARTED");return}try{await this.globalTransaction.rollback({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async transaction(e,r){let 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?He.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 tr(s,n?.isolationLevel);if(await a.transaction(),typeof e=="function")try{let l=this.clsEnabled?await He.run(a,()=>e(a)):await e(a);return await a.commit({throwErrorOnInactiveTransaction:!1}),l}catch(l){throw await a.rollback({throwErrorOnInactiveTransaction:false}),l}return a}getModelManager(e){if(!this.isConnected&&!this.lazyLoad)throw new S("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");let r=this.getTransactionBoundSqlDataSource()??this;return new st(e,r)}getPool(){if(!this.sqlPool)throw this.lazyLoad?new S("SqlDataSource::getPool - call ensureConnected() or connect() first when using lazyLoad","CONNECTION_NOT_ESTABLISHED"):new S("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(){if(this.sqlConnection)return this.sqlConnection;await this.ensureConnected();let e=this.driverAdapter;if(!e)throw new S("SqlDataSource::getConnection","CONNECTION_NOT_ESTABLISHED");return e.reserveConnection()}async disconnect(){if(!this.isConnected){g.warn("Connection already closed or not established");return}if(!this.ownsPool){if(this.sqlConnection)try{this.driverAdapter?.releaseConnection(this.sqlConnection);}catch(e){g.warn(`SqlDataSource::disconnect - releasing borrowed connection failed: ${e?.message??e}`);}this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{g.warn("SqlDataSource::disconnect - Error while rolling back global transaction");}if(this.lockConnection){try{this.driverAdapter?.releaseConnection(this.lockConnection);}catch(e){g.warn(`SqlDataSource::disconnect - releasing lock connection failed: ${e?.message??e}`);}this.lockConnection=null,this.lockKeyToId.clear();}await this.cacheAdapter?.disconnect?.(),this.slaves.length&&await Promise.all(this.slaves.map(async e=>{try{await e.disconnect();}catch(r){g.warn(`SqlDataSource::disconnect - Error while closing slave connection: ${r.message}`);}})),g.warn("Closing connection"),await this.driverAdapter?.closePool(),this.sqlPool=null,this.driverAdapter=null,this.sqlConnection=null;}getConnectionDetails(){return {type:this.getDbType(),host:this.host,port:this.port,username:this.username,password:this.password,database:this.database,connectionPolicies:this.inputDetails.connectionPolicies,queryFormatOptions:this.inputDetails.queryFormatOptions,jsEnvironment:this.inputDetails.jsEnvironment,driver:this.inputDetails.driver}}async introspectSchema(){let e=this.getDbType(),r;e==="postgres"||e==="cockroachdb"?r=`
|
|
258
|
+
ORDER BY pk`,bindings:[]}}},yf=new _l;var Ml=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},hf=new Ml;var xl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new y(this.model).formatStringColumn("sqlite",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"sqlite").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"sqlite").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new y(this.model).formatStringColumn("sqlite",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"sqlite").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},gf=new xl;var Ol=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new y(this.model).formatStringColumn("sqlite",e.column),n=ee.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toSqlite();return r==="$"?t:`json_extract(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toSqlite();return r==="$"?`json_array_length(${t})`:`json_array_length(${t}, '${r}')`}buildObjectKeysSql(t,e){return `json_each.key FROM json_each(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},bf=new Ol;var Dl=class{toSql(t){let e=t,r=Fe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof O?s.rawValue:s instanceof v?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "lower(hex(randomblob(16)))";case "$now":case "$currentTimestamp":return "current_timestamp";default:return}}},Tf=new Dl;var Al=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return e.keyword="",{sql:e.fromNode,bindings:[]};if(e.options&&Object.values(e.options).some(Boolean))throw new T("SqliteTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("SQLite does not support TRUNCATE options"));let r=new y(this.model).getFromForWriteOperations("sqlite",e.fromNode);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},wf=new Al;var $l=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new y(this.model).formatRawPlaceholders("sqlite",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Sf=new $l;var Il=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new y(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((l,u)=>{let d=e.values[u],c=r.formatStringColumn("sqlite",l);if(d instanceof O)return `${c} = ${d.rawValue}`;if(d instanceof N){let m=new b(this.model,"sqlite").parse([d],s,true);return o.push(...m.bindings),s+=m.bindings.length,`${c} = ${m.sql}`}return o.push(d),`${c} = ?`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},Nf=new Il;var vl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",n=[];if(this.isRawNode(e.value)){let o=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${o}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new y(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,n=e.value;else {let o=e.value.map(s=>"?").join(", ");r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${o})`,n=e.value;}else if(e.value instanceof v){let o=new b(this.model,"sqlite").parse([e.value],1,true).sql;r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${o}`,n=[];}else if(e.operator.includes("null"))r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new y(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ?`,n=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new y(this.model).formatStringColumn("sqlite",t):t}},qf=new vl;var Pl=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"sqlite"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},Cf=new Pl;var El=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new y(this.model).formatStringColumn("sqlite",e.column);switch(e.jsonOperator){case "=":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "path":{let s=ee.from(e.path??"");r=`json_extract(${o}, '${s.toSqlite()}') ${e.comparisonOperator??"="} ?`,n=[e.value];break}case "subset":case "has none":throw new T("WhereJsonInterpreter::unsupported","NOT_SUPPORTED_IN_SQLITE");case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},Rf=new El;var Bl=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"sqlite"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"sqlite"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},_f=new Bl;var kl=class{toSql(t){let e=t,r=new y(this.model),n=s=>r.formatStringColumn("sqlite",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},Mf=new kl;var Ql=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.columns?.length?` (${e.columns.map(a=>new y(this.model).formatStringColumnBare("sqlite",a)).join(", ")})`:"";return {sql:`${e.alias}${s} as (${o.sql})`,bindings:o.bindings}}},xf=new Ql;var Kl={mssql:{alter_table:{add_column:Eu,add_constraint:Bu,add_primary_key:ku,alter_column_type:Qu,alter_table:Lu,drop_column:Wu,drop_constraint:ju,drop_default:Fu,drop_not_null:Uu,drop_primary_key:Vu,rename_column:Ju,rename_table:Hu,set_default:Gu,set_not_null:Yu,set_table_options:Zu},column:{column_type:Xu},comment:{comment:ed},constraint:{after:td,constraint:rd},create_table:{create_table:nd},delete:{delete:od},distinct:{distinct:sd,distinct_on:id},drop_table:{drop_table:ad},extension:{create_extension:ld},from:{from:ud},group_by:{group_by:dd},having:{having:cd},index_op:{create_index:md,drop_index:pd},insert:{insert:fd},join:{join:yd},json_mutation:{json_mutation:Sd},limit:{limit:Nd},lock:{lock:qd},offset:{offset:Cd},on_duplicate:{on_duplicate:Rd},order_by:{order_by:_d},raw:{raw:Md},returning:{returning:xd},schema:{check_constraint_info:Od,foreign_key_info:Dd,get_column_listing:Ad,get_tables:$d,has_check_constraint:Id,has_column:vd,has_index:Pd,has_primary_key:Ed,has_table:Bd,index_info:kd,primary_key_info:Qd,table_info:Kd},select:{select:Ld,select_json:Wd},sqlfunc:{sqlfunc:jd},truncate:{truncate:Fd},union:{union:Ud},update:{update:Vd},where:{where:Jd,where_group:Hd,where_json:zd,where_subquery:Gd},window:{window:Yd},with:{with:Zd}},mysql:{alter_table:{add_column:Xd,add_constraint:ec,add_primary_key:tc,alter_column_type:rc,alter_table:nc,drop_column:oc,drop_constraint:sc,drop_default:ic,drop_not_null:ac,drop_primary_key:lc,rename_column:uc,rename_table:dc,set_default:cc,set_not_null:mc,set_table_options:pc},column:{column_type:fc},comment:{comment:yc},constraint:{after:hc,constraint:gc},create_table:{create_table:bc},delete:{delete:Tc},distinct:{distinct:wc,distinct_on:Sc},drop_table:{drop_table:Nc},extension:{create_extension:qc},from:{from:Cc},group_by:{group_by:Rc},having:{having:_c},index_op:{create_index:Mc,drop_index:xc},insert:{insert:Oc},join:{join:Dc},json_mutation:{json_mutation:Ac},limit:{limit:$c},lock:{lock:Ic},offset:{offset:vc},on_duplicate:{on_duplicate:Pc},order_by:{order_by:Ec},raw:{raw:Bc},returning:{returning:kc},schema:{check_constraint_info:Qc,foreign_key_info:Kc,get_column_listing:Lc,get_tables:Wc,has_check_constraint:jc,has_column:Fc,has_index:Uc,has_primary_key:Vc,has_table:Jc,index_info:Hc,primary_key_info:zc,table_info:Gc},select:{select:Yc,select_json:Zc},sqlfunc:{sqlfunc:Xc},truncate:{truncate:em},union:{union:tm},update:{update:rm},where:{where:nm,where_group:om,where_json:sm,where_subquery:im},window:{window:am},with:{with:lm}},postgres:{alter_table:{add_column:um,add_constraint:dm,add_primary_key:cm,alter_column_type:mm,alter_table:pm,drop_column:fm,drop_constraint:ym,drop_default:hm,drop_not_null:gm,drop_primary_key:bm,rename_column:Tm,rename_table:wm,set_default:Sm,set_not_null:Nm,set_table_options:qm},column:{column_type:Cm},comment:{comment:Rm},constraint:{after:_m,constraint:Mm},create_table:{create_table:xm},delete:{delete:Om},distinct:{distinct:Dm,distinct_on:Am},drop_table:{drop_table:$m},extension:{create_extension:Im},from:{from:vm},group_by:{group_by:Pm},having:{having:Em},index_op:{create_index:Bm,drop_index:km},insert:{insert:Qm},join:{join:Km},json_mutation:{json_mutation:Lm},limit:{limit:Wm},lock:{lock:jm},offset:{offset:Fm},on_duplicate:{on_duplicate:Um},order_by:{order_by:Vm},raw:{raw:Jm},returning:{returning:Hm},schema:{check_constraint_info:zm,foreign_key_info:Gm,get_column_listing:Ym,get_tables:Zm,has_check_constraint:Xm,has_column:ep,has_index:tp,has_primary_key:rp,has_table:np,index_info:op,primary_key_info:sp,table_info:ip},select:{select:ap,select_json:lp},sqlfunc:{sqlfunc:up},truncate:{truncate:dp},union:{union:cp},update:{update:mp},where:{where:pp,where_group:fp,where_json:yp,where_subquery:hp},window:{window:gp},with:{with:bp}},sqlite:{alter_table:{add_column:Tp,add_constraint:wp,alter_column_type:Sp,alter_table:Np,drop_column:qp,drop_constraint:Cp,drop_default:Rp,drop_not_null:_p,drop_primary_key:Mp,rename_column:xp,rename_table:Op,set_default:Dp,set_not_null:Ap,set_table_options:$p},column:{column_type:Ip},comment:{comment:vp},constraint:{after:Pp,constraint:Ep},create_table:{create_table:Bp},delete:{delete:kp},distinct:{distinct:Qp,distinct_on:Kp},drop_table:{drop_table:Lp},extension:{create_extension:Wp},from:{from:jp},group_by:{group_by:Fp},having:{having:Up},index_op:{create_index:Vp,drop_index:Jp},insert:{insert:Hp},join:{join:zp},json_mutation:{json_mutation:Gp},limit:{limit:Yp},lock:{lock:Zp},offset:{offset:Xp},on_duplicate:{on_duplicate:ef},order_by:{order_by:tf},raw:{raw:rf},returning:{returning:nf},schema:{check_constraint_info:of,foreign_key_info:sf,get_column_listing:af,get_tables:lf,has_check_constraint:uf,has_column:df,has_index:cf,has_primary_key:mf,has_table:pf,index_info:ff,primary_key_info:yf,table_info:hf},select:{select:gf,select_json:bf},sqlfunc:{sqlfunc:Tf},truncate:{truncate:wf},union:{union:Sf},update:{update:Nf},where:{where:qf,where_group:Cf,where_json:Rf,where_subquery:_f},window:{window:Mf},with:{with:xf}}};var b=class{constructor(t,e){this.dbType=e,this.model=t;}parse(t,e=1,r=false){if(!t.length)return {sql:"",bindings:[]};let n=t.find(R=>!!R&&R.folder==="distinctOn"),o=!n&&t.find(R=>!!R&&R.folder==="distinct"),s=t.filter(R=>!!R&&R.folder==="comment"&&R.isHint).map(R=>this.renderNode(R)).filter(R=>R.length>0).join(" "),a=this.dbType==="mssql"?t.find(R=>!!R&&R.folder==="lock")??null:null,l=a?this.getMssqlTableHints(a):"",u=t.filter(R=>R!==null&&R.folder!=="distinct"&&R.folder!=="distinctOn"&&!(R.folder==="comment"&&R.isHint)),d=u.some(R=>R.folder==="offset"),c=u.some(R=>R.folder==="order_by"),m=u.find(R=>R.folder==="limit"),p=u.find(R=>R.folder==="offset"),h=this.dbType==="mssql"&&m&&!d&&!c,f=this.dbType==="mssql"&&!h&&(m||p),w=[],S=[],q=null;h&&m&&S.push(m.limit);for(let R=0;R<u.length;R++){let $=u[R];if(h&&$.folder==="limit"||f&&($.folder==="limit"||$.folder==="offset"))continue;$.currParamIndex=e+S.length;let A=Kl[this.mapCommonDbType(this.dbType)][$.folder][$.file];if(!A)throw new Error(`Interpreter not found for ${this.dbType} ${$.keyword}`);A.model=this.model,A.dbType=this.dbType;let D=A.toSql($);if(!D.sql||!D.sql.trim().length)continue;let Q=u[R+1],P=!Q||Q.keyword!==$.keyword?"":Q.chainsWith;if($.folder==="lock"||$.folder==="on_duplicate"||$.folder==="returning"||$.folder==="schema"||$.folder==="comment"){w.push(`${D.sql}${P}`),S.push(...D.bindings),q=$.keyword;continue}if(q!==$.keyword||$.canKeywordBeSeenMultipleTimes){if(r)w.push(`${D.sql}${P}`);else {let se=$.keyword;if($.folder==="with"&&this.dbType!=="mssql"){let Re=R,_e=false;for(;Re<u.length&&u[Re].keyword===$.keyword;){let cu=u[Re];if(cu.folder==="with"&&cu.clause==="recursive"){_e=true;break}Re++;}_e&&(se=`${se} recursive`);}let Ze=s?`${s} `:"";if(se==="select"){let Re=h?`top (@${e}) `:"";if(n){let _e=Array.isArray(n.columns)?n.columns.join(", "):"";w.push(`select ${Re}${Ze}distinct on (${_e}) ${D.sql}${P}`);}else o?w.push(`select ${Re}${Ze}distinct ${D.sql}${P}`):w.push(`select ${Re}${Ze}${D.sql}${P}`);}else se==="from"&&l?w.push(`${se} ${D.sql}${l}${P}`):w.push(`${se} ${D.sql}${P}`);}q=$.keyword;}else w.push(`${D.sql}${P}`);S.push(...D.bindings);}if(f){c||w.push("order by (select null)");let R=p?.offset??0;S.push(R);let A=`offset @${e+S.length-1} rows`;if(m){S.push(m.limit);let D=e+S.length-1;A+=` fetch next @${D} rows only`;}w.push(A);}return {sql:w.join(" "),bindings:S}}renderNode(t){let e=Kl[this.mapCommonDbType(this.dbType)][t.folder][t.file];if(!e)throw new Error(`Interpreter not found for ${this.dbType} ${t.keyword}`);return e.model=this.model,e.dbType=this.dbType,e.toSql(t).sql}mapCommonDbType(t){switch(t){case "mariadb":return "mysql";case "cockroachdb":return "postgres";default:return t}}getMssqlTableHints(t){let e=[];switch(t.lockType){case "UPDATE":e.push("UPDLOCK");break;case "SHARE":e.push("HOLDLOCK");break;case "NO_KEY_UPDATE":e.push("UPDLOCK");break;case "KEY_SHARE":e.push("HOLDLOCK");break}return t.skipLocked&&e.push("READPAST"),t.noWait&&e.push("NOWAIT"),e.length>0?` with (${e.join(", ")})`:""}};var wr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var Sr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var Nr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var qr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var Cr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var Rr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_table";this.table=e;}};var _r=class extends N{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_column";this.table=e,this.column=r;}};var Mr=class extends N{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_index";this.table=e,this.index=r;}};var xr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_primary_key";this.table=e;}};var Or=class extends N{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_check_constraint";this.table=e,this.constraint=r;}};var Dr=class extends N{constructor(){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_tables";}};var Ar=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_column_listing";this.table=e;}};var $r=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var we=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var Tt=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var Ir=class extends N{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="alter_column_type";this.column=e,this.newType=r,this.options=n;}};var fe=class extends N{constructor(e,r=[],n=false){super("alter table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="alter_table";this.table=e,this.children=r,this.ifExists=n;}};var vr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var Se=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var Lt=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var Pr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var wt=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var Er=class extends N{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var Br=class extends N{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_default";this.column=e,this.defaultValue=r;}};var kr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var St=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="set_table_options";this.engine=e.engine,this.charset=e.charset,this.collate=e.collate;}};var U=class extends N{constructor(e,r={},n=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="constraint";this.constraintType=e,this.columns=r.columns,this.references=r.references,this.constraintName=r.constraintName,this.onDelete=r.onDelete,this.onUpdate=r.onUpdate,this.defaultValue=r.defaultValue,this.checkExpression=r.checkExpression,this.isRawValue=n;}};var Qr=class extends N{constructor(e,r=[],n=[],o=false,s){super("create table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="create_table";this.file="create_table";this.table=e,this.children=r,this.namedConstraints=n,this.ifNotExists=o,s&&Object.assign(this,s);}};var Kr=class extends N{constructor(e,r=false){super("drop table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="drop_table";this.file="drop_table";this.table=e,this.ifExists=r;}};var Lr=class extends N{constructor(e,r=true){super("create extension");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="extension";this.file="create_extension";this.extensionName=e,this.ifNotExists=r;}};var Wr=class extends N{constructor(e,r,n,o=false){super("create index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="index_op";this.file="create_index";this.table=e,this.columns=r,this.indexName=n,this.unique=o;}};var jr=class extends N{constructor(e,r,n){super("drop index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.cascade=false;this.folder="index_op";this.file="drop_index";this.indexName=e,this.table=r,this.cascade=n??false;}};var Nt=class extends N{constructor(e,r=false,n){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e,this.options=n;}};function Mh(i){return i.endsWith("ies")?i.slice(0,-3)+"y":i.endsWith("sses")||i.endsWith("shes")||i.endsWith("ches")||i.endsWith("xes")||i.endsWith("zes")?i.slice(0,-2):i.endsWith("s")&&!i.endsWith("ss")?i.slice(0,-1):i}var Fr=Symbol("columns"),qt=Symbol("primaryKey"),Ll=Symbol("relations"),Of=Symbol("indexes"),Df=Symbol("uniques"),Af=Symbol("checks"),Wl=i=>`${Mh(i)}_id`,jl=(i,t)=>`idx_${i}_${t}`,Ne=(i,t)=>`uq_${i}_${t}`,Y=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,qe=(i,t)=>`pk_${i}_${t}`;var k=class extends N{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="column";this.file="column_type";this.isRawValue=false;this.column=e,this.dataType=r,this.length=n.length,this.precision=n.precision,this.scale=n.scale,this.enumValues=n.enumValues,this.withTimezone=n.withTimezone,this.autoIncrement=n.autoIncrement,this.autoCreate=n.autoCreate,this.autoUpdate=n.autoUpdate,this.collate=n.collate,this.isRawValue=n.isRawValue??false,this.unsigned=n.unsigned,this.zerofill=n.zerofill;}};var Wt=class extends N{constructor(e,r=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="comment";this.file="comment";this.value=e,this.isHint=r;}};var et=class extends N{constructor(e,r=false,n=false){super("lock");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="lock";this.file="lock";this.lockType=e,this.skipLocked=r,this.noWait=n;}};var Ur=class extends N{constructor(e,r=[],n=[]){super("window");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="window";this.file="window";this.fn=e,this.partitionBy=r,this.orderBy=n;}};function $f(i){return i?Array.isArray(i)?i:[i]:[]}function If(i){return i?(Array.isArray(i)?i:[i]).map(e=>typeof e=="string"?{column:e}:e):[]}var ve=class extends N{constructor(e,r=false,n="union",o){super(r?`${n} all`:n);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="union";this.file="union";this.query=e,this.isAll=r,this.type=n,this.bindings=o;}};var tt=class extends N{constructor(e,r,n,o){e==="normal"&&(e="");super("with");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="with";this.file="with";this.alias=r,this.body=n,this.clause=e,this.columns=o;}};var Ue=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var Vr=class extends N{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var Jr=class extends Ue{constructor(t,e,r,n,o=[],s="create_table"){super(e),this.columnNode=r,this.tableName=n,this.namedConstraints=o,this.context=s,this.sqlType=t;}primaryKey(t){let e=qe(this.tableName,C(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new U("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new U("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??e})),this)}foreignKey(t,e){this.columnNode.isForeignKey=true;let[r,n]=t.split("."),o=n.split(","),s=e?.constraintName??Y(this.tableName??"",C(this.columnNode.column),o[0]);return this.context==="alter_table"?(this.nodes.push(new U("foreign_key",{columns:[C(this.columnNode.column)],references:{table:r,columns:o},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this):(this.namedConstraints.push(new U("foreign_key",{columns:[C(this.columnNode.column)],references:{table:r,columns:o},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this)}increment(){return this.columnNode.autoIncrement=true,this}unsigned(){return this.columnNode.unsigned=true,this}zerofill(){return this.columnNode.zerofill=true,this}notNullable(){return this.nodes.push(new U("not_null",{columns:[C(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new U("null",{columns:[C(this.columnNode.column)]})),this}default(t){let e;return t instanceof O||t instanceof v?e=t:t===null?e="NULL":typeof t=="boolean"?e=t?"TRUE":"FALSE":t!==void 0&&(e=t.toString()),this.nodes.push(new U("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new U("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName??Ne(this.tableName??"",C(this.columnNode.column))})),this):(this.namedConstraints.push(new U("unique",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName||Ne(this.tableName??"",C(this.columnNode.column))})),this)}check(t,e){let r=C(this.columnNode.column),n=e?.constraintName??`chk_${this.tableName}_${r}`.substring(0,63);return this.context==="alter_table"?(this.nodes.push(new U("check",{columns:[r],checkExpression:t,constraintName:n})),this):(this.namedConstraints.push(new U("check",{columns:[r],checkExpression:t,constraintName:n})),this)}after(t){return this.sqlType!=="mysql"?this:(this.nodes.push(new Vr(t)),this)}collate(t){return this.columnNode.collate=t,this}handleSqliteAutoIncrement(t){return this.isInlineSqlitePrimaryKey()?this:(this.nodes.push(new U("primary_key",{columns:[C(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this)}isInlineSqlitePrimaryKey(){let t=(this.columnNode.dataType??"").toLowerCase();return t==="bigincrement"?true:(t==="integer"||t==="bigint"||t==="int")&&!!this.columnNode.autoIncrement}};var rt=class extends Ue{constructor(e,r,n,o){super(r);this.context="create_table";this.tableName=n,this.namedConstraints=[],this.context=o??"create_table",this.sqlType=e;}mysqlOptions(e){return this._mysqlOptions=e,this}getMysqlOptions(){return this._mysqlOptions}build(e){return this.nodes.push(e),new Jr(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new O(e)}char(e,r=1){let n=new k(e,"char",{length:r});return this.build(n)}varchar(e,r=255){let n=new k(e,"varchar",{length:r});return this.build(n)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let n=new k(e,r);return this.build(n)}longtext(e){return this.text(e,"longtext")}mediumtext(e){return this.text(e,"mediumtext")}tinytext(e){return this.text(e,"tinytext")}uuid(e){let r=new k(e,"uuid");return this.build(r)}ulid(e){let r=new k(e,"ulid");return this.build(r)}integer(e,r=255){let n=new k(e,"integer",{length:r});return this.build(n)}tinyint(e,r=255){let n=new k(e,"tinyint",{length:r});return this.build(n)}smallint(e,r=255){let n=new k(e,"smallint",{length:r});return this.build(n)}mediumint(e,r=255){let n=new k(e,"mediumint",{length:r});return this.build(n)}biginteger(e,r=255){let n=new k(e,"bigint",{length:r});return this.build(n)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let n=new k(e,"float",{precision:r});return this.build(n)}double(e,r=10){let n=new k(e,"double",{precision:r});return this.build(n)}real(e,r=10){let n=new k(e,"real",{precision:r});return this.build(n)}decimal(e,r=10,n=2){let o=new k(e,"decimal",{precision:r,scale:n});return this.build(o)}numeric(e,r=10,n=2){let o=new k(e,"numeric",{precision:r,scale:n});return this.build(o)}increment(e,r=255){return this.integer(e,r).increment()}bigIncrement(e,r=255){return this.biginteger(e,r).increment()}date(e,r){let n=new k(e,"date",{precision:r});return this.build(n)}time(e,r){let n=new k(e,"time",{precision:r});return this.build(n)}year(e){let r=new k(e,"year");return this.build(r)}datetime(e,r){let n=new k(e,"datetime",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}timestamp(e,r){let n=new k(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}boolean(e){let r=new k(e,"boolean");return this.build(r)}binary(e){let r=new k(e,"binary");return this.build(r)}varbinary(e,r=255){let n=new k(e,"varbinary",{length:r});return this.build(n)}blob(e){let r=new k(e,"blob");return this.build(r)}tinyblob(e){let r=new k(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new k(e,"mediumblob");return this.build(r)}longblob(e){let r=new k(e,"longblob");return this.build(r)}json(e){let r=new k(e,"json");return this.build(r)}jsonb(e){let r=new k(e,"jsonb");return this.build(r)}enum(e,r){let n=new k(e,"enum",{enumValues:r});return this.build(n)}custom(e,r,n){let o=new k(e,r,{length:n});return this.build(o)}rawColumn(e){let r=new k(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new k(e,"geometry");return this.build(r)}point(e){let r=new k(e,"point");return this.build(r)}linestring(e){let r=new k(e,"linestring");return this.build(r)}polygon(e){let r=new k(e,"polygon");return this.build(r)}multiPoint(e){let r=new k(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var Hr=class extends Ue{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new O(t)}addColumn(t){let e=[],r=new rt(this.sqlType,e,this.table,"alter_table"),n=t(r);if(!e.length)return;let o=r.getNamedConstraints(),s=e.filter(c=>c.folder==="column");if(e=e.concat(o),s.length!==1)throw new Error("addColumn callback must define exactly one column");let a=s[0],l=n.getNodes().filter(c=>{let m=c;return m.constraintType==="not_null"||m.constraintType==="null"||m.constraintType==="default"}),u=new $r(a);u.inlineConstraints=l,this.nodes.push(u),n.getNodes().filter(c=>{let m=c;return m.constraintType==="unique"||m.constraintType==="foreign_key"||m.constraintType==="primary_key"}).forEach(c=>{this.nodes.push(new we(c));});}alterColumn(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new rt(this.sqlType,e,this.table,"alter_table"),n=t(r);if(!e.length)return;let o=e.filter(p=>p.folder==="column");if(o.length!==1)throw new Error("alterColumn callback must define exactly one column");let s=o[0],a=C(s.column),l=n.getNodes().find(p=>p.constraintType==="null"),d=n.getNodes().find(p=>p.constraintType==="not_null")||l,c=n.getNodes().find(p=>p.constraintType==="default"),m={};d&&(m.nullable=d.constraintType==="null"),c&&(c.defaultValue===void 0||c.defaultValue===null||c.defaultValue==="NULL"?m.dropDefault=true:m.default=c.defaultValue),s.collate&&(this.sqlType==="mysql"||this.sqlType==="mariadb")&&(m.collate=s.collate),this.nodes.push(new Ir(C(a),s,m)),d&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(d.constraintType==="not_null"?this.nodes.push(new kr(C(a))):d.constraintType==="null"&&this.nodes.push(new Pr(C(a)))),c&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(c.defaultValue===void 0||c.defaultValue===null||c.defaultValue==="NULL"?this.nodes.push(new Lt(C(a))):this.nodes.push(new Br(C(a),c.defaultValue))),n.getNodes().forEach(p=>{let h=p;switch(h.constraintType){case "primary_key":this.addPrimaryKey(C(a));break;case "unique":this.unique(C(a),{constraintName:h.constraintName});break;case "foreign_key":this.foreignKey(C(a),h.references?.table??"",C(h.references?.columns?.[0]??""),{constraintName:h.constraintName,onDelete:h.onDelete,onUpdate:h.onUpdate});break}});}dropColumn(t){this.nodes.push(new vr(t));}renameColumn(t,e){this.nodes.push(new Er(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Lt(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Tt([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new we(new U(...t)));}foreignKey(t,e,r,n){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new we(new U("foreign_key",{columns:[t],references:{table:e,columns:[r]},constraintName:n?.constraintName??Y(this.table,t,r),onDelete:n?.onDelete,onUpdate:n?.onUpdate})));}unique(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new we(new U("unique",{columns:[t],constraintName:e?.constraintName??Ne(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let r=Y(this.table,t,e);this.nodes.push(new Se(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new T("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??Ne(this.table,t);this.nodes.push(new Se(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Se(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new T("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new wt(t));}setTableOptions(t){let e=this.sqlType==="mysql"||this.sqlType==="mariadb",r=this.sqlType==="postgres"||this.sqlType==="cockroachdb",n=this.sqlType==="mssql";return this.sqlType==="sqlite"?this:(e?this.nodes.push(new St(t)):r?this.nodes.push(new St(t)):n&&this.nodes.push(new St(t)),this)}};var de=class{constructor(t){if(this.sqlType=t||E.DB_TYPE,!this.sqlType)throw new T("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new O(t)}rawQuery(t){this.queryStatements.push(t);}async execute(){for(let t of this.queryStatements)this.rawQuery(t);}runFile(t){if(!ae.existsSync(t))throw new T("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=ft.basename(t),r=ft.extname(e);if(r!==".sql"&&r!==".txt")throw new T("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let o=ae.readFileSync(t,"utf-8").split(";").map(s=>s.trim()).filter(s=>s.length>0&&!s.startsWith("--"));for(let s of o)this.rawQuery(s);}createTable(t,e,r){let n=new rt(this.sqlType,[],t);e(n);let o=n.getNodes(),s=new b({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a={...r,...this.sqlType==="mysql"||this.sqlType==="mariadb"?n.getMysqlOptions()||{}:{}},l=new Qr(t,o,n.getNamedConstraints(),r?.ifNotExists,a),u=s.parse([l]).sql,d=u.startsWith("create table")?u:`create table ${u}`;this.rawQuery(d),this.generateAutoUpdateTriggers(t,o);}alterTable(t,e){let r=[],n=new Hr(t,r,this.sqlType);if(e(n),!r.length)return;let o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"}),s=[],a=()=>{if(!s.length)return;let u=new fe(t,s),d=o.parse([u]).sql;if(!d||!d.trim())return;let c=d.startsWith("alter table")?d:`alter table ${d}`;this.rawQuery(c),s=[];};for(let u of r)u.file==="add_constraint"&&s.length&&s[0].file==="add_column"||a(),s.push(u);a();let l=r.filter(u=>u.file==="add_column").map(u=>u.column);this.generateAutoUpdateTriggers(t,l);}dropTable(t,e=false){let r=new Kr(t,e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}renameTable(t,e){let r=new fe(t,[new ht(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}truncateTable(t){let e=new Nt(t,true),r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}createIndex(t,e,r={}){Array.isArray(e)||(e=[e]);let n=r.constraintName||jl(t,e.join("_")),o=new Wr(t,e,n),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([o]).sql);}dropIndex(t,e){let r=new jr(t,e),n=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addPrimaryKey(t,e){let r=new fe(t,[new Tt(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addUnique(t,e,r){let n=Array.isArray(e)?e:[e],o=r?.constraintName??Ne(t,n.join("_")),s=new U("unique",{columns:n,constraintName:o}),a=new fe(t,[new we(s)]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropForeignKey(t,e,r){let n=Y(t,e,r),o=new Se(n),s=new fe(t,[o]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropUnique(t,e,r){let n=Array.isArray(e)?Ne(t,e.join("_")):Ne(t,e),o=r?.constraintName??n,s=new Se(o),a=new fe(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new wt,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new U(...e),n=new fe(t,[new we(r)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}dropConstraint(t,e){let r=new Se(e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addCheck(t,e,r){let n=r?.constraintName??`chk_${t}_custom`.substring(0,63),o=new U("check",{checkExpression:e,constraintName:n}),s=new fe(t,[new we(o)]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropCheck(t,e){if(this.sqlType==="mysql"){this.rawQuery(`ALTER TABLE \`${t}\` DROP CHECK \`${e}\``);return}let r=new Se(e),n=new fe(t,[r]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}createExtension(t,e=true){let r=new Lr(t,e),n=this.generateAstInstance({table:"",databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}generateAutoUpdateTriggers(t,e){if(this.sqlType==="mysql"||this.sqlType==="mariadb")return;let r=e.filter(n=>n.folder==="column"&&n.autoUpdate===true).map(n=>C(n.column));for(let n of r){let o=this.getAutoUpdateTriggerSql(t,n);for(let s of o)this.rawQuery(s);}}getAutoUpdateTriggerSql(t,e){let r=`trg_${t}_${e}_auto_update`;switch(this.sqlType){case "postgres":case "cockroachdb":return [`CREATE OR REPLACE FUNCTION ${r}_fn() RETURNS trigger AS $$ BEGIN NEW."${e}" = CURRENT_TIMESTAMP; RETURN NEW; END; $$ LANGUAGE plpgsql`,`CREATE OR REPLACE TRIGGER ${r} BEFORE UPDATE ON "${t}" FOR EACH ROW EXECUTE FUNCTION ${r}_fn()`];case "sqlite":return [`CREATE TRIGGER IF NOT EXISTS ${r} AFTER UPDATE ON "${t}" FOR EACH ROW BEGIN UPDATE "${t}" SET "${e}" = CURRENT_TIMESTAMP WHERE rowid = NEW.rowid; END`];case "mssql":return [`CREATE OR ALTER TRIGGER [${r}] ON [${t}] AFTER UPDATE AS BEGIN SET NOCOUNT ON; UPDATE t SET t.[${e}] = CURRENT_TIMESTAMP FROM [${t}] t INNER JOIN inserted i ON t.[id] = i.[id]; END`];default:return []}}generateAstInstance(t){return new b(t,this.sqlType)}};var zr,Ef,jt=class{constructor(t,e){hu(this,zr);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new de(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=gu(this,zr,Ef).call(this)),this.executionPromise.then(t,e)}rawStatement(t){return this.schema.rawStatement(t)}rawQuery(t){return this.schema.rawQuery(t),this}createTable(t,e,r){return this.schema.createTable(t,e,r),this}alterTable(t,e){return this.schema.alterTable(t,e),this}dropTable(t,e=false){return this.schema.dropTable(t,e),this}renameTable(t,e){return this.schema.renameTable(t,e),this}truncateTable(t){return this.schema.truncateTable(t),this}createIndex(t,e,r){return this.schema.createIndex(t,e,r),this}dropIndex(t,e){return this.schema.dropIndex(t,e),this}addPrimaryKey(t,e){return this.schema.addPrimaryKey(t,e),this}addUnique(t,e,r){return this.schema.addUnique(t,e,r),this}addConstraint(t,e,...r){return this.schema.addConstraint(t,e,...r),this}dropPrimaryKey(t){return this.schema.dropPrimaryKey(t),this}dropForeignKey(t,e,r){return this.schema.dropForeignKey(t,e,r),this}dropUnique(t,e,r){return this.schema.dropUnique(t,e,r),this}dropConstraint(t,e){return this.schema.dropConstraint(t,e),this}createExtension(t,e=true){return this.schema.createExtension(t,e),this}toQuery(){let t=this.schema.queryStatements;return t.length===1?t[0]:t}toQueries(){return [...this.schema.queryStatements]}toString(){let t=this.schema.queryStatements;return t.length===1?t[0]||"":t.join(`;
|
|
259
|
+
`)}async execute(){if(this.state!=="executed"){if(this.state==="failed")throw this.executionError;return this.then()}}isExecuted(){return this.state==="executed"}isPending(){return this.state==="pending"}hasFailed(){return this.state==="failed"}async hasTable(t){return this.dataSource.hasTable(t)}async hasColumn(t,e){return this.dataSource.hasColumn(t,e)}async hasColumns(t,...e){return this.dataSource.hasColumns(t,...e)}async hasIndex(t,e){return this.dataSource.hasIndex(t,e)}async hasPrimaryKey(t){return this.dataSource.hasPrimaryKey(t)}async hasUnique(t,e){return this.dataSource.hasUnique(t,e)}async hasForeignKey(t,e){return this.dataSource.hasForeignKey(t,e)}async hasCheckConstraint(t,e){return this.dataSource.hasCheckConstraint(t,e)}async getTables(){return this.dataSource.getTables()}async getColumnListing(t){return this.dataSource.getColumnListing(t)}dropTableIfExists(t){return this.schema.dropTable(t,true),this}async dropIndexIfExists(t,e){if(await this.dataSource.hasIndex(e,t)){let n=new de(this.dataSource.getDbType());n.dropIndex(t,e);let o=n.queryStatements[0];o&&await this.dataSource.rawQuery(o);}}renameColumn(t,e,r){return this.schema.alterTable(t,n=>{n.renameColumn(e,r);}),this}};zr=new WeakSet,Ef=async function(){try{this.state="pending";let t=this.schema.queryStatements;if(!t.length){this.state="executed";return}for(let e of t)await this.dataSource.rawQuery(e);this.state="executed";}catch(t){throw this.state="failed",this.executionError=t,t}};var xe=class{constructor(t,e){this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var Gr=class{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}buildDropDependencies(t){let e=new Map,r=new Map,n=new Map;for(let o of t.relationsToDrop||[]){let s=`${o.table}.${o.relation.name}`,a=[];if(o.relation.referencedTable&&a.push(`table.${o.relation.referencedTable}`),o.relation.referencedColumns)for(let l of o.relation.referencedColumns)a.push(`column.${o.relation.referencedTable}.${l}`);e.set(s,a);}for(let o of t.tablesToDrop||[]){let s=`table.${o.table}`,a=[];for(let l of this.models){let u=l.getRelations();for(let d of u)d.type==="belongsTo"&&d.model().table===o.table&&a.push(`fk.${l.table}.${d.constraintName}`);}r.set(s,a);}for(let o of t.columnsToDrop||[]){let s=`column.${o.table}.${o.column}`,a=[],l=this.models.find(u=>u.table===o.table);if(l){let u=l.getColumns().find(d=>d.databaseName===o.column);if(u){u.isPrimary&&a.push(`pk.${o.table}`);let d=l.getRelations();for(let c of d)c.columnName===u.columnName&&a.push(`fk.${o.table}.${c.constraintName}`);}}n.set(s,a);}return {foreignKeys:e,tables:r,constraints:n}}topologicalSortReverse(t,e){let r=new Set,n=new Set,o=[],s=a=>{if(n.has(a))throw new Error(`Circular dependency detected: ${a}`);if(r.has(a))return;n.add(a);let l=e(a);for(let u of l)s(u);n.delete(a),r.add(a),o.push(a);};for(let a of t.keys())r.has(a)||s(a);return o}generateDropOperations(t){let e=this.buildDropDependencies(t),r=[],n=this.topologicalSortReverse(e.foreignKeys,s=>e.foreignKeys.get(s)||[]);for(let s of n){let[a,l]=s.split("."),u=t.relationsToDrop?.find(d=>d.table===a&&d.relation.name===l);u&&r.push({type:"DROP_FOREIGN_KEY",phase:"DESTRUCTIVE_OPERATIONS",table:a,constraint:l,data:u,dependencies:e.foreignKeys.get(s)||[],sqlStatements:this.generateDropForeignKeySql(u)});}let o=this.topologicalSortReverse(e.tables,s=>e.tables.get(s)||[]);for(let s of t.columnsToDrop||[]){let a=`column.${s.table}.${s.column}`,l=e.constraints.get(a)||[];for(let u of l)u.startsWith("pk.")?r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:"PRIMARY KEY",data:{type:"primary_key",table:s.table},dependencies:[a],sqlStatements:this.generateDropPrimaryKeySql(s.table)}):u.startsWith("unique.")&&r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:`UNIQUE_${s.column}`,data:{type:"unique",table:s.table,column:s.column},dependencies:[a],sqlStatements:this.generateDropUniqueConstraintSql(s.table,s.column)});}for(let s of t.columnsToDrop||[])r.push({type:"DROP_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,column:s.column,data:s,dependencies:[],sqlStatements:this.generateDropColumnSql(s)});for(let s of o){let a=s.replace("table.",""),l=t.tablesToDrop?.find(u=>u.table===a);l&&r.push({type:"DROP_TABLE",phase:"DESTRUCTIVE_OPERATIONS",table:a,data:l,dependencies:e.tables.get(s)||[],sqlStatements:this.generateDropTableSql(l)});}return r}analyzeConstraintImpact(t){let e=new Map;for(let r of t.columnsToDrop||[]){let n=[],o=this.models.find(s=>s.table===r.table);if(o){let s=o.getColumns().find(a=>a.databaseName===r.column);if(s){s.isPrimary&&n.push(`PRIMARY KEY on ${r.table}`);let a=o.getRelations();for(let l of a)l.columnName===s.columnName&&n.push(`FOREIGN KEY ${l.constraintName} on ${r.table}`);}}e.set(`${r.table}.${r.column}`,n);}return e}detectMixedOperations(t){let e=[];for(let r of t.columnsToModify||[]){let n=this.models.find(o=>o.table===r.table);n&&n.getColumns().find(s=>s.databaseName===r.dbColumns.name)&&this.hasConstraintChanges(r.dbColumns,r.modelColumn)&&e.push({type:"column_modification_with_constraints",table:r.table,column:r.dbColumns.name,description:`Column ${r.dbColumns.name} modification requires constraint recreation`});}for(let r of t.primaryKeysToModify||[])e.push({type:"primary_key_modification",table:r.table,description:`Primary key modification on ${r.table} requires FK recreation`});return e}hasConstraintChanges(t,e){return t.isNullable!==!e.constraints?.nullable||t.isUnique!==!!e.constraints?.unique||t.defaultValue!==e.constraints?.default}generateDropForeignKeySql(t){if(this.sql.getDbType()==="sqlite")return [];if(!t.relation.name)return [];let e=this.sql.schema().alterTable(t.table,n=>{n.dropConstraint(t.relation.name);}).toQueries(),r=this.sql.getDbType();return (r==="mysql"||r==="mariadb")&&e.push(`DROP INDEX \`${t.relation.name}\` ON \`${t.table}\``),e}generateDropPrimaryKeySql(t){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,e=>{e.dropPrimaryKey();}).toQueries()}generateDropUniqueConstraintSql(t,e){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,r=>{r.dropConstraint(`UNIQUE_${e}`);}).toQueries()}generateDropColumnSql(t){return this.sql.schema().alterTable(t.table,e=>{e.dropColumn(t.column);}).toQueries()}generateDropTableSql(t){return [`DROP TABLE ${t.table}`]}};var Ul=i=>String(i??"").replace(/::[a-z_ ]+$/i,"").replace(/[()\s]/g,"").toLowerCase(),xh=/^(current[ _]?timestamp\d*|now\d*|getdate\d*|localtimestamp\d*|localtime\d*)$/,Oh={postgres:i=>i.includes("nextval"),cockroachdb:i=>i.includes("unique_rowid")},Dh={postgres:["gen_random_uuid"],cockroachdb:["gen_random_uuid"],mysql:["uuid"],mariadb:["uuid"],mssql:["newid"],sqlite:["lower(hex(randomblob(16)))"]},kf=(i,t)=>(Dh[i]??[]).includes(Ul(t)),Ct=(i,t)=>!!i.autoCreate&&xh.test(Ul(t)),Rt=(i,t,e)=>{if(t.type!=="increment"&&t.type!=="bigIncrement")return false;let r=Oh[i];return r?r(Ul(e)):false};var Yr=class Yr{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new Gr(t);}generateOperations(t){let e=[];e.push(...this.generateStructureCreationOperations(t)),e.push(...this.generateConstraintCreationOperations(t)),e.push(...this.generateDestructiveOperations(t)),e.push(...this.generateColumnModificationOperations(t));let r=l=>l.table&&l.constraint?`${l.table}::${l.constraint}`:void 0,n=new Set(e.filter(l=>l.type==="ADD_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),o=new Set(e.filter(l=>l.type==="DROP_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),s=new Set([...n].filter(l=>o.has(l)));return e.filter(l=>{let u=r(l);return u?!(s.has(u)&&(l.type==="ADD_FOREIGN_KEY"||l.type==="DROP_FOREIGN_KEY")):true})}generateStructureCreationOperations(t){let e=[];for(let r of t.tablesToAdd){let n=this.sql.schema().createTable(r.table,o=>{for(let s of r.columns){if(Array.isArray(s.type)){o.enum(s.databaseName,s.type);continue}s.type&&this.executeBuilderMethod(r.table,o,s,[s.databaseName,s.length,s.precision&&!s.withTimezone?s.precision:void 0,s.scale,s.withTimezone?{withTimezone:s.withTimezone,precision:s.precision}:void 0].filter(Boolean),true);}}).toQuery();e.push({type:"CREATE_TABLE",phase:"STRUCTURE_CREATION",table:r.table,data:r,dependencies:[],sqlStatements:[n]});}for(let r of t.columnsToAdd){let n=this.generateAddColumnViaAlter(r);e.push({type:"ADD_COLUMN",phase:"STRUCTURE_CREATION",table:r.table,column:r.column.databaseName,data:r,dependencies:[`table.${r.table}`],sqlStatements:n});}return e}generateConstraintCreationOperations(t){let e=[];for(let n of t.uniquesToDrop||[]){let o=this.sql.schema().alterTable(n.table,s=>{s.dropConstraint(n.name);}).toQueries();e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:o});}let r=new Set((t.uniquesToDrop||[]).map(n=>n.name));for(let n of t.indexesToDrop){if(r.has(n.index))continue;let o=new de(this.sql.getDbType());o.dropIndex(n.index,n.table);let s=o.queryStatements[0];e.push({type:"DROP_INDEX",phase:"CONSTRAINT_CREATION",table:n.table,index:n.index,data:n,dependencies:[`table.${n.table}`],sqlStatements:[s]});}for(let n of t.primaryKeysToAdd){let a=this.models.find(u=>u.table===n.table)?.getColumns().find(u=>u.columnName===n.columns[0])?.primaryKeyConstraintName||qe(n.table,n.columns[0]),l=this.sql.schema().alterTable(n.table,u=>{let d=a||qe(n.table,n.columns[0]);u.addConstraint("primary_key",{columns:[n.columns[0]],constraintName:d});}).toQueries();e.push({type:"ADD_PRIMARY_KEY",phase:"CONSTRAINT_CREATION",table:n.table,constraint:a,data:n,dependencies:[`table.${n.table}`],sqlStatements:l});}for(let n of t.relationsToAdd){if(n.relation.type==="manyToMany")continue;let o=this.generateAddRelationViaAlter(n),s=this.computeFkConstraintName(n);e.push({type:"ADD_FOREIGN_KEY",phase:"CONSTRAINT_CREATION",table:n.table,constraint:s,data:n,dependencies:this.getForeignKeyDependencies(n),sqlStatements:o});}for(let n of t.uniquesToAdd||[]){let o=this.models.find(l=>l.table===n.table),s=(n.columns||[]).map(l=>o?.getColumns().find(d=>d.columnName===l)?.databaseName||l),a=this.sql.schema().alterTable(n.table,l=>{l.addConstraint("unique",{columns:s,constraintName:n.name||"mandatory"});}).toQueries();e.push({type:"ADD_UNIQUE_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name||"mandatory",data:n,dependencies:[`table.${n.table}`],sqlStatements:a});}for(let n of t.indexesToAdd){let o=this.generateCreateIndexSql(n);e.push({type:"CREATE_INDEX",phase:"CONSTRAINT_CREATION",table:n.table,index:n.index,data:n,dependencies:[`table.${n.table}`],sqlStatements:[o]});}for(let n of t.checksToDrop||[]){let o=new de(this.sql.getDbType());o.dropCheck(n.table,n.name);let s=o.queryStatements;e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:s});}for(let n of t.checksToAdd||[]){let o=new de(this.sql.getDbType());o.addCheck(n.table,n.expression,{constraintName:n.name});let s=o.queryStatements;e.push({type:"ADD_CHECK_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:s});}return e}computeFkConstraintName(t){let e=C(t.relation.constraintName);if(e)return e;let r=t.table;t.relation.type==="belongsTo"?r=t.relation.model().table:t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(r=C(t.relation.manyToManyOptions.throughModel));let o=this.models.find(a=>a.table===t.table)?.getColumns()||[],s=t.relation.columnName;return t.relation.type==="belongsTo"?s=o.find(l=>l.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey:s=o.find(l=>l.columnName===s)?.databaseName||s,Y(t.table,s,r)}generateDestructiveOperations(t){return this.dropResolver.generateDropOperations(t)}generateColumnModificationOperations(t){let e=[];for(let r of t.columnsToModify||[]){let n=this.generateModifyColumnViaAlter(r);e.push({type:"MODIFY_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:r.table,column:r.dbColumns.name,data:r,dependencies:[],sqlStatements:n});}return e}getForeignKeyDependencies(t){let e=[];if(t.relation.type==="belongsTo"){let n=t.relation.model();e.push(`table.${n.table}`);let o=n.primaryKey||"id",s=n.getColumns().find(a=>a.columnName===o);s&&e.push(`column.${n.table}.${s.databaseName}`);}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let n=C(t.relation.manyToManyOptions.throughModel);e.push(`table.${n}`);}e.push(`table.${t.table}`);let r=this.models.find(n=>n.table===t.table);if(r){let n=r.getColumns().find(o=>o.columnName===t.relation.columnName||o.databaseName===t.relation.columnName);n&&e.push(`column.${t.table}.${n.databaseName}`);}return e}applyNullableConstraint(t,e){return e===false?t.notNullable():e===true||this.sql.getDbType()==="mariadb"?t.nullable():t}executeBuilderMethod(t,e,r,n,o=true){let s;if(Array.isArray(r.type))s=e.enum(n[0],r.type);else if(typeof r.type=="string"&&Yr.BUILTIN_COLUMN_TYPES.has(r.type))s=e[r.type](...n);else if(typeof r.type=="string")s=e.custom(n[0],r.type,r.length);else throw new Error(`Unknown column type: ${String(r.type)} for column ${r.columnName}`);return o&&(r.isPrimary&&s.primaryKey({constraintName:r.primaryKeyConstraintName||qe(t,r.columnName)}),r.unsigned&&s.unsigned(),r.zerofill&&s.zerofill(),r.constraints?.default!==void 0&&s.default(r.constraints.default),this.applyNullableConstraint(s,r.constraints?.nullable)),s}generateAddColumnViaAlter(t){let e=[t.column.databaseName,t.column.length,t.column.precision&&!t.column.withTimezone?t.column.precision:void 0,t.column.scale,t.column.withTimezone?{withTimezone:t.column.withTimezone,precision:t.column.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,r=>{r.addColumn(n=>{let o=this.executeBuilderMethod(t.table,n,t.column,e,false);return t.column.constraints?.default!==void 0&&o.default(t.column.constraints.default),this.applyNullableConstraint(o,t.column.constraints?.nullable),o});}).toQueries()}generateModifyColumnViaAlter(t){if(this.sql.getDbType()==="sqlite")return [];let e=[t.modelColumn.databaseName,t.modelColumn.length,t.modelColumn.precision&&!t.modelColumn.withTimezone?t.modelColumn.precision:void 0,t.modelColumn.scale,t.modelColumn.withTimezone?{withTimezone:t.modelColumn.withTimezone,precision:t.modelColumn.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,n=>{n.alterColumn(o=>{let s=this.executeBuilderMethod(t.table,o,t.modelColumn,e,false);return t.modelColumn.constraints?.default!==void 0?s.default(t.modelColumn.constraints.default):t.dbColumns.defaultValue!=null&&t.dbColumns.defaultValue!==""&&!Ct(t.modelColumn,t.dbColumns.defaultValue)&&!Rt(this.sql.getDbType(),t.modelColumn,t.dbColumns.defaultValue)&&s.default(null),this.applyNullableConstraint(s,t.modelColumn.constraints?.nullable),s});}).toQueries()}generateCreateIndexSql(t){let e=this.models.find(s=>s.table===t.table),n=(e?.getIndexes().find(s=>s.name===t.index)?.columns||[]).map(s=>e?.getColumns().find(l=>l.columnName===s)?.databaseName||s),o=new de(this.sql.getDbType());return o.createIndex(t.table,n,{constraintName:t.index}),o.queryStatements[0]||""}generateAddRelationViaAlter(t){let e=t.table,r=t.relation.foreignKey;t.relation.type==="belongsTo"?(e=t.relation.model().table,r=t.relation.model().primaryKey||"id"):t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(e=C(t.relation.manyToManyOptions.throughModel),r=C(t.relation.manyToManyOptions.rightForeignKey),(!r||r==="undefined")&&(r=t.relation.model().primaryKey||"id"));let n=typeof t.relation.constraintName=="string"?t.relation.constraintName:void 0,o=C(r);if(t.relation.type==="belongsTo"){let m=t.relation.model(),p=m.primaryKey,f=m.getColumns().find(w=>w.columnName===p);if(f)o=f.databaseName;else {let w=m?.databaseCaseConvention||"preserve";o=H(p,w);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.model();if(typeof o=="string"&&o){let p=m.getColumns(),h=p.find(f=>f.columnName===o);if(h)o=h.databaseName;else {let f=m.primaryKey||"id",w=p.find(S=>S.columnName===f);if(w)o=w.databaseName;else {let S=m?.databaseCaseConvention||"preserve";o=H(o||f,S);}}}else {let p=m.primaryKey||"id",f=m.getColumns().find(w=>w.columnName===p);if(f)o=f.databaseName;else {let w=m?.databaseCaseConvention||"preserve";o=H(p,w);}}}let s=this.models.find(m=>m.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,u=a.find(m=>m.columnName===l);if(u)l=u.databaseName;else {let m=s?.databaseCaseConvention||"preserve";l=H(l,m);}if(t.relation.type==="belongsTo"){let m=a.find(p=>p.columnName===t.relation.foreignKey);if(m)l=m.databaseName;else {let p=s?.databaseCaseConvention||"preserve";l=H(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.manyToManyOptions.leftForeignKey,p=C(m),h=a.find(f=>f.columnName===p);if(h)l=h.databaseName;else {let f=s?.databaseCaseConvention||"preserve";l=H(p,f);}}let d=t.relation.onDelete?.toLowerCase(),c=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,m=>{let p=n||Y(t.table,l,e);m.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[o]},constraintName:p,onDelete:d,onUpdate:c});}).toQueries()}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};Yr.BUILTIN_COLUMN_TYPES=new Set(["char","varchar","string","text","longtext","mediumtext","tinytext","uuid","ulid","integer","tinyint","smallint","mediumint","bigint","biginteger","float","double","real","decimal","numeric","increment","bigIncrement","boolean","date","time","datetime","timestamp","year","json","jsonb","binary","varbinary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]);var Ft=Yr;var Xr=class Xr{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}generateCode(t){let e=[],r=[],n=null,o={STRUCTURE_CREATION:"Structure creation",CONSTRAINT_CREATION:"Constraints and indexes",DESTRUCTIVE_OPERATIONS:"Destructive operations"};for(let s of t){s.phase!==n&&(n=s.phase,e.length>0&&e.push(""),e.push(`// ${o[n]}`));let{up:a,down:l}=this.generateOperationCode(s);a&&e.push(...a),l&&r.push(...l);}return {up:e,down:r}}generateOperationCode(t){switch(t.type){case "CREATE_TABLE":return this.generateCreateTableCode(t);case "ADD_COLUMN":return this.generateAddColumnCode(t);case "MODIFY_COLUMN":return this.generateModifyColumnCode(t);case "DROP_COLUMN":return this.generateDropColumnCode(t);case "CREATE_INDEX":return this.generateCreateIndexCode(t);case "DROP_INDEX":return this.generateDropIndexCode(t);case "ADD_FOREIGN_KEY":return this.generateAddForeignKeyCode(t);case "DROP_FOREIGN_KEY":return this.generateDropForeignKeyCode(t);case "ADD_UNIQUE_CONSTRAINT":return this.generateAddUniqueCode(t);case "DROP_CONSTRAINT":return this.generateDropConstraintCode(t);case "ADD_CHECK_CONSTRAINT":return this.generateAddCheckCode(t);case "ADD_PRIMARY_KEY":return this.generateAddPrimaryKeyCode(t);case "DROP_TABLE":return this.generateDropTableCode(t);case "MODIFY_PRIMARY_KEY":return this.generateModifyPrimaryKeyCode(t);default:return {up:null,down:null}}}generateCreateTableCode(t){let e=t.data,r=[];r.push(`this.schema.createTable(${this.quote(e.table)}, (table) => {`);for(let o of e.columns){let s=this.generateColumnCode(e.table,o,true);r.push(` ${s}`);}r.push("});");let n=[`this.schema.dropTable(${this.quote(e.table)});`];return {up:r,down:n}}generateAddColumnCode(t){let{table:e,column:r}=t.data,n=this.generateColumnCode(e,r,false),o=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.addColumn((col) => ${n.replace(/^table\./,"col.")});`,"});"],s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r.databaseName)});`,"});"];return {up:o,down:s}}generateModifyColumnCode(t){let{table:e,modelColumn:r,dbColumns:n}=t.data,o=this.generateColumnCodeForModify(e,r,n),s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.alterColumn((col) => ${o.replace(/^table\./,"col.")});`,"});"],a=[`// TODO: reverse column modification for ${this.quote(n.name)} on ${this.quote(e)}`];return {up:s,down:a}}generateDropColumnCode(t){let{table:e,column:r}=t.data,n=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r)});`,"});"],o=[`// TODO: reverse column drop for ${this.quote(r)} on ${this.quote(e)}`];return {up:n,down:o}}generateCreateIndexCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=(r?.getIndexes().find(u=>u.name===e.index)?.columns||[]).map(u=>r?.getColumns().find(c=>c.columnName===u)?.databaseName||u),s=o.length===1?this.quote(o[0]):`[${o.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.createIndex(${this.quote(e.table)}, ${s}, { constraintName: ${this.quote(e.index)} });`],l=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`];return {up:a,down:l}}generateDropIndexCode(t){let e=t.data,r=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`],n=[`// TODO: reverse index drop for ${this.quote(e.index)} on ${this.quote(e.table)}`];return {up:r,down:n}}generateAddForeignKeyCode(t){let e=t.data,{sourceColumn:r,referencedTable:n,referencedColumn:o,constraintName:s}=this.resolveRelationDetails(e),a=e.relation.onDelete?.toLowerCase(),l=e.relation.onUpdate?.toLowerCase(),u=[];s&&u.push(`constraintName: ${this.quote(s)}`),a&&u.push(`onDelete: ${this.quote(a)}`),l&&u.push(`onUpdate: ${this.quote(l)}`);let d=u.length>0?`, { ${u.join(", ")} }`:"",c=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.foreignKey(${this.quote(r)}, ${this.quote(n)}, ${this.quote(o)}${d});`,"});"],m=s||Y(e.table,r,n),p=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.dropConstraint(${this.quote(m)});`,"});"];return {up:c,down:p}}generateDropForeignKeyCode(t){let e=t.constraint||t.data?.relation?.name;if(!e)return {up:null,down:null};let r=t.table||t.data?.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(e)});`,"});"],o=[`// TODO: reverse FK drop for ${this.quote(e)} on ${this.quote(r)}`];return {up:n,down:o}}generateAddUniqueCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=`[${(e.columns||[]).map(u=>r?.getColumns().find(c=>c.columnName===u)?.databaseName||u).map(u=>this.quote(u)).join(", ")}]`,s=e.name||"mandatory",a=[`this.schema.addUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(s)} });`],l=[`this.schema.dropUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(s)} });`];return {up:a,down:l}}generateDropConstraintCode(t){let e=t.data,r=t.table||e.table,n=t.constraint||e.name;if(!n||!r)return {up:null,down:null};if(e.type==="primary_key"){let a=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});"],l=[`// TODO: reverse primary key drop on ${this.quote(r)}`];return {up:a,down:l}}if(e.type==="unique"){let a=e.column,l=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],u=[`// TODO: reverse unique constraint drop for ${this.quote(a)} on ${this.quote(r)}`];return {up:l,down:u}}if(e.expression!==void 0){let a=[`this.schema.dropCheck(${this.quote(r)}, ${this.quote(n)});`],l=[`// TODO: reverse check constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:a,down:l}}let o=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],s=[`// TODO: reverse constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:o,down:s}}generateAddCheckCode(t){let e=t.data,r=[`this.schema.addCheck(${this.quote(e.table)}, ${this.quote(e.expression)}, { constraintName: ${this.quote(e.name)} });`],n=[`this.schema.dropCheck(${this.quote(e.table)}, ${this.quote(e.name)});`];return {up:r,down:n}}generateAddPrimaryKeyCode(t){let e=t.data,o=this.models.find(u=>u.table===e.table)?.getColumns().find(u=>u.columnName===e.columns[0])?.primaryKeyConstraintName||qe(e.table,e.columns[0]),s=`[${e.columns.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.addConstraint("primary_key", { columns: ${s}, constraintName: ${this.quote(o)} });`,"});"],l=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`," table.dropPrimaryKey();","});"];return {up:a,down:l}}generateDropTableCode(t){let e=t.table||t.data?.table,r=[`this.schema.dropTable(${this.quote(e)});`],n=[`// TODO: reverse table drop for ${this.quote(e)}`];return {up:r,down:n}}generateModifyPrimaryKeyCode(t){let e=t.data,r=e.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});",`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.addPrimaryKey(${this.quote(e.modelPrimaryKey)});`,"});"],o=[`// TODO: reverse primary key modification on ${this.quote(r)}`];return {up:n,down:o}}generateColumnCode(t,e,r){let n=this.generateColumnTypeCode(e);if(!r)return n;if(e.isPrimary){let o=e.primaryKeyConstraintName||qe(t,e.columnName);n+=`.primaryKey({ constraintName: ${this.quote(o)} })`;}return e.unsigned&&(n+=".unsigned()"),e.zerofill&&(n+=".zerofill()"),e.constraints?.default!==void 0&&(n+=`.default(${this.formatDefaultValue(e.constraints.default)})`),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n+";"}generateColumnCodeForModify(t,e,r){let n=this.generateColumnTypeCode(e);return e.constraints?.default!==void 0?n+=`.default(${this.formatDefaultValue(e.constraints.default)})`:r.defaultValue!=null&&r.defaultValue!==""&&!Ct(e,r.defaultValue)&&!Rt(this.sql.getDbType(),e,r.defaultValue)&&(n+=".default(null)"),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n}generateColumnTypeCode(t){let e=t.databaseName;if(Array.isArray(t.type)){let s=t.type.map(a=>this.quote(a)).join(", ");return `table.enum(${this.quote(e)}, [${s}])`}let r=t.type;if(new Set(["uuid","ulid","boolean","year","json","jsonb","binary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]).has(r))return `table.${r}(${this.quote(e)})`;if(r==="timestamp"||r==="datetime"){let s=[];return t.withTimezone&&s.push("withTimezone: true"),t.precision!=null&&s.push(`precision: ${t.precision}`),s.length>0?`table.${r}(${this.quote(e)}, { ${s.join(", ")} })`:`table.${r}(${this.quote(e)})`}return r==="date"||r==="time"?t.precision!=null?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="increment"||r==="bigIncrement"?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:r==="decimal"||r==="numeric"?t.precision!=null?t.scale!=null?`table.${r}(${this.quote(e)}, ${t.precision}, ${t.scale})`:`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="float"||r==="double"||r==="real"?t.precision!=null&&t.precision!==10?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="longtext"||r==="mediumtext"||r==="tinytext"?`table.${r}(${this.quote(e)})`:new Set(["varchar","char","string","integer","tinyint","smallint","mediumint","bigint","biginteger","varbinary"]).has(r)?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:Xr.BUILTIN_COLUMN_TYPES.has(r)?`table.${r}(${this.quote(e)})`:t.length!=null?`table.custom(${this.quote(e)}, ${this.quote(r)}, ${t.length})`:`table.custom(${this.quote(e)}, ${this.quote(r)})`}resolveRelationDetails(t){let e=t.table,r="id";if(t.relation.type==="belongsTo"){let l=t.relation.model();e=l.table;let u=l.primaryKey||"id";r=l.getColumns().find(m=>m.columnName===u)?.databaseName||u;}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){e=C(t.relation.manyToManyOptions.throughModel);let l=C(t.relation.manyToManyOptions.rightForeignKey);l&&l!=="undefined"?r=l:r=t.relation.model().primaryKey||"id";}let o=this.models.find(l=>l.table===t.table)?.getColumns()||[],s=t.relation.columnName;if(t.relation.type==="belongsTo")s=o.find(u=>u.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey;else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let l=C(t.relation.manyToManyOptions.leftForeignKey);s=o.find(d=>d.columnName===l)?.databaseName||l;}else s=o.find(u=>u.columnName===s)?.databaseName||s;let a=typeof t.relation.constraintName=="string"?t.relation.constraintName:C(t.relation.constraintName)||void 0;return {sourceColumn:s,referencedTable:e,referencedColumn:r,constraintName:a}}quote(t){return `"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}formatDefaultValue(t){return t==null?"null":t==="NULL"?'"NULL"':typeof t=="boolean"||typeof t=="number"?t.toString():t==="TRUE"||t==="true"?"true":t==="FALSE"||t==="false"?"false":this.quote(String(t))}};Xr.BUILTIN_COLUMN_TYPES=new Set(["char","varchar","string","text","longtext","mediumtext","tinytext","uuid","ulid","integer","tinyint","smallint","mediumint","bigint","biginteger","float","double","real","decimal","numeric","increment","bigIncrement","boolean","date","time","datetime","timestamp","year","json","jsonb","binary","varbinary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]);var Zr=Xr;function $h(i){return i.replace(/\s+/g," ").trim()}function Ih(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function vh(i){let t=i.split(/\s+/).filter(n=>n.length>0),e=[],r=[];for(let n of t)n==="unsigned"||n==="zerofill"?e.push(n):r.push(n);return {bareBase:r.join(" "),modifiers:e}}function Ph(i,t){return t.length===0?i:`${i} ${t.join(" ")}`}function Ve(i,t){let e=$h(t.toLowerCase()),r=Ih(e);switch(i){case "sqlite":{let n=[{test:o=>o==="increment",normalized:"integer"},{test:o=>o==="bigincrement",normalized:"integer"},{test:o=>o.includes("int"),normalized:"integer"},{test:o=>o==="string",normalized:"varchar"},{test:o=>o.includes("char"),normalized:"varchar"},{test:o=>o.includes("text"),normalized:"text"},{test:o=>o.includes("clob"),normalized:"text"},{test:o=>o.includes("date"),normalized:"text"},{test:o=>o.includes("time"),normalized:"text"},{test:o=>o.includes("timestamp"),normalized:"text"},{test:o=>o.includes("datetime"),normalized:"text"},{test:o=>o.includes("blob"),normalized:"blob"},{test:o=>o.includes("real")||o.includes("floa")||o.includes("doub"),normalized:"real"},{test:o=>o.includes("numeric"),normalized:"numeric"},{test:o=>o.includes("bool"),normalized:"integer"},{test:o=>o.includes("uuid"),normalized:"varchar"},{test:o=>o.includes("ulid"),normalized:"varchar"},{test:o=>o.includes("jsonb"),normalized:"text"},{test:o=>o.includes("json"),normalized:"text"}];for(let o of n)if(o.test(r))return o.normalized;return r}case "mysql":case "mariadb":{let{bareBase:n,modifiers:o}=vh(r),a=new Set(["int","integer","increment","tinyint","smallint","mediumint","bigint","bigincrement","float","double","double precision","real","decimal","numeric","year","bool","boolean"]).has(n);if(n.endsWith("text")||n==="text")return "text";let l;switch(n){case "int":case "integer":case "increment":l="integer";break;case "tinyint":l="boolean";break;case "smallint":l="smallint";break;case "mediumint":l="mediumint";break;case "bigint":case "bigincrement":l="bigint";break;case "float":l="float";break;case "double":case "double precision":l="double";break;case "real":l="double";break;case "decimal":case "numeric":l="numeric";break;case "string":case "varchar":case "character varying":l="varchar";break;case "char":case "character":l="char";break;case "uuid":l="varchar";break;case "ulid":l="varchar";break;case "date":l="date";break;case "datetime":l="datetime";break;case "timestamp":l="timestamp";break;case "time":l="time";break;case "year":l="year";break;case "jsonb":case "json":l=i==="mariadb"?"text":"json";break;case "enum":l="enum";break;case "binary":l="binary";break;case "varbinary":l="varbinary";break;case "tinyblob":l="tinyblob";break;case "mediumblob":l="mediumblob";break;case "longblob":l="longblob";break;case "blob":l="blob";break;case "boolean":case "bool":l="boolean";break;default:l=n;break}return a&&o.length>0?Ph(l,o):l}case "postgres":case "cockroachdb":{if(r.endsWith("text")||r==="text")return "text";if(r.startsWith("timestamp"))return "timestamp";if(r.startsWith("time"))return "time";if(r==="datetime")return "timestamp";switch(r){case "string":case "varchar":case "character varying":return "varchar";case "char":case "character":return "char";case "ulid":return "varchar";case "double precision":return "double";case "real":return "real";case "float":return "real";case "integer":case "int4":case "int":case "increment":case "serial":return "integer";case "mediumint":return "integer";case "bigint":case "int8":case "bigincrement":case "bigserial":return "bigint";case "smallint":case "int2":return "smallint";case "tinyint":return "smallint";case "uuid":return "uuid";case "year":return "smallint";case "bytea":return "bytea";case "binary":case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":return "bytea";case "boolean":case "bool":return "boolean";case "numeric":case "decimal":return "numeric";case "jsonb":return "jsonb";case "json":return "json";case "date":return "date";default:return r}}case "mssql":{if(r.endsWith("text")||r==="text"||r==="ntext")return "text";if(r.startsWith("datetime2"))return "datetime2";if(r.startsWith("datetimeoffset"))return "datetimeoffset";switch(r){case "int":case "integer":case "increment":return "int";case "tinyint":return "tinyint";case "smallint":return "smallint";case "bigint":case "bigincrement":return "bigint";case "float":return "float";case "real":return "real";case "double":case "double precision":return "float";case "decimal":case "numeric":return "decimal";case "money":return "money";case "smallmoney":return "smallmoney";case "string":case "varchar":case "character varying":return "varchar";case "nvarchar":return "nvarchar";case "char":case "character":return "char";case "nchar":return "nchar";case "uuid":case "uniqueidentifier":return "uniqueidentifier";case "ulid":return "varchar";case "date":return "date";case "datetime":return "datetime";case "smalldatetime":return "smalldatetime";case "time":return "time";case "timestamp":return "datetime2";case "binary":return "binary";case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":case "bytea":return "varbinary";case "image":return "image";case "bit":case "boolean":case "bool":return "bit";case "json":case "jsonb":return "nvarchar";case "xml":return "xml";case "sql_variant":return "sql_variant";default:return r}}default:return r}}var nt=class i{constructor(t){this.emptyStatements=[/^alter table [`'"]?[\w]+[`'"]?\s*$/i];this.sql=t,this.models=Object.values(this.sql._models),this.data={columnsToAdd:[],columnsToDrop:[],columnsToModify:[],indexesToAdd:[],indexesToDrop:[],uniquesToAdd:[],uniquesToDrop:[],checksToAdd:[],checksToDrop:[],tablesToAdd:[],relationsToAdd:[],relationsToDrop:[],relationsToModify:[],primaryKeysToAdd:[],primaryKeysToDrop:[],primaryKeysToModify:[]};}static async makeDiff(t){let e=new i(t);return await Promise.all(e.models.map(async r=>{let n=await e.sql.getTableSchema(r.table),o={columns:r.getColumns().filter(f=>f?.type!==void 0&&f?.type!==null),indexes:r.getIndexes(),relations:r.getRelations()};if(!n.columns.length){e.data.tablesToAdd.push({table:r.table,columns:o.columns});for(let S of o.indexes)n.indexes.map(q=>q.name).includes(S.name)||e.data.indexesToAdd.push({table:r.table,index:S.name});let f=r.getUniques?.()||[];for(let S of f)e.data.uniquesToAdd.push({table:r.table,name:S.name||"mandatory",columns:S.columns});let w=r.getChecks?.()||[];for(let S of w)e.data.checksToAdd.push({table:r.table,name:S.name,expression:S.expression});for(let S of o.relations){if(S.type!=="belongsTo")continue;let q=C(S.constraintName);n.foreignKeys.find(R=>R.name===q)||e.data.relationsToAdd.push({table:r.table,relation:S,onDelete:S.onDelete,onUpdate:S.onUpdate});}return}for(let f of o.columns)n.columns.some(S=>S.name===f.databaseName||S.name===f.columnName)||e.data.columnsToAdd.push({table:r.table,column:f});let s=r.getColumns();for(let f of n.columns)s.some(S=>S.databaseName===f.name||S.columnName===f.name)||e.data.columnsToDrop.push({table:r.table,column:f.name});for(let f of o.indexes)n.indexes.map(w=>w.name).includes(f.name)||e.data.indexesToAdd.push({table:r.table,index:f.name});let a=r.getUniques?.()||[];for(let f of a)n.indexes.some(S=>S.name===f.name&&S.isUnique)||e.data.uniquesToAdd.push({table:r.table,name:f.name||"mandatory",columns:f.columns});let l=n.foreignKeys.map(f=>f.name);for(let f of n.indexes)f.isUnique||l.includes(f.name)||o.indexes.map(S=>S.name).includes(f.name)||e.data.indexesToDrop.push({table:r.table,index:f.name});for(let f of n.indexes){if(!f.isUnique||f.name==="PRIMARY")continue;(r.getUniques?.()||[]).map(S=>S.name).includes(f.name)||e.data.uniquesToDrop.push({table:r.table,name:f.name});}let u=r.getChecks?.()||[];for(let f of u)n.checkConstraints.some(S=>S.name===f.name)||e.data.checksToAdd.push({table:r.table,name:f.name,expression:f.expression});let d=new Set(u.map(f=>f.name)),c=o.columns.filter(f=>Array.isArray(f.type)),m=new Set(c.map(f=>f.databaseName||f.columnName));for(let f of n.checkConstraints)if(!d.has(f.name)){let w=[...m].find(S=>{let q=S.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),M=new RegExp(`[\\["\\[]?${q}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),R=new RegExp(`[\\("\\[]?${q}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return M.test(f.expression)||R.test(f.expression)});if(w){let S=c.find(M=>(M.databaseName||M.columnName)===w),q=n.columns.find(M=>M.name===w);if(S&&q?.enumValues&&Array.isArray(S.type)){let M=[...S.type].sort(),R=[...q.enumValues].sort();if(!(M.length===R.length&&M.every((A,D)=>A===R[D]))){e.data.checksToDrop.push({table:r.table,name:f.name});let A=e.sql.getDbType(),D=A==="mssql"?"[":'"',Q=A==="mssql"?"]":'"',pe=S.type.map(P=>`'${P.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:f.name,expression:`${D}${w}${Q} IN (${pe})`});}}}else e.data.checksToDrop.push({table:r.table,name:f.name});}for(let f of o.columns){let w=n.columns.find(M=>M.name===f.databaseName||M.name===f.columnName);if(!w)continue;let S=!e.areColumnsEqual(w,f,n.indexes),q=e.getDefaultChange({table:r.table,dbColumns:w,modelColumn:f});(S||q)&&e.data.columnsToModify.push({table:r.table,dbColumns:w,modelColumn:f});}for(let f of o.relations){if(f.type!=="belongsTo"&&f.type!=="manyToMany")continue;if(f.type==="manyToMany"&&f.manyToManyOptions){let q=C(f.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:q,relation:{type:"belongsTo",model:()=>r,columnName:C(f.manyToManyOptions.leftForeignKey),foreignKey:f.manyToManyOptions.leftForeignKey,constraintName:f.constraintName?C(f.constraintName):Y(q,C(f.manyToManyOptions.leftForeignKey||Wl(r.table)),r.table),onDelete:f.onDelete,onUpdate:f.onUpdate},onDelete:f.onDelete,onUpdate:f.onUpdate});continue}let w=C(f.constraintName);if(w&&n.foreignKeys.some(q=>q.name===w))continue;n.foreignKeys.find(q=>e.relationMatchesDbRelation(r,f,q))||e.data.relationsToAdd.push({table:r.table,relation:f,onDelete:f.onDelete,onUpdate:f.onUpdate});}let p=new Set(o.relations.filter(f=>f.type==="belongsTo").map(f=>{let w=C(f.foreignKey)||f.columnName,q=r.getColumns().find(M=>M.columnName===w)?.databaseName||w;return C(f.constraintName)||Y(r.table,q,f.model().table)}));for(let f of n.foreignKeys){if(f.name&&p.has(f.name))continue;o.relations.find(S=>S.type!=="belongsTo"&&S.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,S,f))||e.data.relationsToDrop.push({table:r.table,relation:f});}for(let f of o.relations){if(f.type!=="belongsTo"&&f.type!=="manyToMany")continue;let w=n.foreignKeys.find(S=>e.relationMatchesDbRelation(r,f,S));w&&!e.areRelationsEqual(w,f)&&e.data.relationsToModify.push({table:r.table,dbRelation:w,modelRelation:f,onDelete:f.onDelete,onUpdate:f.onUpdate});}let h=r.primaryKey;if(h&&!n.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[h]}),n.primaryKey&&!h&&e.data.primaryKeysToDrop.push({table:r.table,columns:n.primaryKey.columns,name:n.primaryKey.name}),h&&n.primaryKey){let f=r.getColumns().find(w=>w.columnName===h);f&&!e.arePrimaryKeysEqual(n.primaryKey,f)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:n.primaryKey,modelPrimaryKey:h});}})),await e.processManyToMany(),await e.removeFkChurnByName(),e}getSqlStatements(){let t=this.getSqlStatementsByPhase();return Object.values(t).flat().filter(r=>{let n=r.trim();return n?!this.emptyStatements.some(o=>o.test(n)):false})}getCodeStatements(){let e=new Ft(this.sql).generateOperations(this.data);return new Zr(this.sql).generateCode(e)}getSqlStatementsByPhase(){let t=new Ft(this.sql),e=t.generateOperations(this.data),r=t.formatSqlStatements(e),n={STRUCTURE_CREATION:[],CONSTRAINT_CREATION:[],DESTRUCTIVE_OPERATIONS:[]};for(let o of r)n[o.phase].push(...o.sqlStatements);return n}areColumnsEqual(t,e,r=[]){let n=t.name===e.databaseName,o=this.sql.getDbType(),s=Ve(o,t.dataType),a=typeof e.type=="string"?Ve(o,e.type):void 0,l=s.split(" ").filter(d=>d!=="unsigned"&&d!=="zerofill").join(" ");if(a&&n&&(n=l===a),Array.isArray(e.type)&&(o==="mysql"||o==="mariadb")){let d=[...e.type].sort(),c=t.enumValues?[...t.enumValues].sort():null;c&&n&&(n=d.length===c.length&&d.every((m,p)=>m===c[p]));}e.length!=null&&t.length!=null&&n&&(n=t.length===e.length);let u=a==="real"||a==="double"||a==="float";if(e.precision!=null&&t.precision!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.precision===e.precision)),e.scale!=null&&t.scale!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.scale===e.scale)),typeof e.type=="string"&&(a==="timestamp"||a==="time")&&(o==="postgres"||o==="cockroachdb")&&e.withTimezone!==void 0&&t.withTimezone!==void 0&&n&&(n=!!t.withTimezone==!!e.withTimezone),e.constraints?.nullable!==void 0){let d=e.constraints.nullable,c=t.isNullable;n=n&&d===c;}if(o==="mysql"||o==="mariadb"){if(e.unsigned!==void 0){let d=e.unsigned??false,c=t.unsigned??false;n&&(n=d===c);}if(e.zerofill!==void 0){let d=e.zerofill??false,c=t.zerofill??false;n&&(n=d===c);}}if(e.stringMode!==void 0){let d=e.stringMode??false,c=t.stringMode??false;n&&(n=d===c);}return n}areRelationsEqual(t,e){let r=C(e.constraintName),n=r?t.name===r:true;if(e.type==="belongsTo"){let u=e.model(),d=u.primaryKey||"id",c=u.getColumns().find(h=>h.columnName===d),m=u.table,p=c?.databaseName||d;n=n&&t.referencedTable===m&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===p;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let u=C(e.manyToManyOptions.throughModel);n=n&&t.referencedTable===u;}let o=t.onDelete?.toLowerCase(),s=t.onUpdate?.toLowerCase(),a=e.onDelete?.toLowerCase(),l=e.onUpdate?.toLowerCase();return a&&n&&(n=o===a),l&&n&&(n=s===l),n}relationMatchesDbRelation(t,e,r){let n,o=e;if(o&&o.model){if(typeof o.model=="function"&&o.model.table)n=o.model;else if(typeof o.model=="function")try{let f=o.model();f&&f.table&&(n=f);}catch{}}if(!n)return false;let s=e.type==="belongsTo"?n.table:e.type==="manyToMany"&&e.manyToManyOptions?C(e.manyToManyOptions.throughModel):void 0;if(s&&r.referencedTable!==s)return false;let a=C(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),d=(o.type||"belongsTo")==="belongsTo"?C(o.foreignKey):o.columnName,c=l.find(f=>f.columnName===d);c&&(d=c.databaseName);let m=n.primaryKey||"id",h=n.getColumns().find(f=>f.columnName===m)?.databaseName||m;return r.columns.length===1&&r.columns[0]===d&&r.referencedColumns.length===1&&r.referencedColumns[0]===h}arePrimaryKeysEqual(t,e){if(t.columns.length!==1)return false;let n=t.columns[0]===e.databaseName,o=this.sql.getDbType();if(["mysql","mariadb"].includes(o))return n;let a=!t.name||!e.primaryKeyConstraintName||t.name===e.primaryKeyConstraintName;return n&&a}getDefaultChange(t){let e=this.sql.getDbType(),r=Ve(e,t.dbColumns.dataType),n=typeof t.modelColumn.type=="string"?Ve(e,t.modelColumn.type):void 0;if(n&&r!==n||t.modelColumn.length!=null&&t.dbColumns.length!=null&&t.dbColumns.length!==t.modelColumn.length||t.modelColumn.precision!=null&&t.dbColumns.precision!=null&&t.dbColumns.precision!==t.modelColumn.precision||t.modelColumn.scale!=null&&t.dbColumns.scale!=null&&t.dbColumns.scale!==t.modelColumn.scale||(this.sql.getDbType()==="postgres"||this.sql.getDbType()==="cockroachdb")&&typeof t.modelColumn.type=="string"&&(n==="timestamp"||n==="time")&&t.modelColumn.withTimezone!==void 0&&t.dbColumns.withTimezone!==void 0&&!!t.dbColumns.withTimezone!=!!t.modelColumn.withTimezone)return false;let s=t.modelColumn.constraints?.default!==void 0,a=t.dbColumns.defaultValue!==null&&t.dbColumns.defaultValue!==void 0;if(s&&!a)return "set";if(!s&&a){let l=t.dbColumns.defaultValue;return Rt(e,t.modelColumn,l)||Ct(t.modelColumn,l)||t.modelColumn.type==="uuid"&&kf(e,l)?false:"drop"}if(s&&a){let l=String(t.dbColumns.defaultValue),u=String(t.modelColumn.constraints?.default),d=this.normalizeDefaultValue(e,r,l),c=this.normalizeDefaultValue(e,n||r,u);return d!==c?"set":false}return false}normalizeDefaultValue(t,e,r){let n=String(r).trim();if(!n)return n;if(t==="postgres"||t==="cockroachdb"){if(e==="json"||e==="jsonb")try{n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::(jsonb?|[a-zA-Z_ ]+[\[\]]*)/g,"");let s=n.match(/^'(.*)'$/s);if(s&&(n=s[1]),n==="{}"||n==="")return "{}";let a=JSON.parse(n);return JSON.stringify(a)}catch{}n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::[a-zA-Z_ ]+[\[\]]*/g,"");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),/^true$/i.test(n)?"true":/^false$/i.test(n)?"false":/^null$/i.test(n)?"null":(n)}if(t==="mysql"||t==="mariadb"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);if(o&&(n=o[1]),/^current_timestamp(?:\(\d+\))?$/i.test(n))return "current_timestamp";if(e==="boolean"){if(/^1$/.test(n))return "true";if(/^0$/.test(n))return "false"}return n}if(t==="sqlite"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),n.toLowerCase()}return n}async processManyToMany(){let t=new Set;for(let e of this.models){let r=e.getRelations();for(let n of r){if(n.type!=="manyToMany"||!n.manyToManyOptions||n.manyToManyOptions.wasModelProvided)continue;let o=C(n.manyToManyOptions.throughModel);if(t.has(o))continue;t.add(o);let s=this.models.find(P=>P.table===n?.manyToManyOptions?.primaryModel),a=n.model();if(!s||!a)continue;let l=s.primaryKey||"id",u=a.primaryKey||"id",d=s.getColumns().find(P=>P.columnName===l),c=a.getColumns().find(P=>P.columnName===u);if(!d||!c)continue;let m=C(n.manyToManyOptions.leftForeignKey)||l,p=C(n.manyToManyOptions.rightForeignKey)||u,h=await this.sql.getTableSchema(o);if(!h.columns.length){this.data.tablesToAdd.push({table:o,columns:[this.clonePkAsColumn(d,m),this.clonePkAsColumn(c,p)]}),this.pushM2mFkRelations({throughTable:o,leftModel:s,rightModel:a,leftFkName:m,rightFkName:p,onDelete:n.onDelete,onUpdate:n.onUpdate,constraintName:void 0});continue}let f=this.clonePkAsColumn(d,m),w=this.clonePkAsColumn(c,p),S=h.columns.find(P=>P.name===m),q=h.columns.find(P=>P.name===p),M=S?this.areColumnsEqual(S,f,h.indexes):false,R=q?this.areColumnsEqual(q,w,h.indexes):false;for(let P of h.foreignKeys){let se=P.referencedTable===s.table,Ze=P.referencedTable===a.table;if(!se&&!Ze)continue;let Re=se?m:p,_e=P.columns[0];_e&&_e!==Re&&(this.data.relationsToDrop.push({table:o,relation:P}),_e!==m&&_e!==p&&this.data.columnsToDrop.push({table:o,column:_e}));}let $={};M||($[f.databaseName]=f),R||($[w.databaseName]=$[w.databaseName]||w);for(let P of Object.keys($))this.data.columnsToAdd.push({table:o,column:$[P]});let A=this.buildBelongsToRelation(o,()=>s,m,l,void 0,n.onDelete,n.onUpdate),D=this.buildBelongsToRelation(o,n.model,p,u,void 0,n.onDelete,n.onUpdate),Q=h.foreignKeys.find(P=>P.referencedTable===s.table&&P.columns.length===1&&P.columns[0]===m),pe=h.foreignKeys.find(P=>P.referencedTable===a.table&&P.columns.length===1&&P.columns[0]===p);if(!Q){let P=h.foreignKeys.find(se=>se.referencedTable===s.table);P&&this.data.relationsToDrop.push({table:o,relation:P}),this.data.relationsToAdd.push(A);}if(!pe){let P=h.foreignKeys.find(se=>se.referencedTable===a.table);P&&this.data.relationsToDrop.push({table:o,relation:P}),this.data.relationsToAdd.push(D);}}}}async removeFkChurnByName(){let t=new Set;for(let n of this.data.relationsToAdd)t.add(n.table);for(let n of this.data.relationsToDrop)t.add(n.table);let e=new Map;for(let n of t){let o=await this.sql.getTableSchema(n),s=new Set((o.foreignKeys||[]).map(a=>a.name).filter(Boolean));e.set(n,s);}let r=new Map;for(let n of this.models){let o=n.getRelations(),s=new Set;for(let a of o){if(a.type!=="belongsTo")continue;let l=a.foreignKey||a.columnName,d=n.getColumns().find(m=>m.columnName===l)?.databaseName||l,c=C(a.constraintName)||Y(n.table,d,a.model().table);s.add(c);}r.set(n.table,s);}this.data.relationsToAdd=await Promise.all(this.data.relationsToAdd.map(async n=>{let o=await this.sql.getTableSchema(n.table),s=this.models.find(f=>f.table===n.table),a=s?.getColumns()||[],l=n.relation.columnName;n.relation.type==="belongsTo"?l=a.find(w=>w.columnName===n.relation.foreignKey)?.databaseName||n.relation.foreignKey:l=a.find(w=>w.columnName===l)?.databaseName||l;let u=n.table,d=n.relation.foreignKey;if(n.relation.type==="belongsTo"){let f=n.relation.model();u=f.table;let w=f.primaryKey||"id";d=f.getColumns().find(q=>q.columnName===w)?.databaseName||w;}let c=new Set([l,n.relation.columnName].filter(Boolean)),m=o.foreignKeys.some(f=>{if(f.columns.length!==1||f.referencedColumns.length!==1)return false;let w=c.has(f.columns[0]),S=f.referencedTable===u,q=f.referencedColumns[0]===d;return w&&S&&q}),p=C(n.relation.constraintName)||Y(n.table,l,u),h=e.get(n.table)||new Set;if(m||p&&h.has(p))return null;if(n.relation.type==="manyToMany"&&n.relation.manyToManyOptions){let f=C(n.relation.manyToManyOptions.throughModel),w=C(n.relation.manyToManyOptions.leftForeignKey),S=C(n.relation.manyToManyOptions.rightForeignKey),q=n.table===f&&n.relation.columnName===w&&n.relation.model().table===s?.table,M=n.table===f&&n.relation.columnName===S&&n.relation.model().table!==s?.table,R=await this.sql.getTableSchema(f),$=R.foreignKeys.some(D=>D.columns.length===1&&D.columns[0]===w&&D.referencedTable===(s?.table||"")),A=R.foreignKeys.some(D=>D.columns.length===1&&D.columns[0]===S&&D.referencedTable===n.relation.model().table);if(q&&$||M&&A)return null}return n})).then(n=>n.filter(Boolean)),this.data.relationsToDrop=await Promise.all(this.data.relationsToDrop.map(async n=>{let o=this.models.find(u=>u.table===n.table);if(!o)return n;let s=o.getRelations(),a=o.getColumns();return s.some(u=>{if(u.type!=="belongsTo")return false;let c=a.find(w=>w.columnName===u.foreignKey)?.databaseName||u.foreignKey,m=u.model(),p=m.primaryKey||"id",f=m.getColumns().find(w=>w.columnName===p)?.databaseName||p;return n.relation.columns.length===1&&n.relation.columns[0]===c&&n.relation.referencedTable===m.table&&n.relation.referencedColumns.length===1&&n.relation.referencedColumns[0]===f})?null:n})).then(n=>n.filter(Boolean));}clonePkAsColumn(t,e){let r=t.type;return r==="bigIncrement"?r="bigint":r==="increment"&&(r="integer"),{columnName:e,databaseName:e,isPrimary:false,type:r,length:t.length,precision:t.precision,scale:t.scale,withTimezone:t.withTimezone,constraints:{nullable:false}}}pushM2mFkRelations(t){let e=this.buildBelongsToRelation(t.throughTable,()=>t.leftModel,t.leftFkName,t.leftModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate),r=this.buildBelongsToRelation(t.throughTable,()=>t.rightModel,t.rightFkName,t.rightModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate);this.data.relationsToAdd.push(e),this.data.relationsToAdd.push(r);}buildBelongsToRelation(t,e,r,n,o,s,a){let l=o?C(o):Y(t,r,e().table);return {table:t,relation:{type:"belongsTo",model:e,columnName:r,foreignKey:r,constraintName:l,onDelete:s,onUpdate:a},onDelete:s,onUpdate:a}}};var Je=class{};Je.modelCaseConvention="camel",Je.databaseCaseConvention="snake";var Qf=(i,t)=>{try{let e=Pe.createHash("sha256").update(i).digest(),r=Pe.randomBytes(16),n=Pe.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");return o+=n.final("hex"),`${r.toString("hex")}:${o}`}catch(e){throw new T("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Kf=(i,t)=>{try{let e=Pe.createHash("sha256").update(i).digest(),r=String(t).trim(),[n,o]=r.split(":");if(!n||!o)throw new Error(`Invalid encrypted value format: expected "iv:data" but got "${r.substring(0,50)}..."`);let s=n.toLowerCase(),a=o.toLowerCase(),l=Pe.createDecipheriv("aes-256-cbc",e,Buffer.from(s,"hex")),u=l.update(a,"hex","utf8");return u+=l.final("utf8"),u}catch(e){throw new T("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Lf=(i,t)=>{try{let e=Pe.randomBytes(32),r=Pe.randomBytes(16),n=Pe.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");o+=n.final("hex");let s=publicEncrypt(i,e);return `${r.toString("hex")}:${s.toString("hex")}:${o}`}catch(e){throw new T("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},Wf=(i,t)=>{try{let e=String(t).trim(),[r,n,o]=e.split(":");if(!r||!n||!o)throw new Error(`Invalid encrypted value format: expected "iv:key:data" but got "${e.substring(0,50)}..."`);let s=privateDecrypt(i,Buffer.from(n,"hex")),a=Pe.createDecipheriv("aes-256-cbc",s,Buffer.from(r,"hex")),l=a.update(o,"hex","utf8");return l+=a.final("utf8"),l}catch(e){throw new T("Encryption::decryptAsymmetric","FAILED_TO_DECRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}};var z=class{static defineMetadata(t,e,r,n){if((typeof r!="object"||r===null)&&typeof r!="function")throw new TypeError("target must be an object or function");let o=this.store.get(r);o||(o=new Map,this.store.set(r,o));let s=o.get(n);s||(s=new Map,o.set(n,s)),s.set(t,e);}static getMetadata(t,e,r){if((typeof e!="object"||e===null)&&typeof e!="function")throw new TypeError("target must be an object or function");let n=e;for(;n;){let o=this.store.get(n);if(o){let s=o.get(r);if(s&&s.has(t))return s.get(t)}n=Object.getPrototypeOf(n);}}};z.store=new WeakMap;var Jl="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Vl=Jl.length,kh=10,Qh=16,Kh=(i,t)=>{let e="";for(let r=0;r<t;r++){let n=i%Vl;e=Jl.charAt(n)+e,i=(i-n)/Vl;}return e},Lh=i=>{let t=oe().crypto.randomBytes(i),e="";for(let r=0;r<i;r++){let n=t[r];e+=Jl.charAt(n%Vl);}return e},jf=()=>{let i=Math.floor(Date.now()/1e3),t=Kh(i,kh),e=Lh(Qh);return t+e};var en=class extends xe{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var tn=class extends xe{constructor(e,r,n){super(e,r);this.type="hasMany";this.foreignKey=n,this.type="hasMany";}};var rn=class extends xe{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var nn=class extends xe{constructor(e,r,n){super(e,r);this.type="manyToMany";this.primaryModel=n.primaryModel,this.relatedModel=e.table,this.throughModel=n.throughModel,this.leftForeignKey=n.leftForeignKey,this.rightForeignKey=n.rightForeignKey;}};function _(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let n=e.constructor;if(t){if(z.getMetadata(qt,e))throw new T("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");z.defineMetadata(qt,r,e),z.defineMetadata(qt,r,e.constructor);}let o=i.databaseName??H(r,n.databaseCaseConvention),s={columnName:r,serialize:i.serialize,prepare:i.prepare,isPrimary:t,primaryKeyConstraintName:i.primaryKeyConstraintName??qe(n.table,r),autoUpdate:i.autoUpdate,autoCreate:i.autoCreate,databaseName:o,openApi:i.openApi,type:i.type,length:i?.length,precision:i?.precision,scale:i?.scale,withTimezone:i?.withTimezone,unsigned:i.unsigned,zerofill:i.zerofill,stringMode:i.stringMode,expression:i.expression,constraints:{nullable:i.nullable,default:i.default}};s.validate=i.validate;let a=z.getMetadata(Fr,e)||[];a.push(s),z.defineMetadata(Fr,a,e);}}_.primary=Wh;_.date=og;_.datetime=sg;_.timestamp=ig;_.time=ag;_.boolean=ng;_.json=lg;_.uuid=Jh;_.ulid=Hh;_.integer=Fh;_.bigInteger=Yh;_.float=jh;_.decimal=Zh;_.increment=Uh;_.bigIncrement=Vh;_.string=zh;_.text=Gh;_.binary=Xh;_.enum=eg;_.encryption={symmetric:tg,asymmetric:rg};_.computed=ug;function Wh(i={}){return _({...i,primaryKey:true})}function jh(i={}){return _({type:"float",...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?Number.parseInt(t):Number.parseFloat(t)},openApi:{type:"number",format:"float",description:"A floating point number",...i.openApi||{}}})}function Fh(i={}){return _({type:"integer",...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?+t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An integer number",...i.openApi||{}}})}function Uh(i={}){return _({type:"increment",...i,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An auto-incrementing integer number",...i.openApi||{}}})}function Vh(i={}){return _({type:"bigIncrement",...i,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An auto-incrementing bigint number",...i.openApi||{}}})}function Jh(i={}){return _({type:"uuid",...i,prepare:t=>t||oe().crypto.randomUUID(),openApi:{type:"string",format:"uuid",description:"uuid (Universally Unique Identifier)",...i.openApi||{}}})}function Hh(i={}){return _({type:"ulid",...i,prepare:t=>t||jf(),openApi:{type:"string",format:"ulid",description:"ulid (Universally Unique Lexicographically Sortable Identifier)",...i.openApi||{}}})}function zh(i={}){return _({type:"string",...i,openApi:{type:"string",description:"A string value",...i.openApi||{}}})}function Gh(i={}){return _({type:"longtext",...i,openApi:{type:"string",description:"A text value",...i.openApi||{}}})}function Yh(i={}){return _({type:"bigint",...i,serialize:t=>{if(t!==void 0){if(t===null)return null;if(typeof t=="number")return t;if(typeof t=="string")return Number.parseInt(t);if(typeof t=="bigint")return Number(t)}},openApi:{type:"integer",format:"int64",description:"A bigint number",...i.openApi||{}}})}function Zh(i={}){return _({type:"decimal",precision:i.precision??10,scale:i.scale??2,...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseFloat(t)},openApi:{type:"number",format:"double",description:"A decimal number",...i.openApi||{}}})}function Xh(i={}){return _({type:"binary",...i,openApi:{type:"string",format:"binary",description:"Binary data",...i.openApi||{}}})}function eg(i,t={}){return _({type:i,...t,openApi:{type:"string",enum:i,description:"An enum value",...t.openApi||{}}})}function tg(i){return _({...i,prepare:t=>t&&Qf(i.key,t),serialize:t=>t&&Kf(i.key,t)})}function rg(i){return _({...i,prepare:t=>t&&Lf(i.publicKey,t),serialize:t=>t&&Wf(i.privateKey,t)})}function ng(i={}){return _({type:"boolean",...i,serialize:t=>!!t,prepare:t=>{if(t!=null)return !!t},openApi:{type:"boolean",description:"A boolean value",...i.openApi||{}}})}function og(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=i,s=!!n,a=!!r,l=typeof n=="function"?"js":s?true:void 0,u=()=>new Date,d=()=>ue(new Date,"DATE_ONLY",e),c=t?typeof n=="function"?n:d:typeof n=="function"?n:u,m=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return _({type:"date",...o,autoUpdate:a,autoCreate:l,prepare:t?f=>f?a?m():f:s?c():null:f=>f?a?m():f:s?c():null,serialize:t?f=>{if(f!==void 0)return f===null?null:f instanceof Date?ue(f,"DATE_ONLY",e):String(f)}:f=>{if(f!==void 0)return f===null?null:f instanceof Date?f:new Date(f)},openApi:{type:"string",format:"date",description:"YYYY-MM-DD",...o.openApi||{}}})}function sg(i={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...s}=i,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,c=typeof o=="function"?"js":u?true:void 0,m=()=>new Date,p=()=>ue(new Date,"ISO",a),h=t?typeof o=="function"?o:p:typeof o=="function"?o:m,f=t?typeof n=="function"?n:p:typeof n=="function"?n:m;return _({type:"datetime",...s,withTimezone:l,autoUpdate:d,autoCreate:c,prepare:t?q=>q?d?f():q:u?h():null:q=>q?d?f():q:u?h():null,serialize:t?q=>{if(q!==void 0)return q===null?null:q instanceof Date?ue(q,"ISO",a):String(q)}:q=>{if(q!==void 0)return q===null?null:q instanceof Date?q:new Date(q)},stringMode:t,openApi:{type:"string",format:"date-time",description:"YYYY-MM-DD HH:mm:ss",...s.openApi||{}}})}function ig(i={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...s}=i,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,c=typeof o=="function"?"js":u?true:void 0,m=()=>new Date,p=()=>ue(new Date,"TIMESTAMP",a),h=t?typeof o=="function"?o:p:typeof o=="function"?o:m,f=t?typeof n=="function"?n:p:typeof n=="function"?n:m;return _({type:"timestamp",...s,withTimezone:l,autoUpdate:d,autoCreate:c,prepare:t?q=>q?d?f():q:u?h():null:q=>q?d?f():q:u?h():null,serialize:t?q=>{if(q!==void 0)return q===null?null:q instanceof Date?ue(q,"TIMESTAMP",a):String(q)}:q=>{if(q!==void 0)return q===null?null:q instanceof Date?q:new Date(q)},stringMode:t,openApi:{type:"string",format:"date-time",description:"Unix timestamp",...s.openApi||{}}})}function ag(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=i,s=!!n,a=!!r,l=typeof n=="function"?"js":s?true:void 0,u=()=>new Date,d=()=>ue(new Date,"TIME_ONLY",e),c=t?typeof n=="function"?n:d:typeof n=="function"?n:u,m=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return _({type:"time",...o,autoUpdate:a,autoCreate:l,prepare:t?f=>f?a?m():f:s?c():null:f=>f?a?m():f:s?c():null,serialize:t?f=>{if(f!==void 0)return f===null?null:f instanceof Date?ue(f,"TIME_ONLY",e):String(f)}:f=>{if(f!==void 0)return f===null?null:f instanceof Date?f:new Date(f)},stringMode:t,openApi:{type:"string",format:"time",description:"HH:mm:ss",...o.openApi||{}}})}function lg(i={}){return _({type:"jsonb",...i,serialize:t=>typeof t=="string"?JSON.parse(t):t,prepare:t=>typeof t!="string"?JSON.stringify(t):t,openApi:{type:"object",description:"A JSON object",...i.openApi||{}}})}function ug(i,t={}){return _({...t,expression:i})}function Ff(i){try{return z.getMetadata(Fr,i.prototype)||[]}catch{return []}}function Uf(i){return z.getMetadata(Ll,i.prototype)||[]}function Vf(i){return (z.getMetadata(Ll,i.prototype)||[]).map(e=>{let{type:r,model:n,columnName:o,foreignKey:s}=e,a=C(s),l=n();switch(r){case "belongsTo":return new en(l,o,a);case "hasOne":return new rn(l,o,a);case "hasMany":return new tn(l,o,a);case "manyToMany":if(!e.manyToManyOptions)throw new T("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let u=n();return new nn(u,o,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:C(e.manyToManyOptions.throughModel),leftForeignKey:C(e.manyToManyOptions.leftForeignKey),rightForeignKey:C(e.manyToManyOptions.rightForeignKey)});default:throw new T("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function Jf(i){return z.getMetadata(qt,i)||z.getMetadata(qt,i.prototype)}function Hf(i){return z.getMetadata(Of,i.prototype)||[]}function zf(i){return z.getMetadata(Df,i.prototype)||[]}function Gf(i){return z.getMetadata(Af,i.prototype)||[]}var ye=class{};ye.columns=new WeakMap,ye.byName=new WeakMap,ye.byDatabaseName=new WeakMap;var De=class extends Je{static get table(){let t=Object.getOwnPropertyDescriptor(this,"table");if(t&&"value"in t)return t.value;throw new Error(`Table name not set for model "${this.name}". Use defineModel() to create models.`)}static set table(t){Object.defineProperty(this,"table",{value:t,writable:true,enumerable:true,configurable:true});}static get primaryKey(){return Jf(this)}constructor(t){if(super(),t)for(let e in t)Object.assign(this,{[e]:t[e]});}static getColumns(){let t=ye.columns.get(this);return t||(t=Ff(this),ye.columns.set(this,t)),t}static getColumnsByName(){let t=ye.byName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.columnName,e])),ye.byName.set(this,t)),t}static getColumnsByDatabaseName(){let t=ye.byDatabaseName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.databaseName,e])),ye.byDatabaseName.set(this,t)),t}static getRelations(){return Uf(this)}static getIndexes(){return Hf(this)}static getUniques(){return zf(this)}static getChecks(){return Gf(this)}static async validate(t){var s,a;let e=this.getColumns(),r={},n=this.primaryKey,o=n&&t?.[n]!==void 0?"update":"insert";for(let l of e){if(l.expression)continue;let u=l.validate;if(!u)continue;let d=t?t[l.columnName]:void 0,c=Array.isArray(u)?u:[u];for(let m of c)try{let p=await m(d,{model:this,column:l.columnName,operation:o,data:t});if(!(p&&p.valid)){let h=p&&p.message||"Validation failed";(r[s=l.columnName]||(r[s]=[])).push(h);}}catch{(r[a=l.columnName]||(r[a]=[])).push("Validation error");}}if(Object.keys(r).length>0)throw new Et(r);return {valid:true}}};De.zodEngine=null,De.softDeleteColumn="deletedAt",De.softDeleteValue=gt();var _t=class extends N{constructor(e,r=false){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.fromNode=e;}};var V=class extends N{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var re=class extends N{constructor(e,r=[],n,o=false,s=false,a={}){super(a.ignoreInto?"insert ignore into":"insert into",s);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="insert";this.file="insert";this.fromNode=e,this.records=r,this.returning=n,this.disableReturning=o,this.withNodes=a.withNodes,this.source=a.source,this.targetColumns=a.targetColumns,this.ignoreInto=a.ignoreInto??false,this.disambiguateSource=a.disambiguateSource??false;}};var Ee=class extends N{constructor(e,r,n,o="update",s,a=false){super("on duplicate",a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="on_duplicate";this.file="on_duplicate";this.table=e,this.conflictColumns=r,this.columnsToUpdate=n,this.mode=o,this.returning=s;}};var Mt=class extends N{constructor(e=[],r="inserted"){super("returning");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="returning";this.file="returning";this.columns=e,this.prefix=r;}};var Be=class extends N{constructor(e,r=[],n=[],o=false){super("update",o);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="update";this.file="update";this.fromNode=e,this.columns=r,this.values=n;}};var x=class extends N{constructor(e,r,n=false,o,s,a=false){super("where",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where";this.column=e,this.chainsWith=` ${r}`,this.isNegated=n,this.operator=o,this.value=s;}};var Ae=class extends N{constructor(e,r="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`;}};var j=class extends x{constructor(e,r,n=false,o,s,a=false,l,u){super(e,r,n,"=",s,a);this.file="where_json";this.jsonOperator=o,this.value=s,this.path=l,this.comparisonOperator=u;}};var Ce=class extends N{constructor(e,r,n,o="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_subquery";this.column=e,this.operator=r,this.subquery=n,this.chainsWith=` ${o}`;}};var Yf;Yf=Symbol.toStringTag;var ie=class{constructor(t,e,r,n){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=n;this[Yf]="WriteOperation";}then(t,e){return this.executor().then(t,e)}catch(t){return this.executor().catch(t)}finally(t){return this.executor().finally(t)}toQuery(){return this.toQueryFn()}toSql(){return this.toSqlFn()}unWrap(){return this.unWrapFn()}};var Hl=i=>{let t=i.lastIndexOf(".");return t===-1?i:i.slice(t+1)},$e=class extends ie{constructor(e,r,n,o,s,a,l){let u={requested:false,actionProvided:false};super(e,r,n,async()=>{if(u.requested&&!u.actionProvided)throw new T(l,"ON_CONFLICT_REQUIRES_MERGE_OR_IGNORE");return o()});this.conflictColumns=null;this.conflictState=u,this.commit=s,this.insertColumns=a.map(Hl),this.caller=l;}onConflict(e){if(e===void 0)return this.conflictColumns=[],this.conflictState.requested=true,this;let r=(Array.isArray(e)?e:[e]).map(Hl);if(!r.length)throw new T(this.caller,"ON_CONFLICT_COLUMNS_REQUIRED");return this.conflictColumns=r,this.conflictState.requested=true,this}merge(e){let r=this.requireConflictTarget("merge"),n=e===void 0?this.insertColumns.filter(o=>!r.includes(o)):(Array.isArray(e)?e:[e]).map(Hl);return this.commitConflict(r,"update",n),this}ignore(){if(!this.conflictState.requested)throw new T(`${this.caller}::ignore`,"MERGE_REQUIRES_ON_CONFLICT");return this.conflictState.actionProvided=true,this.commitConflict(this.conflictColumns??[],"ignore",[]),this}requireConflictTarget(e){if(!this.conflictColumns?.length)throw new T(`${this.caller}::${e}`,"MERGE_REQUIRES_ON_CONFLICT");return this.conflictColumns}commitConflict(e,r,n){this.conflictState.actionProvided=true,this.commit({conflictColumns:e,mode:r,columnsToUpdate:n});}};var dg=(i,t,e,r,n,o=false,s=new Set)=>{let a=Object.create(t.prototype);for(let l of Object.keys(i)){let u=i[l],d=s.has(l),c=e.get(l),m=l;!c&&!d&&(c=r.get(l),c&&(m=c.columnName));let p=c!==void 0,h=d||o?true:n?n.has(m):true;if(p){if(!h)continue;if(u===null){a[m]=null;continue}if(c?.serialize){let f=c.serialize(u);if(f!==null&&typeof f?.then=="function")throw new Error(`hysteria-orm: column "${m}" on model "${t.name}" has an async serialize function, but serializers must be synchronous. Move async work to prepare or a getter.`);a[m]=f;continue}a[m]=u;continue}(d||!o||n&&n.has(m))&&(a[m]=u);}if(n)for(let l of n)l in a||(a[l]=null);return a},he=(i,t,e=[],r=[])=>{if(!i.length)return null;let n=t.getColumnsByName(),o=t.getColumnsByDatabaseName(),s=e.some(c=>c.includes("*")),a=[];for(let c of e){if(c.toLowerCase().includes(" as ")){let f=c.match(/\s+as\s+(.+)$/i);f&&a.push(f[1].trim());continue}let p=c;if(p.includes(".")&&(p=p.split(".").pop()),p==="*")continue;let h=n.get(p)?.columnName??p;a.push(h);}let l=a.length?new Set(a):null,u=new Set(r),d=i.map(c=>dg(c,t,n,o,l,s,u));return d.length===1?d[0]:d};var Ut=class{constructor(t){this.observers=t??[];}add(t){this.observers.push(t);}async notifyBefore(t){for(let e of this.observers)e?.onBeforeQuery&&await e.onBeforeQuery(t);}async notifyAfter(t,e){for(let r of this.observers)r?.onAfterQuery&&(t.result??(t.result=e),await r.onAfterQuery(t));}async notifyError(t){for(let e of this.observers)e?.onQueryError&&await e.onQueryError(t);}},Zf=i=>{if(!i)return "OTHER";let t=i.trim().toUpperCase();return t.startsWith("SELECT")?"SELECT":t.startsWith("INSERT")?"INSERT":t.startsWith("UPDATE")?"UPDATE":t.startsWith("DELETE")?"DELETE":"OTHER"};var on=oe();function zl(i){let t=on.timing.now()-i;return Math.round(t*100)/100}var G=async(i,t,e,r,n="rows",o)=>{await e.ensureConnected();let s={id:on.crypto.randomUUID(),sql:i,params:t,model:void 0,operation:Zf(i),timestamp:on.timing.now()};try{let u=e.observerChain;u&&typeof u.notifyBefore=="function"&&await u.notifyBefore(s);}catch{}let a=on.timing.now(),l=u=>{o?.shouldNotLog||dt(i,e.logs,t,e.inputDetails.queryFormatOptions,r,u);};try{let u=e.driverAdapter;if(!u)throw new T("ExecSql","CONNECTION_NOT_ESTABLISHED");let d=o?.timeout,c=d?new AbortController:void 0,m,p=cg(()=>u.execute(i,t,{returning:n,sqlLiteOptions:o?.sqlLiteOptions,signal:c?.signal,connection:e.sqlConnection}),e.inputDetails.connectionPolicies?.retry,e.logs),h;try{d&&c?(h=await Promise.race([p,new Promise((f,w)=>{m=setTimeout(()=>{let S=new T("ExecSql::timeout","QUERY_TIMEOUT",new Error(`Query exceeded the ${d.ms}ms timeout`));d.cancel&&c.abort(S),w(S);},d.ms);})]),p.catch(()=>{})):h=await p;}finally{m&&clearTimeout(m);}try{let f=zl(a),w=e.observerChain;if(w&&typeof w.notifyAfter=="function"){let S={...s,duration:f,result:h};await w.notifyAfter(S);}}catch{}return l(zl(a)),u.extract(h,n)}catch(u){throw l(zl(a)),u}},sn=async(i,t,e,r={},n)=>{let o=e.driverAdapter;if(!o)throw new T("ExecSqlStreaming","CONNECTION_NOT_ESTABLISHED");return await o.stream(i,t,{...r,connection:e.sqlConnection??void 0},{onData:n.onData})};async function cg(i,t={maxRetries:0,delay:0},e=false){let r=0,n=t.maxRetries||0,o=t.delay||0;async function s(){try{return i()}catch(a){if(!Object.prototype.hasOwnProperty.call(a,"code")||a.code!=="ECONNREFUSED")throw a;if(r<n)return r++,Cu(`Retrying sql in ${o}ms (attempt ${r}/${n})`,"info",e),await new Promise(l=>setTimeout(l,o)),s();throw a}}return s()}var J=class extends N{constructor(e,r,n,o,s){super("select");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="select";this.file="select";this.column=e,this.alias=r,this.sqlFunction=n,this.isRawValue=o??false,this.distinct=s;}};var Vt=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=Vf(t),this.modelRelationsMap=new Map(this.modelRelations.map(n=>[n.columnName,n]));}getRelationFromModel(t){let e=this.modelRelationsMap.get(t.toString());if(!e)throw new T("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function an(i,t,e){return {total:e,perPage:t,currentPage:i,firstPage:1,isEmpty:e===0,lastPage:Math.max(1,Math.ceil(e/t)),hasMorePages:i<Math.max(1,Math.ceil(e/t)),hasPages:e>t}}var xt=i=>typeof i=="number"?i:parseFloat(i);var Z=class extends N{constructor(e,r,n=false,o,s,a=false,l,u){super("having",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="having";this.file="having";this.column=e,this.chainsWith=` ${r}`,this.isNegated=n,this.operator=o,this.value=s,this.subquery=l,this.group=u;}};var ln=class extends N{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var un=class extends N{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var He=class extends N{constructor(e,r,n,o="extract",s=false){super("select");this.folder="select";this.file="select_json";this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.column=e,this.jsonPath=r,this.alias=n,this.jsonOperator=o,this.isRawValue=s;}};var ne=class extends N{constructor(e,r,n,o="inner",s,a=false,l){super(`${o} join`,a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="join";this.file="join";this.type="inner";this.table=e,this.left=r,this.right=n,this.type=o,this.on=s,this.additionalConditions=l;}};var Jt=class extends N{constructor(e,r=false){super("group by",r);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="group_by";this.file="group_by";this.column=e;}};var dn=class extends N{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var cn=class extends N{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var Ht=class extends N{constructor(e,r="asc",n=false){super("order by",n);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="order_by";this.file="order_by";this.column=e,this.direction=r;}};var pn=class pn{constructor(t,e){this.model=t,this.sqlDataSource=e,this.groupByNodes=[],this.orderByNodes=[],this.limitNode=null,this.offsetNode=null,this.logs=this.sqlDataSource.logs,typeof t.getColumns=="function"?(this.modelColumns=t.getColumns(),this.modelColumnsMap=t.getColumnsByName?.()??new Map(this.modelColumns.map(r=>[r.columnName,r]))):(this.modelColumns=[],this.modelColumnsMap=pn.EMPTY_MAP);}clearGroupBy(){return this.groupByNodes=[],this}clearOrderBy(){return this.orderByNodes=[],this}clearLimit(){return this.limitNode=null,this}clearOffset(){return this.offsetNode=null,this}groupBy(...t){return t.forEach(e=>{this.groupByNodes.push(new Jt(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Jt(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new Ht(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new Ht(t,"asc",true)),this}limit(t){return typeof t!="number"&&g.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new dn(t),this}offset(t){return typeof t!="number"&&g.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new cn(t),this}};pn.EMPTY_MAP=new Map;var mn=pn;var ot=class i{constructor(t,e=false){this.sqlDataSource=t;this.isNestedCondition=false;this.whereNodes=[],this.isNestedCondition=e;}getConditions(){return this.whereNodes}where(t,e,r){return typeof t=="function"?this.andWhereGroup(t):this.andWhere(t,e,r)}andWhere(t,e,r){if(typeof t=="function")return this.andWhereGroup(t);let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"and",false,n,o)),this}orWhere(t,e,r){if(typeof t=="function")return this.orWhereGroup(t);let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"or",false,n,o)),this}whereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"and",true,n,o)),this}andWhereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"and",true,n,o)),this}orWhereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new x(t,"or",true,n,o)),this}whereBetween(t,e,r){return this.andWhereBetween(t,e,r)}andWhereBetween(t,e,r){return this.whereNodes.push(new x(t,"and",false,"between",[e,r])),this}orWhereBetween(t,e,r){return this.whereNodes.push(new x(t,"or",false,"between",[e,r])),this}whereNotBetween(t,e,r){return this.andWhereNotBetween(t,e,r)}andWhereNotBetween(t,e,r){return this.whereNodes.push(new x(t,"and",true,"between",[e,r])),this}orWhereNotBetween(t,e,r){return this.whereNodes.push(new x(t,"or",true,"between",[e,r])),this}whereLike(t,e){return this.andWhereLike(t,e)}andWhereLike(t,e){return this.where(t,"like",e),this}orWhereLike(t,e){return this.orWhere(t,"like",e),this}whereILike(t,e){return this.andWhereILike(t,e)}andWhereILike(t,e){return this.where(t,"ilike",e),this}orWhereILike(t,e){return this.orWhere(t,"ilike",e),this}whereNotLike(t,e){return this.andWhereNotLike(t,e)}andWhereNotLike(t,e){return this.where(t,"not like",e),this}orWhereNotLike(t,e){return this.orWhere(t,"not like",e),this}whereNotILike(t,e){return this.andWhereNotILike(t,e)}andWhereNotILike(t,e){return this.where(t,"not ilike",e),this}orWhereNotILike(t,e){return this.orWhere(t,"not ilike",e),this}whereIn(t,e){return this.andWhereIn(t,e)}andWhereIn(t,e){return e.length?(this.whereNodes.push(new x(t,"and",false,"in",e)),this):(this.whereNodes.push(new x("false","and",true,"=",[],true)),this)}orWhereIn(t,e){return e.length?(this.whereNodes.push(new x(t,"or",false,"in",e)),this):(this.whereNodes.push(new x("false","or",true,"=",[],true)),this)}whereNotIn(t,e){return this.andWhereNotIn(t,e)}andWhereNotIn(t,e){return e.length?(this.whereNodes.push(new x(t,"and",true,"in",e)),this):(this.whereNodes.push(new x("true","and",true,"=",[],true)),this)}orWhereNotIn(t,e){return e.length?(this.whereNodes.push(new x(t,"or",true,"in",e)),this):(this.whereNodes.push(new x("true","or",true,"=",[],true)),this)}whereNull(t){return this.andWhereNull(t)}andWhereNull(t){return this.whereNodes.push(new x(t,"and",false,"is null",void 0)),this}orWhereNull(t){return this.whereNodes.push(new x(t,"or",false,"is null",void 0)),this}whereNotNull(t){return this.andWhereNotNull(t)}andWhereNotNull(t){return this.whereNodes.push(new x(t,"and",false,"is not null",void 0)),this}orWhereNotNull(t){return this.whereNodes.push(new x(t,"or",false,"is not null",void 0)),this}whereRegexp(t,e){return this.andWhereRegexp(t,e)}andWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(t,"and",false,r?"~":"regexp",e.source)),this}orWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(t,"or",false,r?"~":"regexp",e.source)),this}whereNotRegexp(t,e){return this.andWhereNotRegexp(t,e)}andWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(t,"and",true,r?"~":"regexp",e.source)),this}orWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(t,"or",true,r?"~":"regexp",e.source)),this}whereGroup(t){return this.andWhereGroup(t)}andWhereGroup(t){let e=new i(this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new Ae(r,"and")),this}orWhereGroup(t){let e=new i(this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new Ae(r,"or")),this}whereRaw(t,e){return this.andWhereRaw(t,e)}andWhereRaw(t,e){return this.whereNodes.push(new x(t,"and",true,"=",e??[],true)),this}orWhereRaw(t,e){return this.whereNodes.push(new x(t,"or",true,"=",e??[],true)),this}};var fn=class extends mn{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new ne(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new ne(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new ne(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new ne(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new ne(t,"","","cross",{operator:"="},true)),this}crossJoin(t,e){let r=typeof t=="string"?t:t.table;return this.joinNodes.push(new ne(e?`${r} as ${e}`:r,"","","cross",{operator:"="})),this}using(...t){let e=this.joinNodes[this.joinNodes.length-1];if(!e||!t.length||e.isRawValue||e.type==="cross"||e.type==="natural")throw new T("JoinQueryBuilder::using","USING_REQUIRES_JOIN");return e.using=t.map(r=>String(r)),this}naturalJoinRaw(t){return this.joinNodes.push(new ne(t,"","","natural",{operator:"="},true)),this}innerJoin(t,e,r,n,o){if(e===void 0)return this.join(typeof t=="string"?t:t.table);let s=r,a=n,l=typeof n=="function"?n:o;if(!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}return this.join(typeof t=="string"?t:t.table,e,s,a,l),this}join(t,e,r,n,o){if(e===void 0)return this.joinNodes.push(new ne(typeof t=="string"?t:t.table,"","","inner",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new ot(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ne(typeof t=="string"?t:t.table,e,s,"inner",{operator:a||"="},false,u)),this}leftJoin(t,e,r,n,o){if(e===void 0)return this.joinNodes.push(new ne(typeof t=="string"?t:t.table,"","","left",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new ot(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ne(typeof t=="string"?t:t.table,e,s,"left",{operator:a||"="},false,u)),this}rightJoin(t,e,r,n,o){if(e===void 0)return this.joinNodes.push(new ne(typeof t=="string"?t:t.table,"","","right",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new ot(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ne(typeof t=="string"?t:t.table,e,s,"right",{operator:a||"="},false,u)),this}fullJoin(t,e,r,n,o){let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new ot(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ne(typeof t=="string"?t:t.table,e,s,"full",{operator:a||"="},false,u)),this}};var mg=/\bas\s+"?([A-Za-z_][A-Za-z0-9_]*)"?\s*(?:,|$)/gi,pg=/^[A-Za-z_][A-Za-z0-9_.]*$/,fg=i=>{let t=[];for(let e of i.matchAll(mg))t.push(e[1]);if(!t.length){let e=i.trim();pg.test(e)&&t.push(e.split(".").pop());}return t},yn=class extends fn{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.userOutputColumns=[];this.dbType=r.getDbType(),this.fromNode=new V(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return e.forEach(r=>{if(Array.isArray(r)){let[a,l]=r;this.modelSelectedColumns.push(l),this.userOutputColumns.push(l);let u=this.resolveComputedColumn(a);if(u){this.selectNodes.push(new J(`(${u.expression}) as ${l}`,void 0,void 0,true));return}let d=H(a,this.model.databaseCaseConvention);this.selectNodes.push(new J(d,l));return}let n=r;this.modelSelectedColumns.push(n);let o=this.resolveComputedColumn(n);if(o){this.selectNodes.push(new J(`(${o.expression}) as ${o.alias}`,void 0,void 0,true));return}let s=H(n,this.model.databaseCaseConvention);this.selectNodes.push(new J(s));}),this}selectRaw(e){return this.selectNodes.push(new J(e,void 0,void 0,true)),this.userOutputColumns.push(...fg(e)),this}collectUserOutputNames(){let e=new Set(this.userOutputColumns);for(let r of this.selectNodes)r.alias&&e.add(r.alias);return [...e]}selectFunc(e,r,n){return this.selectNodes.push(new J(r,n,e)),this}countDistinct(e,r){return this.selectNodes.push(new J(e,r,"count",false,true)),this}sumDistinct(e,r){return this.selectNodes.push(new J(e,r,"sum",false,true)),this}avgDistinct(e,r){return this.selectNodes.push(new J(e,r,"avg",false,true)),this}rank(e,r={}){return this.pushWindow("rank",e,r)}denseRank(e,r={}){return this.pushWindow("dense_rank",e,r)}rowNumber(e,r={}){return this.pushWindow("row_number",e,r)}pushWindow(e,r,n){return this.selectNodes.push(new J(new Ur(e,$f(n.partitionBy),If(n.orderBy)),r)),this}clearSelect(){return this.modelSelectedColumns=[],this.userOutputColumns=[],this.selectNodes=[],this}resolveComputedColumn(e){let r=this.model.getColumnsByName?.();if(!r||r.size===0)return;let n=e.includes(".")?e.split(".").pop():e,o=r.get(n);if(o?.expression)return {expression:o.expression,alias:o.databaseName||n}}clearFrom(){return this.fromNode=new V(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new V(e),this}distinct(){return this.distinctNode=new ln,this}distinctOn(...e){return this.distinctOnNode=new un(e),this}selectJson(e,r,n){return this.selectNodes.push(new He(e,r,n,"extract")),this}selectJsonText(e,r,n){return this.selectNodes.push(new He(e,r,n,"extract_text")),this}selectJsonArrayLength(e,r,n){return this.selectNodes.push(new He(e,r,n,"array_length")),this}selectJsonKeys(e,r,n){return this.selectNodes.push(new He(e,r,n,"object_keys")),this}selectJsonRaw(e,r){return this.selectNodes.push(new He(e,"",r,"raw",true)),this}};var hn=class extends yn{constructor(e,r,n=false){super(e,r);this.isNestedCondition=false;this.whereNodes=[],this.havingNodes=[],this.isNestedCondition=n;}clearWhere(){return this.whereNodes=[],this}clearHaving(){return this.havingNodes=[],this}strictWhen(e,r){return e==null?this:(r(this),this)}when(e,r){return e?(r(this),this):this}where(e,r,n){return typeof e=="function"?this.andWhereGroup(e):typeof r=="function"&&n===void 0?this.andWhereSubQuery(e,"in",r):r instanceof B&&n===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function")?this.andWhereSubQuery(e,r,n):this.andWhere(e,r,n)}andWhere(e,r,n){if(typeof e=="function")return this.andWhereGroup(e);if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new x(e,"and",false,o,s)),this}orWhere(e,r,n){if(typeof e=="function")return this.orWhereGroup(e);if(typeof r=="function"&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(r instanceof B&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new x(e,"or",false,o,s)),this}whereColumn(e,r,n){return this.andWhereColumn(e,r,n)}andWhereColumn(e,r,n){let o="=",s;return n!==void 0?(o=r,s=n):s=r,this.whereNodes.push(new x(e,"and",false,o,new O(s))),this}orWhereColumn(e,r,n){let o="=",s;return n!==void 0?(o=r,s=n):s=r,this.whereNodes.push(new x(e,"or",false,o,new O(s))),this}whereNotColumn(e,r,n){return this.andWhereNotColumn(e,r,n)}andWhereNotColumn(e,r,n){return this.pushNotColumnWhere("and",e,r,n)}orWhereNotColumn(e,r,n){return this.pushNotColumnWhere("or",e,r,n)}pushNotColumnWhere(e,r,n,o){let s="!=",a=false,l;return o!==void 0?(s=n,l=o,a=true):l=n,this.whereNodes.push(new x(r,e,a,s,new O(l))),this}whereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new x(e,"and",true,o,s)),this}andWhereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new x(e,"and",true,o,s)),this}orWhereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new x(e,"or",true,o,s)),this}whereBetween(e,r,n){return this.andWhereBetween(e,r,n)}andWhereBetween(e,r,n){return this.whereNodes.push(new x(e,"and",false,"between",[r,n])),this}orWhereBetween(e,r,n){return this.whereNodes.push(new x(e,"or",false,"between",[r,n])),this}whereNotBetween(e,r,n){return this.andWhereNotBetween(e,r,n)}andWhereNotBetween(e,r,n){return this.whereNodes.push(new x(e,"and",true,"between",[r,n])),this}orWhereNotBetween(e,r,n){return this.whereNodes.push(new x(e,"or",true,"between",[r,n])),this}whereLike(e,r){return this.andWhereLike(e,r)}andWhereLike(e,r){return this.where(e,"like",r),this}orWhereLike(e,r){return this.orWhere(e,"like",r),this}whereILike(e,r){return this.andWhereILike(e,r)}andWhereILike(e,r){return this.where(e,"ilike",r),this}orWhereILike(e,r){return this.orWhere(e,"ilike",r),this}whereNotLike(e,r){return this.andWhereNotLike(e,r)}andWhereNotLike(e,r){return this.where(e,"not like",r),this}orWhereNotLike(e,r){return this.orWhere(e,"not like",r),this}whereNotILike(e,r){return this.andWhereNotILike(e,r)}andWhereNotILike(e,r){return this.where(e,"not ilike",r),this}orWhereNotILike(e,r){return this.orWhere(e,"not ilike",r),this}whereIn(e,r){return this.andWhereIn(e,r)}andWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new x(e,"and",false,"in",r)),this):(this.whereNodes.push(new x("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new x(e,"or",false,"in",r)),this):(this.whereNodes.push(new x("false","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"in",r)}whereNotIn(e,r){return this.andWhereNotIn(e,r)}andWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new x(e,"and",true,"in",r)),this):(this.whereNodes.push(new x("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new x(e,"or",true,"in",r)),this):(this.whereNodes.push(new x("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new x(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new x(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new x(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new x(e,"or",false,"is not null",void 0)),this}whereRegexp(e,r){return this.andWhereRegexp(e,r)}andWhereRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(e,"and",false,n?"~":"regexp",r.source)),this}orWhereRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new x(e,"or",false,n?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new x(e,"and",true,n?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new x(e,"and",true,n?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new x(e,"or",true,n?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ce("","exists",r.extractQueryNodes(),"and")),this}orWhereExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ce("","exists",r.extractQueryNodes(),"or")),this}whereNotExists(e){return this.andWhereNotExists(e)}andWhereNotExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ce("","not exists",r.extractQueryNodes(),"and")),this}orWhereNotExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ce("","not exists",r.extractQueryNodes(),"or")),this}whereRaw(e,r=[]){return this.andWhereRaw(e,r)}andWhereRaw(e,r=[]){return this.whereNodes.push(new x(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new x(e,"or",false,"=",r,true)),this}having(e,r,n){return this.andHaving(e,r,n)}andHaving(e,r,n){let o="=",s;return typeof r=="string"&&n?(o=r,s=n):(s=r,o="="),this.havingNodes.push(new Z(e,"and",false,o,s)),this}orHaving(e,r,n){let o="=",s;return typeof r=="string"&&n?(o=r,s=n):(s=r,o="="),this.havingNodes.push(new Z(e,"or",false,o,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Z(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Z(e,"or",false,"=",[],true)),this}havingNull(e){return this.andHavingNull(e)}andHavingNull(e){return this.havingNodes.push(new Z(e,"and",false,"is null",void 0)),this}orHavingNull(e){return this.havingNodes.push(new Z(e,"or",false,"is null",void 0)),this}havingNotNull(e){return this.andHavingNotNull(e)}andHavingNotNull(e){return this.havingNodes.push(new Z(e,"and",false,"is not null",void 0)),this}orHavingNotNull(e){return this.havingNodes.push(new Z(e,"or",false,"is not null",void 0)),this}havingIn(e,r){return this.andHavingIn(e,r)}andHavingIn(e,r){return this.pushHavingIn("and",e,r,false)}orHavingIn(e,r){return this.pushHavingIn("or",e,r,false)}havingNotIn(e,r){return this.andHavingNotIn(e,r)}andHavingNotIn(e,r){return this.pushHavingIn("and",e,r,true)}orHavingNotIn(e,r){return this.pushHavingIn("or",e,r,true)}havingBetween(e,r){return this.andHavingBetween(e,r)}andHavingBetween(e,r){return this.havingNodes.push(new Z(e,"and",false,"between",r)),this}orHavingBetween(e,r){return this.havingNodes.push(new Z(e,"or",false,"between",r)),this}havingNotBetween(e,r){return this.andHavingNotBetween(e,r)}andHavingNotBetween(e,r){return this.havingNodes.push(new Z(e,"and",false,"not between",r)),this}orHavingNotBetween(e,r){return this.havingNodes.push(new Z(e,"or",false,"not between",r)),this}havingExists(e){return this.andHavingExists(e)}andHavingExists(e){return this.pushHavingExists("and",e,false)}orHavingExists(e){return this.pushHavingExists("or",e,false)}havingNotExists(e){return this.andHavingNotExists(e)}andHavingNotExists(e){return this.pushHavingExists("and",e,true)}orHavingNotExists(e){return this.pushHavingExists("or",e,true)}havingWrapped(e){return this.andHavingWrapped(e)}andHavingWrapped(e){return this.pushHavingGroup("and",e)}orHavingWrapped(e){return this.pushHavingGroup("or",e)}pushHavingIn(e,r,n,o){let s=o?"not in":"in";if(Array.isArray(n))return this.havingNodes.push(new Z(r,e,false,s,n)),this;let a=this.buildSubQuery(n);return this.havingNodes.push(new Z(r,e,false,s,[],false,a.extractQueryNodes())),this}pushHavingExists(e,r,n){let o=r instanceof B?r:new B(this.model,this.sqlDataSource);return o.isNestedCondition=true,typeof r=="function"&&r(o),this.havingNodes.push(new Z("",e,false,n?"not exists":"exists",[],false,o.extractQueryNodes())),this}pushHavingGroup(e,r){let n=new B(this.model,this.sqlDataSource);return n.isNestedCondition=true,r(n),this.havingNodes.push(new Z("",e,false,"=",[],false,void 0,n.havingNodes)),this}buildSubQuery(e){if(e instanceof B)return e;let r=new B(this.model,this.sqlDataSource),n=e(r);return n!=null&&"extractQueryNodes"in n?n:r}andWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new Ce(e,r,o.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new Ce(e,r,o.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new B(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new Ae(r.whereNodes,"and");return this.whereNodes.push(n),this}orWhereGroup(e){let r=new B(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new Ae(r.whereNodes,"or");return this.whereNodes.push(n),this}};var gn=class extends hn{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new j(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new j(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new j(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new j(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new j(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new j(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new j(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new j(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new j(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new j(t,"or",false,"raw",e)),this}whereJsonObject(t,e){return this.andWhereJsonObject(t,e)}andWhereJsonObject(t,e){return this.whereNodes.push(new j(t,"and",false,"=",e)),this}orWhereJsonObject(t,e){return this.whereNodes.push(new j(t,"or",false,"=",e)),this}whereNotJsonObject(t,e){return this.andWhereNotJsonObject(t,e)}andWhereNotJsonObject(t,e){return this.whereNodes.push(new j(t,"and",true,"=",e)),this}orWhereNotJsonObject(t,e){return this.whereNodes.push(new j(t,"or",true,"=",e)),this}whereJsonPath(t,e,r,n){return this.andWhereJsonPath(t,e,r,n)}andWhereJsonPath(t,e,r,n){return this.pushJsonPath("and",t,e,r,n,false),this}orWhereJsonPath(t,e,r,n){return this.pushJsonPath("or",t,e,r,n,false),this}whereJsonSupersetOf(t,e){return this.andWhereJsonSupersetOf(t,e)}andWhereJsonSupersetOf(t,e){return this.whereNodes.push(new j(t,"and",false,"contains",e)),this}orWhereJsonSupersetOf(t,e){return this.whereNodes.push(new j(t,"or",false,"contains",e)),this}whereJsonNotSupersetOf(t,e){return this.andWhereJsonNotSupersetOf(t,e)}andWhereJsonNotSupersetOf(t,e){return this.whereNodes.push(new j(t,"and",true,"contains",e)),this}orWhereJsonNotSupersetOf(t,e){return this.whereNodes.push(new j(t,"or",true,"contains",e)),this}whereJsonSubsetOf(t,e){return this.andWhereJsonSubsetOf(t,e)}andWhereJsonSubsetOf(t,e){return this.whereNodes.push(new j(t,"and",false,"subset",e)),this}orWhereJsonSubsetOf(t,e){return this.whereNodes.push(new j(t,"or",false,"subset",e)),this}whereJsonNotSubsetOf(t,e){return this.andWhereJsonNotSubsetOf(t,e)}andWhereJsonNotSubsetOf(t,e){return this.whereNodes.push(new j(t,"and",true,"subset",e)),this}orWhereJsonNotSubsetOf(t,e){return this.whereNodes.push(new j(t,"or",true,"subset",e)),this}whereJsonHasNone(t,e){return this.andWhereJsonHasNone(t,e)}andWhereJsonHasNone(t,e){return this.whereNodes.push(new j(t,"and",false,"has none",e)),this}orWhereJsonHasNone(t,e){return this.whereNodes.push(new j(t,"or",false,"has none",e)),this}pushJsonPath(t,e,r,n,o,s){let a=new j(e,t,s,"path",o,false,r,n);this.whereNodes.push(a);}};var B=class i extends gn{constructor(e,r){super(e,r);this.isNestedCondition=false;this._interpreterUtils=null;this.insertNode=null;this.insertNodeSource=void 0;this.onDuplicateNode=null;this.insertConflictConfig=null;this.updateNode=null;this.deleteNode=null;this.returningNode=null;this.truncateNode=null;this.replicationMode=null;this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.comments=[],this.hints=[],this.astParser=new b(this.model,this.dbType);}get interpreterUtils(){return this._interpreterUtils||(this._interpreterUtils=new y(this.model)),this._interpreterUtils}setReplicationMode(e){return this.replicationMode=e,this}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof i)&&typeof e[1]=="string"){let[r,n]=e;if(typeof r=="function"){let o=new i(this.model,this.sqlDataSource),s=r(o),a=s!=null&&"extractQueryNodes"in s?s:o;return this.selectNodes.push(new J(a.extractQueryNodes(),n)),this}return this.selectNodes.push(new J(r.extractQueryNodes(),n)),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}clearSelect(){return super.clearSelect(),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}countDistinct(e,r){return super.countDistinct(e,r),this}sumDistinct(e,r){return super.sumDistinct(e,r),this}avgDistinct(e,r){return super.avgDistinct(e,r),this}rank(e,r){return super.rank(e,r),this}denseRank(e,r){return super.denseRank(e,r),this}rowNumber(e,r){return super.rowNumber(e,r),this}async exists(){return !!await this.one()}async many(){let{sql:e,bindings:r}=this.unWrap();return this.execSqlWithSlaveHandling("read",n=>G(e,r,n,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}))}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async pluck(e){return (await this.many()).map(n=>n[e])}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async oneOrFail(){let e=await this.one();if(!e)throw new T("SqlDataSource::query::oneOrFail","ROW_NOT_FOUND");return e}async stream(e={}){let{sql:r,bindings:n}=this.unWrap();return this.execSqlWithSlaveHandling("read",async o=>await sn(r,n,o,e,{onData:(a,l)=>{a.write(l);}}))}async*chunk(e){let r=0;for(;;){let n=await this.limit(e).offset(r).many();if(!n.length)break;r+=n.length,yield n;}}async paginateWithCursor(e,r){if(!this.orderByNodes.length)throw new T(this.model.name+"::paginateWithCursor","ORDER_BY_REQUIRED");let n=this.orderByNodes;if(n.some(m=>m.isRawValue))throw new T(this.model.name+"::paginateWithCursor","ORDER_BY_RAW_NOT_SUPPORTED");let o=n.map(m=>m.column),s=n[0].direction==="desc"?"<":">";if(r){let m=Array.isArray(r.value)?r.value:[r.value];this.andWhere(p=>{for(let h=0;h<o.length;h++){let f=h;p.orWhere(w=>{for(let S=0;S<f;S++)w.where(o[S],"=",m[S]);w.where(o[f],s,m[f]);});}});}this.limit(e+1);let a=await this.many(),l=a.length>e,u=l?a.slice(0,e):a,d=u[u.length-1],c=o.map(m=>m.includes(".")?m.slice(m.lastIndexOf(".")+1):m);return {data:u,hasMore:l,nextCursor:d?{key:c.length===1?c[0]:c,value:c.length===1?d[c[0]]:c.map(m=>d[m])}:null}}lockForUpdate(e={}){return this.lockQueryNodes.push(new et("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new et("for_share",e.skipLocked,e.noWait)),this}forNoKeyUpdate(e={}){return this.assertPgLockStrength("forNoKeyUpdate","FOR NO KEY UPDATE"),this.lockQueryNodes.push(new et("for_no_key_update",e.skipLocked,e.noWait)),this}forKeyShare(e={}){return this.assertPgLockStrength("forKeyShare","FOR KEY SHARE"),this.lockQueryNodes.push(new et("for_key_share",e.skipLocked,e.noWait)),this}assertPgLockStrength(e,r){if(this.dbType!=="postgres")throw new T(`QueryBuilder::${e}`,`LOCK_STRENGTH_NOT_SUPPORTED_IN_${this.dbType.toUpperCase()}`,new Error(`${r} is only supported by postgres`))}timeout(e,r={}){return this.queryTimeout={ms:e,cancel:r.cancel??false},this}comment(e){return this.assertValidSqlComment(e),this.comments.push(e),this}hintComment(e){this.assertValidSqlComment(e);let r=e.slice(3,-2).trim(),n=this.hints[0];return this.hints=[n?`${n.slice(0,-2).trimEnd()} ${r} */`:`/*+ ${r} */`],this}clearComment(){return this.comments=[],this}clearHintComment(){return this.hints=[],this}assertValidSqlComment(e){let r=()=>{throw new T("QueryBuilder::comment","INVALID_SQL_COMMENT")};(!e.trim().length||e.includes("?"))&&r();let n=(this.dbType==="mysql"||this.dbType==="mariadb")&&e.startsWith("#");if(e.startsWith("--")||n){/[\r\n]/.test(e)&&r();return}if(e.startsWith("/*")&&e.endsWith("*/")&&e.length>=4){let o=e.slice(2,-2);(o.includes("/*")||o.includes("*/"))&&r();return}r();}union(e,r){if(typeof e=="string")return this.unionNodes.push(new ve(e,false,"union",r)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new ve(o)),this}unionAll(e,r){if(typeof e=="string")return this.unionNodes.push(new ve(e,true,"union",r)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new ve(o,true)),this}intersect(e,r){return this.unionNodes.push(new ve(this.resolveSetOperationNodes(e),false,"intersect",r)),this}except(e,r){return this.unionNodes.push(new ve(this.resolveSetOperationNodes(e),false,"except",r)),this}resolveSetOperationNodes(e){return typeof e=="string"?e:(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes()}increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?xt(r.total):0}needsDerivedTableCount(){return this.groupByNodes.length>0||this.havingNodes.length>0||this.distinctNode!==null||this.distinctOnNode!==null}buildCountQuery(e="*"){if(!this.needsDerivedTableCount()){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);return}this.clearOrderBy(),this.clearLimit(),this.clearOffset();let r=this.extractQueryNodes();this.withNodes=[],this.distinctNode=null,this.distinctOnNode=null,this.clearSelect(),this.fromNode=new V(r,"g"),this.joinNodes=[],this.whereNodes=[],this.groupByNodes=[],this.havingNodes=[],this.lockQueryNodes=[],this.unionNodes=[],this.comments=[],this.hints=[],this.selectRaw(`count(${e}) as total`);}async getMax(e){this.clearForFunctions(),this.selectFunc("max",e,"total");let r=await this.one();return r?xt(r.total):0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?xt(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?xt(r.total):0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?xt(r.total):0}async columnInfo(e){let r=typeof this.fromNode.table=="string"?this.fromNode.table:this.model.table,o=await(await this.getSqlDataSource("read")).getTableInfo(r);return e===void 0?o:o.find(s=>s.name===e)}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&g.warn(`${this.model.name}::paginate Non numeric values provided to \`paginate\``);let n=this.clone(),o=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>o.many(),()=>n.getCount("*"));return {paginationMetadata:an(e,r,a),data:s}}table(e,r){if(typeof e=="function"){if(!r)throw new T("QueryBuilder::table","MISSING_ALIAS_FOR_SUBQUERY");let n=new i(this.model,this.sqlDataSource),o=e(n),a=(o!=null&&"extractQueryNodes"in o?o:n).extractQueryNodes();return this.fromNode=new V(a,r),this}return this.fromNode=new V(e,r),this}withSchema(e){return this.schemaName=e,this}fromRaw(e,r=[]){return this.fromNode=new V(new O(e,r)),this}with(e,r,n){let o=Array.isArray(r)?r:void 0,s=Array.isArray(r)?n:r,a=new i(this.model,this.sqlDataSource),l=s(a),u=l!=null&&"extractQueryNodes"in l?l:a;return this.withNodes.push(new tt("normal",e,u.extractQueryNodes(),o)),this}withRecursive(e,r){let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new tt("recursive",e,s.extractQueryNodes())),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new T("QueryBuilder::withMaterialized","MATERIALIZED_CTE_NOT_SUPPORTED",new Error("MATERIALIZED CTE is only supported by postgres"));let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new tt("materialized",e,s.extractQueryNodes())),this}withNotMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new T("QueryBuilder::withNotMaterialized","NOT_MATERIALIZED_CTE_NOT_SUPPORTED",new Error("NOT MATERIALIZED CTE is only supported by postgres"));let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new tt("not materialized",e,s.extractQueryNodes())),this}insert(e,r){this.assertWriteClausesSupported("QueryBuilder::insert");let n=Object.fromEntries(Object.keys(e).map(s=>[s,e[s]])),o=!r||r.length===0;return this.insertNodeSource=void 0,this.insertConflictConfig=null,this.onDuplicateNode=null,this.insertNode=new re(this.fromNode,[this.interpreterUtils.stripComputedFromData(n)],r,o),new $e(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:s,values:a}=this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert",this.dbType),l=Object.fromEntries(s.map((h,f)=>[h,a[f]])),u=this.insertConflictConfig;if(this.insertNode=new re(this.fromNode,[l],u?void 0:r,u?true:o),u&&this.dbType==="mssql"){let h=await this.executeMssqlMergeRaw([l],u.conflictColumns,u.columnsToUpdate,{updateOnConflict:u.mode==="update",returning:r},[e]);return o?void 0:h[0]}let{sql:d,bindings:c}=this.astParser.parse(this.extractWriteNodes()),m=await this.getSqlDataSource("write"),p=await G(d,c,m,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:u?"raw":"insertOne",models:[e]}});if(!o)return Array.isArray(p)&&p.length?p[0]:p},this.buildInsertConflictCommit(r),this.interpreterUtils.filterComputedColumns(Object.keys(e)),"QueryBuilder::insert")}insertMany(e,r){this.assertWriteClausesSupported("QueryBuilder::insertMany");let n=e.map(s=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(s).map(a=>[a,s[a]])))),o=!r||r.length===0;return this.insertNodeSource=void 0,this.insertConflictConfig=null,this.onDuplicateNode=null,this.insertNode=new re(this.fromNode,n,r,o),new $e(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{if(!e.length)return o?void 0:[];let s=await Promise.all(e.map(async m=>{let{columns:p,values:h}=this.interpreterUtils.prepareColumns(Object.keys(m),Object.values(m),"insert",this.dbType);return Object.fromEntries(p.map((f,w)=>[f,h[w]]))})),a=this.insertConflictConfig;if(this.insertNode=new re(this.fromNode,s,a?void 0:r,a?true:o),a&&this.dbType==="mssql")return this.executeMssqlMergeRaw(s,a.conflictColumns,a.columnsToUpdate,{updateOnConflict:a.mode==="update",returning:r},e);let{sql:l,bindings:u}=this.astParser.parse(this.extractWriteNodes()),d=await this.getSqlDataSource("write"),c=await G(l,u,d,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:a?"raw":"insertMany",models:s}});if(!o)return c},this.buildInsertConflictCommit(r),e.length?this.interpreterUtils.filterComputedColumns(Object.keys(e[0])):[],"QueryBuilder::insertMany")}upsert(e,r,n={updateOnConflict:true}){return this.buildRawUpsert([{...r,...e}],Object.keys(r),this.interpreterUtils.filterComputedColumns(Object.keys(e)),n)}upsertMany(e,r,n,o={updateOnConflict:true}){return this.buildRawUpsert(n,e,this.interpreterUtils.filterComputedColumns(r),o)}buildRawUpsert(e,r,n,o){let s=o.returning?.length?[...o.returning]:void 0,a=s?this.insertMany(e,s):this.insertMany(e),l=o.updateOnConflict??true?a.onConflict(r).merge(n):a.onConflict(r).ignore();return new ie(()=>l.unWrap(),()=>l.toSql(),()=>l.toQuery(),async()=>{let u=await l;return Array.isArray(u)?u:[u]})}buildInsertConflictCommit(e){return r=>{this.insertConflictConfig=r;let n=r.conflictColumns.length===0;if(n&&this.dbType==="mssql")throw new T("QueryBuilder::onConflict","NOT_SUPPORTED_IN_MSSQL",new Error("MSSQL cannot express a target-less ON CONFLICT; provide the conflict columns"));let o=n&&(this.dbType==="mysql"||this.dbType==="mariadb");this.insertNode=new re(this.fromNode,this.insertNode?.records??[],void 0,true,false,{source:this.insertNode?.source,targetColumns:this.insertNode?.targetColumns}),this.onDuplicateNode=this.dbType==="mssql"||o?null:new Ee(this.model.table,r.conflictColumns,r.columnsToUpdate,r.mode,e?.length?e:void 0);}}insertFrom(e,r){this.assertWriteClausesSupported("QueryBuilder::insertFrom");let n=Array.isArray(e),o=n?e:void 0,s=n?r:e,a=typeof s=="function"?s(new i(this.model,this.sqlDataSource)):s,l=a!=null&&"extractQueryNodes"in a?a:s;return this.buildInsertFrom(l.extractQueryNodes(),o)}buildInsertFrom(e,r){return this.insertNodeSource=e,this.insertConflictConfig=null,this.onDuplicateNode=null,this.insertNode=new re(this.fromNode,[],void 0,true,false,{source:e,targetColumns:r}),new $e(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:n,bindings:o}=this.astParser.parse(this.extractWriteNodes()),s=await this.getSqlDataSource("write"),a=await G(n,o,s,this.dbType,"rows",{timeout:this.queryTimeout});return Array.isArray(a)?a:[a]},this.buildInsertConflictCommit(),r?this.interpreterUtils.filterComputedColumns(r):[],"QueryBuilder::insertFrom")}async executeMssqlMergeRaw(e,r,n,o,s){if(!e.length)return [];let a=Object.keys(e[0]),l=this.interpreterUtils.formatStringColumn("mssql",this.model.table),u=Q=>this.interpreterUtils.formatStringColumn("mssql",Q),d=[],c=e.map(Q=>`select ${a.map(P=>(d.push(Q[P]),`@${d.length}`)).join(", ")}`),m=a.map(u).join(", "),p=c.join(" union all "),h=r.map(Q=>`target.${u(Q)} = source.${u(Q)}`).join(" and "),f=n.filter(Q=>!r.includes(Q)).map(Q=>`target.${u(Q)} = source.${u(Q)}`).join(", "),w=a.map(u).join(", "),S=a.map(Q=>`source.${u(Q)}`).join(", "),q=o.returning&&o.returning.length?o.returning.map(Q=>`inserted.${u(Q)}`).join(", "):a.map(Q=>`inserted.${u(Q)}`).join(", "),R=(o.updateOnConflict??true)&&f?`when matched then update set ${f}`:"",$=`merge into ${l} as target using (${p}) as source (${m}) on ${h} ${R} when not matched then insert (${w}) values (${S}) output ${q};`,A=await this.getSqlDataSource("write"),D=await G($,d,A,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(D)?D:[D]}update(e,r){this.assertWriteClausesSupported("QueryBuilder::update",this.dbType==="mysql"||this.dbType==="mariadb",false);let n=this.interpreterUtils.stripComputedFromData(e),o=Object.keys(n),s=Object.values(n);if(!o.length)throw new T("QueryBuilder::update","UPDATE_REQUIRES_COLUMNS");this.updateNode=new Be(this.fromNode,o,s),this.returningNode=this.buildReturningNode("update",r);let a=this.returningNode!==null;return new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:u}=this.interpreterUtils.prepareColumns(o,s,"update",this.dbType);this.updateNode=new Be(this.fromNode,l,u);let{sql:d,bindings:c}=this.astParser.parse(this.extractWriteNodes()),m=await this.getSqlDataSource("write");return G(d,c,m,this.dbType,a?"rows":"affectedRows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:a?"fetch":"affectedRows"}})})}buildReturningNode(e,r){return !r?.length||!this.interpreterUtils.dialectEmitsReturning(this.dbType)?null:new Mt(r,e==="delete"?"deleted":"inserted")}withReturningNode(e){if(!this.returningNode)return e;if(this.dbType==="mssql"){let[r,...n]=e;return [r,this.returningNode,...n]}return [...e,this.returningNode]}truncate(e={}){if(this.assertWriteClausesSupported("QueryBuilder::truncate"),this.withNodes.length)throw new T("QueryBuilder::truncate","CTE_NOT_SUPPORTED_ON_TRUNCATE");return this.truncateNode=new Nt(this.fromNode,false,e),new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:r,bindings:n}=this.astParser.parse(this.extractWriteNodes()),o=await this.getSqlDataSource("write");await G(r,n,o,this.dbType,"rows",{timeout:this.queryTimeout});})}delete(e){this.assertWriteClausesSupported("QueryBuilder::delete",this.dbType==="mysql"||this.dbType==="mariadb",false),this.deleteNode=new _t(this.fromNode),this.returningNode=this.buildReturningNode("delete",e);let r=this.returningNode!==null;return new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:n,bindings:o}=this.astParser.parse(this.extractWriteNodes()),s=await this.getSqlDataSource("write");return G(n,o,s,this.dbType,r?"rows":"affectedRows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:r?"fetch":"affectedRows"}})})}softDelete(e={}){this.assertWriteClausesSupported("QueryBuilder::softDelete",this.dbType==="mysql"||this.dbType==="mariadb",false);let{column:r="deletedAt",value:n=gt()}=e||{};return this.updateNode=new Be(this.fromNode,[r],[n]),new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:o,values:s}=this.interpreterUtils.prepareColumns([r],[n],"update",this.dbType);this.updateNode=new Be(this.fromNode,o,s);let{sql:a,bindings:l}=this.astParser.parse(this.extractWriteNodes()),u=await this.getSqlDataSource("write");return G(a,l,u,this.dbType,"affectedRows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return It(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),n=vt(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${n}`:n,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new J("*")]);let{sql:e,bindings:r}=this.astParser.parse(this.extractQueryNodes());return {sql:this.withQuery?`${this.withQuery} ${e}`:e,bindings:[...r||[]]}}clone(){let e=new i(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=W(this.modelSelectedColumns),e.distinctNode=W(this.distinctNode),e.distinctOnNode=W(this.distinctOnNode),e.selectNodes=W(this.selectNodes),e.withQuery=W(this.withQuery),e.joinNodes=W(this.joinNodes),e.whereNodes=W(this.whereNodes),e.groupByNodes=W(this.groupByNodes),e.havingNodes=W(this.havingNodes),e.orderByNodes=W(this.orderByNodes),e.lockQueryNodes=W(this.lockQueryNodes),e.unionNodes=W(this.unionNodes),e.withNodes=W(this.withNodes),e.comments=[...this.comments],e.hints=[...this.hints],e.schemaName=this.schemaName,e.fromNode=W(this.fromNode),e.limitNode=W(this.limitNode),e.offsetNode=W(this.offsetNode),e.returningNode=W(this.returningNode),e.isNestedCondition=this.isNestedCondition,e}clear(){let e=new i(this.model,this.sqlDataSource);return this.fromNode.alias&&e.table(e.model.table,this.fromNode.alias),e}clearLockQuery(){return this.lockQueryNodes=[],this}clearUnionQuery(){return this.unionNodes=[],this}clearWithQuery(){return this.withNodes=[],this}assertWriteClausesSupported(e,r=false,n=true){if(!n&&this.withNodes.length&&this.dbType==="mariadb")throw new T(e,"CTE_NOT_SUPPORTED_ON_WRITE",new Error("MariaDB does not support a CTE on UPDATE or DELETE"));if(this.selectNodes.length>0||!!this.distinctNode||!!this.distinctOnNode||this.groupByNodes.length>0||this.havingNodes.length>0||this.unionNodes.length>0||this.lockQueryNodes.length>0||this.comments.length>0||this.hints.length>0)throw new T(e,"SELECT_ONLY_CLAUSE_ON_WRITE");if(this.joinNodes.length>0)throw new T(e,"JOIN_NOT_SUPPORTED_ON_WRITE");let s=this.orderByNodes.length>0||this.limitNode!==null;if(this.offsetNode||!r&&s)throw new T(e,"ORDER_BY_LIMIT_NOT_SUPPORTED_ON_WRITE")}extractWriteNodes(){if(this.insertNode){let e=this.dbType==="mysql"||this.dbType==="mariadb";this.insertNode.withNodes=e&&this.withNodes.length?this.withNodes:void 0,this.insertNode.source=this.insertNodeSource;let r=(this.dbType==="mysql"||this.dbType==="mariadb")&&!!this.insertConflictConfig&&this.insertConflictConfig.conflictColumns.length===0&&this.insertConflictConfig.mode==="ignore";return this.insertNode.ignoreInto=r,this.insertNode.keyword=r?"insert ignore into":"insert into",this.insertNode.disambiguateSource=this.dbType==="sqlite"&&!!this.insertNodeSource&&!!this.onDuplicateNode,[...e?[]:this.withNodes,this.insertNode,this.onDuplicateNode].filter(Boolean)}return this.updateNode?[...this.withNodes,...this.withReturningNode([this.updateNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode].filter(Boolean))]:this.deleteNode?[...this.withNodes,...this.withReturningNode([this.deleteNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode].filter(Boolean))]:this.truncateNode?[this.truncateNode]:[]}extractQueryNodes(){if(this.schemaName){this.fromNode&&typeof this.fromNode.table=="string"&&(this.fromNode.schema=this.schemaName);for(let n of this.joinNodes)n.schema=this.schemaName;}if(this.insertNode||this.updateNode||this.deleteNode||this.truncateNode)return this.extractWriteNodes();this.selectNodes.length||(this.selectNodes=[new J("*")]);let e=this.comments.map(n=>new Wt(n)),r=this.hints.length?[new Wt(this.hints.join(" "),true)]:[];return [...this.withNodes,...e,this.distinctNode,this.distinctOnNode,...this.selectNodes,...r,this.fromNode,...this.joinNodes,...this.whereNodes,...this.groupByNodes,...this.havingNodes,...this.orderByNodes,this.limitNode,this.offsetNode,...this.lockQueryNodes,...this.unionNodes].filter(Boolean)}clearForFunctions(){return this.clearSelect(),this.clearGroupBy(),this.clearOrderBy(),this.clearLimit(),this.clearOffset(),this}isMssqlTransaction(){return this.sqlDataSource.type==="mssql"&&!!this.sqlDataSource.sqlConnection}async executePaginateQueries(e,r){if(this.isMssqlTransaction()){let n=await e(),o=await r();return [n,o]}return Promise.all([e(),r()])}async getSqlDataSource(e){return this.replicationMode?this.replicationMode==="master"?this.sqlDataSource:e==="write"?this.sqlDataSource:this.sqlDataSource.getSlave()||this.sqlDataSource:e==="read"?this.sqlDataSource.getSlave()||this.sqlDataSource:this.sqlDataSource}async execSqlWithSlaveHandling(e,r){let n=await this.getSqlDataSource(e);if(!(n!==this.sqlDataSource))return r(n);try{return await r(n)}catch(s){let a=s instanceof Error?s:new Error(String(s)),l=this.sqlDataSource.getOnSlaveServerFailure();if(l)return await l(a,{host:n.host,port:n.port,username:n.username,password:n.password,database:n.database,type:n.getDbType()}),await r(this.sqlDataSource);throw a}}};function Xf(i,t){return t.strategy&&t.strategy!=="auto"?t.strategy:yg(i)}function yg(i){let{parentCount:t,relationType:e,hasLimitOffset:r}=i;return r&&(e==="hasMany"||e==="manyToMany")?"batched":t===1?"join":e==="manyToMany"?typeof t=="number"&&t<=10?"join":"batched":typeof t=="number"&&t<10?"join":"batched"}var Gl=oe(),st=class i extends B{constructor(e,r){super(e,r);this.loadOptions={strategy:"auto"};this.sqlModelManagerUtils=new Vt(e,this.dbType,r),this.relationQueryBuilders=[],this.modelSelectedColumns=[],this.modelColumnsMap=this.model.getColumnsByDatabaseName(),this.modelColumnsDatabaseNames=new Map;for(let[n,o]of this.modelColumnsMap)this.modelColumnsDatabaseNames.set(n,o.columnName);}expandModelSelectColumns(){let e=this.selectNodes;if(!e.length){if(this.joinNodes.length)return;for(let[,r]of this.modelColumnsMap)r.expression||e.push(new J(r.databaseName,r.columnName));return}for(let r of e){if(r.isRawValue||r.alias!==void 0||typeof r.column!="string"||r.column.includes(".")||r.column==="*")continue;let n=this.modelColumnsMap.get(r.column);!n||n.expression||(r.alias=n.columnName);}}get isRelationQueryBuilder(){return !!this.relation}static from(e,r={}){if(r.connection)return new i(e,r.connection);if(r.trx)return new i(e,r.trx.sql);throw new Error("ModelQueryBuilder::from - A connection or transaction is required. Use sql.from(Model) instead.")}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async oneOrFail(e){let r=await this.one();if(!r)throw new T(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return r}async many(){await this.model.beforeFetch?.(this);let e=this.collectUserOutputNames();this.expandModelSelectColumns();let n=await super.many();if(!n.length)return [];let o=he(n,this.model,this.modelSelectedColumns,e);if(!o)return [];let s=Array.isArray(o)?o:[o];return this.relationQueryBuilders.length&&await this.processRelationsWithStrategy(s),s}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async*chunk(e){let r=0;for(;;){let n=await this.limit(e).offset(r).many();if(!n.length)break;yield n,r+=n.length;}}async stream(e={}){await this.model.beforeFetch?.(this);let r=this.collectUserOutputNames();this.expandModelSelectColumns();let{sql:n,bindings:o}=this.unWrap(),s=await this.getSqlDataSource("read");return await sn(n,o,s,e,{onData:async(l,u)=>{let d=he([u],this.model,this.modelSelectedColumns,r);d&&(this.relationQueryBuilders.length&&await this.processRelationsRecursively([d]),l.write(d));}})}async paginateWithCursor(e,r){return super.paginateWithCursor(e,r)}insert(e,r={}){return this.assertWriteClausesSupported("ModelQueryBuilder::insert"),this.getModelManager(r.trx).insert(e,{returning:r.returning,withNodes:this.withNodes.length?this.withNodes:void 0})}insertMany(e,r={}){return this.assertWriteClausesSupported("ModelQueryBuilder::insertMany"),this.getModelManager(r.trx).insertMany(e,{returning:r.returning,withNodes:this.withNodes.length?this.withNodes:void 0})}insertFrom(e,r){this.assertWriteClausesSupported("ModelQueryBuilder::insertFrom");let n=Array.isArray(e),o=n?e:void 0,s=n?r:e,a=typeof s=="function"?s(new i(this.model,this.sqlDataSource)):s,l=a!=null&&"extractQueryNodes"in a?a:s;return this.buildInsertFrom(l.extractQueryNodes(),o)}upsert(e,r,n={updateOnConflict:true}){this.assertWriteClausesSupported("ModelQueryBuilder::upsert");let o=this.getModelManager(n.trx),s=Object.keys(e),a=Object.keys(r),l={...e,...r};return o.upsertMany(s,a,[l],{updateOnConflict:n.updateOnConflict??true,returning:n.returning}).then(u=>Array.isArray(u)?u[0]:u)}upsertMany(e,r,n={updateOnConflict:true}){this.assertWriteClausesSupported("ModelQueryBuilder::upsertMany");let o=this.getModelManager(n.trx),s=r.length>0?Object.keys(r[0]):[];return o.upsertMany(e,s,r,{updateOnConflict:n.updateOnConflict??true,returning:n.returning})}getModelManager(e){let r=e?e.sql:this.sqlDataSource.getTransactionBoundSqlDataSource()??this.sqlDataSource;return new it(this.model,r)}async find(e){return this.getModelManager().find(e)}async findOne(e){return this.getModelManager().findOne(e)}async findOneOrFail(e){return this.getModelManager().findOneOrFail(e)}async findOneByPrimaryKey(e,r){return this.getModelManager().findOneByPrimaryKey(e,r)}async updateRecord(e,r,n){return this.getModelManager(n?.trx).updateRecord(e,r,n)}async deleteRecord(e,r){return this.getModelManager(r?.trx).deleteRecord(e)}async save(e,r){let n=this.model.primaryKey;if(!n)throw new T(this.model.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");let o=e[n],s=o?{[n]:o}:{};return this.upsert(s,e,{updateOnConflict:true,returning:r?.returning,trx:r?.trx})}async softDeleteRecord(e,r,n){let{column:o=this.model.softDeleteColumn,value:s=this.model.softDeleteValue}=r||{},a={[o]:s};return this.getModelManager(n?.trx).updateRecord(e,a,{returning:n?.returning})}async firstOrInsert(e,r,n){let o=this.getModelManager(n?.trx),s=await o.findOne({where:e});if(s)return s;let a={...e,...r};return o.insert(a,{returning:["*"]})}async refresh(e){return this.getModelManager().findOneByPrimaryKey(e)}async sync(e,r,n,o,s={}){if(Array.isArray(n)||(n=[n]),!n.length)return;let a=this.sqlModelManagerUtils.getRelationFromModel(e);if(a.type!=="manyToMany")throw new T(`${this.model.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let l=H(a.leftForeignKey,s.caseConvention||this.model.databaseCaseConvention),u=H(a.rightForeignKey,s.caseConvention||this.model.databaseCaseConvention),d=n.map((p,h)=>({[l]:r[this.model.primaryKey],[u]:p[a.model.primaryKey],...o?o(p,h):{}}));class c extends De{static get table(){return a.throughModel}}c.databaseCaseConvention="preserve",c.modelCaseConvention="preserve",await new it(c,s.trx?s.trx.sql:this.sqlDataSource).insertMany(d);}truncate(e={}){return super.truncate(e)}update(e,r={}){let n=r.returning,o=super.update(e,n);return new ie(()=>o.unWrap(),()=>o.toSql(),()=>o.toQuery(),async()=>{if(!n||!this.returningNode)return o;let s=await o;return he(s,this.model,n)})}softDelete(e={}){let r=super.softDelete(e);return new ie(()=>r.unWrap(),()=>r.toSql(),()=>r.toQuery(),async()=>r)}delete(e={}){let r=e.returning,n=super.delete(r);return new ie(()=>n.unWrap(),()=>n.toSql(),()=>n.toQuery(),async()=>{if(!r||!this.returningNode)return n;let o=await n;return he(o,this.model,r)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?+r.total:0}async getMax(e){this.clearForFunctions(),this.selectFunc("max",e,"total");let r=await this.one();return r?+r.total:0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?+r.total:0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?+r.total:0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?+r.total:0}async paginate(e,r){let n=this.clone(),o=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>o.many(),()=>n.getCount("*"));return {paginationMetadata:an(e,r,a),data:s}}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof B)&&typeof e[1]=="string"){let[r,n]=e;return super.select(r,n),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}countDistinct(e,r){return super.countDistinct(e,r),this}sumDistinct(e,r){return super.sumDistinct(e,r),this}avgDistinct(e,r){return super.avgDistinct(e,r),this}rank(e,r){return super.rank(e,r),this}denseRank(e,r){return super.denseRank(e,r),this}rowNumber(e,r){return super.rowNumber(e,r),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}load(e,r,n){let o,s={strategy:"auto"};typeof r=="function"?(o=r,n&&(s=n)):r&&typeof r=="object"&&(s=r);let a=this.sqlModelManagerUtils.getRelationFromModel(e),l=new i(a.model,this.sqlDataSource);return l.relation=a,l.loadOptions=s,o?.(l),this.relationQueryBuilders.push(l),this}clearRelations(){return this.relationQueryBuilders=[],this}havingRelated(e,r,n){return this.andHavingRelated(e,r,n)}andHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.whereExists(d),this}orHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.orWhereExists(d),this}notHavingRelated(e,r,n){return this.andNotHavingRelated(e,r,n)}andNotHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.whereNotExists(d),this}orNotHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.orWhereNotExists(d),this}clone(){let e=super.clone();return e.relationQueryBuilders=W(this.relationQueryBuilders),e}async processRelationsRecursively(e){await Promise.all(this.relationQueryBuilders.filter(r=>r.isRelationQueryBuilder).map(async r=>{let n=await this.getRelatedModelsForRelation(r,r.relation,e);this.mapRelatedModelsToModels(r.relation,e,n);}));}async processRelationsWithStrategy(e){let r=e.length,n=this.relationQueryBuilders.filter(s=>s.isRelationQueryBuilder),o=async s=>{let a=Xf({parentCount:r,relationType:s.relation.type,hasLimitOffset:!!s.limitNode||!!s.offsetNode,hasOrderBy:s.orderByNodes.length>0},s.loadOptions),l=s.relationQueryBuilders.length>0;a==="join"&&!l?await this.loadRelationViaJoin(s,e):await this.loadRelationViaBatch(s,e);};if(this.dbType==="mssql"){for(let s of n)await o(s);return}await Promise.all(n.map(o));}async loadRelationViaJoin(e,r){let n=e.relation,o=e.loadOptions.joinSeparator||"__",a=await this.buildJoinQuery(e,n,o).many();this.mapJoinedResultsToModels(a,r,n,o);}buildJoinQuery(e,r,n){let o=new i(this.model,this.sqlDataSource);if(this.modelSelectedColumns.length>0)for(let s of this.selectNodes)o.selectNodes.push(W(s));else for(let[s,a]of this.model.getColumnsByDatabaseName())a.expression||o.selectNodes.push(new J(`${this.model.table}.${s}`,void 0,void 0,true));for(let s of this.whereNodes){let a=W(s);this.qualifyWhereNodeColumns(a,this.model.table),o.whereNodes.push(a);}for(let s of this.groupByNodes)o.groupByNodes.push(W(s));for(let s of this.orderByNodes)o.orderByNodes.push(W(s));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(o.limitNode=W(this.limitNode)),this.offsetNode&&(o.offsetNode=W(this.offsetNode))),r.type){case "hasOne":case "hasMany":o.leftJoin(r.model.table,`${this.model.table}.${this.model.primaryKey}`,`${r.model.table}.${r.foreignKey}`);break;case "belongsTo":o.leftJoin(r.model.table,`${this.model.table}.${r.foreignKey}`,`${r.model.table}.${r.model.primaryKey}`);break;case "manyToMany":{let s=r;o.leftJoin(s.throughModel,`${this.model.table}.${this.model.primaryKey}`,`${s.throughModel}.${s.leftForeignKey}`),o.leftJoin(s.model.table,`${s.throughModel}.${s.rightForeignKey}`,`${s.model.table}.${s.model.primaryKey}`);break}}this.selectRelationColumnsWithAlias(o,r,e,n);for(let s of e.whereNodes)o.whereNodes.push(W(s));for(let s of e.orderByNodes)o.orderByNodes.push(W(s));return o}selectRelationColumnsWithAlias(e,r,n,o){let s=r.columnName,a=r.model,l=a.getColumnsByName(),u=a.getColumnsByDatabaseName(),d=n.selectNodes.filter(m=>typeof m.column=="string"),c=d.some(m=>m.column==="*"||m.column.endsWith(".*"));if(d.length===0||c)for(let[m,p]of u)e.selectRaw(`${a.table}.${m} as ${s}${o}${p.columnName}`);else for(let m of d){let p=m.column,h=p.includes(".")?p.split(".").pop():p,f=u.get(h)||l.get(h),w=f?.databaseName??h,S=m.alias??f?.columnName??h;e.selectRaw(`${a.table}.${w} as ${s}${o}${S}`);}}mapJoinedResultsToModels(e,r,n,o){let{columnName:s,type:a}=n,l=n.model.getColumnsByName();if(a==="hasMany"||a==="manyToMany"){let u=new Map;e.forEach(d=>{let c=d[this.model.primaryKey];u.has(c)||u.set(c,[]);let m=this.extractRelationDataFromRow(d,s,o);m&&(this.serializeRelationData(m,l),u.get(c).push(m));}),r.forEach(d=>{let c=d[this.model.primaryKey];d[s]=u.get(c)||[];});}else {let u=new Map;e.forEach(d=>{let c=d[this.model.primaryKey];if(!u.has(c)){let m=this.extractRelationDataFromRow(d,s,o);m&&(this.serializeRelationData(m,l),u.set(c,m));}}),r.forEach(d=>{let c=d[this.model.primaryKey];d[s]=u.get(c)||null;});}}extractRelationDataFromRow(e,r,n){let o=`${r}${n}`,s={},a=false,l=false;for(let u of Object.keys(e))if(u.startsWith(o)){let d=u.substring(o.length);s[d]=e[u],a=true,e[u]!==null&&e[u]!==void 0&&(l=true);}return a&&l?s:null}qualifyWhereNodeColumns(e,r){if(e instanceof x)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof Ce)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof Ae)for(let n of e.nodes)this.qualifyWhereNodeColumns(n,r);}serializeRelationData(e,r){for(let n of Object.keys(e)){let o=r.get(n);o?.serialize&&e[n]!==null&&e[n]!==void 0&&(e[n]=o.serialize(e[n]));}}async loadRelationViaBatch(e,r){let n=await this.getRelatedModelsForRelation(e,e.relation,r);this.mapRelatedModelsToModels(e.relation,r,n);}mapRelatedModelsToModels(e,r,n){switch(e.type){case "hasOne":if(!this.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let o=new Map;n.forEach(m=>{let p=m[e.foreignKey];p&&o.set(String(p),m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=null;return}let h=o.get(String(p));m[e.columnName]=h||null;});break;case "belongsTo":let s=new Map;n.forEach(m=>{if(!e.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let p=m[e.model.primaryKey];p&&s.set(String(p),m);}),r.forEach(m=>{let p=m[e.foreignKey];if(!p){m[e.columnName]=null;return}let h=s.get(String(p));m[e.columnName]=h||null;});break;case "hasMany":if(!this.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;n.forEach(m=>{let p=m[e.foreignKey];if(!p)return;let h=String(p);a.has(h)||a.set(h,[]),a.get(h).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let h=a.get(String(p))||[];m[e.columnName]=h;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::manyToMany","MODEL_HAS_NO_PRIMARY_KEY");let l=e,u=new Map,d=l.leftForeignKey,c=this.modelColumnsMap.get(d)||this.modelColumnsDatabaseNames.get(d)||H(d,this.model.modelCaseConvention);n.forEach(m=>{let p=m[c];if(p==null)return;let h=String(p);u.has(h)||u.set(h,[]),delete m[c],u.get(h).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let h=u.get(String(p))||[];m[e.columnName]=h;});break;default:throw new T(this.model.name+"::mapRelatedModelsToModels","UNSUPPORTED_RELATION_TYPE")}}async getRelatedModelsForRelation(e,r,n){return this.getRelatedModelsQueryForRelation(e,r,n).many()}getRelatedModelsQueryForRelation(e,r,n){let o=this.getFilterValuesFromModelsForRelation(r,n);switch(r.type){case "belongsTo":case "hasOne":return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,o);case "hasMany":let s=e.limitNode?.limit,a=e.offsetNode?.offset;if(!s&&!a)return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,o);let l=Le(Gl.crypto.randomBytes(6)),u=`${r.model.table}_cte_${l}`,d=e.orderByNodes.map(D=>D.isRawValue?D.column:`${this.interpreterUtils.formatStringColumn(this.dbType,D.column)} ${D.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let c=e.with(u,D=>D.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${d}) as rn_${l}`).whereIn(r.foreignKey,o));s&&c.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&c.whereRaw(`rn_${l} > ${a}`);let m=e.modelSelectedColumns.map(D=>yo(D,u,e.model.table));return c.select(...m).table(u);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new T(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!n.length)return e;let h=e.limitNode?.limit,f=e.offsetNode?.offset,w=e.modelSelectedColumns.length?e.modelSelectedColumns.map(D=>D.includes(".")?D:`${r.model.table}.${D}`):[`${r.model.table}.*`];if(!h&&!f)return e.select(...w).select([`${p.throughModel}.${p.leftForeignKey}`,p.leftForeignKey]).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o);let S=Le(Gl.crypto.randomBytes(6)),q=`${r.model.table}_cte_${S}`,M=e.orderByNodes.map(D=>{if(D.isRawValue)return D.column;let Q=D.column.includes(".")?D.column:`${r.model.table}.${D.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,Q)} ${D.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let R=`${Le(Gl.crypto.randomBytes(6))}_left_foreign_key`,$=e.with(q,D=>D.select(...w).select([`${p.throughModel}.${p.leftForeignKey}`,R]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${M}) as rn_${S}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o));h&&$.whereRaw(`rn_${S} <= ${h+(f||0)}`),f&&$.whereRaw(`rn_${S} > ${f}`);let A=w.map(D=>yo(D,q,e.model.table));return $.select(...A).select([`${q}.${R}`,p.leftForeignKey]).table(q);default:throw new T(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new T(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);case "belongsTo":return r.map(n=>n[e.foreignKey]);case "manyToMany":if(!this.model.primaryKey)throw new T(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);default:throw new T(this.model.name+"::getFilterValuesFromModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}applyHavingRelatedFilter(e,r,n,o){let s=new y(r.model),a=new y(this.model),l=this.dbType;switch(r.type){case "hasOne":case "hasMany":{if(!this.model.primaryKey||!r.foreignKey)throw new T(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");let u=s.formatStringColumn(l,`${r.model.table}.${r.foreignKey}`),d=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${u} = ${d}`),n&&typeof o=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${n} ${o}`);return}case "belongsTo":{if(!r.model.primaryKey||!r.foreignKey)throw new T(this.model.name+"::applyHavingRelatedFilter",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${r.model.name}`);let u=s.formatStringColumn(l,`${r.model.table}.${r.model.primaryKey}`),d=a.formatStringColumn(l,`${this.model.table}.${r.foreignKey}`);e.whereRaw(`${u} = ${d}`),n&&typeof o=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${n} ${o}`);return}case "manyToMany":{let u=r;if(!this.model.primaryKey||!r.model.primaryKey)throw new T(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");e.joinNodes?.some(p=>!p.isRawValue&&p.table===u.throughModel&&p.type==="left")||e.leftJoin(u.throughModel,`${u.relatedModel}.${r.model.primaryKey}`,`${u.throughModel}.${u.rightForeignKey}`);let c=a.formatStringColumn(l,`${u.throughModel}.${u.leftForeignKey}`),m=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${c} = ${m}`),n&&typeof o=="number"&&e.groupByRaw(c).andHavingRaw(`count(*) ${n} ${o}`);return}default:throw new T(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}};function ey(){return {}}var it=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=ey(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new b(this.model,this.sqlType),this.interpreterUtils=new y(this.model);}setReplicationMode(t){return this.replicationMode=t,this}async find(t){if(!t)return this.query().many();let e=this.query();return t.select&&e.select(...t.select),t.relations&&t.relations.forEach(r=>{e.load(r);}),t.where&&this.handleWhereCondition(e,t.where),t.orderBy&&Object.entries(t.orderBy).forEach(([r,n])=>{e.orderBy(r,n);}),t.limit&&e.limit(t.limit),t.offset&&e.offset(t.offset),t.groupBy&&e.groupBy(...t.groupBy),e.many()}async findOne(t){let e=await this.find({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,offset:t.offset,limit:1});return e.length?e[0]:null}async findOneOrFail(t){let e=await this.findOne({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,offset:t.offset});if(e===null)throw t.customError?t.customError:new T(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new T(this.model.name+"::findOneByPrimaryKey","MODEL_HAS_NO_PRIMARY_KEY");return this.query().select(...e||[]).where(this.model.primaryKey,t).one()}withInsertNodes(t,e,r){let n=this.sqlType==="mysql"||this.sqlType==="mariadb";return t.withNodes=n&&r?.length?r:void 0,[...n?[]:r??[],t,e].filter(Boolean)}insert(t,e={}){let r=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(t).map(c=>[c,t[c]]))),n=!e.returning||e.returning.length===0,o=new re(new V(this.model.table),[r],e.returning,n,false),s=null,a=null,l=()=>{let c=this.astParser.parse(this.withInsertNodes(o,s,e.withNodes));return {sql:c.sql,bindings:c.bindings}},u=()=>{let c=this.astParser.parse(this.withInsertNodes(o,s,e.withNodes));return {sql:vt(this.sqlDataSource,c.sql),bindings:c.bindings}},d=()=>{let{sql:c,bindings:m}=u();return It(c,m)};return new $e(l,u,d,async()=>{try{await this.model.validate?.(t);}catch(R){throw R}let{columns:c,values:m}=this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert",this.sqlType),p={};if(c.forEach((R,$)=>{let A=m[$];p[R]=A,t[R]??(t[R]=A);}),a)return (await this.executeInsertConflict([p],[t],a,e.returning,e.withNodes))[0];let h=!e.returning||e.returning.length===0,{sql:f,bindings:w}=this.astParser.parse(this.withInsertNodes(new re(new V(this.model.table),[p],e.returning,h,false),null,e.withNodes)),S=await G(f,w,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(h)return;if(this.sqlType==="mysql")return this.handleMysqlInsert(S,[t],"one",e.returning);let q=S[0];return q?he([q],this.model,e.returning):t},c=>{if(a=c,c.conflictColumns.length===0&&this.sqlType==="mssql")throw new T("ModelManager::onConflict","NOT_SUPPORTED_IN_MSSQL",new Error("MSSQL cannot express a target-less ON CONFLICT; provide the conflict columns"));o=new re(new V(this.model.table),o.records,void 0,true,false),s=this.sqlType==="mssql"?null:new Ee(this.model.table,c.conflictColumns,c.columnsToUpdate,c.mode,e.returning);},this.interpreterUtils.filterComputedColumns(Object.keys(t)),"ModelManager::insert")}insertMany(t,e={}){return this.insertManyInternal(t,e,true)}insertManyInternal(t,e,r){let n=t.map(m=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(m).map(p=>[p,m[p]])))),o=!e.returning||e.returning.length===0,s=new re(new V(this.model.table),n,e.returning,o,false),a=null,l=null,u=()=>{let m=this.astParser.parse(this.withInsertNodes(s,a,e.withNodes));return {sql:m.sql,bindings:m.bindings}},d=()=>{let m=this.astParser.parse(this.withInsertNodes(s,a,e.withNodes));return {sql:vt(this.sqlDataSource,m.sql),bindings:m.bindings}},c=()=>{let{sql:m,bindings:p}=d();return It(m,p)};return new $e(u,d,c,async()=>{if(r)try{await this.model.validate?.(t);}catch(M){throw M}let m=t.map(M=>{let{columns:R,values:$}=this.interpreterUtils.prepareColumns(Object.keys(M),Object.values(M),"insert",this.sqlType),A={};return R.forEach((D,Q)=>{let pe=$[Q];A[D]=pe,M[D]??(M[D]=pe);}),A});if(l)return this.executeInsertConflict(m,t,l,e.returning,e.withNodes);let p=!e.returning||e.returning.length===0,{sql:h,bindings:f}=this.astParser.parse(this.withInsertNodes(new re(new V(this.model.table),m,e.returning,p,false),null,e.withNodes)),w=await G(h,f,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(p)return [];if(this.sqlType==="mysql")return await this.handleMysqlInsert(w,t,"many",e.returning)||[];let S=w;return S.length?he(S,this.model,e.returning)||[]:[]},m=>{if(l=m,m.conflictColumns.length===0&&this.sqlType==="mssql")throw new T("ModelManager::onConflict","NOT_SUPPORTED_IN_MSSQL",new Error("MSSQL cannot express a target-less ON CONFLICT; provide the conflict columns"));s=new re(new V(this.model.table),s.records,void 0,true,false),a=this.sqlType==="mssql"?null:new Ee(this.model.table,m.conflictColumns,m.columnsToUpdate,m.mode,e.returning);},t.length?this.interpreterUtils.filterComputedColumns(Object.keys(t[0])):[],"ModelManager::insertMany")}upsertMany(t,e,r,n={updateOnConflict:true}){let o=this.insertManyInternal(r,n,false).onConflict(t);return n.updateOnConflict??true?o.merge(this.interpreterUtils.filterComputedColumns(e)):o.ignore()}async executeInsertConflict(t,e,r,n,o){let s=r.mode==="update";if(this.sqlType==="mssql")return this.executeMssqlMerge(t,r.conflictColumns,r.columnsToUpdate,{updateOnConflict:s,returning:n},e);let a=!n||n.length===0,l=!a&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?n:void 0,{sql:u,bindings:d}=this.astParser.parse(this.withInsertNodes(new re(new V(this.model.table),t,void 0,true,false),new Ee(this.model.table,r.conflictColumns,r.columnsToUpdate,r.mode,l),o)),c=await G(u,d,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:e}});if(a)return [];if(this.sqlType==="postgres"||this.sqlType==="cockroachdb"){if(c.length<e.length&&!s)return this.refetchByConflictColumn(r.conflictColumns[0],e,n);let p=he(c,this.model,n);return p?Array.isArray(p)?p:[p]:[]}return this.refetchByConflictColumn(r.conflictColumns[0],e,n)}async refetchByConflictColumn(t,e,r){if(!t)return [];let n=e.map(s=>s[t]);return await this.query().select(...r?.length?r:["*"]).whereIn(t,n).many()}async executeMssqlMerge(t,e,r,n,o){if(!t.length)return [];let s=Object.keys(t[0]),a=this.interpreterUtils.formatStringColumn("mssql",this.model.table),l=A=>this.interpreterUtils.formatStringColumn("mssql",A),u=[],d=t.map(A=>`select ${s.map(Q=>(u.push(A[Q]),`@${u.length}`)).join(", ")}`),c=s.map(l).join(", "),m=d.join(" union all "),p=e.map(A=>`target.${l(A)} = source.${l(A)}`).join(" and "),h=r.filter(A=>!e.includes(A)).map(A=>`target.${l(A)} = source.${l(A)}`).join(", "),f=s.map(l).join(", "),w=s.map(A=>`source.${l(A)}`).join(", "),S=n.returning&&n.returning.length?n.returning.map(A=>`inserted.${l(A)}${this.interpreterUtils.resolveColumnAlias("mssql",A)}`).join(", "):s.map(A=>`inserted.${l(A)}${this.interpreterUtils.resolveColumnAlias("mssql",A)}`).join(", "),M=(n.updateOnConflict??true)&&h?`when matched then update set ${h}`:"",R=`merge into ${a} as target using (${m}) as source (${c}) on ${p} ${M} when not matched then insert (${f}) values (${w}) output ${S};`,$=await G(R,u,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});if($.length===0&&!(n.updateOnConflict??true)){let A=e[0],D=o.map(pe=>pe[A]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(A,D).many()}return $}async updateRecord(t,e,r){let n=new Set(this.model.getColumns().map(S=>S.columnName)),o=Object.keys(e).filter(S=>n.has(S)),s=o.map(S=>e[S]),{columns:a,values:l}=this.interpreterUtils.prepareColumns(o,s,"update",this.sqlType),{primaryKey:u}=this.model;if(!u)throw new T(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let d=a.indexOf(u);d!==-1&&(a.splice(d,1),l.splice(d,1));let c=r?.returning??[],m=c.length>0&&!this.interpreterUtils.hasComputedColumn(c)&&this.interpreterUtils.shouldFetchNatively(this.sqlType,"update"),{sql:p,bindings:h}=this.astParser.parse([new Be(new V(this.model.table),a,l),new x(u,"and",false,"=",t),...m?[new Mt(c)]:[]]),f=await G(p,h,this.sqlDataSource,this.sqlType,m?"rows":"affectedRows",m?{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}:void 0);if(!c.length)return;if(m){if(!f.length)throw new T(this.model.name+"::updateRecord","ROW_NOT_FOUND");return he([f[0]],this.model,c)}let w=await this.findOneByPrimaryKey(t,r?.returning);if(!w)throw new T(this.model.name+"::updateRecord","ROW_NOT_FOUND");return w}async deleteRecord(t){if(!this.model.primaryKey)throw new T(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new x(this.model.primaryKey,"and",false,"=",t),{sql:r,bindings:n}=this.astParser.parse([new _t(new V(this.model.table)),e]);await G(r,n,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new st(this.model,this.sqlDataSource);return this.replicationMode&&t.setReplicationMode(this.replicationMode),t}async handleMysqlInsert(t,e,r,n){if(!this.model.primaryKey){if(r==="one"){let a=e.length?e[0]:null;return a?he([a],this.model):null}return he(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(d=>d[this.model.primaryKey]),l=a.map(d=>`'${d}'`).join(","),u=await this.query().select(...n??["*"]).whereIn(this.model.primaryKey,a).orderByRaw(`FIELD(${this.model.primaryKey}, ${l})`).many();return r==="one"?u.length?u[0]:null:u}let o=Array.from({length:t.affectedRows},(a,l)=>l+t.insertId),s=await this.query().select(...n||["*"]).whereIn(this.model.primaryKey,o).many();return r==="one"?s.length?s[0]:null:s}handleWhereCondition(t,e,r=false){if(e)for(let[n,o]of Object.entries(e))n==="$and"&&Array.isArray(o)?t[r?"orWhere":"where"](a=>{for(let l of o)this.handleWhereCondition(a,l,false);}):n==="$or"&&Array.isArray(o)?t[r?"orWhere":"where"](a=>{let l=true;for(let u of o)this.handleWhereCondition(a,u,!l),l=false;}):this.applyFieldCondition(t,n,o,r);}applyFieldCondition(t,e,r,n=false){if(r==null||typeof r!="object"){r===null?n?t.orWhereNull(e):t.whereNull(e):n?t.orWhere(e,"=",r):t.where(e,"=",r);return}let o=r,s=o.op,a=o.value;switch(s){case "$eq":a===null?n?t.orWhereNull(e):t.whereNull(e):n?t.orWhere(e,"=",a):t.where(e,"=",a);break;case "$ne":a===null?n?t.orWhereNotNull(e):t.whereNotNull(e):n?t.orWhere(e,"!=",a):t.where(e,"!=",a);break;case "$gt":n?t.orWhere(e,">",a):t.where(e,">",a);break;case "$gte":n?t.orWhere(e,">=",a):t.where(e,">=",a);break;case "$lt":n?t.orWhere(e,"<",a):t.where(e,"<",a);break;case "$lte":n?t.orWhere(e,"<=",a):t.where(e,"<=",a);break;case "$between":{let[l,u]=a;n?t.orWhereBetween(e,l,u):t.whereBetween(e,l,u);break}case "$not between":{let[l,u]=a;n?t.orWhereNotBetween(e,l,u):t.whereNotBetween(e,l,u);break}case "$regexp":n?t.orWhereRegexp(e,a):t.whereRegexp(e,a);break;case "$not regexp":n?t.orWhereNotRegexp(e,a):t.whereNotRegexp(e,a);break;case "$is null":n?t.orWhereNull(e):t.whereNull(e);break;case "$is not null":n?t.orWhereNotNull(e):t.whereNotNull(e);break;case "$like":n?t.orWhereLike(e,a):t.whereLike(e,a);break;case "$not like":n?t.orWhereNotLike(e,a):t.whereNotLike(e,a);break;case "$ilike":n?t.orWhereILike(e,a):t.whereILike(e,a);break;case "$not ilike":n?t.orWhereNotILike(e,a):t.whereNotILike(e,a);break;case "$in":n?t.orWhereIn(e,a):t.whereIn(e,a);break;case "$nin":n?t.orWhereNotIn(e,a):t.whereNotIn(e,a);break;default:n?t.orWhere(e,"=",r):t.where(e,"=",r);}}};var Yl=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??gt()});Ot();var be=class{constructor(t){this.options=t;}static async createDriver(t){throw new T("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};le();var zt=class zt extends be{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new zt(this.mongoClient);let e=await import('mongodb').catch(()=>{throw new L("mongodb")});if(this.mongoClient=e.default??e,!this.mongoClient)throw new L("mongodb");return new zt(this.mongoClient)}};zt.mongoClient=null;var bn=zt;le();var Gt=class Gt extends be{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new Gt(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new L("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new L("mssql");return new Gt(this.mssqlClient)}};Gt.mssqlClient=null;var Tn=Gt;le();var Yt=class Yt extends be{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new Yt(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new L("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new L("mysql2");return new Yt(this.mysqlClient)}};Yt.mysqlClient=null;var wn=Yt;le();var Zt=class Zt extends be{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new Zt(this.pgClient);let e=await import('pg').catch(()=>{throw new L("pg")});if("default"in e&&(e.default,this.pgClient=e.default??e),!this.pgClient)throw new L("pg");return new Zt(this.pgClient)}};Zt.pgClient=null;var Sn=Zt;le();var Xt=class Xt extends be{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new Xt(this.sqlite3Client);let e=await import('sqlite3').catch(()=>{throw new L("sqlite3")});if(this.sqlite3Client=e.default??e,!this.sqlite3Client)throw new L("sqlite3");return new Xt(this.sqlite3Client)}};Xt.sqlite3Client=null;var Nn=Xt;var ce=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await wn.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await Sn.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await Nn.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await bn.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await Tn.createDriver(),this.mssqlDriver;default:throw new T(`DriverFactory::getDriver Driver ${t} not supported`,"DRIVER_NOT_FOUND")}}static getExistingDriver(t){switch(t){case "mysql":case "mariadb":return this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver;case "sqlite":return this.sqliteDriver;case "mongo":return this.mongodbDriver;case "mssql":return this.mssqlDriver;default:return null}}};ce.mysqlDriver=null,ce.pgDriver=null,ce.sqliteDriver=null,ce.mssqlDriver=null,ce.mongodbDriver=null;Ot();le();var qn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;let n=e.coerceNumericTypes&&!e.driverOptions?.types?{getTypeParser:(o,s)=>{let a=!s||s==="text";return a&&o===20?l=>BigInt(l):a&&o===1700?l=>Number.parseFloat(l):r.types.getTypeParser(o,s)}}:void 0;this.pool=new r.Pool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions,...n?{types:n}:{}});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.connect()}releaseConnection(t){t?.release();}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION"),e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=0,o=t.replace(/\?/g,()=>`$${++n}`);if(!r.signal)return (r.connection??this.pool).query(o,e);let s=r.connection??await this.pool.connect(),a=!r.connection,l=()=>{let u=s.processID;u!=null&&this.pool.query("SELECT pg_cancel_backend($1)",[u]).catch(()=>{});};r.signal.addEventListener("abort",l,{once:true});try{return await s.query(o,e)}finally{r.signal.removeEventListener("abort",l),a&&s.release();}}extract(t,e){return e==="rows"?t.rows:e==="raw"?t:t.rowCount}async stream(t,e,r,n){let o=r.connection,s=!o,a=o??await this.pool.connect(),l=await import('pg-query-stream').catch(()=>{throw new L("pg-query-stream")}),u=new PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),d=0,c=t.replace(/\?/g,()=>`$${++d}`),m=new l.default(c,e,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),p=a.query(m),h=0,f=false,w=false,S=q=>{if(s)try{a.release(q);}catch{}};return p.on("data",q=>{if(n.onData){h++,Promise.resolve(n.onData(u,q)).then(()=>{h--,f&&h===0&&!w&&(S(),u.end());}).catch(M=>{w=true,S(M),u.destroy(M);});return}u.write(q);}),p.on("end",()=>{f=true,h===0&&!w&&(S(),u.end());}),p.on("error",q=>{w=true,S(q),u.destroy(q);}),u}};var Cn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=r.createPool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.getConnection()}releaseConnection(t){t?.release();}async beginTransaction(t,e){e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await t.beginTransaction();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){if(!r.signal)return (r.connection??this.pool).query(t,e);let n=r.connection??await this.pool.getConnection(),o=!r.connection,s=()=>{let a=n.threadId;a!=null&&this.pool.query(`KILL QUERY ${Number(a)}`).catch(()=>{});};r.signal.addEventListener("abort",s,{once:true});try{return await n.query(t,e)}finally{r.signal.removeEventListener("abort",s),o&&n.release();}}extract(t,e){let r=t;return e==="affectedRows"?r[0]?.affectedRows??0:e==="raw"?t:r[0]}async stream(t,e,r,n){let o=this.pool,s=r.connection??await o.getConnection(),a=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),u=s.connection.query(t,e).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),d=0,c=false,m=false,p=()=>{try{s.release();}catch{}};return u.on("data",h=>{if(n.onData){d++,Promise.resolve(n.onData(a,h)).then(()=>{d--,c&&d===0&&!m&&(p(),a.end());}).catch(f=>{m=true,p(),a.destroy(f);});return}a.write(h);}),u.on("end",()=>{c=true,d===0&&!m&&(p(),a.end());}),u.on("error",h=>{m=true,p(),a.destroy(h);}),a.on("close",()=>{p();}),a}};var Rn=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=new r.Database(String(e.database??":memory:"),e.driverOptions?.mode??void 0,n=>{if(n)throw new T("SqliteDataSource::createSqlPool","CONNECTION_NOT_ESTABLISHED")});}createPool(){}async closePool(){await new Promise((t,e)=>{this.pool.close(r=>{r&&e(r),t();});});}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){return await this.promisify(t,e,r)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.pool;return new Zl(o,t,e,{onData:n.onData})}promisify(t,e,r){let n=r.sqlLiteOptions??{},o=n.mode||"fetch",s=n.customConnection??r.connection??this.pool;if(["begin","begin transaction","commit","rollback"].includes(t.trim().toLowerCase()))return new Promise((u,d)=>{s.run(t,e,function(c){c&&d(c),u(this.changes);});});if(o==="fetch")return new Promise((u,d)=>{s.all(t,e,(c,m)=>{c&&d(c),u(m||[]);});});if(!n?.typeofModel)return new Promise((u,d)=>{s.run(t,e,function(c){c?d(new Error(c.message)):u(this.changes);});});if(o==="insertOne"||o==="insertMany"){let u=`${t} returning *`;return new Promise((d,c)=>{s.all(u,e,(m,p)=>{if(m)return c(m);d(p||[]);});})}return new Promise((u,d)=>{s.run(t,e,function(c){c?d(new Error(c.message)):u(this.changes);});})}},Zl=class extends Readable{constructor(t,e,r=[],n){super({objectMode:true}),this.db=t,this.query=e,this.params=r,this.started=false,this.events=n;}_read(){this.started||(this.started=true,this.readRows());}readRows(){let t=0,e=false,r=false;this.db.each(this.query,this.params,(n,o)=>{if(n){r=true,this.emit("error",n);return}t++;let s=false,a,l={write:u=>{s=true,a=u;}};Promise.resolve(this.events.onData?.(l,o)).then(()=>{if(!r){if(s){this.push(a);return}this.push(o);}}).catch(u=>{r=true,this.emit("error",u);}).finally(()=>{t--,e&&t===0&&!r&&this.push(null);});},n=>{if(n){r=true,this.emit("error",n);return}e=true,t===0&&!r&&this.push(null);});}};le();var _n=class{constructor(t,e,r){this.dialect="mssql";this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;let n=e.driverOptions,{options:o,...s}=n??{};this.pool=new r.ConnectionPool({server:e.host??"localhost",port:e.port,database:e.database,user:e.username,password:e.password,...s,options:{trustServerCertificate:E.MSSQL_TRUST_SERVER_CERTIFICATE??void 0,...o,abortTransactionOnError:false,enableImplicitTransactions:false}});}async createPool(){await this.pool.connect();}async closePool(){await this.pool.close();}async reserveConnection(){return this.pool.transaction()}releaseConnection(){}async beginTransaction(t,e){if(e.isolationLevel){let r=await this.getMssqlTransactionLevel(e.isolationLevel);await t.begin(r);return}await t.begin();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){let n=this.pool,o=r.connection?r.connection.request():n.request();e.forEach((l,u)=>{o.input(`p${u}`,l);});let s=0,a=t.replace(/\?|@(\d+)/g,()=>`@p${s++}`);if(r.signal){let l=()=>{try{o.cancel();}catch{}};r.signal.addEventListener("abort",l,{once:true});try{return await o.query(a)}finally{r.signal.removeEventListener("abort",l);}}return o.query(a)}extract(t,e){return e==="affectedRows"?t.rowsAffected[0]:e==="raw"?t:t.recordset}async stream(t,e,r,n){let o=r.connection??this.pool,s=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),a=o.request();a.stream=true,e.forEach((p,h)=>{a.input(`p${h}`,p);});let l=0,u=t.replace(/\?|@(\d+)/g,()=>`@p${l++}`),d=0,c=false,m=false;return a.on("row",p=>{if(!m){if(n.onData){d++,Promise.resolve(n.onData(s,p)).then(()=>{d--,c&&d===0&&!m&&s.end();}).catch(h=>{m=true,s.destroy(h);});return}s.write(p);}}),a.on("error",p=>{m=true,s.destroy(p);}),a.on("done",()=>{c=true,d===0&&!m&&s.end();}),a.query(u),s}async getMssqlTransactionLevel(t){let e=await import('mssql').then(r=>r.default.ISOLATION_LEVEL).catch(r=>{throw g.error(r),new L("mssql")});switch(t){case "READ UNCOMMITTED":return e.READ_UNCOMMITTED;case "READ COMMITTED":return e.READ_COMMITTED;case "REPEATABLE READ":return e.REPEATABLE_READ;case "SERIALIZABLE":return e.SERIALIZABLE;default:throw new T("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${t}`)}}};var Sg=()=>{ge({name:"pg",dialects:["postgres","cockroachdb"],create:async({dialect:i,input:t})=>{let e=(await ce.getDriver(i)).client;return new qn(i,t,e)}}),ge({name:"mysql2",dialects:["mysql","mariadb"],create:async({dialect:i,input:t})=>{let e=(await ce.getDriver(i)).client;return new Cn(i,t,e)}}),ge({name:"sqlite3",dialects:["sqlite"],create:async({dialect:i,input:t})=>{let e=(await ce.getDriver(i)).client;return new Rn(i,t,e)}}),ge({name:"mssql",dialects:["mssql"],create:async({dialect:i,input:t})=>{let e=(await ce.getDriver(i)).client;return new _n(i,t,e)}});};Sg();var Mg=async i=>{if(i==="bun"){await(await Promise.resolve().then(()=>(uy(),ly))).registerBunDrivers();return}if(i==="web"){(await Promise.resolve().then(()=>(nu(),ru))).registerWebDrivers();return}if(i==="react-native"){await(await Promise.resolve().then(()=>(nu(),ru))).registerReactNativeDrivers();return}},An=async(i,t)=>{let e=dr(t?.jsEnvironment);await Mg(e);let r=await ry(i,e,t?.driver,t);return await r.createPool(),r};var tr=class tr{constructor(){}static run(t,e){return tr.storage.run(t,e)}static getTransaction(){return tr.storage.getStore()}};tr.storage=new AsyncLocalStorage;var ze=tr;var rr=class i{constructor(t,e,r=false,n=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=Le(oe().crypto.randomBytes(16)),this.isolationLevel=e,this.isNested=r,this.nestingDepth=n;}async nestedTransaction(t){let e=new i(this.sql,this.isolationLevel,true,this.nestingDepth+1);if(await e.transaction(),t)try{let r=await ze.run(e,()=>t(e));return await e.commit(),r}catch(r){throw await e.rollback(),r}return e}async transaction(){if(this.getIsolationLevelQuery(),this.isNested){let r=this.getSavePointName();this.sql.type==="mssql"?await this.sql.rawQuery(`SAVE TRANSACTION ${r}`):await this.sql.rawQuery(`SAVEPOINT ${r}`),this.isActive=true;return}(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&dt("BEGIN TRANSACTION",this.sql.logs);let t=this.sql.driverAdapter,e=this.sql.sqlConnection;if(!t||!e)throw new T("TRANSACTION::transaction","CONNECTION_NOT_ESTABLISHED");await t.beginTransaction(e,{isolationLevel:this.isolationLevel,rawQuery:(r,n)=>this.sql.rawQuery(r,n??[])}),this.isActive=true;}async commit(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new T("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "sqlite":await this.sql.rawQuery(`RELEASE SAVEPOINT ${e}`);break}this.isActive=false;return}try{let e=this.sql.driverAdapter,r=this.sql.sqlConnection;(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&dt("COMMIT",this.sql.logs),e&&r&&await e.commitTransaction(r,{rawQuery:(n,o)=>this.sql.rawQuery(n,o??[])});}catch(e){throw g.error(e),e}finally{await this.releaseConnection(),this.isActive=false;}}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new T("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":await this.sql.rawQuery(`ROLLBACK TRANSACTION ${e}`);break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":await this.sql.rawQuery(`ROLLBACK TO SAVEPOINT ${e}`);break;case "sqlite":await this.sql.rawQuery(`ROLLBACK TO ${e}`);break;default:throw new T("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}this.isActive=false;return}try{let e=this.sql.driverAdapter,r=this.sql.sqlConnection;(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&dt("ROLLBACK",this.sql.logs),e&&r&&await e.rollbackTransaction(r,{rawQuery:(n,o)=>this.sql.rawQuery(n,o??[])});}catch(e){throw g.error(e),e}finally{await this.releaseConnection(),this.isActive=false;}}async releaseConnection(){if(this.connectionReleased)return;let t=null;try{this.sql.driverAdapter?.releaseConnection(this.sql.sqlConnection);}catch(e){t=e,g.error(e);}this.sql.sqlConnection=null;try{await this.sql.disconnect();}catch(e){g.warn(`Transaction::releaseConnection - disconnect failed: ${e?.message??e}`);}if(this.connectionReleased=true,t)throw t}getIsolationLevelQuery(){if(!this.isolationLevel||this.sql.type==="mssql")return "";if(this.sql.type==="sqlite"&&this.isolationLevel!=="SERIALIZABLE")throw new T("TRANSACTION::getIsolationLevelQuery","SQLITE_ONLY_SUPPORTS_SERIALIZABLE_ISOLATION_LEVEL");if(this.sql.type==="mysql"||this.sql.type==="mariadb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="postgres"||this.sql.type==="cockroachdb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="sqlite")return "";throw new T("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}};var ou=Symbol.for("hysteria.orm.SqlDataSource"),fy,yy,ke=class i extends(yy=Qt,fy=ou,yy){constructor(e){super(e);this[fy]=true;this.globalTransaction=null;this.globalTransactionLock=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.lockConnection=null;this.lockKeyToId=new Map;this.driverAdapter=null;this.id=oe().crypto.randomUUID();this.logicalSourceId=oe().crypto.randomUUID();this.cacheAdapter=new gr;this.migrationConfig={path:E.MIGRATION_PATH||"database/migrations",lock:true,transactional:true,lockTimeout:3e4};this.seederConfig={path:"database/seeders"};this.zodEngine=null;this.lazyLoad=false;this.connecting=null;this.sqlType=e?.type||this.type;let r=e;this.inputDetails={...e,type:this.sqlType,host:r?.host??this.host,port:r?.port??this.port,username:r?.username??this.username,password:r?.password??this.password,database:r?.database??this.database,logs:r?.logs??this.logs},this.inputDetails.connectionPolicies=e?.connectionPolicies||{retry:{maxRetries:0,delay:0}},this.inputDetails.queryFormatOptions=e?.queryFormatOptions||{language:$t(this.sqlType),keywordCase:"lower",dataTypeCase:"lower",functionCase:"lower"},this.cacheKeys=e?.cacheStrategy?.keys??{},this.cacheAdapter=e?.cacheStrategy?.cacheAdapter??this.cacheAdapter,this.adminJsOptions=e?.adminJs,e?.migrations&&(this.migrationConfig={path:e.migrations.path||this.migrationConfig.path,tsconfig:e.migrations.tsconfig,lock:e.migrations.lock??this.migrationConfig.lock,transactional:"transactional"in e.migrations?e.migrations.transactional??this.migrationConfig.transactional:this.migrationConfig.transactional}),e?.seeders&&(this.seederConfig={path:e.seeders.path||this.seederConfig.path,tsconfig:e.seeders.tsconfig}),this._models=e?.models||{},this.slaves=(e?.replication?.slaves||[]).map(n=>new i(n)),this.slaveAlgorithm=e?.replication?.slaveAlgorithm||"roundRobin",this.onSlaveServerFailure=e?.replication?.onSlaveServerFailure,this.lazyLoad=e?.lazyLoad??false,this.clsEnabled=e?.clsEnabled??true;}static isSqlDataSource(e){return typeof e=="object"&&e!==null&&ou in e&&e[ou]===true}get isClsEnabled(){return this.clsEnabled}getOnSlaveServerFailure(){return this.onSlaveServerFailure}addObserver(e){return this.observerChain||(this.observerChain=new Ut([])),this.observerChain.add(e),this}static async useConnection(e,r){let n=new i(e);await n.connect();try{await r(n),n.isConnected&&await n.disconnect();}catch(o){throw n.isConnected&&await n.disconnect(),o}}async connect(){if(this.isConnected)throw new T("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");try{this.driverAdapter=await An(this.sqlType,this.inputDetails),this.sqlPool=this.driverAdapter.pool??null,this.ownsPool=!0,this.slaves.length&&await Promise.all(this.slaves.map(async e=>{e.driverAdapter=await An(e.sqlType,e.inputDetails),e.sqlPool=e.driverAdapter.pool??null,e.ownsPool=!0;}));}catch(e){this.sqlPool=null,this.ownsPool=false;for(let r of this.slaves)r.ownsPool&&(r.sqlPool=null,r.ownsPool=false);throw e}}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new T("SqlDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.connect().finally(()=>{this.connecting=null;})),await this.connecting;}}get isInGlobalTransaction(){return !!this.globalTransaction}get models(){let e=this;return new Proxy(this._models,{get(r,n){if(typeof n=="string"&&n in r)return e.from(r[n])}})}getSlave(){if(!this.slaves.length)return null;if(this.slaveAlgorithm==="random")return this.slaves[Math.floor(Math.random()*this.slaves.length)];let e=this.slaves[this.roundRobinIndex%this.slaves.length];return this.roundRobinIndex=(this.roundRobinIndex+1)%this.slaves.length,e}getTransactionBoundSqlDataSource(){if(this.globalTransaction?.isActive)return this.globalTransaction.sql;if(this.clsEnabled){let e=ze.getTransaction();if(e?.isActive&&e.sql.logicalSourceId===this.logicalSourceId)return e.sql}return null}async useCache(e,r,...n){if(!this.cacheAdapter)throw new T("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new T("SqlDataSource::useCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);let s=o.length,a=typeof r=="number"&&s===n.length,l,u=[];a?(l=r,u=n):(l=void 0,u=r!==void 0?[r,...n]:n);let d=zn(JSON.stringify(u)),c=d?`${e}:${d}`:e,m=await this.cacheAdapter.get(c);if(m!==void 0)return m;let p=await o(...u);return await this.cacheAdapter.set(c,p,l),p}async invalidCache(e,...r){if(!this.cacheAdapter)throw new T("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new T("SqlDataSource::invalidCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);if(n.length>0&&r.length===0){let l=e;await this.cacheAdapter.invalidate(l);return}let s=zn(JSON.stringify(r)),a=s?`${e}:${s}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new T("SqlDataSource::invalidateAllCache","CACHE_ADAPTER_NOT_CONFIGURED");await this.cacheAdapter.invalidateAll(e);}async clone(e){let r=new i(this.inputDetails);return r.id=this.id,r.logicalSourceId=this.logicalSourceId,r.sqlType==="sqlite"||!!e?.shouldRecreatePool?(r.driverAdapter=await An(r.sqlType,this.inputDetails),r.sqlPool=r.driverAdapter.pool,r.ownsPool=true):(r.driverAdapter=this.driverAdapter,r.sqlPool=this.sqlPool,r.ownsPool=false),r}getDbType(){return this.sqlType}from(e,r){let n=this.getTransactionBoundSqlDataSource()??this;if(typeof e=="string"){let o=new B(Yl(e,r),n);return r?.alias&&o.table(e,r.alias),o}return new st(e,n)}fromRaw(e,r=[],n){let o=this.getTransactionBoundSqlDataSource()??this;return new B(Yl("",n),o).fromRaw(e,r)}schema(){if(!this.isConnected&&!this.lazyLoad)throw new T("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new jt(this,this.getDbType())}async startGlobalTransaction(e){for(;this.globalTransactionLock;)await this.globalTransactionLock;if(this.globalTransaction?.isActive)throw new T("SqlDataSource::startGlobalTransaction","GLOBAL_TRANSACTION_ALREADY_STARTED");let r=()=>{};this.globalTransactionLock=new Promise(n=>{r=n;});try{let n=await this.clone();return n.sqlConnection=await n.getConnection(),this.globalTransaction=new rr(n,e?.isolationLevel),await this.globalTransaction.transaction(),this.globalTransaction}finally{r(),this.globalTransactionLock=null;}}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new T("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");try{await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async rollbackGlobalTransaction(e){if(!this.globalTransaction){g.warn("SqlDataSource::rollbackGlobalTransaction - GLOBAL_TRANSACTION_NOT_STARTED");return}try{await this.globalTransaction.rollback({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async transaction(e,r){let n=typeof e=="function"?r:e;if(this.globalTransaction?.isActive)return typeof e=="function"?this.globalTransaction.nestedTransaction(e):this.globalTransaction.nestedTransaction();let o=this.clsEnabled?ze.getTransaction():void 0;if(o?.isActive&&o.sql.logicalSourceId===this.logicalSourceId)return typeof e=="function"?o.nestedTransaction(e):o.nestedTransaction();let s=await this.clone();s.sqlConnection=await s.getConnection();let a=new rr(s,n?.isolationLevel);if(await a.transaction(),typeof e=="function")try{let l=this.clsEnabled?await ze.run(a,()=>e(a)):await e(a);return await a.commit({throwErrorOnInactiveTransaction:!1}),l}catch(l){throw await a.rollback({throwErrorOnInactiveTransaction:false}),l}return a}getModelManager(e){if(!this.isConnected&&!this.lazyLoad)throw new T("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");let r=this.getTransactionBoundSqlDataSource()??this;return new it(e,r)}getPool(){if(!this.sqlPool)throw this.lazyLoad?new T("SqlDataSource::getPool - call ensureConnected() or connect() first when using lazyLoad","CONNECTION_NOT_ESTABLISHED"):new T("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(){if(this.sqlConnection)return this.sqlConnection;await this.ensureConnected();let e=this.driverAdapter;if(!e)throw new T("SqlDataSource::getConnection","CONNECTION_NOT_ESTABLISHED");return e.reserveConnection()}async disconnect(){if(!this.isConnected){g.warn("Connection already closed or not established");return}if(!this.ownsPool){if(this.sqlConnection)try{this.driverAdapter?.releaseConnection(this.sqlConnection);}catch(e){g.warn(`SqlDataSource::disconnect - releasing borrowed connection failed: ${e?.message??e}`);}this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{g.warn("SqlDataSource::disconnect - Error while rolling back global transaction");}if(this.lockConnection){try{this.driverAdapter?.releaseConnection(this.lockConnection);}catch(e){g.warn(`SqlDataSource::disconnect - releasing lock connection failed: ${e?.message??e}`);}this.lockConnection=null,this.lockKeyToId.clear();}await this.cacheAdapter?.disconnect?.(),this.slaves.length&&await Promise.all(this.slaves.map(async e=>{try{await e.disconnect();}catch(r){g.warn(`SqlDataSource::disconnect - Error while closing slave connection: ${r.message}`);}})),g.warn("Closing connection"),await this.driverAdapter?.closePool(),this.sqlPool=null,this.driverAdapter=null,this.sqlConnection=null;}getConnectionDetails(){return {type:this.getDbType(),host:this.host,port:this.port,username:this.username,password:this.password,database:this.database,connectionPolicies:this.inputDetails.connectionPolicies,queryFormatOptions:this.inputDetails.queryFormatOptions,jsEnvironment:this.inputDetails.jsEnvironment,driver:this.inputDetails.driver}}async introspectSchema(){let e=this.getDbType(),r;e==="postgres"||e==="cockroachdb"?r=`
|
|
260
260
|
SELECT table_schema AS schema_name, table_name
|
|
261
261
|
FROM information_schema.tables
|
|
262
262
|
WHERE table_type = 'BASE TABLE'
|
|
@@ -282,7 +282,7 @@ ORDER BY ordinal_position`,bindings:[]}}},op=new ga;var ba=class{toSql(t){let e=
|
|
|
282
282
|
WHERE table_type = 'BASE TABLE'
|
|
283
283
|
AND table_schema NOT IN ('information_schema', 'pg_catalog', 'mysql', 'sys', 'performance_schema')
|
|
284
284
|
ORDER BY table_schema, table_name;
|
|
285
|
-
`;try{let n=await this.rawQuery(r),o=this.extractRowsFromRawResult(n),s={dialect:e,tables:[]},a={};for(let l of o){let u=String(l.schema_name||l.SCHEMA_NAME||"public"),d=String(l.table_name||l.TABLE_NAME||l.name||""),c=`${u}.${d}`;!a[c]&&d&&(a[c]={name:d,columns:[]},s.tables.push(a[c]));}return [s]}catch(n){return g.warn(`Failed to introspect schema: ${n.message}`),[]}}async syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){g.warn("Syncing schema with SQLite is not supported, skipping...");return}let n=(await rt.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 x(e)}jsonSet(e,r,n,o){return fd(e,r,n,o)}jsonInsert(e,r,n,o){return yd(e,r,n,o)}jsonRemove(e,r,n){return hd(e,r,n)}async getTableSchema(e){let[r,n,o,s,a]=await Promise.all([this.getTableInfo(e),this.getIndexInfo(e),this.getForeignKeyInfo(e),this.getPrimaryKeyInfo(e),this.getCheckConstraintInfo(e)]);return {columns:r,indexes:n,foreignKeys:o,primaryKey:s,checkConstraints:a}}getModelOpenApiSchema(){return vu(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new S("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await Jn(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new S("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await $u(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}loadZodEngine(e){return this.zodEngine=e,Ae.zodEngine=e,this}isAdminJsEnabled(){return !!this.adminJsOptions?.enabled}async getTableInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new qr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return [];throw l}let s=this.getDbType();if(s==="sqlite")return o.map(l=>{let u=String(l.type||"").toLowerCase(),d=Ue(s,u),c=new Set(["text","varchar","char"]);return {name:l.name,dataType:d,isNullable:l.notnull===0,defaultValue:l.dflt_value??null,withTimezone:null,stringMode:c.has(d)}});let a=o.map(l=>{let u=String(l.column_name||l.COLUMN_NAME||l.name||""),d=String(l.data_type||l.DATA_TYPE||l.type||"").toLowerCase(),c=Ue(s,d),m=l.is_nullable!==void 0?l.is_nullable:l.IS_NULLABLE!==void 0?l.IS_NULLABLE:void 0,p=typeof m=="string"?m.toLowerCase()!=="no":typeof m=="boolean"?m:l.notnull!==void 0?l.notnull===0:true,h=l.column_default??l.COLUMN_DEFAULT??l.defaultValue??l.dflt_value??null,f=s==="mariadb"&&h==="NULL"?null:h,T=l.char_length!=null?Number(l.char_length):null,w=l.numeric_precision!=null?Number(l.numeric_precision):null,q=l.numeric_scale!=null?Number(l.numeric_scale):null,D=l.timezone!=null?!!l.timezone:/with time zone/.test(String(l.column_type||l.udt_name||d||"").toLowerCase()),R=null,$=String(l.column_type||l.COLUMN_TYPE||""),A=$.match(/^enum\((.+)\)$/i);A&&(R=A[1].split(",").map(Ye=>Ye.trim().replace(/^'|'$/g,"")));let O=$.toLowerCase(),K=O.includes(" unsigned"),le=O.includes(" zerofill"),ne=new Set(["text","tinytext","mediumtext","longtext","varchar","char","nvarchar","nchar","ntext","character varying","character"]).has(c);return {name:u,dataType:c,isNullable:p,defaultValue:f,length:T,precision:w,scale:q,withTimezone:D,enumValues:R,unsigned:K,zerofill:le,stringMode:ne}});if(s==="postgres"||s==="mssql"){let l=[];try{l=await this.getCheckConstraintInfo(e);}catch{}if(l.length>0)for(let u of a){let d=u.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c=l.find(m=>{let p=m.expression,h=new RegExp(`[\\["\\[]?${d}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),f=new RegExp(`[\\("\\[]?${d}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return h.test(p)||f.test(p)});if(c){let m=c.expression,p=m.match(/IN\s*\(([^)]+)\)/i);if(p)u.enumValues=p[1].split(",").map(h=>h.trim().replace(/^'|'$/g,""));else {let h=m.match(/ARRAY\[([^\]]+)\]/i);h&&(u.enumValues=h[1].split(",").map(f=>f.trim().replace(/::[a-z ]+$/i,"").replace(/^'|'$/g,"")));}}}}return a}async hasTable(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Cr(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 Rr(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 _r(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"?a.length>0:false}async hasPrimaryKey(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Mr(e)]).sql,o=this.getDbType(),s=[];try{let a=await this.rawQuery(n);s=this.extractRowsFromRawResult(a);}catch{return false}return o==="postgres"||o==="cockroachdb"?s.length>0&&s[0].exists===true:o==="mysql"||o==="mariadb"||o==="mssql"?s.length>0&&parseInt(s[0].count)>0:o==="sqlite"?s.some(a=>a.pk>0):false}async hasUnique(e,r){let n=Array.isArray(r)?r:[r];try{return (await this.getIndexInfo(e)).some(s=>{let a=s.unique??s.isUnique??s.Non_unique,l=a===!0||a==="true"||a==="1"||a===0,u=Array.isArray(s.columns)?s.columns:[s.column_name];return l&&u.length===n.length&&u.every((d,c)=>d===n[c])})}catch{return false}}async hasForeignKey(e,r){try{let o=(await this.getForeignKeyInfo(e)).flatMap(a=>a.columns||a.column||[a.from]);return r.every(a=>o.includes(a))&&o.length>=r.length}catch{return false}}async hasCheckConstraint(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new xr(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 Or]).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 Dr(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 Sr(e)]).sql,o=this.getDbType(),s=[];try{let l=await this.rawQuery(n);s=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return [];throw l}if(o==="mysql"||o==="mariadb"){let l=new Map;for(let u of s){let d=u.Key_name,c=u.Non_unique===0,m=l.get(d)||{name:d,columns:[],isUnique:c};m.columns.push(u.Column_name),l.set(d,m);}return Array.from(l.values())}if(o==="postgres"||o==="cockroachdb"){let l=new Map;for(let u of s){let d=u.index_name,c=!!u.is_unique,m=l.get(d)||{name:d,columns:[],isUnique:c};m.columns.push(u.column_name),l.set(d,m);}return Array.from(l.values())}let a=[];for(let l of s){let u=l.name,d=!!l.unique,c=await this.rawQuery(`PRAGMA index_info(${u})`),p=this.extractRowsFromRawResult(c).map(h=>h.name);a.push({name:u,columns:p,isUnique:d});}return a}async getForeignKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new wr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let u of o){let d=Number(u.id),c=l.get(d)||{name:void 0,columns:[],referencedTable:String(u.table),referencedColumns:[],onDelete:u.on_delete??null,onUpdate:u.on_update??null};c.columns.push(String(u.from)),c.referencedColumns.push(String(u.to)),l.set(d,c);}return Array.from(l.values())}let a=new Map;for(let l of o){let u=String(l.name||""),d=u||`${l.referenced_table}_${l.column_name}`,c=a.get(d)||{name:u||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};c.columns.push(String(l.column_name)),c.referencedColumns.push(String(l.referenced_column)),a.set(d,c);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Nr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return;throw l}if(!o.length)return;let s=o.map(l=>String(l.column_name));return {name:o[0].name||void 0,columns:s}}async getCheckConstraintInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Tr(e)]).sql,o=[];try{let a=await this.rawQuery(n);o=this.extractRowsFromRawResult(a);}catch(a){if(at(this.getDbType(),a))return [];throw a}let s=a=>this.getDbType()==="mariadb"&&/^json_valid\(/i.test(a);return o.filter(a=>!s(String(a.expression))).map(a=>({name:String(a.name),expression:String(a.expression)}))}async acquireLock(e="hysteria_lock",r=3e4){let n=this.getDbType();try{switch(n){case "postgres":case "cockroachdb":{let o=this.hashStringToLockId(e),s=this.driverAdapter;if(!s)return !1;let a=await this.getLockConnection(),l=await s.execute("SELECT pg_try_advisory_lock($1) as pg_try_advisory_lock",[o],{returning:"rows",connection:a}),d=s.extract(l,"rows")?.[0]?.pg_try_advisory_lock;return d===!0||d==="t"?(this.lockKeyToId.set(e,o),!0):!1}case "mysql":case "mariadb":{let o=Math.floor(r/1e3);return (await this.rawQuery("SELECT GET_LOCK(?, ?) as lock_result",[e,o]))[0]?.[0]?.lock_result===1}case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_getapplock @Resource = @p0, @LockMode = 'Exclusive', @LockOwner = 'Session', @LockTimeout = @p1; SELECT @result as lock_result",[e,r])).recordset?.[0]?.lock_result??-999)>=0;case "sqlite":return g.info("SQLite uses automatic file-based locking, advisory locks not needed"),!0;default:return g.warn(`Advisory locks not implemented for database type: ${n}`),!0}}catch(o){let s=o instanceof Error?o:new Error(String(o));return g.error(`Failed to acquire lock: ${s.message||JSON.stringify(o)} (dbType: ${n}, lockKey: ${e}). Full error: ${JSON.stringify(o)}`),false}}async ping(){let e=this.getDbType(),r=Date.now();try{await this.ensureConnected();let n;switch(e){case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "mssql":n="SELECT 1";break;case "sqlite":n="PRAGMA integrity_check";break;default:n="SELECT 1";}return await this.rawQuery(n),{ok:!0,latencyMs:Date.now()-r,dialect:e}}catch{return {ok:false,latencyMs:Date.now()-r,dialect:e}}}async isHealthy(){try{return (await this.ping()).ok}catch{return false}}async releaseLock(e="hysteria_lock"){let r=this.getDbType();try{switch(r){case "postgres":case "cockroachdb":{let n=this.lockKeyToId.get(e),o=this.lockConnection,s=this.driverAdapter;if(n===void 0||!o||!s)return !1;let a=await s.execute("SELECT pg_advisory_unlock($1) as pg_advisory_unlock",[n],{returning:"rows",connection:o}),u=s.extract(a,"rows")?.[0]?.pg_advisory_unlock,d=u===!0||u==="t";return d&&(this.lockKeyToId.delete(e),this.lockKeyToId.size===0&&(s.releaseConnection(o),this.lockConnection=null)),d}case "mysql":case "mariadb":return (await this.rawQuery("SELECT RELEASE_LOCK(?) as release_result",[e]))[0]?.[0]?.release_result===1;case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_releaseapplock @Resource = @p0, @LockOwner = 'Session'; SELECT @result as release_result",[e])).recordset?.[0]?.release_result??-999)>=0;case "sqlite":return !0;default:return g.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(n){let o=n instanceof Error?n:new Error(String(n));return g.error(`Failed to release lock: ${o.message||JSON.stringify(n)} (dbType: ${r}, lockKey: ${e}). Full error: ${JSON.stringify(n)}`),false}}async getLockConnection(){if(this.lockConnection)return this.lockConnection;let e=this.driverAdapter;if(!e)throw new S("SqlDataSource::getLockConnection","CONNECTION_NOT_ESTABLISHED");return this.lockConnection=await e.reserveConnection(),this.lockConnection}hashStringToLockId(e){let r=0;for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);r=(r<<5)-r+o,r=r&r;}return Math.abs(r)}async executeOnSlave(e){let r=this.getSlave();if(!r)return e(this);try{return await e(r)}catch(n){let o=n instanceof Error?n:new Error(String(n));if(this.onSlaveServerFailure)return await this.onSlaveServerFailure(o,{host:r.host,port:r.port,username:r.username,password:r.password,database:r.database,type:r.sqlType}),e(this);throw o}}};var Le=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 rr(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 pr(o,i),u=await fr(o,e,r),d=l.map(p=>p.name),c=u.filter(p=>d.includes(p.migrationName));if(c.length===0){g.info("No pending migrations.");return}if(t){let p=c.findIndex(T=>T.migrationName===t);if(p===-1){g.error(`Rollback until migration not found: ${t}`);return}let h=c.slice(p);s&&(a=await i.transaction(),i=a.sql),await new Le(i).downMigrations(h),s&&await a?.commit(),g.info("Migrations rolled back successfully");return}s&&(a=await i.transaction(),i=a.sql),await new Le(i).downMigrations(c),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}g.info("Migrations rolled back successfully");}var nr=class{static async generate(t,e){if(e==="code"||!Array.isArray(t)&&"up"in t){let{up:o,down:s}=t;return `import { Migration } from "hysteria-orm";
|
|
285
|
+
`;try{let n=await this.rawQuery(r),o=this.extractRowsFromRawResult(n),s={dialect:e,tables:[]},a={};for(let l of o){let u=String(l.schema_name||l.SCHEMA_NAME||"public"),d=String(l.table_name||l.TABLE_NAME||l.name||""),c=`${u}.${d}`;!a[c]&&d&&(a[c]={name:d,columns:[]},s.tables.push(a[c]));}return [s]}catch(n){return g.warn(`Failed to introspect schema: ${n.message}`),[]}}async syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){g.warn("Syncing schema with SQLite is not supported, skipping...");return}let n=(await nt.makeDiff(this)).getSqlStatements();if(!n.length){g.info("No new changes detected between database schema and models metadata");return}if(g.info(`Generated ${n.length} SQL statements to sync schema`),!e?.transactional){for(let o of n)await this.rawQuery(o);g.info(`Synced schema with ${n.length} SQL statements`);return}await this.transaction(async o=>{for(let s of n)await o.sql.rawQuery(s);}),g.info(`Synced schema with ${n.length} SQL statements`);}extractRowsFromRawResult(e){let r=this.getDbType();if(r==="mysql"||r==="mariadb"){if(Array.isArray(e)&&e.length>=1){let n=e[0];if(Array.isArray(n))return n;if(typeof n=="object"&&n!==null&&("insertId"in n||"affectedRows"in n))return []}return e}return r==="postgres"||r==="cockroachdb"?e&&typeof e=="object"&&"rows"in e?e.rows||[]:e:Array.isArray(e)?e:[]}async rawQuery(e,r=[],n){if(await this.ensureConnected(),(n?.replicationMode||"master")==="slave")return this.executeOnSlave(async a=>G(e,r,a,this.getDbType(),"raw"));let s=this.getTransactionBoundSqlDataSource()??this;return G(e,r,s,this.getDbType(),"raw")}rawStatement(e){return new O(e)}jsonSet(e,r,n,o){return hd(e,r,n,o)}jsonInsert(e,r,n,o){return gd(e,r,n,o)}jsonRemove(e,r,n){return bd(e,r,n)}async getTableSchema(e){let[r,n,o,s,a]=await Promise.all([this.getTableInfo(e),this.getIndexInfo(e),this.getForeignKeyInfo(e),this.getPrimaryKeyInfo(e),this.getCheckConstraintInfo(e)]);return {columns:r,indexes:n,foreignKeys:o,primaryKey:s,checkConstraints:a}}getModelOpenApiSchema(){return Pu(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new T("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await Hn(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new T("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await vu(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}loadZodEngine(e){return this.zodEngine=e,De.zodEngine=e,this}isAdminJsEnabled(){return !!this.adminJsOptions?.enabled}async getTableInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Cr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return [];throw l}let s=this.getDbType();if(s==="sqlite")return o.map(l=>{let u=String(l.type||"").toLowerCase(),d=Ve(s,u),c=new Set(["text","varchar","char"]);return {name:l.name,dataType:d,isNullable:l.notnull===0,defaultValue:l.dflt_value??null,withTimezone:null,stringMode:c.has(d)}});let a=o.map(l=>{let u=String(l.column_name||l.COLUMN_NAME||l.name||""),d=String(l.data_type||l.DATA_TYPE||l.type||"").toLowerCase(),c=Ve(s,d),m=l.is_nullable!==void 0?l.is_nullable:l.IS_NULLABLE!==void 0?l.IS_NULLABLE:void 0,p=typeof m=="string"?m.toLowerCase()!=="no":typeof m=="boolean"?m:l.notnull!==void 0?l.notnull===0:true,h=l.column_default??l.COLUMN_DEFAULT??l.defaultValue??l.dflt_value??null,f=s==="mariadb"&&h==="NULL"?null:h,w=l.char_length!=null?Number(l.char_length):null,S=l.numeric_precision!=null?Number(l.numeric_precision):null,q=l.numeric_scale!=null?Number(l.numeric_scale):null,M=l.timezone!=null?!!l.timezone:/with time zone/.test(String(l.column_type||l.udt_name||d||"").toLowerCase()),R=null,$=String(l.column_type||l.COLUMN_TYPE||""),A=$.match(/^enum\((.+)\)$/i);A&&(R=A[1].split(",").map(Ze=>Ze.trim().replace(/^'|'$/g,"")));let D=$.toLowerCase(),Q=D.includes(" unsigned"),pe=D.includes(" zerofill"),se=new Set(["text","tinytext","mediumtext","longtext","varchar","char","nvarchar","nchar","ntext","character varying","character"]).has(c);return {name:u,dataType:c,isNullable:p,defaultValue:f,length:w,precision:S,scale:q,withTimezone:M,enumValues:R,unsigned:Q,zerofill:pe,stringMode:se}});if(s==="postgres"||s==="mssql"){let l=[];try{l=await this.getCheckConstraintInfo(e);}catch{}if(l.length>0)for(let u of a){let d=u.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c=l.find(m=>{let p=m.expression,h=new RegExp(`[\\["\\[]?${d}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),f=new RegExp(`[\\("\\[]?${d}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return h.test(p)||f.test(p)});if(c){let m=c.expression,p=m.match(/IN\s*\(([^)]+)\)/i);if(p)u.enumValues=p[1].split(",").map(h=>h.trim().replace(/^'|'$/g,""));else {let h=m.match(/ARRAY\[([^\]]+)\]/i);h&&(u.enumValues=h[1].split(",").map(f=>f.trim().replace(/::[a-z ]+$/i,"").replace(/^'|'$/g,"")));}}}}return a}async hasTable(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Rr(e)]).sql,o=this.getDbType(),s=[];try{let a=await this.rawQuery(n);s=this.extractRowsFromRawResult(a);}catch{return false}return o==="postgres"||o==="cockroachdb"?s.length>0&&s[0].exists===true:o==="mysql"||o==="mariadb"||o==="mssql"?s.length>0&&parseInt(s[0].count)>0:o==="sqlite"?s.length>0:false}async hasColumn(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new _r(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"?a.some(l=>l.name===r):false}async hasColumns(e,...r){if(!r.length)return true;for(let n of r)if(!await this.hasColumn(e,n))return false;return true}async hasIndex(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Mr(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"?a.length>0:false}async hasPrimaryKey(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new xr(e)]).sql,o=this.getDbType(),s=[];try{let a=await this.rawQuery(n);s=this.extractRowsFromRawResult(a);}catch{return false}return o==="postgres"||o==="cockroachdb"?s.length>0&&s[0].exists===true:o==="mysql"||o==="mariadb"||o==="mssql"?s.length>0&&parseInt(s[0].count)>0:o==="sqlite"?s.some(a=>a.pk>0):false}async hasUnique(e,r){let n=Array.isArray(r)?r:[r];try{return (await this.getIndexInfo(e)).some(s=>{let a=s.unique??s.isUnique??s.Non_unique,l=a===!0||a==="true"||a==="1"||a===0,u=Array.isArray(s.columns)?s.columns:[s.column_name];return l&&u.length===n.length&&u.every((d,c)=>d===n[c])})}catch{return false}}async hasForeignKey(e,r){try{let o=(await this.getForeignKeyInfo(e)).flatMap(a=>a.columns||a.column||[a.from]);return r.every(a=>o.includes(a))&&o.length>=r.length}catch{return false}}async hasCheckConstraint(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Or(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"&&a.length>0&&a[0].sql?a[0].sql.includes("CHECK")&&a[0].sql.includes(r):false}async getTables(){let r=new b({databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Dr]).sql,n=[];try{let s=await this.rawQuery(r);n=this.extractRowsFromRawResult(s);}catch{return []}let o=n[0]?.table_name||"name";return n.map(s=>s[o]||s.name)}async getColumnListing(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Ar(e)]).sql,o=[];try{let s=await this.rawQuery(n);o=this.extractRowsFromRawResult(s);}catch{return []}return o.map(s=>s.name??s.column_name)}async getIndexInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Nr(e)]).sql,o=this.getDbType(),s=[];try{let l=await this.rawQuery(n);s=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return [];throw l}if(o==="mysql"||o==="mariadb"){let l=new Map;for(let u of s){let d=u.Key_name,c=u.Non_unique===0,m=l.get(d)||{name:d,columns:[],isUnique:c};m.columns.push(u.Column_name),l.set(d,m);}return Array.from(l.values())}if(o==="postgres"||o==="cockroachdb"){let l=new Map;for(let u of s){let d=u.index_name,c=!!u.is_unique,m=l.get(d)||{name:d,columns:[],isUnique:c};m.columns.push(u.column_name),l.set(d,m);}return Array.from(l.values())}let a=[];for(let l of s){let u=l.name,d=!!l.unique,c=await this.rawQuery(`PRAGMA index_info(${u})`),p=this.extractRowsFromRawResult(c).map(h=>h.name);a.push({name:u,columns:p,isUnique:d});}return a}async getForeignKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Sr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let u of o){let d=Number(u.id),c=l.get(d)||{name:void 0,columns:[],referencedTable:String(u.table),referencedColumns:[],onDelete:u.on_delete??null,onUpdate:u.on_update??null};c.columns.push(String(u.from)),c.referencedColumns.push(String(u.to)),l.set(d,c);}return Array.from(l.values())}let a=new Map;for(let l of o){let u=String(l.name||""),d=u||`${l.referenced_table}_${l.column_name}`,c=a.get(d)||{name:u||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};c.columns.push(String(l.column_name)),c.referencedColumns.push(String(l.referenced_column)),a.set(d,c);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new qr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return;throw l}if(!o.length)return;let s=o.map(l=>String(l.column_name));return {name:o[0].name||void 0,columns:s}}async getCheckConstraintInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new wr(e)]).sql,o=[];try{let a=await this.rawQuery(n);o=this.extractRowsFromRawResult(a);}catch(a){if(at(this.getDbType(),a))return [];throw a}let s=a=>this.getDbType()==="mariadb"&&/^json_valid\(/i.test(a);return o.filter(a=>!s(String(a.expression))).map(a=>({name:String(a.name),expression:String(a.expression)}))}async acquireLock(e="hysteria_lock",r=3e4){let n=this.getDbType();try{switch(n){case "postgres":case "cockroachdb":{let o=this.hashStringToLockId(e),s=this.driverAdapter;if(!s)return !1;let a=await this.getLockConnection(),l=await s.execute("SELECT pg_try_advisory_lock($1) as pg_try_advisory_lock",[o],{returning:"rows",connection:a}),d=s.extract(l,"rows")?.[0]?.pg_try_advisory_lock;return d===!0||d==="t"?(this.lockKeyToId.set(e,o),!0):!1}case "mysql":case "mariadb":{let o=Math.floor(r/1e3);return (await this.rawQuery("SELECT GET_LOCK(?, ?) as lock_result",[e,o]))[0]?.[0]?.lock_result===1}case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_getapplock @Resource = @p0, @LockMode = 'Exclusive', @LockOwner = 'Session', @LockTimeout = @p1; SELECT @result as lock_result",[e,r])).recordset?.[0]?.lock_result??-999)>=0;case "sqlite":return g.info("SQLite uses automatic file-based locking, advisory locks not needed"),!0;default:return g.warn(`Advisory locks not implemented for database type: ${n}`),!0}}catch(o){let s=o instanceof Error?o:new Error(String(o));return g.error(`Failed to acquire lock: ${s.message||JSON.stringify(o)} (dbType: ${n}, lockKey: ${e}). Full error: ${JSON.stringify(o)}`),false}}async ping(){let e=this.getDbType(),r=Date.now();try{await this.ensureConnected();let n;switch(e){case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "mssql":n="SELECT 1";break;case "sqlite":n="PRAGMA integrity_check";break;default:n="SELECT 1";}return await this.rawQuery(n),{ok:!0,latencyMs:Date.now()-r,dialect:e}}catch{return {ok:false,latencyMs:Date.now()-r,dialect:e}}}async isHealthy(){try{return (await this.ping()).ok}catch{return false}}async releaseLock(e="hysteria_lock"){let r=this.getDbType();try{switch(r){case "postgres":case "cockroachdb":{let n=this.lockKeyToId.get(e),o=this.lockConnection,s=this.driverAdapter;if(n===void 0||!o||!s)return !1;let a=await s.execute("SELECT pg_advisory_unlock($1) as pg_advisory_unlock",[n],{returning:"rows",connection:o}),u=s.extract(a,"rows")?.[0]?.pg_advisory_unlock,d=u===!0||u==="t";return d&&(this.lockKeyToId.delete(e),this.lockKeyToId.size===0&&(s.releaseConnection(o),this.lockConnection=null)),d}case "mysql":case "mariadb":return (await this.rawQuery("SELECT RELEASE_LOCK(?) as release_result",[e]))[0]?.[0]?.release_result===1;case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_releaseapplock @Resource = @p0, @LockOwner = 'Session'; SELECT @result as release_result",[e])).recordset?.[0]?.release_result??-999)>=0;case "sqlite":return !0;default:return g.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(n){let o=n instanceof Error?n:new Error(String(n));return g.error(`Failed to release lock: ${o.message||JSON.stringify(n)} (dbType: ${r}, lockKey: ${e}). Full error: ${JSON.stringify(n)}`),false}}async getLockConnection(){if(this.lockConnection)return this.lockConnection;let e=this.driverAdapter;if(!e)throw new T("SqlDataSource::getLockConnection","CONNECTION_NOT_ESTABLISHED");return this.lockConnection=await e.reserveConnection(),this.lockConnection}hashStringToLockId(e){let r=0;for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);r=(r<<5)-r+o,r=r&r;}return Math.abs(r)}async executeOnSlave(e){let r=this.getSlave();if(!r)return e(this);try{return await e(r)}catch(n){let o=n instanceof Error?n:new Error(String(n));if(this.onSlaveServerFailure)return await this.onSlaveServerFailure(o,{host:r.host,port:r.port,username:r.username,password:r.password,database:r.database,type:r.sqlType}),e(this);throw o}}};var We=class{constructor(t){this.migrationTable="migrations";this.sql=t;}async upMigrations(t){for(let e of t){g.info(`Running migration ${e.migrationName}`),await e.up();let r=e.schema.queryStatements;for(let n of r)n&&await this.sql.rawQuery(n);await this.addMigrationToMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async downMigrations(t){t=t.reverse();for(let e of t){g.info(`Rolling back migration ${e.migrationName}`),await e.down();let r=e.schema.queryStatements;for(let n of r)n&&await this.sql.rawQuery(n);await this.deleteMigrationFromMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async addMigrationToMigrationTable(t){let r=new Date().toISOString().replace("T"," ").replace(/\.\d{3}Z$/,"");await this.sql.from(this.migrationTable).insert({name:t.migrationName,timestamp:r});}async deleteMigrationFromMigrationTable(t){await this.sql.from(this.migrationTable).where("name",t.migrationName).delete();}};async function nr(i,t,e,r,n){let o=i.getDbType(),s=n&&o!=="mssql",a=null;g.info("Rolling back migrations for database type: "+o);try{let l=await fr(o,i),u=await yr(o,e,r),d=l.map(p=>p.name),c=u.filter(p=>d.includes(p.migrationName));if(c.length===0){g.info("No pending migrations.");return}if(t){let p=c.findIndex(w=>w.migrationName===t);if(p===-1){g.error(`Rollback until migration not found: ${t}`);return}let h=c.slice(p);s&&(a=await i.transaction(),i=a.sql),await new We(i).downMigrations(h),s&&await a?.commit(),g.info("Migrations rolled back successfully");return}s&&(a=await i.transaction(),i=a.sql),await new We(i).downMigrations(c),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}g.info("Migrations rolled back successfully");}var or=class{static async generate(t,e){if(e==="code"||!Array.isArray(t)&&"up"in t){let{up:o,down:s}=t;return `import { Migration } from "hysteria-orm";
|
|
286
286
|
|
|
287
287
|
export default class extends Migration {
|
|
288
288
|
async up() {
|
|
@@ -303,7 +303,7 @@ ${t.map(o=>` this.schema.rawQuery('${o.replace(/\\/g,"\\\\").replace(/'/g,"\\
|
|
|
303
303
|
}
|
|
304
304
|
|
|
305
305
|
async down() {}
|
|
306
|
-
}`}};var
|
|
306
|
+
}`}};var $n=class{static initTemplate(t){let e=this.getDefaultPort(t),r=t==="sqlite"?"database.db":"database",n=t==="mongodb"?"mongo":t==="redis"?"redis":"SqlDataSource";return t==="mongodb"||t==="redis"?this.handleNoSqlConnection(t,n==="SqlDataSource"?"sql":n):`
|
|
307
307
|
import { ${n} } from "hysteria-orm";
|
|
308
308
|
|
|
309
309
|
const db = new ${n}({
|
|
@@ -345,7 +345,7 @@ export default db;`:""}static getNoSqlConnectionConfig(t){switch(t){case "mongod
|
|
|
345
345
|
password: "root",
|
|
346
346
|
username: "default",
|
|
347
347
|
db: 0,
|
|
348
|
-
}`;default:return ""}}static getDefaultPort(t){switch(t){case "mysql":return 3306;case "postgres":return 5432;case "mariadb":return 3306;case "cockroachdb":return 26257;case "mssql":return 1433;case "mongodb":return 27017;case "redis":return 6379;default:return 3306}}};async function
|
|
348
|
+
}`;default:return ""}}static getDefaultPort(t){switch(t){case "mysql":return 3306;case "postgres":return 5432;case "mariadb":return 3306;case "cockroachdb":return 26257;case "mssql":return 1433;case "mongodb":return 27017;case "redis":return 6379;default:return 3306}}};async function In(i,t,e){let r=t.getDbType();g.info(`Running sql for ${r}`);let n=await t.rawQuery(i);if(g.info("Sql ran successfully"),e){let o=ft.dirname(e);ae.existsSync(o)||ae.mkdirSync(o,{recursive:true}),ae.writeFileSync(e,JSON.stringify(n,null,2)),g.info(`Query result saved to ${e}`);return}g.info(JSON.stringify(n,null,2)),await t.disconnect();}var vn=class{static seederTemplate(){return `import { BaseSeeder } from "hysteria-orm";
|
|
349
349
|
|
|
350
350
|
export default class extends BaseSeeder {
|
|
351
351
|
/**
|
|
@@ -355,12 +355,12 @@ export default class extends BaseSeeder {
|
|
|
355
355
|
console.log('Seeder completed');
|
|
356
356
|
}
|
|
357
357
|
}
|
|
358
|
-
`}};var
|
|
359
|
-
`)}function
|
|
360
|
-
`)}var
|
|
361
|
-
Summary:`),g.info(` Tables processed: ${l.length}`),n?g.info(" Mode: Dry run (no files written)"):(g.info(` Output directory: ${e}`),g.info(` Files generated: ${u.length+1}`));}var
|
|
358
|
+
`}};var Ag=(i,t,e)=>{let r=e||"database/seeders",n=t?".js":".ts",s=`${Date.now()}_${i}${n}`;ae.existsSync(r)||(ae.mkdirSync(r,{recursive:true}),g.info(`Created seeders directory: ${r}`));let a=ft.join(r,s),l=vn.seederTemplate();ae.writeFileSync(a,l),g.info(`Seeder created successfully: ${a}`);},hy=Ag;var $g=async(i,t,e)=>{let r=[];for(let n of t){let o=ft.resolve(process.cwd(),n);ae.existsSync(o)||(g.error(`Path not found: ${o}`),process.exit(1));let s=ae.statSync(o);if(s.isDirectory()){let a=ae.readdirSync(o).filter(l=>l.endsWith(".ts")||l.endsWith(".js")).sort();for(let l of a)r.push({file:l,folder:o});}else if(s.isFile()){let a=ft.basename(o),l=ft.dirname(o);a.endsWith(".ts")||a.endsWith(".js")?r.push({file:a,folder:l}):(g.error(`File must be a .ts or .js file: ${a}`),process.exit(1));}}if(!r.length){g.info("No seeders found");return}g.info(`Found ${r.length} seeder(s) to run`),i.isConnected||await i.connect();for(let{file:n,folder:o}of r)try{g.info(`Running seeder: ${n}`);let s=ft.resolve(o,n),a=await pt(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");},gy=$g;function K(i){return {_phantom:void 0,_apply:i}}function by(i){return K((t,e)=>{_.date(i??{},false)(t,e);})}by.string=function(t){return K((e,r)=>{_.date(t??{},true)(e,r);})};function Ty(i){return K((t,e)=>{_.datetime(i??{},false)(t,e);})}Ty.string=function(t){return K((e,r)=>{_.datetime(t??{},true)(e,r);})};function wy(i){return K((t,e)=>{_.timestamp(i??{},false)(t,e);})}wy.string=function(t){return K((e,r)=>{_.timestamp(t??{},true)(e,r);})};function Sy(i){return K((t,e)=>{_.time(i??{},false)(t,e);})}Sy.string=function(t){return K((e,r)=>{_.time(t??{},true)(e,r);})};le();var Ny=Symbol("mongoProperties");function lu(){return (i,t)=>{let e=z.getMetadata(Ny,i)||[];e.push(t),z.defineMetadata(Ny,e,i);}}var sr=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}};yu([lu()],sr.prototype,"id");le();Ot();le();function vg(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 Pg=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 Cy(i,t){let e=vg(i);switch(t){case "pascal":return eo(e);case "camel":return Tr(e);case "snake":return br(e);default:return e}}function Ry(i){return Pg.has(i)?{name:`${i}_`,wasSanitized:true}:{name:i,wasSanitized:false}}function _y(i,t){switch(t){case "snake":return `${br(i)}.ts`;case "camel":return `${i}.ts`;default:return `${i}.ts`}}function My(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 c=e.toLowerCase();c.includes("timestamp")&&l&&(d.withTimezone=true);let m="string";return c.includes("varchar")||c.includes("char")?m="string":c.includes("text")?m="text":c==="integer"||c==="int"||c==="int4"?m="integer":c==="bigint"||c==="int8"?m="bigInteger":c==="smallint"||c==="int2"?m="smallint":c==="boolean"||c==="bool"?m="boolean":c.includes("timestamp")?m="timestamp":c==="date"?m="date":c==="time"?m="time":c==="uuid"?m="uuid":c==="json"?m="json":c==="jsonb"?m="jsonb":c==="decimal"||c==="numeric"?m="decimal":c==="float"||c==="real"||c==="double"||c==="double precision"?m="float":c==="binary"||c==="bytea"?m="binary":c==="enum"&&(m="enum",t.enumValues&&(d.enumValues=t.enumValues)),i==="mysql"&&c.includes("tinyint")&&o===1&&(m="boolean"),{method:m,options:d}}function Ge(i){return JSON.stringify(i)}function xy(i){return i==null?"null":typeof i=="string"?Ge(i):typeof i=="boolean"?i?"true":"false":typeof i=="number"?String(i):Array.isArray(i)?`[${i.map(xy).join(", ")}]`:String(i)}function Oy(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 c=u.columns[d],m=u.referencedColumns[d];s.has(c)||s.set(c,{referencedTable:u.referencedTable,referencedColumns:[m],onDelete:u.onDelete,onUpdate:u.onUpdate});}n.push('import { col, defineModel } from "hysteria-orm";'),n.push(""),n.push(`export const ${i} = defineModel(${Ge(i)}, {`),n.push(" columns: {");for(let u of t.columns){let c=Ry(u.name).name,m=o.has(u.name),{method:p,options:h}=My(e,u),f=[];for(let[M,R]of Object.entries(h))R!=null&&f.push(`${M}: ${xy(R)}`);let w=f.length>0?`{ ${f.join(", ")} }`:"",S=w?`col.${p}(${w})`:`col.${p}()`,q=s.get(u.name);if(q){let M=q.referencedColumns.join(", "),R=`/** @fk references ${q.referencedTable}(${M})`;q.onDelete&&(R+=` \u2014 onDelete: ${q.onDelete}`),q.onUpdate&&(R+=` \u2014 onUpdate: ${q.onUpdate}`),R+=" */",n.push(` ${R}`);}m&&(n.push(" // Primary key column"),(p==="integer"||p==="bigInteger")&&n.push(" // TODO: may be auto-increment, verify manually")),n.push(` ${c}: ${S},`);}n.push(" },");let a=t.indexes.filter(u=>!u.isUnique);if(a.length>0){n.push(" indexes: [");for(let u of a)u.name?n.push(` { columns: [${u.columns.map(Ge).join(", ")}], name: ${Ge(u.name)} },`):n.push(` [${u.columns.map(Ge).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(Ge).join(", ")}], name: ${Ge(u.name)} },`):n.push(` [${u.columns.map(Ge).join(", ")}],`);n.push(" ],");}return n.push("});"),n.push(""),n.push(`export type ${i}Type = InstanceType<typeof ${i}>;`),n.push(""),n.join(`
|
|
359
|
+
`)}function Dy(i){let t=[];for(let e of i)t.push(`export * from "./${e}";`);return t.push(""),t.join(`
|
|
360
|
+
`)}var Eg=["pg_","information_schema","mysql","sys","performance_schema","sqlite_"];function Bg(i){let t=i.toLowerCase();return Eg.some(e=>t.startsWith(e))}async function uu(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 c of d.tables)Bg(c.name)||a.push(c.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 c=await i.getTableSchema(d);if(c.columns.length===0){g.warn(`Table ${d} has no columns, skipping`);continue}let m=Cy(d,r),p=_y(m,r),h=Oy(d,c,o,{naming:r});l.push(m),n?(g.info(`[DRY RUN] Would generate: ${p}`),g.info("---"),g.info(h),g.info("---")):u.push({fileName:p,content:h});}catch(c){g.error(`Failed to process table ${d}: ${c}`);}}if(!n){ae.existsSync(e)||(ae.mkdirSync(e,{recursive:true}),g.info(`Created output directory: ${e}`));for(let{fileName:d,content:c}of u){let m=ft.join(e,d);ae.writeFileSync(m,c,"utf-8"),g.info(`Generated: ${m}`);}if(l.length>0){let d=Dy(l),c=ft.join(e,"index.ts");ae.writeFileSync(c,d,"utf-8"),g.info(`Generated: ${c}`);}}g.info(`
|
|
361
|
+
Summary:`),g.info(` Tables processed: ${l.length}`),n?g.info(" Mode: Dry run (no files written)"):(g.info(` Output directory: ${e}`),g.info(` Files generated: ${u.length+1}`));}var $y={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 vy=()=>ae.existsSync(ft.join(process.cwd(),"yarn.lock"))?["yarn","add"]:ae.existsSync(ft.join(process.cwd(),"pnpm-lock.yaml"))?["pnpm","add"]:ae.existsSync(ft.join(process.cwd(),"package-lock.json"))?["npm","install"]:ae.existsSync(ft.join(process.cwd(),"bun.lockb"))?["bun","add"]:ae.existsSync(ft.join(process.cwd(),"deno.lock"))?["deno","add"]:["npm","install"],Iy=async(i,t,e,r)=>{let n=Kg.createInterface({input:process.stdin,output:process.stdout}),o=e.join(", "),s=`Do you want to install the following dependencies using ${t}?
|
|
362
362
|
${o}
|
|
363
|
-
(y/n): `;return new Promise(a=>{n.question(s,l=>{if(n.close(),l.toLowerCase()==="y"||l.toLowerCase()==="yes"){execSync(i,r),a(true);return}a(false);});})},pe=Dy.devDependencies,vy=async(i,t,e)=>{let r=En.includes(e)?[`typescript@${pe.typescript}`,`esbuild@${pe.esbuild}`]:[],n="";switch(e){case "mariadb":case "mysql":n=`mysql2@${pe.mysql2}`;break;case "cockroachdb":case "postgres":n=`pg@${pe.pg}`,r.push(`@types/pg@${pe["@types/pg"]}`);break;case "sqlite":n=`sqlite3@${pe.sqlite3}`,r.push(`@types/sqlite3@${pe["@types/sqlite3"]}`);break;case "mongo":n=`mongodb@${pe.mongodb}`,r.push(`@types/mongodb@${pe["@types/mongodb"]}`);break;case "redis":n=`ioredis@${pe.ioredis}`,r.push(`@types/ioredis@${pe["@types/ioredis"]}`);break;case "mssql":n=`mssql@${pe.mssql}`,r.push(`@types/mssql@${pe["@types/mssql"]}`);break;default:throw new Error(`Invalid database type: ${e}`)}if(n){let s=await Ay(`${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 Ay(`${i} ${t} ${r.join(" ")} ${o}`,i,r,{stdio:"inherit"});s&&g.info("Dev dependencies installed successfully"),s||g.info("Dev dependencies installation skipped");}};var En=["sqlite","mysql","postgres","mariadb","cockroachdb","mssql"],Bn=En.concat("mongodb","redis");async function Ge(i,t){let{default:e}=await ft(yt.resolve(process.cwd(),i));return e||(g.error(`The provided datasource file does not export a default export: ${i}`),process.exit(1)),Be.isSqlDataSource(e)||(g.error(`The provided datasource file does not export a valid SqlDataSource instance: ${i}`),process.exit(1)),e.isConnected||await e.connect(),e}function lu(i,t,e,r){let n=typeof e=="boolean"?i??e:i??e?.enabled??true,o=typeof e=="object"?e?.timeout:r,s=t?parseInt(t,10):o??3e4,a=typeof e=="object"&&e.customValue!==void 0?typeof e.customValue=="function"?e.customValue():e.customValue:"hysteria_migration_lock";return {enabled:n,timeout:s,key:a}}var Te=new Command;Te.command("init",{isDefault:false}).option("-t, --type [type]",`Type of the database to connect to, available types: ${Bn.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=Bn.join(", ");i.type||(g.error(`Database type is required (-t|--type), available types: ${t}`),process.exit(1)),Bn.includes(i.type)||(g.error(`Invalid database type: ${i.type}, available types: ${Bn.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]=$y();g.info(`Package manager: ${e}`),g.info("Installing base dependencies"),await vy(e,r,i.type);let n=An.initTemplate(i.type);ae.existsSync("database")?g.info("database folder already exists, skipping"):ae.mkdirSync("database",{recursive:true}),ae.existsSync("database/index.ts")?g.info("database/index.ts file already exists, skipping"):ae.writeFileSync("database/index.ts",n),En.includes(i.type)&&!ae.existsSync("database/migrations")?ae.mkdirSync("database/migrations",{recursive:true}):g.info("database/migrations folder already exists or is not a sql database, skipping"),g.info("Initialization completed successfully");});Te.command("sql [sql]").alias("run:sql").option("-f, --file [path]","Path to the sql file",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-o, --out [query]","File path to save the query result",void 0).option("-t, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).description("Run a sql file or a sql query directly from the command line for the given connection defined in the env file").action(async(i,t)=>{g.info("Starting SQL execution"),t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=t?.file;!i&&!e&&(g.error("SQL query or file path is required"),process.exit(1)),i&&e&&(g.error("Cannot provide both sql query and file path"),process.exit(1));let r=await Ge(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=yt.resolve(process.cwd(),e),ae.existsSync(e)||(g.error(`File not found: ${e}`),process.exit(1));let n=ae.readFileSync(e,"utf-8");g.info(`SQL file loaded successfully (${n.length} characters)`);try{await $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);}});Te.command("create:migration <name>").description("Create a new migration file, standard folder is migrations from the current directory you are now, you can change it in the env MIGRATION_PATH").option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-a, --alter","Generate a template for an alter table migration",false).option("-c, --create","Generate a template for a create table migration",false).option("-t, --table <table>","Specifies the target table name for the migration",false).action((i,t)=>{g.info(`Creating migration: ${i}`),g.info(`Migration options: javascript=${t.javascript}, alter=${t.alter}, create=${t.create}, table=${t.table||"not specified"}`),i||(g.error("Migration name is required"),process.exit(1)),t.alter&&t.create&&(g.error("Cannot use --alter and --create at the same time"),process.exit(1)),t.table&&!(t.create||t.alter)&&(g.error("Cannot use --table without --create or --alter"),process.exit(1));let e=t.alter?"alter":t.create?"create":"basic";g.info(`Migration mode: ${e}`),Mu(i,t.javascript,e,t.table||i);});Te.command("migrate [runUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, only applies to postgres",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Run pending migrations, if runUntil is provided, it will run all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ge(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,n=t?.tsconfigPath||e.migrationConfig.tsconfig,o=t?.transactional??e.migrationConfig.transactional,s=lu(t?.lock,t?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(s.enabled){if(g.info("Acquiring migration lock"),a=await e.acquireLock(typeof s.key=="string"?s.key:String(s.key),s.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await Et(e,i,r,n,o);}catch(l){throw console.error(l),l}finally{s.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof s.key=="string"?s.key:String(s.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});Te.command("rollback [rollbackUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Rollbacks every migration that has been run, if rollbackUntil is provided, it will rollback all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ge(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,n=t?.tsconfigPath||e.migrationConfig.tsconfig,o=t?.transactional??e.migrationConfig.transactional,s=lu(t?.lock,t?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(s.enabled){if(g.info("Acquiring migration lock"),a=await e.acquireLock(typeof s.key=="string"?s.key:String(s.key),s.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await rr(e,i,r,n,o);}catch(l){throw console.error(l),l}finally{s.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof s.key=="string"?s.key:String(s.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});Te.command("refresh").option("-f, --force","Drop all tables in the database before running the migrations instead of running the down migrations",false).option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).option("-m, --migration-path [path]","Path to the migrations",void 0).description("Rollbacks every migration that has been run and then run the migrations").action(async i=>{let t=i?.force||false;i?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ge(i.datasource,i?.tsconfigPath),r=i?.migrationPath||e.migrationConfig.path,n=i?.tsconfigPath||e.migrationConfig.tsconfig,o=i?.transactional??e.migrationConfig.transactional,s=lu(i?.lock,i?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(s.enabled){if(g.info("Acquiring migration lock for refresh operation"),a=await e.acquireLock(typeof s.key=="string"?s.key:String(s.key),s.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}t?await Ln(e,!1,o):await rr(e,void 0,r,n,o),await Et(e,void 0,r,n,o);}catch(l){console.error(l);}finally{s.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof s.key=="string"?s.key:String(s.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});Te.command("generate:migrations").description("Generate a migration file based on the database schema and the models metadata, supported only for postgres, mysql, mariadb and cockroachdb").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-f, --dry","Does not create a migration file but only outputs sql statements",false).option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-m, --migration-path [path]","Path to the migrations",void 0).option("-n, --name [name]","Name of the migration",void 0).option("-o, --output [mode]","Output mode: 'code' generates schema builder calls, 'raw' generates raw SQL (default: code)","code").action(async i=>{i?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1)),i?.name||(i.name="auto_generated_migration"),i.name=`${Date.now()}_${i.name}`;let t=await Ge(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 rt.makeDiff(t);if((i.output==="raw"?"raw":"code")==="code"){let s=n.getCodeStatements();if(s.up.length||(g.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){console.log("// up()");for(let u of s.up)console.log(u);console.log(`
|
|
364
|
-
// down()`);for(let u of s.down)console.log(u);process.exit(0);}ae.existsSync(e)||ae.mkdirSync(e,{recursive:!0});let a=await
|
|
365
|
-
export{
|
|
363
|
+
(y/n): `;return new Promise(a=>{n.question(s,l=>{if(n.close(),l.toLowerCase()==="y"||l.toLowerCase()==="yes"){execSync(i,r),a(true);return}a(false);});})},me=$y.devDependencies,Py=async(i,t,e)=>{let r=Bn.includes(e)?[`typescript@${me.typescript}`,`esbuild@${me.esbuild}`]:[],n="";switch(e){case "mariadb":case "mysql":n=`mysql2@${me.mysql2}`;break;case "cockroachdb":case "postgres":n=`pg@${me.pg}`,r.push(`@types/pg@${me["@types/pg"]}`);break;case "sqlite":n=`sqlite3@${me.sqlite3}`,r.push(`@types/sqlite3@${me["@types/sqlite3"]}`);break;case "mongo":n=`mongodb@${me.mongodb}`,r.push(`@types/mongodb@${me["@types/mongodb"]}`);break;case "redis":n=`ioredis@${me.ioredis}`,r.push(`@types/ioredis@${me["@types/ioredis"]}`);break;case "mssql":n=`mssql@${me.mssql}`,r.push(`@types/mssql@${me["@types/mssql"]}`);break;default:throw new Error(`Invalid database type: ${e}`)}if(n){let s=await Iy(`${i} ${t} ${n}`,i,[n],{stdio:"inherit"});s&&g.info("Driver dependency installed successfully"),s||g.info("Driver dependency installation skipped");}let o=i==="deno"?"--dev":"-D";if(r.length){let s=await Iy(`${i} ${t} ${r.join(" ")} ${o}`,i,r,{stdio:"inherit"});s&&g.info("Dev dependencies installed successfully"),s||g.info("Dev dependencies installation skipped");}};var Bn=["sqlite","mysql","postgres","mariadb","cockroachdb","mssql"],kn=Bn.concat("mongodb","redis");async function Ye(i,t){let{default:e}=await pt(ft.resolve(process.cwd(),i));return e||(g.error(`The provided datasource file does not export a default export: ${i}`),process.exit(1)),ke.isSqlDataSource(e)||(g.error(`The provided datasource file does not export a valid SqlDataSource instance: ${i}`),process.exit(1)),e.isConnected||await e.connect(),e}function du(i,t,e,r){let n=typeof e=="boolean"?i??e:i??e?.enabled??true,o=typeof e=="object"?e?.timeout:r,s=t?parseInt(t,10):o??3e4,a=typeof e=="object"&&e.customValue!==void 0?typeof e.customValue=="function"?e.customValue():e.customValue:"hysteria_migration_lock";return {enabled:n,timeout:s,key:a}}var Te=new Command;Te.command("init",{isDefault:false}).option("-t, --type [type]",`Type of the database to connect to, available types: ${kn.join(", ")}`,void 0).description("Initialize the hysteria-orm with standard configuration, it will create a database if not exists and a migrations folder inside it if not exists, it will also create a index.ts file in the database folder").action(async i=>{let t=kn.join(", ");i.type||(g.error(`Database type is required (-t|--type), available types: ${t}`),process.exit(1)),kn.includes(i.type)||(g.error(`Invalid database type: ${i.type}, available types: ${kn.join(", ")}`),process.exit(1)),g.info("Initializing hysteria-orm with standard configuration"),g.info(`Database type: ${i.type||"not specified (will use env DB_TYPE)"}`);let[e,r]=vy();g.info(`Package manager: ${e}`),g.info("Installing base dependencies"),await Py(e,r,i.type);let n=$n.initTemplate(i.type);ae.existsSync("database")?g.info("database folder already exists, skipping"):ae.mkdirSync("database",{recursive:true}),ae.existsSync("database/index.ts")?g.info("database/index.ts file already exists, skipping"):ae.writeFileSync("database/index.ts",n),Bn.includes(i.type)&&!ae.existsSync("database/migrations")?ae.mkdirSync("database/migrations",{recursive:true}):g.info("database/migrations folder already exists or is not a sql database, skipping"),g.info("Initialization completed successfully");});Te.command("sql [sql]").alias("run:sql").option("-f, --file [path]","Path to the sql file",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-o, --out [query]","File path to save the query result",void 0).option("-t, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).description("Run a sql file or a sql query directly from the command line for the given connection defined in the env file").action(async(i,t)=>{g.info("Starting SQL execution"),t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=t?.file;!i&&!e&&(g.error("SQL query or file path is required"),process.exit(1)),i&&e&&(g.error("Cannot provide both sql query and file path"),process.exit(1));let r=await Ye(t.datasource,t?.tsconfigPath);if(i){g.info("Executing SQL query directly from command line");try{await In(i,r,t?.out),g.info("SQL execution completed successfully"),process.exit(0);}catch(o){g.error(`SQL execution failed: ${o}`),process.exit(1);}}e||(g.error("No SQL statement or file provided"),process.exit(1)),g.info(`Reading SQL from file: ${e}`),e=ft.resolve(process.cwd(),e),ae.existsSync(e)||(g.error(`File not found: ${e}`),process.exit(1));let n=ae.readFileSync(e,"utf-8");g.info(`SQL file loaded successfully (${n.length} characters)`);try{await In(n,r,t?.out),g.info("SQL file execution completed successfully"),process.exit(0);}catch(o){g.error(`SQL file execution failed: ${o}`),process.exit(1);}});Te.command("create:migration <name>").description("Create a new migration file, standard folder is migrations from the current directory you are now, you can change it in the env MIGRATION_PATH").option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-a, --alter","Generate a template for an alter table migration",false).option("-c, --create","Generate a template for a create table migration",false).option("-t, --table <table>","Specifies the target table name for the migration",false).action((i,t)=>{g.info(`Creating migration: ${i}`),g.info(`Migration options: javascript=${t.javascript}, alter=${t.alter}, create=${t.create}, table=${t.table||"not specified"}`),i||(g.error("Migration name is required"),process.exit(1)),t.alter&&t.create&&(g.error("Cannot use --alter and --create at the same time"),process.exit(1)),t.table&&!(t.create||t.alter)&&(g.error("Cannot use --table without --create or --alter"),process.exit(1));let e=t.alter?"alter":t.create?"create":"basic";g.info(`Migration mode: ${e}`),Ou(i,t.javascript,e,t.table||i);});Te.command("migrate [runUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, only applies to postgres",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Run pending migrations, if runUntil is provided, it will run all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ye(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,n=t?.tsconfigPath||e.migrationConfig.tsconfig,o=t?.transactional??e.migrationConfig.transactional,s=du(t?.lock,t?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(s.enabled){if(g.info("Acquiring migration lock"),a=await e.acquireLock(typeof s.key=="string"?s.key:String(s.key),s.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await Bt(e,i,r,n,o);}catch(l){throw console.error(l),l}finally{s.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof s.key=="string"?s.key:String(s.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});Te.command("rollback [rollbackUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Rollbacks every migration that has been run, if rollbackUntil is provided, it will rollback all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ye(t.datasource,t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,n=t?.tsconfigPath||e.migrationConfig.tsconfig,o=t?.transactional??e.migrationConfig.transactional,s=du(t?.lock,t?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(s.enabled){if(g.info("Acquiring migration lock"),a=await e.acquireLock(typeof s.key=="string"?s.key:String(s.key),s.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await nr(e,i,r,n,o);}catch(l){throw console.error(l),l}finally{s.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof s.key=="string"?s.key:String(s.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});Te.command("refresh").option("-f, --force","Drop all tables in the database before running the migrations instead of running the down migrations",false).option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).option("-m, --migration-path [path]","Path to the migrations",void 0).description("Rollbacks every migration that has been run and then run the migrations").action(async i=>{let t=i?.force||false;i?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=await Ye(i.datasource,i?.tsconfigPath),r=i?.migrationPath||e.migrationConfig.path,n=i?.tsconfigPath||e.migrationConfig.tsconfig,o=i?.transactional??e.migrationConfig.transactional,s=du(i?.lock,i?.lockTimeout,e.migrationConfig.lock,e.migrationConfig.lockTimeout),a=false;try{if(s.enabled){if(g.info("Acquiring migration lock for refresh operation"),a=await e.acquireLock(typeof s.key=="string"?s.key:String(s.key),s.timeout),!a)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}t?await Wn(e,!1,o):await nr(e,void 0,r,n,o),await Bt(e,void 0,r,n,o);}catch(l){console.error(l);}finally{s.enabled&&a&&(g.info("Releasing migration lock"),await e.releaseLock(typeof s.key=="string"?s.key:String(s.key))||g.warn("Failed to release migration lock")),await e.disconnect();}});Te.command("generate:migrations").description("Generate a migration file based on the database schema and the models metadata, supported only for postgres, mysql, mariadb and cockroachdb").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-f, --dry","Does not create a migration file but only outputs sql statements",false).option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-m, --migration-path [path]","Path to the migrations",void 0).option("-n, --name [name]","Name of the migration",void 0).option("-o, --output [mode]","Output mode: 'code' generates schema builder calls, 'raw' generates raw SQL (default: code)","code").action(async i=>{i?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1)),i?.name||(i.name="auto_generated_migration"),i.name=`${Date.now()}_${i.name}`;let t=await Ye(i.datasource,i?.tsconfigPath),e=i?.migrationPath||t.migrationConfig.path;["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(g.error(`generate:migrations is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),process.exit(1));try{let n=await nt.makeDiff(t);if((i.output==="raw"?"raw":"code")==="code"){let s=n.getCodeStatements();if(s.up.length||(g.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){console.log("// up()");for(let u of s.up)console.log(u);console.log(`
|
|
364
|
+
// down()`);for(let u of s.down)console.log(u);process.exit(0);}ae.existsSync(e)||ae.mkdirSync(e,{recursive:!0});let a=await or.generate(s,"code"),l=i?.javascript?".js":".ts";ae.writeFileSync(`${e}/${i?.name}${l}`,a),g.info(`Migration file created successfully: ${i?.name}${l}`);}else {let s=n.getSqlStatements();if(s.length||(g.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){for(let u of s)console.log(u);process.exit(0);}ae.existsSync(e)||ae.mkdirSync(e,{recursive:!0});let a=await or.generate(s,"raw"),l=i?.javascript?".js":".ts";ae.writeFileSync(`${e}/${i?.name}${l}`,a),g.info(`Migration file created successfully: ${i?.name}${l}`);}await t.disconnect(),process.exit(0);}catch(n){console.error(n),await t.disconnect(),process.exit(1);}});Te.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 Ye(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 nt.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);}});Te.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)),hy(i,t.javascript,t.seederPath);});Te.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 Ye(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 gy(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);}});Te.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 Ye(i.datasource,i?.tsconfig);try{await uu(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);}});Te.parse(process.argv);
|
|
365
|
+
export{Bn as sqlDatabaseTypes};//# sourceMappingURL=cli.js.map
|
|
366
366
|
//# sourceMappingURL=cli.js.map
|