hysteria-orm 12.3.0 → 12.4.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 +565 -104
- package/lib/index.d.ts +565 -104
- package/lib/index.js +26 -26
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {PassThrough,Readable}from'stream';import xn,{promises}from'fs';import It from'path';import $e,{privateDecrypt,publicEncrypt}from'crypto';import {format}from'sql-formatter';import {highlight}from'sql-highlight';import {AsyncLocalStorage}from'async_hooks';import {fileURLToPath,pathToFileURL}from'url';import {createRequire}from'module';var lu=Object.defineProperty;var uu=i=>{throw TypeError(i)};var se=(i=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(i,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):i)(function(i){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+i+'" is not supported')});var Ie=(i,t)=>()=>(i&&(t=i(i=0)),t);var du=(i,t)=>{for(var e in t)lu(i,e,{get:t[e],enumerable:true});};var mu=(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&&lu(t,e,n),n};var Of=(i,t,e)=>t.has(i)||uu("Cannot "+e);var cu=(i,t,e)=>t.has(i)?uu("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);var pu=(i,t,e)=>(Of(i,t,"access private method"),e);var k,me=Ie(()=>{k=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};});var nf,be,dg,of,At=Ie(()=>{me();nf=[],be=i=>{nf.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})},of=async(i,t,e,r)=>{if(e&&typeof e!="string")return dg(i,e,t,r);let n=nf.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 k(e??i)};});var xt,hg,af,Xt=Ie(()=>{xt=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()))},af=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 lf,Rn,uf=Ie(()=>{Xt();lf=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},Rn=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 lf(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 lf(l)}let a=Array.isArray(s)?s:[];return xt(a,r,n)}};});var _n,df=Ie(()=>{Xt();_n=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="bun";this.db=new r(String(e.database??":memory:"),e.driverOptions),this.pool=this.db;}createPool(){}async closePool(){this.db.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.db,o=r.sqlLiteOptions??{},s=o.mode||"fetch";return ["begin","begin transaction","commit","rollback"].includes(t.trim().toLowerCase())?n.query(t).run(...e).changes:s==="fetch"?n.query(t).all(...e):o?.typeofModel?s==="insertOne"||s==="insertMany"?n.query(`${t} returning *`).all(...e):n.query(t).run(...e).changes:n.query(t).run(...e).changes}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.db;return af(o.query(t).iterate(...e),r,n)}};});var mf={};du(mf,{registerBunDrivers:()=>gg});var gg,cf=Ie(()=>{At();uf();df();gg=async()=>{let{SQL:i}=await import('bun'),{Database:t}=await import('bun:sqlite');be({name:"bun-sql",dialects:["postgres","cockroachdb","mysql","mariadb"],environments:["bun"],create:async({dialect:e,input:r})=>new Rn(e,r,i)}),be({name:"bun-sqlite",dialects:["sqlite"],environments:["bun"],create:async({dialect:e,input:r})=>new _n(e,r,t)});};});var bg,Mn,zl,Gl=Ie(()=>{Xt();bg=async i=>(await(await import('@sqlite.org/sqlite-wasm')).default(i)).oo1,Mn=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 zl(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 xt(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}},zl=i=>["begin","begin transaction","commit","rollback"].includes(i.trim().toLowerCase());});var Yl,On,pf=Ie(()=>{Xt();Gl();Yl=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(zl(t))return a(t);if(s==="fetch"){let u=await n.execute(t,e);return Yl(u.rows)}if(!o?.typeofModel)return a(t);if(s==="insertOne"||s==="insertMany"){let u=await n.execute(`${t} returning *`,e);return Yl(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 xt(Yl(s.rows),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-rn: pool not created, await createPool() before querying");return this.db}};});var Zl={};du(Zl,{registerReactNativeDrivers:()=>wg,registerWebDrivers:()=>Tg});var yf,ff,Tg,hf,wg,Xl=Ie(()=>{At();pf();Gl();yf=false,Tg=i=>{yf||(yf=true,ff=i,be({name:"sqlite-wasm",dialects:["sqlite"],environments:["web"],create:({dialect:t,input:e})=>new Mn(t,e,void 0,ff)}));},hf=false,wg=async()=>{if(hf)return;hf=true;let i=await import('@op-engineering/op-sqlite');be({name:"sqlite-rn",dialects:["sqlite"],environments:["react-native"],create:({dialect:t,input:e})=>new On(t,e,i)});};});var h=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}},vt=class extends h{constructor(t){super("ValidationError","VALIDATION_ERROR"),this.errors=t;}};function rr(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 Af=i=>{i[6]=i[6]&15|64,i[8]=i[8]&63|128;let t=ke(i);return [t.slice(0,8),t.slice(8,12),t.slice(12,16),t.slice(16,20),t.slice(20)].join("-")},yu=i=>{let t=globalThis.crypto;if(!t||typeof t.getRandomValues!="function")throw new it("crypto.getRandomValues \u2014 browsers require a secure context (HTTPS); React Native requires react-native-get-random-values or expo-crypto");return t.getRandomValues(i)},$n=class{unsupported(t){throw new it(`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")}},vn=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():Af(yu(new Uint8Array(16)))},randomBytes:t=>yu(new Uint8Array(t))};this.timing={now:()=>globalThis.performance.now()};this.fs=new $n;this.path=new vn;}readEnv(t){}};var at=class extends Ke{constructor(){super(...arguments);this.name="node";this.fs={exists:e=>xn.existsSync(e),readFileSync:e=>xn.existsSync(e)?new Uint8Array(xn.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=It;}readEnv(e){return typeof process>"u"?void 0:process.env[e]}};var Pn=()=>import('bun'),nr=class extends at{constructor(){super();this.name="bun";let e=this.fs;this.fs={...e,readFile:async r=>(await Pn()).file(r).text(),readdir:async r=>{let n=await Pn(),o=[];for await(let s of new n.Glob("*").scan({cwd:r}))o.push(s);return o},writeFile:async(r,n)=>{await(await Pn()).write(r,n);}};}};var or=class extends Ke{constructor(){super(...arguments);this.name="react-native";}};var it=class extends Error{constructor(t){super(`Platform does not support: ${t}`),this.name="PlatformUnsupportedError";}},ke=i=>{let t="";for(let e of i)t+=e.toString(16).padStart(2,"0");return t},fu=new Map,Df=i=>{switch(i){case "bun":return new nr;case "node":return new at;case "react-native":return new or;default:return new Ke}};function ne(i){let t=rr(i),e=fu.get(t);return e||(e=Df(t),fu.set(t,e)),e}function If(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 hu(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function $f(i){if(typeof i!="string"||!i)return i;let t=hu(i);return t.charAt(0).toUpperCase()+t.slice(1)}function V(i,t){return t==="preserve"?i:t==="snake"?If(i):t==="camel"?hu(i):t==="pascal"?$f(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}function Me(i){return String(i).padStart(2,"0")}function vf(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 gu(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"?vf(i,t):gu(i,t)};var lt=(i=new Date)=>gu(i,"ISO");var bu=(i,t)=>{try{let e=$e.createHash("sha256").update(i).digest(),r=$e.randomBytes(16),n=$e.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 h("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Tu=(i,t)=>{try{let e=$e.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=$e.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 h("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},wu=(i,t)=>{try{let e=$e.randomBytes(32),r=$e.randomBytes(16),n=$e.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 h("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},Nu=(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=$e.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 h("Encryption::decryptAsymmetric","FAILED_TO_DECRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}};var K=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);}}};K.store=new WeakMap;var Qn="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Bn=Qn.length,Bf=10,Qf=16,Kf=(i,t)=>{let e="";for(let r=0;r<t;r++){let n=i%Bn;e=Qn.charAt(n)+e,i=(i-n)/Bn;}return e},kf=i=>{let t=ne().crypto.randomBytes(i),e="";for(let r=0;r<i;r++){let n=t[r];e+=Qn.charAt(n%Bn);}return e},Su=()=>{let i=Math.floor(Date.now()/1e3),t=Kf(i,Bf),e=kf(Qf);return t+e};function Kn(i){return i.replace(/^[`"]|[`"]$/g,"")}function kn(i,t,e){if(!i.includes(".")){let o=Kn(i);return `${t}.${o}`}let[r,n]=i.split(".");return r=Kn(r),n=Kn(n),r!==e?i:n==="*"?`${t}.*`:`${t}.${n}`}function q(i){return typeof i=="function"?i():i}var F=(i,t=new WeakMap)=>{if(i===null||typeof i!="object")return i;if(t.has(i))return t.get(i);if(Array.isArray(i)){let r=[];t.set(i,r);for(let n=0;n<i.length;n++)r[n]=F(i[n],t);return r}let e=Object.create(Object.getPrototypeOf(i)||{});t.set(i,e);for(let r of Object.getOwnPropertyNames(i)){let n=i[r];if(typeof n=="function"){e[r]=n;continue}e[r]=F(n,t);}return e};var Oe=class{constructor(t,e){this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var sr=class extends Oe{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var ir=class extends Oe{constructor(e,r,n){super(e,r);this.type="hasMany";this.foreignKey=n,this.type="hasMany";}};var ar=class extends Oe{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var lr=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 Lf(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 ur=Symbol("columns"),ut=Symbol("primaryKey"),we=Symbol("relations"),dr=Symbol("indexes"),mr=Symbol("uniques"),cr=Symbol("checks"),Le=i=>`${Lf(i)}_id`,pr=(i,t)=>`idx_${i}_${t}`,pe=(i,t)=>`uq_${i}_${t}`,H=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,Ne=(i,t)=>`pk_${i}_${t}`,qu=(i,t)=>{let e=t.replace(/[^a-zA-Z0-9]+/g,"_").replace(/^_|_$/g,"").toLowerCase();return `chk_${i}_${e}`.substring(0,63)};function Ln(i,t){return e=>{let r=Array.isArray(i)?i:[i],n=K.getMetadata(dr,e.prototype)||[];n.push({columns:r,name:t??pr(e.table,r.join("_"))}),K.defineMetadata(dr,n,e.prototype);}}function Wn(i,t){return e=>{let r=Array.isArray(i)?i:[i],n=K.getMetadata(mr,e.prototype)||[];n.push({columns:r,name:t??pe(e.table,r.join("_"))}),K.defineMetadata(mr,n,e.prototype);}}function Fn(i,t){return e=>{let r=K.getMetadata(cr,e.prototype)||[];r.push({expression:i,name:t??qu(e.table,i)}),K.defineMetadata(cr,r,e.prototype);}}var Cu=Symbol("viewStatement");function R(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let n=e.constructor;if(t){if(K.getMetadata(ut,e))throw new h("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");K.defineMetadata(ut,r,e),K.defineMetadata(ut,r,e.constructor);}let o=i.databaseName??V(r,n.databaseCaseConvention),s={columnName:r,serialize:i.serialize,prepare:i.prepare,isPrimary:t,primaryKeyConstraintName:i.primaryKeyConstraintName??Ne(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=K.getMetadata(ur,e)||[];a.push(s),K.defineMetadata(ur,a,e);}}R.primary=Wf;R.date=oh;R.datetime=sh;R.timestamp=ih;R.time=ah;R.boolean=nh;R.json=lh;R.uuid=Jf;R.ulid=Hf;R.integer=jf;R.bigInteger=Yf;R.float=Ff;R.decimal=Zf;R.increment=Uf;R.bigIncrement=Vf;R.string=zf;R.text=Gf;R.binary=Xf;R.enum=eh;R.encryption={symmetric:th,asymmetric:rh};R.computed=uh;function Wf(i={}){return R({...i,primaryKey:true})}function Ff(i={}){return R({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 jf(i={}){return R({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 Uf(i={}){return R({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 Vf(i={}){return R({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 Jf(i={}){return R({type:"uuid",...i,prepare:t=>t||ne().crypto.randomUUID(),openApi:{type:"string",format:"uuid",description:"uuid (Universally Unique Identifier)",...i.openApi||{}}})}function Hf(i={}){return R({type:"ulid",...i,prepare:t=>t||Su(),openApi:{type:"string",format:"ulid",description:"ulid (Universally Unique Lexicographically Sortable Identifier)",...i.openApi||{}}})}function zf(i={}){return R({type:"string",...i,openApi:{type:"string",description:"A string value",...i.openApi||{}}})}function Gf(i={}){return R({type:"longtext",...i,openApi:{type:"string",description:"A text value",...i.openApi||{}}})}function Yf(i={}){return R({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 Zf(i={}){return R({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 Xf(i={}){return R({type:"binary",...i,openApi:{type:"string",format:"binary",description:"Binary data",...i.openApi||{}}})}function eh(i,t={}){return R({type:i,...t,openApi:{type:"string",enum:i,description:"An enum value",...t.openApi||{}}})}function th(i){return R({...i,prepare:t=>t&&bu(i.key,t),serialize:t=>t&&Tu(i.key,t)})}function rh(i){return R({...i,prepare:t=>t&&wu(i.publicKey,t),serialize:t=>t&&Nu(i.privateKey,t)})}function nh(i={}){return R({type:"boolean",...i,serialize:t=>!!t,prepare:t=>{if(t!=null)return !!t},openApi:{type:"boolean",description:"A boolean value",...i.openApi||{}}})}function oh(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 R({type:"date",...o,autoUpdate:a,autoCreate:l,prepare:t?y=>y?a?m():y:s?c():null:y=>y?a?m():y:s?c():null,serialize:t?y=>{if(y!==void 0)return y===null?null:y instanceof Date?ue(y,"DATE_ONLY",e):String(y)}:y=>{if(y!==void 0)return y===null?null:y instanceof Date?y:new Date(y)},openApi:{type:"string",format:"date",description:"YYYY-MM-DD",...o.openApi||{}}})}function sh(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),g=t?typeof o=="function"?o:p:typeof o=="function"?o:m,y=t?typeof n=="function"?n:p:typeof n=="function"?n:m;return R({type:"datetime",...s,withTimezone:l,autoUpdate:d,autoCreate:c,prepare:t?S=>S?d?y():S:u?g():null:S=>S?d?y():S:u?g():null,serialize:t?S=>{if(S!==void 0)return S===null?null:S instanceof Date?ue(S,"ISO",a):String(S)}:S=>{if(S!==void 0)return S===null?null:S instanceof Date?S:new Date(S)},stringMode:t,openApi:{type:"string",format:"date-time",description:"YYYY-MM-DD HH:mm:ss",...s.openApi||{}}})}function ih(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),g=t?typeof o=="function"?o:p:typeof o=="function"?o:m,y=t?typeof n=="function"?n:p:typeof n=="function"?n:m;return R({type:"timestamp",...s,withTimezone:l,autoUpdate:d,autoCreate:c,prepare:t?S=>S?d?y():S:u?g():null:S=>S?d?y():S:u?g():null,serialize:t?S=>{if(S!==void 0)return S===null?null:S instanceof Date?ue(S,"TIMESTAMP",a):String(S)}:S=>{if(S!==void 0)return S===null?null:S instanceof Date?S:new Date(S)},stringMode:t,openApi:{type:"string",format:"date-time",description:"Unix timestamp",...s.openApi||{}}})}function ah(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 R({type:"time",...o,autoUpdate:a,autoCreate:l,prepare:t?y=>y?a?m():y:s?c():null:y=>y?a?m():y:s?c():null,serialize:t?y=>{if(y!==void 0)return y===null?null:y instanceof Date?ue(y,"TIME_ONLY",e):String(y)}:y=>{if(y!==void 0)return y===null?null:y instanceof Date?y:new Date(y)},stringMode:t,openApi:{type:"string",format:"time",description:"HH:mm:ss",...o.openApi||{}}})}function lh(i={}){return R({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 uh(i,t={}){return R({...t,expression:i})}function Ru(i){try{return K.getMetadata(ur,i.prototype)||[]}catch{return []}}function _u(i,t,e){return((r,n)=>{let o=()=>Le(i().table),s=()=>{let u=r.constructor.table,d=t||o();return H(u,d,i().table)},a={type:"belongsTo",columnName:n,model:i,foreignKey:t?String(t):o,constraintName:e?.constraintName??s,onUpdate:e?.onUpdate,onDelete:e?.onDelete},l=K.getMetadata(we,r)||[];l.push(a),K.defineMetadata(we,l,r);})}function Mu(i,t){return((e,r)=>{let n=()=>Le(e.constructor.table),o={type:"hasOne",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):n},s=K.getMetadata(we,e)||[];s.push(o),K.defineMetadata(we,s,e);})}function Ou(i,t){return((e,r)=>{let n=()=>Le(e.constructor.table),o={type:"hasMany",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):n},s=K.getMetadata(we,e)||[];s.push(o),K.defineMetadata(we,s,e);})}function Au(i,t,e,r){return((n,o)=>{let{leftForeignKey:s,rightForeignKey:a}=e??{},l=typeof t!="string",u=typeof t=="string"?t:()=>t().table,d=n.constructor.table,c=()=>Le(d),m=()=>Le(i().table),p=()=>H(q(u),s?String(s):c()),g={type:"manyToMany",columnName:o,model:i,constraintName:r?.constraintName??p,foreignKey:s?String(s):c,onDelete:r?.onDelete,onUpdate:r?.onUpdate,manyToManyOptions:{primaryModel:d,throughModel:u,leftForeignKey:s?String(s):c,rightForeignKey:a?String(a):m,wasModelProvided:l}},y=K.getMetadata(we,n)||[];y.push(g),K.defineMetadata(we,y,n);})}function xu(i){return K.getMetadata(we,i.prototype)||[]}function Du(i){return (K.getMetadata(we,i.prototype)||[]).map(e=>{let{type:r,model:n,columnName:o,foreignKey:s}=e,a=q(s),l=n();switch(r){case "belongsTo":return new sr(l,o,a);case "hasOne":return new ar(l,o,a);case "hasMany":return new ir(l,o,a);case "manyToMany":if(!e.manyToManyOptions)throw new h("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let u=n();return new lr(u,o,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:q(e.manyToManyOptions.throughModel),leftForeignKey:q(e.manyToManyOptions.leftForeignKey),rightForeignKey:q(e.manyToManyOptions.rightForeignKey)});default:throw new h("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function Iu(i){return K.getMetadata(ut,i)||K.getMetadata(ut,i.prototype)}function $u(i){return K.getMetadata(dr,i.prototype)||[]}function vu(i){return K.getMetadata(mr,i.prototype)||[]}function Eu(i){return K.getMetadata(cr,i.prototype)||[]}var We=class{};We.modelCaseConvention="camel",We.databaseCaseConvention="snake";var ye=class{};ye.columns=new WeakMap,ye.byName=new WeakMap,ye.byDatabaseName=new WeakMap;var de=class extends We{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 Iu(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=Ru(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 xu(this)}static getIndexes(){return $u(this)}static getUniques(){return vu(this)}static getChecks(){return Eu(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 g=p&&p.message||"Validation failed";(r[s=l.columnName]||(r[s]=[])).push(g);}}catch{(r[a=l.columnName]||(r[a]=[])).push("Validation error");}}if(Object.keys(r).length>0)throw new vt(r);return {valid:true}}};de.zodEngine=null,de.softDeleteColumn="deletedAt",de.softDeleteValue=lt();var Pu=new Set(["table","primaryKey","softDeleteColumn","softDeleteValue","modelCaseConvention","databaseCaseConvention","getColumns","getColumnsByName","getColumnsByDatabaseName","getRelations","getIndexes","getUniques","getChecks","beforeFetch","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 W(i){return {_phantom:void 0,_apply:i}}function j(i={}){return W((t,e)=>{R(i)(t,e);})}j.primary=function(t={}){return W((e,r)=>{R.primary(t)(e,r);})};j.string=function(t){return W((e,r)=>{R.string(t??{})(e,r);})};j.text=function(t){return W((e,r)=>{R.text(t??{})(e,r);})};j.integer=function(t){return W((e,r)=>{R.integer(t??{})(e,r);})};j.bigInteger=function(t){return W((e,r)=>{R.bigInteger(t??{})(e,r);})};j.float=function(t){return W((e,r)=>{R.float(t??{})(e,r);})};j.decimal=function(t){return W((e,r)=>{R.decimal(t??{})(e,r);})};j.increment=function(t={}){return W((e,r)=>{R.increment(t)(e,r);})};j.bigIncrement=function(t={}){return W((e,r)=>{R.bigIncrement(t)(e,r);})};j.boolean=function(t){return W((e,r)=>{R.boolean(t??{})(e,r);})};function Bu(i){return W((t,e)=>{R.date(i??{},false)(t,e);})}Bu.string=function(t){return W((e,r)=>{R.date(t??{},true)(e,r);})};j.date=Bu;function Qu(i){return W((t,e)=>{R.datetime(i??{},false)(t,e);})}Qu.string=function(t){return W((e,r)=>{R.datetime(t??{},true)(e,r);})};j.datetime=Qu;function Ku(i){return W((t,e)=>{R.timestamp(i??{},false)(t,e);})}Ku.string=function(t){return W((e,r)=>{R.timestamp(t??{},true)(e,r);})};j.timestamp=Ku;function ku(i){return W((t,e)=>{R.time(i??{},false)(t,e);})}ku.string=function(t){return W((e,r)=>{R.time(t??{},true)(e,r);})};j.time=ku;j.json=function(t){return W((e,r)=>{R.json({type:"json",...t??{}})(e,r);})};j.jsonb=function(t){return W((e,r)=>{R.json(t??{})(e,r);})};j.uuid=function(t){return W((e,r)=>{R.uuid(t??{})(e,r);})};j.ulid=function(t){return W((e,r)=>{R.ulid(t??{})(e,r);})};j.binary=function(t){return W((e,r)=>{R.binary(t??{})(e,r);})};j.enum=function(t,e){return W((r,n)=>{R.enum(t,e??{})(r,n);})};j.nativeEnum=function(t,e){let r=Object.values(t).filter(s=>typeof s=="string"||typeof s=="number"),o=r.some(s=>typeof s=="number")?r.filter(s=>typeof s=="number").map(s=>String(s)):r.filter(s=>typeof s=="string");return W((s,a)=>{R.enum(o,e??{})(s,a);})};j.char=function(t){return W((e,r)=>{R.string({...t,type:"char"})(e,r);})};j.varbinary=function(t){return W((e,r)=>{R({type:"varbinary",...t})(e,r);})};j.tinyint=function(t){return W((e,r)=>{R.integer({...t,type:"tinyint"})(e,r);})};j.smallint=function(t){return W((e,r)=>{R.integer({...t,type:"smallint"})(e,r);})};j.mediumint=function(t){return W((e,r)=>{R.integer({...t,type:"mediumint"})(e,r);})};j.computed=function(t,e={}){return W((r,n)=>{R.computed(t,e)(r,n);})};j.encryption={symmetric(i){return W((t,e)=>{R.encryption.symmetric(i)(t,e);})},asymmetric(i){return W((t,e)=>{R.encryption.asymmetric(i)(t,e);})}};var dh=j;function mh(i,t){let{columns:e,indexes:r,uniques:n,checks:o,hooks:s,options:a}=t;class l extends de{}l.table=i,a?.modelCaseConvention&&(l.modelCaseConvention=a.modelCaseConvention),a?.databaseCaseConvention&&(l.databaseCaseConvention=a.databaseCaseConvention),a?.softDeleteColumn&&(l.softDeleteColumn=a.softDeleteColumn),a?.softDeleteValue!==void 0&&(l.softDeleteValue=a.softDeleteValue);for(let[u,d]of Object.entries(e)){if(d._apply(l.prototype,u),Pu.has(u))throw new Error(`defineModel("${i}"): column name "${u}" conflicts with an existing model property. Please rename this column.`);Object.defineProperty(l,u,{value:`${i}.${u}`,writable:false,enumerable:true,configurable:true});}if(r)for(let u of r)fh(l,u);if(n)for(let u of n)hh(l,u);if(o)for(let u of o)gh(l,u);return s&&s.beforeFetch&&(l.beforeFetch=s.beforeFetch),Lu(l),l}function ch(i,t){let r=t({hasOne(o,s){return {_kind:"hasOne",_target:o,_foreignKey:s.foreignKey,_phantom:void 0}},hasMany(o,s){return {_kind:"hasMany",_target:o,_foreignKey:s.foreignKey,_phantom:void 0}},belongsTo(o,s){let{foreignKey:a,...l}=s;return {_kind:"belongsTo",_target:o,_foreignKey:a,_constraintOptions:l,_phantom:void 0}},manyToMany(o,s){let{through:a,leftForeignKey:l,rightForeignKey:u,...d}=s;return {_kind:"manyToMany",_target:o,_foreignKey:l,_throughModel:typeof a=="string"?a:(()=>a),_throughModelKeys:{leftForeignKey:l,rightForeignKey:u},_constraintOptions:d,_phantom:void 0}}}),n=Object.fromEntries(Object.keys(r).map(o=>[o,o]));return {_source:i,_defs:r,...n}}function ph(i,t){for(let[e,r]of Object.entries(t||{})){if(!r)continue;let n=i[e];if(!n)throw new Error(`createSchema: relation key "${e}" does not match any model in the models record`);let o=r._defs;for(let[s,a]of Object.entries(o)){let l=a._target,u=a._foreignKey;switch(a._kind){case "hasOne":Mu(()=>l,u)(n.prototype,s);break;case "hasMany":Ou(()=>l,u)(n.prototype,s);break;case "belongsTo":_u(()=>l,u,a._constraintOptions)(n.prototype,s);break;case "manyToMany":{let d=a._throughModel,c=a._throughModelKeys;Au(()=>l,d,c,a._constraintOptions)(n.prototype,s);break}}}}return i}function yh(i,t){let{columns:e,statement:r,hooks:n,options:o}=t;class s extends de{}s.table=i,s[Cu]=r,o?.modelCaseConvention&&(s.modelCaseConvention=o.modelCaseConvention),o?.databaseCaseConvention&&(s.databaseCaseConvention=o.databaseCaseConvention);for(let[a,l]of Object.entries(e)){if(l._apply(s.prototype,a),Pu.has(a))throw new Error(`defineView("${i}"): column name "${a}" conflicts with an existing model property. Please rename this column.`);Object.defineProperty(s,a,{value:`${i}.${a}`,writable:false,enumerable:true,configurable:true});}return n&&n.beforeFetch&&(s.beforeFetch=n.beforeFetch),Lu(s),s}function Lu(i){i.toZodSchema=function(){let t=this.zodEngine||de.zodEngine;if(!t)throw new h("Model::toZodSchema","ZOD_ENGINE_NOT_LOADED",new Error("Zod engine not loaded. Please call sql.loadZodEngine(z) before using toZodSchema()."));let e=this.getColumns(),r={};for(let n of e){let o;if(n.expression){r[n.columnName]=t.any().optional();continue}if(Array.isArray(n.type))o=t.enum(n.type);else switch(n.type){case "string":case "varchar":case "char":case "text":case "longtext":case "mediumtext":case "tinytext":case "uuid":case "ulid":o=t.string();break;case "integer":case "tinyint":case "smallint":case "mediumint":case "bigint":case "float":case "double":case "real":case "decimal":case "numeric":case "increment":case "bigIncrement":o=t.number();break;case "boolean":o=t.boolean();break;case "date":case "datetime":case "timestamp":case "time":o=t.date();break;case "json":case "jsonb":o=t.any();break;case "binary":case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":o=t.any();break;default:o=t.any();}n.constraints?.nullable!==false&&!n.isPrimary&&(o=o.nullable()),r[n.columnName]=o;}return t.object(r)};}function fh(i,t){Array.isArray(t)?Ln(t)(i):Ln(t.columns,t.name)(i);}function hh(i,t){Array.isArray(t)?Wn(t)(i):Wn(t.columns,t.name)(i);}function gh(i,t){typeof t=="string"?Fn(t)(i):Fn(t.expression,t.name)(i);}var N=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};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 xe=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 U=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 Se=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 z=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 jn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(n+=` ${s.join(" ")}`);}return {sql:`add ${n}`,bindings:[]}}},Wu=new jn;var Un=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Fu=new Un;var Vn=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`[${n}]`).join(", ")})`,bindings:[]}}},ju=new Vn;var Jn=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:[]}}},Uu=new Jn;var dt=class extends N{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};var Hn=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};if(e.children.length===1&&e.children[0]instanceof dt){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}}},Vu=new Hn;var zn=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},Ju=new zn;var Gn=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},Hu=new Gn;var Yn=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},zu=new Yn;var Pt=i=>{switch(i){case "mysql":return "mysql";case "mariadb":return "mariadb";case "postgres":case "cockroachdb":return "postgresql";case "sqlite":return "sqlite";case "mssql":return "transactsql";default:return "sql"}},Zn=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)},Bt=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,Zn(t[r]));for(let r=0;r<t.length;r++){let n=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(n,Zn(t[r]));}for(let r=0;r<t.length;r++){let n=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(n,Zn(t[r]));}return e},mt=(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,Qt=(i,t)=>{let e=i.getDbType(),r;try{r=format(t,{...i.inputDetails.queryFormatOptions,language:Pt(e)});}catch{try{r=format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var Yu={info:0,warn:1,error:2};function fr(i){return i?i===true?{level:"info",logQueries:true}:{level:i.level??"info",logQueries:i.logQueries??true,customLogger:i.customLogger}:null}function wh(i,t="info"){let e=fr(i);if(!e)return false;let r=e.level??"info";return Yu[t]>=Yu[r]}function Nh(i){let t=fr(i);return t?t.logQueries??true:false}var Fe={info:"32",warn:"33",error:"31",query:"35",dim:"2",cyan:"36"},Sh=typeof process<"u"&&!!process.stdout?.isTTY&&!process.env.NO_COLOR,ct=(i,t)=>Sh?`\x1B[${i}m${t}\x1B[0m`:t;function td(){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 Xn(i,t){let e=ct(Fe.dim,`[${td()}]`),r=ct(Fe[i],i.toUpperCase().padEnd(5));return `${e} ${r} ${t}`}var qh=60,Ch=10,Zu=400;function yr(i,t=qh){return i.length<=t?i:`${i.slice(0,t)}\u2026`}function Rh(i){if(i==null)return "null";if(typeof i=="string")return `'${yr(i)}'`;if(typeof i=="number"||typeof i=="bigint")return String(i);if(typeof i=="boolean")return i?"true":"false";if(i instanceof Date)return `'${yr(i.toISOString())}'`;if(typeof i=="object"){let t;try{t=JSON.stringify(i);}catch{t=String(i);}return `'${yr(t)}'`}return yr(String(i))}function _h(i){if(!i||i.length===0)return "[]";let t=i.slice(0,Ch).map(Rh),e=i.length-t.length;e>0&&t.push(`\u2026 (${e} more)`);let r=`[${t.join(", ")}]`;return r.length>Zu&&(r=`${r.slice(0,Zu)}\u2026`),r}var Xu=(i,t)=>{let e=" ".repeat(t);return i.split(`
|
|
1
|
+
import {PassThrough,Readable}from'stream';import $n,{promises}from'fs';import Et from'path';import $e,{privateDecrypt,publicEncrypt}from'crypto';import {format}from'sql-formatter';import {highlight}from'sql-highlight';import {AsyncLocalStorage}from'async_hooks';import {fileURLToPath,pathToFileURL}from'url';import {createRequire}from'module';var pu=Object.defineProperty;var yu=i=>{throw TypeError(i)};var se=(i=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(i,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):i)(function(i){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+i+'" is not supported')});var Ie=(i,t)=>()=>(i&&(t=i(i=0)),t);var fu=(i,t)=>{for(var e in t)pu(i,e,{get:t[e],enumerable:true});};var hu=(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&&pu(t,e,n),n};var $f=(i,t,e)=>t.has(i)||yu("Cannot "+e);var gu=(i,t,e)=>t.has(i)?yu("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);var bu=(i,t,e)=>($f(i,t,"access private method"),e);var K,me=Ie(()=>{K=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};});var uf,Te,gg,df,It=Ie(()=>{me();uf=[],Te=i=>{uf.push(i);},gg=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})},df=async(i,t,e,r)=>{if(e&&typeof e!="string")return gg(i,e,t,r);let n=uf.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 K(e??i)};});var $t,qg,mf,tr=Ie(()=>{$t=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},qg=i=>{if(i.writableNeedDrain)return new Promise(t=>i.once("drain",()=>t()))},mf=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 qg(r);r.end();}catch(n){r.destroy(n);}return r};});var pf,On,yf=Ie(()=>{tr();pf=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},On=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 pf(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 pf(l)}let a=Array.isArray(s)?s:[];return $t(a,r,n)}};});var xn,ff=Ie(()=>{tr();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 mf(o.query(t).iterate(...e),r,n)}};});var hf={};fu(hf,{registerBunDrivers:()=>Cg});var Cg,gf=Ie(()=>{It();yf();ff();Cg=async()=>{let{SQL:i}=await import('bun'),{Database:t}=await import('bun:sqlite');Te({name:"bun-sql",dialects:["postgres","cockroachdb","mysql","mariadb"],environments:["bun"],create:async({dialect:e,input:r})=>new On(e,r,i)}),Te({name:"bun-sqlite",dialects:["sqlite"],environments:["bun"],create:async({dialect:e,input:r})=>new xn(e,r,t)});};});var Rg,An,eu,tu=Ie(()=>{tr();Rg=async i=>(await(await import('@sqlite.org/sqlite-wasm')).default(i)).oo1,An=class{constructor(t,e,r=Rg,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 eu(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 $t(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}},eu=i=>["begin","begin transaction","commit","rollback"].includes(i.trim().toLowerCase());});var ru,Dn,bf=Ie(()=>{tr();tu();ru=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(eu(t))return a(t);if(s==="fetch"){let u=await n.execute(t,e);return ru(u.rows)}if(!o?.typeofModel)return a(t);if(s==="insertOne"||s==="insertMany"){let u=await n.execute(`${t} returning *`,e);return ru(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 $t(ru(s.rows),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-rn: pool not created, await createPool() before querying");return this.db}};});var nu={};fu(nu,{registerReactNativeDrivers:()=>Mg,registerWebDrivers:()=>_g});var Tf,wf,_g,Sf,Mg,ou=Ie(()=>{It();bf();tu();Tf=false,_g=i=>{Tf||(Tf=true,wf=i,Te({name:"sqlite-wasm",dialects:["sqlite"],environments:["web"],create:({dialect:t,input:e})=>new An(t,e,void 0,wf)}));},Sf=false,Mg=async()=>{if(Sf)return;Sf=true;let i=await import('@op-engineering/op-sqlite');Te({name:"sqlite-rn",dialects:["sqlite"],environments:["react-native"],create:({dialect:t,input:e})=>new Dn(t,e,i)});};});var f=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}},Bt=class extends f{constructor(t){super("ValidationError","VALIDATION_ERROR"),this.errors=t;}};function or(i){if(i&&i!=="auto")return i;if(typeof process<"u"&&process.versions?.bun)return "bun";if(globalThis.navigator?.product==="ReactNative"||"HermesInternal"in globalThis)return "react-native";let e=typeof globalThis.self<"u";return typeof window<"u"||typeof document<"u"||e?"web":"node"}var vf=i=>{i[6]=i[6]&15|64,i[8]=i[8]&63|128;let t=Ke(i);return [t.slice(0,8),t.slice(8,12),t.slice(12,16),t.slice(16,20),t.slice(20)].join("-")},Tu=i=>{let t=globalThis.crypto;if(!t||typeof t.getRandomValues!="function")throw new at("crypto.getRandomValues \u2014 browsers require a secure context (HTTPS); React Native requires react-native-get-random-values or expo-crypto");return t.getRandomValues(i)},Pn=class{unsupported(t){throw new at(`fs.${t}`)}exists(){return this.unsupported("exists")}readFileSync(){return this.unsupported("readFileSync")}readFile(){return this.unsupported("readFile")}readdir(){return this.unsupported("readdir")}mkdir(){return this.unsupported("mkdir")}writeFile(){return this.unsupported("writeFile")}rm(){return this.unsupported("rm")}},Bn=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():vf(Tu(new Uint8Array(16)))},randomBytes:t=>Tu(new Uint8Array(t))};this.timing={now:()=>globalThis.performance.now()};this.fs=new Pn;this.path=new Bn;}readEnv(t){}};var lt=class extends ke{constructor(){super(...arguments);this.name="node";this.fs={exists:e=>$n.existsSync(e),readFileSync:e=>$n.existsSync(e)?new Uint8Array($n.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=Et;}readEnv(e){return typeof process>"u"?void 0:process.env[e]}};var kn=()=>import('bun'),sr=class extends lt{constructor(){super();this.name="bun";let e=this.fs;this.fs={...e,readFile:async r=>(await kn()).file(r).text(),readdir:async r=>{let n=await kn(),o=[];for await(let s of new n.Glob("*").scan({cwd:r}))o.push(s);return o},writeFile:async(r,n)=>{await(await kn()).write(r,n);}};}};var ir=class extends ke{constructor(){super(...arguments);this.name="react-native";}};var at=class extends Error{constructor(t){super(`Platform does not support: ${t}`),this.name="PlatformUnsupportedError";}},Ke=i=>{let t="";for(let e of i)t+=e.toString(16).padStart(2,"0");return t},wu=new Map,Pf=i=>{switch(i){case "bun":return new sr;case "node":return new lt;case "react-native":return new ir;default:return new ke}};function ne(i){let t=or(i),e=wu.get(t);return e||(e=Pf(t),wu.set(t,e)),e}function Bf(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 Su(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function Qf(i){if(typeof i!="string"||!i)return i;let t=Su(i);return t.charAt(0).toUpperCase()+t.slice(1)}function V(i,t){return t==="preserve"?i:t==="snake"?Bf(i):t==="camel"?Su(i):t==="pascal"?Qf(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}function Me(i){return String(i).padStart(2,"0")}function kf(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 Nu(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"?kf(i,t):Nu(i,t)};var ut=(i=new Date)=>Nu(i,"ISO");var qu=(i,t)=>{try{let e=$e.createHash("sha256").update(i).digest(),r=$e.randomBytes(16),n=$e.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 f("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Cu=(i,t)=>{try{let e=$e.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=$e.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 f("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Ru=(i,t)=>{try{let e=$e.randomBytes(32),r=$e.randomBytes(16),n=$e.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 f("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},_u=(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=$e.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 f("Encryption::decryptAsymmetric","FAILED_TO_DECRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}};var k=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);}}};k.store=new WeakMap;var Wn="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Kn=Wn.length,Lf=10,jf=16,Ff=(i,t)=>{let e="";for(let r=0;r<t;r++){let n=i%Kn;e=Wn.charAt(n)+e,i=(i-n)/Kn;}return e},Uf=i=>{let t=ne().crypto.randomBytes(i),e="";for(let r=0;r<i;r++){let n=t[r];e+=Wn.charAt(n%Kn);}return e},Mu=()=>{let i=Math.floor(Date.now()/1e3),t=Ff(i,Lf),e=Uf(jf);return t+e};function Ln(i){return i.replace(/^[`"]|[`"]$/g,"")}function jn(i,t,e){if(!i.includes(".")){let o=Ln(i);return `${t}.${o}`}let[r,n]=i.split(".");return r=Ln(r),n=Ln(n),r!==e?i:n==="*"?`${t}.*`:`${t}.${n}`}function q(i){return typeof i=="function"?i():i}var j=(i,t=new WeakMap)=>{if(i===null||typeof i!="object")return i;if(t.has(i))return t.get(i);if(Array.isArray(i)){let r=[];t.set(i,r);for(let n=0;n<i.length;n++)r[n]=j(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]=j(n,t);}return e};var Oe=class{constructor(t,e){this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var ar=class extends Oe{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var lr=class extends Oe{constructor(e,r,n){super(e,r);this.type="hasMany";this.foreignKey=n,this.type="hasMany";}};var ur=class extends Oe{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var dr=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 Vf(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 cr=Symbol("columns"),dt=Symbol("primaryKey"),Se=Symbol("relations"),mr=Symbol("indexes"),pr=Symbol("uniques"),yr=Symbol("checks"),We=i=>`${Vf(i)}_id`,fr=(i,t)=>`idx_${i}_${t}`,ye=(i,t)=>`uq_${i}_${t}`,z=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,Ne=(i,t)=>`pk_${i}_${t}`,Ou=(i,t)=>{let e=t.replace(/[^a-zA-Z0-9]+/g,"_").replace(/^_|_$/g,"").toLowerCase();return `chk_${i}_${e}`.substring(0,63)};function Fn(i,t){return e=>{let r=Array.isArray(i)?i:[i],n=k.getMetadata(mr,e.prototype)||[];n.push({columns:r,name:t??fr(e.table,r.join("_"))}),k.defineMetadata(mr,n,e.prototype);}}function Un(i,t){return e=>{let r=Array.isArray(i)?i:[i],n=k.getMetadata(pr,e.prototype)||[];n.push({columns:r,name:t??ye(e.table,r.join("_"))}),k.defineMetadata(pr,n,e.prototype);}}function Vn(i,t){return e=>{let r=k.getMetadata(yr,e.prototype)||[];r.push({expression:i,name:t??Ou(e.table,i)}),k.defineMetadata(yr,r,e.prototype);}}var xu=Symbol("viewStatement");function _(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let n=e.constructor;if(t){if(k.getMetadata(dt,e))throw new f("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");k.defineMetadata(dt,r,e),k.defineMetadata(dt,r,e.constructor);}let o=i.databaseName??V(r,n.databaseCaseConvention),s={columnName:r,serialize:i.serialize,prepare:i.prepare,isPrimary:t,primaryKeyConstraintName:i.primaryKeyConstraintName??Ne(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=k.getMetadata(cr,e)||[];a.push(s),k.defineMetadata(cr,a,e);}}_.primary=Jf;_.date=uh;_.datetime=dh;_.timestamp=ch;_.time=mh;_.boolean=lh;_.json=ph;_.uuid=Zf;_.ulid=Xf;_.integer=zf;_.bigInteger=rh;_.float=Hf;_.decimal=nh;_.increment=Gf;_.bigIncrement=Yf;_.string=eh;_.text=th;_.binary=oh;_.enum=sh;_.encryption={symmetric:ih,asymmetric:ah};_.computed=yh;function Jf(i={}){return _({...i,primaryKey:true})}function Hf(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 zf(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 Gf(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 Yf(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 Zf(i={}){return _({type:"uuid",...i,prepare:t=>t||ne().crypto.randomUUID(),openApi:{type:"string",format:"uuid",description:"uuid (Universally Unique Identifier)",...i.openApi||{}}})}function Xf(i={}){return _({type:"ulid",...i,prepare:t=>t||Mu(),openApi:{type:"string",format:"ulid",description:"ulid (Universally Unique Lexicographically Sortable Identifier)",...i.openApi||{}}})}function eh(i={}){return _({type:"string",...i,openApi:{type:"string",description:"A string value",...i.openApi||{}}})}function th(i={}){return _({type:"longtext",...i,openApi:{type:"string",description:"A text value",...i.openApi||{}}})}function rh(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 nh(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 oh(i={}){return _({type:"binary",...i,openApi:{type:"string",format:"binary",description:"Binary data",...i.openApi||{}}})}function sh(i,t={}){return _({type:i,...t,openApi:{type:"string",enum:i,description:"An enum value",...t.openApi||{}}})}function ih(i){return _({...i,prepare:t=>t&&qu(i.key,t),serialize:t=>t&&Cu(i.key,t)})}function ah(i){return _({...i,prepare:t=>t&&Ru(i.publicKey,t),serialize:t=>t&&_u(i.privateKey,t)})}function lh(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 uh(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=i,s=!!n,a=!!r,l=typeof n=="function"?"js":s?true:void 0,u=()=>new Date,d=()=>ue(new Date,"DATE_ONLY",e),m=t?typeof n=="function"?n:d:typeof n=="function"?n:u,c=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return _({type:"date",...o,autoUpdate:a,autoCreate:l,prepare:t?y=>y?a?c():y:s?m():null:y=>y?a?c():y:s?m():null,serialize:t?y=>{if(y!==void 0)return y===null?null:y instanceof Date?ue(y,"DATE_ONLY",e):String(y)}:y=>{if(y!==void 0)return y===null?null:y instanceof Date?y:new Date(y)},openApi:{type:"string",format:"date",description:"YYYY-MM-DD",...o.openApi||{}}})}function dh(i={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...s}=i,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,m=typeof o=="function"?"js":u?true:void 0,c=()=>new Date,p=()=>ue(new Date,"ISO",a),g=t?typeof o=="function"?o:p:typeof o=="function"?o:c,y=t?typeof n=="function"?n:p:typeof n=="function"?n:c;return _({type:"datetime",...s,withTimezone:l,autoUpdate:d,autoCreate:m,prepare:t?N=>N?d?y():N:u?g():null:N=>N?d?y():N:u?g():null,serialize:t?N=>{if(N!==void 0)return N===null?null:N instanceof Date?ue(N,"ISO",a):String(N)}:N=>{if(N!==void 0)return N===null?null:N instanceof Date?N:new Date(N)},stringMode:t,openApi:{type:"string",format:"date-time",description:"YYYY-MM-DD HH:mm:ss",...s.openApi||{}}})}function ch(i={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...s}=i,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,m=typeof o=="function"?"js":u?true:void 0,c=()=>new Date,p=()=>ue(new Date,"TIMESTAMP",a),g=t?typeof o=="function"?o:p:typeof o=="function"?o:c,y=t?typeof n=="function"?n:p:typeof n=="function"?n:c;return _({type:"timestamp",...s,withTimezone:l,autoUpdate:d,autoCreate:m,prepare:t?N=>N?d?y():N:u?g():null:N=>N?d?y():N:u?g():null,serialize:t?N=>{if(N!==void 0)return N===null?null:N instanceof Date?ue(N,"TIMESTAMP",a):String(N)}:N=>{if(N!==void 0)return N===null?null:N instanceof Date?N:new Date(N)},stringMode:t,openApi:{type:"string",format:"date-time",description:"Unix timestamp",...s.openApi||{}}})}function mh(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=i,s=!!n,a=!!r,l=typeof n=="function"?"js":s?true:void 0,u=()=>new Date,d=()=>ue(new Date,"TIME_ONLY",e),m=t?typeof n=="function"?n:d:typeof n=="function"?n:u,c=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return _({type:"time",...o,autoUpdate:a,autoCreate:l,prepare:t?y=>y?a?c():y:s?m():null:y=>y?a?c():y:s?m():null,serialize:t?y=>{if(y!==void 0)return y===null?null:y instanceof Date?ue(y,"TIME_ONLY",e):String(y)}:y=>{if(y!==void 0)return y===null?null:y instanceof Date?y:new Date(y)},stringMode:t,openApi:{type:"string",format:"time",description:"HH:mm:ss",...o.openApi||{}}})}function ph(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 yh(i,t={}){return _({...t,expression:i})}function Au(i){try{return k.getMetadata(cr,i.prototype)||[]}catch{return []}}function Du(i,t,e){return((r,n)=>{let o=()=>We(i().table),s=()=>{let u=r.constructor.table,d=t||o();return z(u,d,i().table)},a={type:"belongsTo",columnName:n,model:i,foreignKey:t?String(t):o,constraintName:e?.constraintName??s,onUpdate:e?.onUpdate,onDelete:e?.onDelete},l=k.getMetadata(Se,r)||[];l.push(a),k.defineMetadata(Se,l,r);})}function Iu(i,t){return((e,r)=>{let n=()=>We(e.constructor.table),o={type:"hasOne",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):n},s=k.getMetadata(Se,e)||[];s.push(o),k.defineMetadata(Se,s,e);})}function $u(i,t){return((e,r)=>{let n=()=>We(e.constructor.table),o={type:"hasMany",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):n},s=k.getMetadata(Se,e)||[];s.push(o),k.defineMetadata(Se,s,e);})}function vu(i,t,e,r){return((n,o)=>{let{leftForeignKey:s,rightForeignKey:a}=e??{},l=typeof t!="string",u=typeof t=="string"?t:()=>t().table,d=n.constructor.table,m=()=>We(d),c=()=>We(i().table),p=()=>z(q(u),s?String(s):m()),g={type:"manyToMany",columnName:o,model:i,constraintName:r?.constraintName??p,foreignKey:s?String(s):m,onDelete:r?.onDelete,onUpdate:r?.onUpdate,manyToManyOptions:{primaryModel:d,throughModel:u,leftForeignKey:s?String(s):m,rightForeignKey:a?String(a):c,wasModelProvided:l}},y=k.getMetadata(Se,n)||[];y.push(g),k.defineMetadata(Se,y,n);})}function Eu(i){return k.getMetadata(Se,i.prototype)||[]}function Pu(i){return (k.getMetadata(Se,i.prototype)||[]).map(e=>{let{type:r,model:n,columnName:o,foreignKey:s}=e,a=q(s),l=n();switch(r){case "belongsTo":return new ar(l,o,a);case "hasOne":return new ur(l,o,a);case "hasMany":return new lr(l,o,a);case "manyToMany":if(!e.manyToManyOptions)throw new f("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let u=n();return new dr(u,o,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:q(e.manyToManyOptions.throughModel),leftForeignKey:q(e.manyToManyOptions.leftForeignKey),rightForeignKey:q(e.manyToManyOptions.rightForeignKey)});default:throw new f("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function Bu(i){return k.getMetadata(dt,i)||k.getMetadata(dt,i.prototype)}function Qu(i){return k.getMetadata(mr,i.prototype)||[]}function ku(i){return k.getMetadata(pr,i.prototype)||[]}function Ku(i){return k.getMetadata(yr,i.prototype)||[]}var Le=class{};Le.modelCaseConvention="camel",Le.databaseCaseConvention="snake";var fe=class{};fe.columns=new WeakMap,fe.byName=new WeakMap,fe.byDatabaseName=new WeakMap;var de=class extends Le{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 Bu(this)}constructor(t){if(super(),t)for(let e in t)Object.assign(this,{[e]:t[e]});}static getColumns(){let t=fe.columns.get(this);return t||(t=Au(this),fe.columns.set(this,t)),t}static getColumnsByName(){let t=fe.byName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.columnName,e])),fe.byName.set(this,t)),t}static getColumnsByDatabaseName(){let t=fe.byDatabaseName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.databaseName,e])),fe.byDatabaseName.set(this,t)),t}static getRelations(){return Eu(this)}static getIndexes(){return Qu(this)}static getUniques(){return ku(this)}static getChecks(){return Ku(this)}static async validate(t){var s,a;let e=this.getColumns(),r={},n=this.primaryKey,o=n&&t?.[n]!==void 0?"update":"insert";for(let l of e){if(l.expression)continue;let u=l.validate;if(!u)continue;let d=t?t[l.columnName]:void 0,m=Array.isArray(u)?u:[u];for(let c of m)try{let p=await c(d,{model:this,column:l.columnName,operation:o,data:t});if(!(p&&p.valid)){let g=p&&p.message||"Validation failed";(r[s=l.columnName]||(r[s]=[])).push(g);}}catch{(r[a=l.columnName]||(r[a]=[])).push("Validation error");}}if(Object.keys(r).length>0)throw new Bt(r);return {valid:true}}};de.zodEngine=null,de.softDeleteColumn="deletedAt",de.softDeleteValue=ut();var Wu=new Set(["table","primaryKey","softDeleteColumn","softDeleteValue","modelCaseConvention","databaseCaseConvention","getColumns","getColumnsByName","getColumnsByDatabaseName","getRelations","getIndexes","getUniques","getChecks","beforeFetch","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 L(i){return {_phantom:void 0,_apply:i}}function U(i={}){return L((t,e)=>{_(i)(t,e);})}U.primary=function(t={}){return L((e,r)=>{_.primary(t)(e,r);})};U.string=function(t){return L((e,r)=>{_.string(t??{})(e,r);})};U.text=function(t){return L((e,r)=>{_.text(t??{})(e,r);})};U.integer=function(t){return L((e,r)=>{_.integer(t??{})(e,r);})};U.bigInteger=function(t){return L((e,r)=>{_.bigInteger(t??{})(e,r);})};U.float=function(t){return L((e,r)=>{_.float(t??{})(e,r);})};U.decimal=function(t){return L((e,r)=>{_.decimal(t??{})(e,r);})};U.increment=function(t={}){return L((e,r)=>{_.increment(t)(e,r);})};U.bigIncrement=function(t={}){return L((e,r)=>{_.bigIncrement(t)(e,r);})};U.boolean=function(t){return L((e,r)=>{_.boolean(t??{})(e,r);})};function Lu(i){return L((t,e)=>{_.date(i??{},false)(t,e);})}Lu.string=function(t){return L((e,r)=>{_.date(t??{},true)(e,r);})};U.date=Lu;function ju(i){return L((t,e)=>{_.datetime(i??{},false)(t,e);})}ju.string=function(t){return L((e,r)=>{_.datetime(t??{},true)(e,r);})};U.datetime=ju;function Fu(i){return L((t,e)=>{_.timestamp(i??{},false)(t,e);})}Fu.string=function(t){return L((e,r)=>{_.timestamp(t??{},true)(e,r);})};U.timestamp=Fu;function Uu(i){return L((t,e)=>{_.time(i??{},false)(t,e);})}Uu.string=function(t){return L((e,r)=>{_.time(t??{},true)(e,r);})};U.time=Uu;U.json=function(t){return L((e,r)=>{_.json({type:"json",...t??{}})(e,r);})};U.jsonb=function(t){return L((e,r)=>{_.json(t??{})(e,r);})};U.uuid=function(t){return L((e,r)=>{_.uuid(t??{})(e,r);})};U.ulid=function(t){return L((e,r)=>{_.ulid(t??{})(e,r);})};U.binary=function(t){return L((e,r)=>{_.binary(t??{})(e,r);})};U.enum=function(t,e){return L((r,n)=>{_.enum(t,e??{})(r,n);})};U.nativeEnum=function(t,e){let r=Object.values(t).filter(s=>typeof s=="string"||typeof s=="number"),o=r.some(s=>typeof s=="number")?r.filter(s=>typeof s=="number").map(s=>String(s)):r.filter(s=>typeof s=="string");return L((s,a)=>{_.enum(o,e??{})(s,a);})};U.char=function(t){return L((e,r)=>{_.string({...t,type:"char"})(e,r);})};U.varbinary=function(t){return L((e,r)=>{_({type:"varbinary",...t})(e,r);})};U.tinyint=function(t){return L((e,r)=>{_.integer({...t,type:"tinyint"})(e,r);})};U.smallint=function(t){return L((e,r)=>{_.integer({...t,type:"smallint"})(e,r);})};U.mediumint=function(t){return L((e,r)=>{_.integer({...t,type:"mediumint"})(e,r);})};U.computed=function(t,e={}){return L((r,n)=>{_.computed(t,e)(r,n);})};U.encryption={symmetric(i){return L((t,e)=>{_.encryption.symmetric(i)(t,e);})},asymmetric(i){return L((t,e)=>{_.encryption.asymmetric(i)(t,e);})}};var fh=U;function hh(i,t){let{columns:e,indexes:r,uniques:n,checks:o,hooks:s,options:a}=t;class l extends de{}l.table=i,a?.modelCaseConvention&&(l.modelCaseConvention=a.modelCaseConvention),a?.databaseCaseConvention&&(l.databaseCaseConvention=a.databaseCaseConvention),a?.softDeleteColumn&&(l.softDeleteColumn=a.softDeleteColumn),a?.softDeleteValue!==void 0&&(l.softDeleteValue=a.softDeleteValue);for(let[u,d]of Object.entries(e)){if(d._apply(l.prototype,u),Wu.has(u))throw new Error(`defineModel("${i}"): column name "${u}" conflicts with an existing model property. Please rename this column.`);Object.defineProperty(l,u,{value:`${i}.${u}`,writable:false,enumerable:true,configurable:true});}if(r)for(let u of r)wh(l,u);if(n)for(let u of n)Sh(l,u);if(o)for(let u of o)Nh(l,u);return s&&s.beforeFetch&&(l.beforeFetch=s.beforeFetch),Vu(l),l}function gh(i,t){let r=t({hasOne(o,s){return {_kind:"hasOne",_target:o,_foreignKey:s.foreignKey,_phantom:void 0}},hasMany(o,s){return {_kind:"hasMany",_target:o,_foreignKey:s.foreignKey,_phantom:void 0}},belongsTo(o,s){let{foreignKey:a,...l}=s;return {_kind:"belongsTo",_target:o,_foreignKey:a,_constraintOptions:l,_phantom:void 0}},manyToMany(o,s){let{through:a,leftForeignKey:l,rightForeignKey:u,...d}=s;return {_kind:"manyToMany",_target:o,_foreignKey:l,_throughModel:typeof a=="string"?a:(()=>a),_throughModelKeys:{leftForeignKey:l,rightForeignKey:u},_constraintOptions:d,_phantom:void 0}}}),n=Object.fromEntries(Object.keys(r).map(o=>[o,o]));return {_source:i,_defs:r,...n}}function bh(i,t){for(let[e,r]of Object.entries(t||{})){if(!r)continue;let n=i[e];if(!n)throw new Error(`createSchema: relation key "${e}" does not match any model in the models record`);let o=r._defs;for(let[s,a]of Object.entries(o)){let l=a._target,u=a._foreignKey;switch(a._kind){case "hasOne":Iu(()=>l,u)(n.prototype,s);break;case "hasMany":$u(()=>l,u)(n.prototype,s);break;case "belongsTo":Du(()=>l,u,a._constraintOptions)(n.prototype,s);break;case "manyToMany":{let d=a._throughModel,m=a._throughModelKeys;vu(()=>l,d,m,a._constraintOptions)(n.prototype,s);break}}}}return i}function Th(i,t){let{columns:e,statement:r,hooks:n,options:o}=t;class s extends de{}s.table=i,s[xu]=r,o?.modelCaseConvention&&(s.modelCaseConvention=o.modelCaseConvention),o?.databaseCaseConvention&&(s.databaseCaseConvention=o.databaseCaseConvention);for(let[a,l]of Object.entries(e)){if(l._apply(s.prototype,a),Wu.has(a))throw new Error(`defineView("${i}"): column name "${a}" conflicts with an existing model property. Please rename this column.`);Object.defineProperty(s,a,{value:`${i}.${a}`,writable:false,enumerable:true,configurable:true});}return n&&n.beforeFetch&&(s.beforeFetch=n.beforeFetch),Vu(s),s}function Vu(i){i.toZodSchema=function(){let t=this.zodEngine||de.zodEngine;if(!t)throw new f("Model::toZodSchema","ZOD_ENGINE_NOT_LOADED",new Error("Zod engine not loaded. Please call sql.loadZodEngine(z) before using toZodSchema()."));let e=this.getColumns(),r={};for(let n of e){let o;if(n.expression){r[n.columnName]=t.any().optional();continue}if(Array.isArray(n.type))o=t.enum(n.type);else switch(n.type){case "string":case "varchar":case "char":case "text":case "longtext":case "mediumtext":case "tinytext":case "uuid":case "ulid":o=t.string();break;case "integer":case "tinyint":case "smallint":case "mediumint":case "bigint":case "float":case "double":case "real":case "decimal":case "numeric":case "increment":case "bigIncrement":o=t.number();break;case "boolean":o=t.boolean();break;case "date":case "datetime":case "timestamp":case "time":o=t.date();break;case "json":case "jsonb":o=t.any();break;case "binary":case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":o=t.any();break;default:o=t.any();}n.constraints?.nullable!==false&&!n.isPrimary&&(o=o.nullable()),r[n.columnName]=o;}return t.object(r)};}function wh(i,t){Array.isArray(t)?Fn(t)(i):Fn(t.columns,t.name)(i);}function Sh(i,t){Array.isArray(t)?Un(t)(i):Un(t.columns,t.name)(i);}function Nh(i,t){typeof t=="string"?Vn(t)(i):Vn(t.expression,t.name)(i);}var S=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var O=class extends S{constructor(e,r,n=false,o,s,a=false){super("where",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where";this.column=e,this.chainsWith=` ${r}`,this.isNegated=n,this.operator=o,this.value=s;}};var Ae=class extends S{constructor(e,r="and",n=false){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`,this.isNegated=n;}};var F=class extends O{constructor(e,r,n=false,o,s,a=false,l,u){super(e,r,n,"=",s,a);this.file="where_json";this.jsonOperator=o,this.value=s,this.path=l,this.comparisonOperator=u;}};var ce=class extends S{constructor(e,r,n,o="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_subquery";this.column=e,this.operator=r,this.subquery=n,this.chainsWith=` ${o}`;}};var G=class extends S{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 Jn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(n+=` ${s.join(" ")}`);}return {sql:`add ${n}`,bindings:[]}}},Ju=new Jn;var Hn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Hu=new Hn;var zn=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`[${n}]`).join(", ")})`,bindings:[]}}},zu=new zn;var Gn=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:[]}}},Gu=new Gn;var ct=class extends S{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};var Yn=class{toSql(t){let e=t,n=new h(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};if(e.children.length===1&&e.children[0]instanceof ct){let d=e.children[0];return {sql:`EXEC sp_rename '${e.table}', '${d.newName}'`,bindings:[]}}let o=new b(this.model,"mssql"),s=[],a=[];for(let d of e.children){let{sql:m,bindings:c}=o.parse([d]);s.push(m.trim()),a.push(...c);}let l=s.join(", ");return {sql:`${n} ${l}`,bindings:a}}},Yu=new Yn;var Zn=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},Zu=new Zn;var Xn=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},Xu=new Xn;var eo=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},ed=new eo;var kt=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"}},to=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)},Kt=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,to(t[r]));for(let r=0;r<t.length;r++){let n=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(n,to(t[r]));}for(let r=0;r<t.length;r++){let n=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(n,to(t[r]));}return e},mt=(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,Wt=(i,t)=>{let e=i.getDbType(),r;try{r=format(t,{...i.inputDetails.queryFormatOptions,language:kt(e)});}catch{try{r=format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var rd={info:0,warn:1,error:2};function gr(i){return i?i===true?{level:"info",logQueries:true}:{level:i.level??"info",logQueries:i.logQueries??true,customLogger:i.customLogger}:null}function Rh(i,t="info"){let e=gr(i);if(!e)return false;let r=e.level??"info";return rd[t]>=rd[r]}function _h(i){let t=gr(i);return t?t.logQueries??true:false}var je={info:"32",warn:"33",error:"31",query:"35",dim:"2",cyan:"36"},Mh=typeof process<"u"&&!!process.stdout?.isTTY&&!process.env.NO_COLOR,pt=(i,t)=>Mh?`\x1B[${i}m${t}\x1B[0m`:t;function id(){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 ro(i,t){let e=pt(je.dim,`[${id()}]`),r=pt(je[i],i.toUpperCase().padEnd(5));return `${e} ${r} ${t}`}var Oh=60,xh=10,nd=400;function hr(i,t=Oh){return i.length<=t?i:`${i.slice(0,t)}\u2026`}function Ah(i){if(i==null)return "null";if(typeof i=="string")return `'${hr(i)}'`;if(typeof i=="number"||typeof i=="bigint")return String(i);if(typeof i=="boolean")return i?"true":"false";if(i instanceof Date)return `'${hr(i.toISOString())}'`;if(typeof i=="object"){let t;try{t=JSON.stringify(i);}catch{t=String(i);}return `'${hr(t)}'`}return hr(String(i))}function Dh(i){if(!i||i.length===0)return "[]";let t=i.slice(0,xh).map(Ah),e=i.length-t.length;e>0&&t.push(`\u2026 (${e} more)`);let r=`[${t.join(", ")}]`;return r.length>nd&&(r=`${r.slice(0,nd)}\u2026`),r}var od=(i,t)=>{let e=" ".repeat(t);return i.split(`
|
|
2
2
|
`).map(r=>`${e}${r}`).join(`
|
|
3
|
-
`)};function
|
|
4
|
-
`)}var
|
|
5
|
-
`:e,bindings:[]}}},md=new uo;var mo=class{toSql(t){return {sql:"",bindings:[]}}},cd=new mo;var co=class{toSql(t){let e=t,r=new f(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let n=e.constraintName?`constraint [${e.constraintName}] `:"",o=(e.columns??[]).map(s=>r.formatStringColumn("mssql",q(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",q(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",q(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",q(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:[]}}},pd=new co;var po=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mssql"),s=[],a=[];for(let g of e.children){let{sql:y,bindings:w}=o.parse([g]);if(g.folder==="constraint"){let T=s.pop()??"",S=y;if(/not null/i.test(S)||/null/i.test(S)||/default/i.test(S)){let x=`${T} ${S}`.trim();x=x.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(x),a.push(...w);continue}s.push(T),s.push(S),a.push(...w);continue}s.push(y),a.push(...w);}for(let g of e.namedConstraints){let{sql:y,bindings:w}=o.parse([g]);s.push(y),a.push(...w);}let l=s.join(", "),u=[];e.dataCompression&&u.push(`DATA_COMPRESSION = ${e.dataCompression}`);let d=e.onFilegroup?` ON [${e.onFilegroup}]`:"",c=e.textImageOn?` TEXTIMAGE_ON [${e.textImageOn}]`:"",m=u.length>0?` WITH (${u.join(", ")})`:"";return {sql:`${n} (${l})${m}${d}${c}`,bindings:a}}},yd=new po;var yo=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mssql",e.fromNode),bindings:[]}}},fd=new yo;var fo=class{toSql(t){return {sql:"",bindings:[]}}},hd=new fo;var ho=class{toSql(t){return _.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},gd=new ho;var go=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},bd=new go;var bo=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Td=new bo;var To=class{toSql(t){let e=t,r=new f(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}}},wd=new To;var wo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},Nd=new wo;var No=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,n=new b(this.model,"mssql"),o=new f(this.model);if(e.group?.length){let{sql:u,bindings:d}=n.parse(e.group,e.currParamIndex,true);return {sql:`(${u})`,bindings:d}}let s=o.formatStringColumn("mssql",e.column),a="",l=[];if(e.subquery!==void 0){let u=this.parseSubquery(n,e,r);a=`${e.column?`${s} `:""}${e.operator} (${u.sql})`,l=u.bindings;}else if(e.value instanceof 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)}},Sd=new No;var So=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table),o=e.columns.map(a=>`[${a}]`).join(", ");return {sql:`${e.unique?"unique ":""}[${e.indexName}] on ${n} (${o})`,bindings:[]}}},qd=new So;var qo=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},Cd=new qo;var Co=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode),o=r.renderWithNodes("mssql",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u="",d;if(e.source){let 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(g=>r.formatStringColumn("mssql",g)).join(", ")})`;let p=[];for(let g of e.records){let y=m.map(T=>g[T]),w=[];for(let T of y)T instanceof O?w.push(T.rawValue):(l.push(T),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}},Rd=new Co;var Ro=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};if(e.using?.length)throw new h("JoinQueryBuilder::using","USING_NOT_SUPPORTED_IN_MSSQL");let r=new f(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 g=p.sql.replace(/^where\s+/i,"");u+=` and ${g}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},_d=new Ro;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;}},Md=(i,t,e,r)=>new Kt("set",i,t,e,r),Od=(i,t,e,r)=>new Kt("insert",i,t,e,r),Ad=(i,t,e)=>new Kt("remove",i,t,void 0,e),Dh=/^[A-Za-z_][A-Za-z0-9_]*$/;function xd(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 ft(i){return "$"+xd(i).map(e=>typeof e=="number"?`[${e}]`:Dh.test(e)?`.${e}`:`["${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"]`).join("")}function Dd(i){return `'{${xd(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 h("MssqlJsonMutationInterpreter::toSql","NOT_SUPPORTED_IN_MSSQL",new Error(`json${e.operation==="insert"?"Insert":"Remove"} is not supported by mssql; only jsonSet (JSON_MODIFY) is`));let r=new f(this.model).formatStringColumn("mssql",e.column),n=`'${ft(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}},Id=new _o;var Mo=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},$d=new Mo;var Oo=class{toSql(t){return {sql:"",bindings:[]}}},vd=new Oo;var Ao=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},Ed=new Ao;var xo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:(_.warn("MSSQL does not support ON CONFLICT or ON DUPLICATE KEY. Use MERGE statement for upsert operations. This clause will be ignored. Consider using raw queries for MSSQL upserts."),{sql:"",bindings:[]})}},Pd=new xo;var Do=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("mssql",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},Bd=new Do;var Io=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Qd=new Io;var $o=class{toSql(t){let e=t,r=new f(this.model);return {sql:`output ${!e.columns.length||e.columns.includes("*")?`${e.prefix}.*`:e.columns.map(o=>`${e.prefix}.${r.formatStringColumn("mssql",o)}${r.resolveColumnAlias("mssql",o)}`).join(", ")}`,bindings:[]}}},Kd=new $o;var vo=class{toSql(t){return {sql:`SELECT
|
|
3
|
+
`)};function Ih(i){let t=i<10?je.info:i<100?je.warn:je.error;return pt(t,`(${i}ms)`)}function $h(i,t,e){let r=pt(je.dim,`[${id()}]`),n=pt(je.query,"QUERY"),s=[e===void 0?`${r} ${n}`:`${r} ${n} ${Ih(e)}`,od(i,2)];return t&&t.length>0&&s.push(od(`parameters: ${pt(je.cyan,Dh(t))}`,4)),s.join(`
|
|
4
|
+
`)}var sd={info(i){console.log(ro("info",i));},error(i){console.error(ro("error",i));},warn(i){console.warn(ro("warn",i));}},yt=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===sd){console.log(t);return}this.loggerInstance.info(t);}};yt.loggerInstance=sd;function ft(i,t,e,r,n,o){if(!_h(t))return;let s=i;if(r||n)try{s=format(i,{...r,language:r?.language??(n?kt(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"}});yt.query($h(a,e,o));}function no(i,t,e=false){Rh(e,t)&&yt.loggerInstance[t](i);}var C=yt;var oo=class{toSql(t){let e=t;return C.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] null`,bindings:[]}}},ad=new oo;var so=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},ld=new so;var io=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},ud=new io;var ao=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},dd=new ao;var M=class extends S{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 $=class extends S{constructor(e,r=[]){super("sqlfunc");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="sqlfunc";this.file="sqlfunc";this.fn=e,this.args=r;}},vh={uuid:()=>new $("$uuid"),now:()=>new $("$now"),currentTimestamp:()=>new $("$currentTimestamp")},lo=new Map;function Eh(i,t){lo.set(i,t);}function Fe(i,t){let e=i===void 0?void 0:lo.get(i),r=lo.get("*");return e?.(t)??r?.(t)}var uo=class{toSql(t){let e=t,r;return e.defaultValue instanceof M?r=e.defaultValue.rawValue:e.defaultValue instanceof $?r=new b(this.model,"mssql").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"||e.defaultValue===null?r="null":e.defaultValue==="TRUE"?r="1":e.defaultValue==="FALSE"?r="0":typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="1"&&e.defaultValue!=="0"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`add constraint DF_${e.column} default ${r} for [${e.column}]`,bindings:[]}}},cd=new uo;var co=class{toSql(t){let e=t;return C.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] not null`,bindings:[]}}},md=new co;var mo=class{toSql(t){return {sql:"",bindings:[]}}},pd=new mo;var po=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new h(this.model).formatStringColumn("mssql",q(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:[]}}},yd=new po;var yo=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
5
|
+
`:e,bindings:[]}}},fd=new yo;var fo=class{toSql(t){return {sql:"",bindings:[]}}},hd=new fo;var ho=class{toSql(t){let e=t,r=new h(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",q(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",q(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 M?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof $?{sql:`default ${new b(this.model,"mssql").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"?{sql:"default 1",bindings:[]}:n==="FALSE"?{sql:"default 0",bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let n=e.columns.map(u=>r.formatStringColumn("mssql",q(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",q(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:[]}}},gd=new ho;var go=class{toSql(t){let e=t,n=new h(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 g of e.children){let{sql:y,bindings:T}=o.parse([g]);if(g.folder==="constraint"){let w=s.pop()??"",N=y;if(/not null/i.test(N)||/null/i.test(N)||/default/i.test(N)){let x=`${w} ${N}`.trim();x=x.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(x),a.push(...T);continue}s.push(w),s.push(N),a.push(...T);continue}s.push(y),a.push(...T);}for(let g of e.namedConstraints){let{sql:y,bindings:T}=o.parse([g]);s.push(y),a.push(...T);}let l=s.join(", "),u=[];e.dataCompression&&u.push(`DATA_COMPRESSION = ${e.dataCompression}`);let d=e.onFilegroup?` ON [${e.onFilegroup}]`:"",m=e.textImageOn?` TEXTIMAGE_ON [${e.textImageOn}]`:"",c=u.length>0?` WITH (${u.join(", ")})`:"";return {sql:`${n} (${l})${c}${d}${m}`,bindings:a}}},bd=new go;var bo=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new h(this.model).getFromForWriteOperations("mssql",e.fromNode),bindings:[]}}},Td=new bo;var To=class{toSql(t){return {sql:"",bindings:[]}}},wd=new To;var wo=class{toSql(t){return C.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},Sd=new wo;var So=class{toSql(t){let e=t,n=new h(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Nd=new So;var No=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},qd=new No;var qo=class{toSql(t){let e=t,r=new h(this.model),n=e.alias?` as ${r.quoteIdentifier("mssql",e.alias)}`:"";if(e.table instanceof M){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}}},Cd=new qo;var Co=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new h(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},Rd=new Co;var Ro=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 h(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 $){let u=n.parse([e.value],1,true).sql;a=`${s} ${e.operator} ${u}`;}else if(e.operator==="is null"||e.operator==="is not null")a=`${s} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")a=`${s} ${e.operator} @${r} and @${r+1}`;else {let u=e.value.map((d,m)=>`@${r+m}`).join(", ");a=`${s} ${e.operator} (${u})`;}l=e.value;}else a=`${s} ${e.operator} @${r}`,l=[e.value];return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:l}}parseSubquery(t,e,r){let n=e.subquery;if(typeof n=="string")return {sql:n,bindings:[]};let o=Array.isArray(n)?n:[n];return t.parse(o,r)}},_d=new Ro;var _o=class{toSql(t){let e=t,n=new h(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 _o;var Mo=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},Od=new Mo;var Oo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new h(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode),o=r.renderWithNodes("mssql",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u="",d;if(e.source){let c=new b(this.model,"mssql").parse(e.source,a);u=e.targetColumns?.length?` (${e.targetColumns.map(p=>r.formatStringColumn("mssql",p)).join(", ")})`:"",d=c.sql,l.push(...c.bindings);}else {let c=e.records.length?Object.keys(e.records[0]).filter(p=>e.records[0][p]!==void 0):[];if(!c.length)d="default values";else {u=` (${c.map(g=>r.formatStringColumn("mssql",g)).join(", ")})`;let p=[];for(let g of e.records){let y=c.map(w=>g[w]),T=[];for(let w of y)w instanceof M?T.push(w.rawValue):(l.push(w),T.push(`@${a++}`));p.push(`(${T.join(", ")})`);}d=`values ${p.join(", ")}`;}}let m="";return e.disableReturning||(m=` output ${(e.returning?.length?e.returning:this.getOutputColumns(e.source?e.targetColumns??[]:Object.keys(e.records[0]??{}).filter(p=>e.records[0][p]!==void 0),r)).map(p=>`inserted.${r.formatStringColumn("mssql",p)}${r.resolveColumnAlias("mssql",p)}`).join(", ")}`),{sql:`${s}${n}${u}${m} ${d}`,bindings:[...o.bindings,...l]}}getOutputColumns(t,e){let r=[...t],n=this.model.primaryKey;return n&&!t.includes(n)&&r.push(n),r}},xd=new Oo;var xo=class{toSql(t){let e=t;if(e.isRawValue)return new h(this.model).formatRawPlaceholders("mssql",e.table,e.bindings??[],e.currParamIndex);if(e.using?.length)throw new f("JoinQueryBuilder::using","USING_NOT_SUPPORTED_IN_MSSQL");let r=new h(this.model),n=e.subquery?.length&&!e.isRawValue?new b(this.model,"mssql").parse(e.subquery,e.currParamIndex):null,o=n?`(${n.sql}) as ${r.quoteIdentifier("mssql",e.table)}`:r.formatStringTable("mssql",e.schema?`${e.schema}.${e.table}`:e.table),s=n?.bindings??[];if(e.type==="cross")return {sql:o,bindings:s};let a=e.left;a.includes(".")||(a=`${e.table}.${a}`);let l=e.right;l.includes(".")||(l=`${this.model.table}.${l}`);let u=r.formatStringColumn("mssql",a),d=r.formatStringColumn("mssql",l),m=`${o} on ${u} ${e.on?.operator} ${d}`,c=[...s];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new b(this.model,"mssql");for(let g of e.additionalConditions){let y=p.parse([g],e.currParamIndex+c.length);if(y.sql){let T=y.sql.replace(/^where\s+/i,"");m+=` and ${T}`,c.push(...y.bindings);}}}return {sql:m,bindings:c}}},Ad=new xo;var Lt=class extends S{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;}},Dd=(i,t,e,r)=>new Lt("set",i,t,e,r),Id=(i,t,e,r)=>new Lt("insert",i,t,e,r),$d=(i,t,e)=>new Lt("remove",i,t,void 0,e),Ph=/^[A-Za-z_][A-Za-z0-9_]*$/;function vd(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 ht(i){return "$"+vd(i).map(e=>typeof e=="number"?`[${e}]`:Ph.test(e)?`.${e}`:`["${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"]`).join("")}function Ed(i){return `'{${vd(i).map(r=>{let n=String(r);return /^[A-Za-z0-9_]+$/.test(n)?n:`"${n.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}).join(",")}}'`}var Ao=class{toSql(t){let e=t;if(e.operation!=="set")throw new f("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 h(this.model).formatStringColumn("mssql",e.column),n=`'${ht(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}},Pd=new Ao;var Do=class{toSql(t){let e=t,r=e.currParamIndex;return e.skipBinding?{sql:`${e.limit}`,bindings:[]}:{sql:`fetch next @${r} rows only`,bindings:[e.limit]}}},Bd=new Do;var Io=class{toSql(t){return {sql:"",bindings:[]}}},Qd=new Io;var $o=class{toSql(t){let e=t,r=e.currParamIndex;return e.skipBinding?{sql:`${e.offset}`,bindings:[]}:{sql:`offset @${r} rows`,bindings:[e.offset]}}},kd=new $o;var vo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:(C.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:[]})}},Kd=new vo;var Eo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new h(this.model).formatStringColumn("mssql",e.column),n=e.direction.toLowerCase();if(e.nulls){let o=e.nulls==="first"?"desc":"asc";return {sql:`${`case when ${r} is null then 1 else 0 end ${o}`}, ${r} ${n}`,bindings:[]}}return {sql:`${r} ${n}`,bindings:[]}}},Wd=new Eo;var Po=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Ld=new Po;var Bo=class{toSql(t){let e=t,r=new h(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:[]}}},jd=new Bo;var Qo=class{toSql(t){return {sql:`SELECT
|
|
6
6
|
cc.name AS name,
|
|
7
7
|
cc.definition AS expression
|
|
8
8
|
FROM sys.check_constraints cc
|
|
9
9
|
JOIN sys.tables t ON cc.parent_object_id = t.object_id
|
|
10
|
-
WHERE t.name = '${t.table}'`,bindings:[]}}},
|
|
10
|
+
WHERE t.name = '${t.table}'`,bindings:[]}}},Fd=new Qo;var ko=class{toSql(t){return {sql:`SELECT
|
|
11
11
|
fk.name as name,
|
|
12
12
|
c.name as column_name,
|
|
13
13
|
rt.name as referenced_table,
|
|
@@ -19,7 +19,7 @@ INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_i
|
|
|
19
19
|
INNER JOIN sys.columns c ON fkc.parent_object_id = c.object_id AND fkc.parent_column_id = c.column_id
|
|
20
20
|
INNER JOIN sys.tables rt ON fkc.referenced_object_id = rt.object_id
|
|
21
21
|
INNER JOIN sys.columns rc ON fkc.referenced_object_id = rc.object_id AND fkc.referenced_column_id = rc.column_id
|
|
22
|
-
WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},
|
|
22
|
+
WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},Ud=new ko;var Ko=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:[]}}},Vd=new Ko;var Wo=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:[]}}},Jd=new Wo;var Lo=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:[]}}},Hd=new Lo;var jo=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:[]}}},zd=new jo;var Fo=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:[]}}},Gd=new Fo;var Uo=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:[]}}},Yd=new Uo;var Vo=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = '${t.table}'`,bindings:[]}}},Zd=new Vo;var Jo=class{toSql(t){return {sql:`SELECT
|
|
23
23
|
i.name as index_name,
|
|
24
24
|
c.name as column_name,
|
|
25
25
|
i.is_unique as is_unique
|
|
@@ -28,7 +28,7 @@ INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = i
|
|
|
28
28
|
INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
|
|
29
29
|
WHERE i.object_id = OBJECT_ID('${t.table}')
|
|
30
30
|
AND i.is_primary_key = 0
|
|
31
|
-
AND i.type > 0`,bindings:[]}}},
|
|
31
|
+
AND i.type > 0`,bindings:[]}}},Xd=new Jo;var Ho=class{toSql(t){return {sql:`SELECT
|
|
32
32
|
tc.CONSTRAINT_NAME as name,
|
|
33
33
|
kcu.COLUMN_NAME as column_name
|
|
34
34
|
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
|
|
@@ -36,7 +36,7 @@ JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
|
|
|
36
36
|
ON tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
|
|
37
37
|
WHERE tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
|
|
38
38
|
AND tc.TABLE_NAME = '${t.table}'
|
|
39
|
-
ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},
|
|
39
|
+
ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},ec=new Ho;var zo=class{toSql(t){return {sql:`SELECT
|
|
40
40
|
c.COLUMN_NAME as column_name,
|
|
41
41
|
c.DATA_TYPE as data_type,
|
|
42
42
|
c.IS_NULLABLE as is_nullable,
|
|
@@ -46,8 +46,8 @@ ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},Gd=new jo;var Uo=class{toSql(t){re
|
|
|
46
46
|
c.NUMERIC_SCALE as numeric_scale
|
|
47
47
|
FROM INFORMATION_SCHEMA.COLUMNS c
|
|
48
48
|
WHERE c.TABLE_NAME = '${t.table}'
|
|
49
|
-
ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Yd=new Uo;var Vo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("mssql",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"mssql").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"mssql").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new f(this.model).formatStringColumn("mssql",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"mssql").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},Zd=new Vo;var X=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 Jo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("mssql",e.column),n=X.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}},Xd=new Jo;var Ho=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 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}}},em=new Ho;var zo=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 h("MssqlTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("MSSQL does not support TRUNCATE options"));return {sql:`table ${new f(this.model).getFromForWriteOperations("mssql",e.fromNode)}`,bindings:[]}}},tm=new zo;var Go=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new f(this.model).formatRawPlaceholders("mssql",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},rm=new Go;var Yo=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((u,d)=>{let c=e.values[d],m=r.formatStringColumn("mssql",u);if(c instanceof O)return `${m} = ${c.rawValue}`;if(c instanceof N){let g=new b(this.model,"mssql").parse([c],s,true);return o.push(...g.bindings),s+=g.bindings.length,`${m} = ${g.sql}`}let p=`@${s++}`;return o.push(c),`${m} = ${p}`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},nm=new Yo;var Zo=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 f(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 f(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 f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`;return e.isNegated&&(u=`not (${u})`),{sql:u.trim(),bindings:[]}}let o=new f(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 f(this.model).formatStringColumn("mssql",t):t}},om=new Zo;var Xo=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}}},sm=new Xo;var es=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],s=new f(this.model).formatStringColumn("mssql",e.column);switch(e.jsonOperator){case "=":n=`${s} = @${r}`,o=[JSON.stringify(e.value)];break;case "contains":case "not contains":n=`CHARINDEX(@${r}, ${s}) > 0`,o=[JSON.stringify(e.value)];break;case "path":{let a=X.from(e.path??"");n=`JSON_VALUE(${s}, '${a.toMssql()}') ${e.comparisonOperator??"="} @${r}`,o=[e.value];break}case "subset":case "has none":throw new h("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}}},im=new es;var ts=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}}},am=new ts;var rs=class{toSql(t){let e=t,r=new f(this.model),n=s=>r.formatStringColumn("mssql",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},lm=new rs;var ns=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"&&_.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored.");let s=e.columns?.length?` (${e.columns.map(a=>new f(this.model).formatStringColumnBare("mssql",a)).join(", ")})`:"";return {sql:`[${e.alias}]${s} as (${o.sql})`,bindings:o.bindings}}},um=new ns;var os=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:[]}}},dm=new os;var ss=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},mm=new ss;var is=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`\`${n}\``).join(", ")})`,bindings:[]}}},cm=new is;var as=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:[]}}},pm=new as;var ls=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,this.dbType??"mysql"),s=[],a=[];for(let m of e.children){let{sql:p,bindings:g}=o.parse([m]);if(m.file==="add_column")s.push(p);else if(m.file==="add_constraint"||m.folder==="constraint"){let y=s[s.length-1]??"",w=/^\s*add\s+column\b/i.test(y),T=/^\s*add\s+constraint\b/i.test(p);if(w&&!T){let S=p.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${y} ${S}`;}else {let S=/^\s*add\b/i.test(p)?p:`add ${p}`;s.push(S);}}else m.file==="set_default"||m.file==="drop_default"||m.file==="set_not_null"||m.file,s.push(p);a.push(...g);}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}}},ym=new ls;var us=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},fm=new us;var ds=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},hm=new ds;var ms=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},gm=new ms;var cs=class{toSql(t){return {sql:"",bindings:[]}}},bm=new cs;var ps=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Tm=new ps;var ys=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},wm=new ys;var fs=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},Nm=new fs;var hs=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:[]}}},Sm=new hs;var gs=class{toSql(t){return {sql:"",bindings:[]}}},qm=new gs;var bs=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:[]}}},Cm=new bs;var Ts=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new f(this.model).formatStringColumn("mysql",q(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:[]}}},Rm=new Ts;var ws=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
50
|
-
`:e,bindings:[]}}},_m=new ws;var Ns=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Mm=new Ns;var Ss=class{toSql(t){let e=t,r=new f(this.model);if(e.constraintType==="primary_key"){let n=(e.columns??[]).map(s=>r.formatStringColumn("mysql",q(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",q(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",q(u))).join(", "),o=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("mysql",q(u))).join(", "),l=`${e.constraintName?`constraint \`${e.constraintName}\` `:""}foreign key (${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:[]}}},Om=new Ss;var qs=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mysql"),s=[],a=[];for(let p of e.children){let{sql:g,bindings:y}=o.parse([p]);if(p.folder==="constraint"){let w=s.pop()??"",T=g;if(/not null/i.test(T)||/null/i.test(T)||/default/i.test(T)){let S=`${w} ${T}`.trim();S=S.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(S),a.push(...y);continue}s.push(w),s.push(T),a.push(...y);continue}s.push(g),a.push(...y);}for(let p of e.namedConstraints){let{sql:g,bindings:y}=o.parse([p]);s.push(g),a.push(...y);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.engine&&d.push(`ENGINE=${e.engine}`),e.charset&&d.push(`CHARSET=${e.charset}`),e.collate&&d.push(`COLLATE=${e.collate}`);let c=d.length>0?` ${d.join(" ")}`:"";return {sql:`${u}${n} (${l})${c}`,bindings:a}}},Am=new qs;var Cs=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},xm=new Cs;var Rs=class{toSql(t){return {sql:"distinct",bindings:[]}}},Dm=new Rs;var _s=class{toSql(t){return _.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},Im=new _s;var Ms=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},$m=new Ms;var Os=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},vm=new Os;var As=class{toSql(t){let e=t,r=new f(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}}},Em=new As;var xs=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},Pm=new xs;var Ds=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=new b(this.model,"mysql"),n=new f(this.model);if(e.group?.length){let{sql:l,bindings:u}=r.parse(e.group,e.currParamIndex,true);return {sql:`(${l})`,bindings:u}}let o=n.formatStringColumn("mysql",e.column),s="",a=[];if(e.subquery!==void 0){let l=this.parseSubquery(r,e);s=`${e.column?`${o} `:""}${e.operator} (${l.sql})`,a=l.bindings;}else if(e.value instanceof 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)}},Bm=new Ds;var Is=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mysql",e.table),o=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${n} (${o})`,bindings:[]}}},Qm=new Is;var $s=class{toSql(t){let e=t;if(!e.table)throw new Error("MySQL DROP INDEX requires table name");return {sql:`\`${e.indexName}\` on \`${e.table}\``,bindings:[]}}},Km=new $s;var vs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=this.dbType==="mariadb"?"mariadb":"mysql",n=new f(this.model),o=n.getFromForWriteOperations(r,e.fromNode);if(e.withNodes?.length&&!e.source)throw new h("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(g=>n.formatStringColumn(r,g)).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(g=>n.formatStringColumn(r,g)).join(", "),p=[];for(let g of e.records){let y=c.map(T=>g[T]),w=[];for(let T of y)T instanceof O?w.push(T.rawValue):(l.push(T),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]}}},km=new vs;var Es=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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 g=p.sql.replace(/^where\s+/i,"");o+=` and ${g}`,d.push(...p.bindings);}}}return {sql:o,bindings:d}}},Lm=new Es;var Ih={set:"JSON_SET",insert:"JSON_INSERT",remove:"JSON_REMOVE"},Ps=class{toSql(t){let e=t,r=new f(this.model).formatStringColumn("mysql",e.column),n=`'${ft(e.path).replace(/'/g,"''")}'`,o=Ih[e.operation];if(e.operation==="remove")return {sql:this.withAlias(`${o}(${r}, ${n})`,e.alias),bindings:[]};let s=e.value!==null&&typeof e.value=="object",a=s&&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}},Wm=new Ps;var Bs=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Fm=new Bs;var $h={for_update:"for update",for_share:"lock in share mode"},Qs=class{toSql(t){let e=t,r=$h[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},jm=new Qs;var Ks=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Um=new Ks;var ks=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model);if(e.mode==="ignore"){let o=e.conflictColumns?.[0]||"id",s=r.formatStringColumn("mysql",`${e.table}.${o}`);return {sql:`ON DUPLICATE KEY UPDATE ${s} = ${s}`,bindings:[]}}return {sql:`ON DUPLICATE KEY UPDATE ${e.columnsToUpdate.map(o=>`${r.formatStringColumn("mysql",o)} = VALUES(${r.formatStringColumn("mysql",o)})`).join(", ")}`,bindings:[]}}},Vm=new ks;var Ls=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("mysql",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},Jm=new Ls;var Ws=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Hm=new Ws;var Fs=class{toSql(t){return {sql:"",bindings:[]}}},zm=new Fs;var js=class{toSql(t){return {sql:`SELECT
|
|
49
|
+
ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},tc=new zo;var Go=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 h(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 h(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}]`:""}},rc=new Go;var X=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 Yo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new h(this.model).formatStringColumn("mssql",e.column),n=X.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}},nc=new Yo;var Zo=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 M?s.rawValue:s instanceof $?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "NEWID()";case "$now":case "$currentTimestamp":return "current_timestamp";default:return}}},oc=new Zo;var Xo=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 f("MssqlTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("MSSQL does not support TRUNCATE options"));return {sql:`table ${new h(this.model).getFromForWriteOperations("mssql",e.fromNode)}`,bindings:[]}}},sc=new Xo;var es=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 h(this.model).formatRawPlaceholders("mssql",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:e.wrap?`(${o.sql})`:o.sql,bindings:o.bindings}}},ic=new es;var ts=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new h(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((u,d)=>{let m=e.values[d],c=r.formatStringColumn("mssql",u);if(m instanceof M)return `${c} = ${m.rawValue}`;if(m instanceof S){let g=new b(this.model,"mssql").parse([m],s,true);return o.push(...g.bindings),s+=g.bindings.length,`${c} = ${g.sql}`}let p=`@${s++}`;return o.push(m),`${c} = ${p}`}).join(", ");return {sql:`${n} set ${a}${this.renderFromSource(e,s,o)}`,bindings:o}}renderFromSource(t,e,r){if(!t.fromSourceNode)return "";let n=new h(this.model).getWriteSource("mssql",t.fromSourceNode,e);return r.push(...n.bindings),` from ${n.sql}`}},ac=new ts;var rs=class{toSql(t){let e=t;if(e.isRawValue){let m=e.value??[];if(m.length===0)return {sql:e.column,bindings:[]};let c=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`@${c++}`),bindings:m}}let r=e.value,n=e.currParamIndex,o=e.operator.toLowerCase(),s=o==="ilike"||o==="not ilike",a=o==="not ilike"?"not like":s?"like":e.operator,l=m=>s?`lower(${m})`:m;if(this.isRawNode(r)){let m=this.formatRawIdentifierIfPossible(r.rawValue),c=new h(this.model).formatStringColumn("mssql",e.column),p=`${l(c)} ${a} ${l(m)}`.trim();return e.isNegated&&(p=`not (${p})`),{sql:p,bindings:[]}}if(e.tupleColumns?.length){let m=new h(this.model),c=e.tupleColumns.map(T=>m.formatStringColumn("mssql",T)),p=r,g=n,y=p.map(()=>`(${c.map(T=>`${T} = @${g++}`).join(" and ")})`).join(" or ");return {sql:(e.isNegated?`not (${y})`:y).trim(),bindings:p.flat()}}if(Array.isArray(r)){let m=new h(this.model).formatStringColumn("mssql",e.column);if(e.operator.toLowerCase()==="between"){let g=`@${n} AND @${n+1}`,y=`${m} between ${g}`;return e.isNegated&&(y=`not (${y})`),{sql:y.trim(),bindings:r}}let c=r.map((g,y)=>`@${n+y}`).join(", "),p=`${m} ${e.operator} (${c})`;return e.isNegated&&(p=`not (${p})`),{sql:p.trim(),bindings:r}}if(r instanceof $){let m=new b(this.model,"mssql").parse([r],1,true).sql,c=new h(this.model).formatStringColumn("mssql",e.column),p=`${l(c)} ${a} ${l(m)}`;return e.isNegated&&(p=`not (${p})`),{sql:p.trim(),bindings:[]}}let u=new h(this.model).formatStringColumn("mssql",e.column);if(e.operator.includes("null")){let m=`${u} ${e.operator}`;return e.isNegated&&(m=`not (${m})`),{sql:m.trim(),bindings:[]}}if(r===void 0)return {sql:"",bindings:[]};let d=`${l(u)} ${a} ${s?`lower(@${n})`:`@${n}`}`;return e.isNegated&&(d=`not (${d})`),{sql:d.trim(),bindings:[r]}}isRawNode(t){if(!t||!(typeof t=="object"))return false;let r="rawValue"in t,n=t.isRawValue===true;return r&&n}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new h(this.model).formatStringColumn("mssql",t):t}},lc=new rs;var ns=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"mssql"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:e.isNegated?`not (${n})`:`(${n})`,bindings:o}}},uc=new ns;var os=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],s=new h(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=X.from(e.path??"");n=`JSON_VALUE(${s}, '${a.toMssql()}') ${e.comparisonOperator??"="} @${r}`,o=[e.value];break}case "subset":case "has none":throw new f("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}}},dc=new os;var ss=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}}},cc=new ss;var is=class{toSql(t){let e=t,r=new h(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:[]}}},mc=new is;var as=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"&&C.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored.");let s=e.columns?.length?` (${e.columns.map(a=>new h(this.model).formatStringColumnBare("mssql",a)).join(", ")})`:"";return {sql:`[${e.alias}]${s} as (${o.sql})`,bindings:o.bindings}}},pc=new as;var ls=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:[]}}},yc=new ls;var us=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},fc=new us;var ds=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`\`${n}\``).join(", ")})`,bindings:[]}}},hc=new ds;var cs=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:[]}}},gc=new cs;var ms=class{toSql(t){let e=t,n=new h(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,this.dbType??"mysql"),s=[],a=[];for(let c of e.children){let{sql:p,bindings:g}=o.parse([c]);if(c.file==="add_column")s.push(p);else if(c.file==="add_constraint"||c.folder==="constraint"){let y=s[s.length-1]??"",T=/^\s*add\s+column\b/i.test(y),w=/^\s*add\s+constraint\b/i.test(p);if(T&&!w){let N=p.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${y} ${N}`;}else {let N=/^\s*add\b/i.test(p)?p:`add ${p}`;s.push(N);}}else c.file==="set_default"||c.file==="drop_default"||c.file==="set_not_null"||c.file,s.push(p);a.push(...g);}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}}},bc=new ms;var ps=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},Tc=new ps;var ys=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},wc=new ys;var fs=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},Sc=new fs;var hs=class{toSql(t){return {sql:"",bindings:[]}}},Nc=new hs;var gs=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},qc=new gs;var bs=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},Cc=new bs;var Ts=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},Rc=new Ts;var ws=class{toSql(t){let e=t,r;return e.defaultValue instanceof M?r=e.defaultValue.rawValue:e.defaultValue instanceof $?r=new b(this.model,"mysql").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column \`${e.column}\` set default ${r}`,bindings:[]}}},_c=new ws;var Ss=class{toSql(t){return {sql:"",bindings:[]}}},Mc=new Ss;var Ns=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:[]}}},Oc=new Ns;var qs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new h(this.model).formatStringColumn("mysql",q(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:[]}}},xc=new qs;var Cs=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
50
|
+
`:e,bindings:[]}}},Ac=new Cs;var Rs=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Dc=new Rs;var _s=class{toSql(t){let e=t,r=new h(this.model);if(e.constraintType==="primary_key"){let n=(e.columns??[]).map(s=>r.formatStringColumn("mysql",q(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",q(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 M?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof $?{sql:`default ${new b(this.model,"mysql").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let n=(e.columns??[]).map(u=>r.formatStringColumn("mysql",q(u))).join(", "),o=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("mysql",q(u))).join(", "),l=`${e.constraintName?`constraint \`${e.constraintName}\` `:""}foreign key (${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:[]}}},Ic=new _s;var Ms=class{toSql(t){let e=t,n=new h(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:g,bindings:y}=o.parse([p]);if(p.folder==="constraint"){let T=s.pop()??"",w=g;if(/not null/i.test(w)||/null/i.test(w)||/default/i.test(w)){let N=`${T} ${w}`.trim();N=N.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(N),a.push(...y);continue}s.push(T),s.push(w),a.push(...y);continue}s.push(g),a.push(...y);}for(let p of e.namedConstraints){let{sql:g,bindings:y}=o.parse([p]);s.push(g),a.push(...y);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.engine&&d.push(`ENGINE=${e.engine}`),e.charset&&d.push(`CHARSET=${e.charset}`),e.collate&&d.push(`COLLATE=${e.collate}`);let m=d.length>0?` ${d.join(" ")}`:"";return {sql:`${u}${n} (${l})${m}`,bindings:a}}},$c=new Ms;var Os=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode.table=="string")return {sql:e.fromNode.table,bindings:[]};let r=new h(this.model).getFromForWriteOperations("mysql",e.fromNode);if(!e.joinNodes?.length)return {sql:r,bindings:[]};let n=new b(this.model,"mysql").parse(e.joinNodes,e.currParamIndex);return {sql:`${r} from ${r} ${n.sql}`,bindings:n.bindings}}},vc=new Os;var xs=class{toSql(t){return {sql:"distinct",bindings:[]}}},Ec=new xs;var As=class{toSql(t){return C.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},Pc=new As;var Ds=class{toSql(t){let e=t,n=new h(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Bc=new Ds;var Is=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Qc=new Is;var $s=class{toSql(t){let e=t,r=new h(this.model),n=e.alias?` as ${r.quoteIdentifier("mysql",e.alias)}`:"";if(e.table instanceof M){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}}},kc=new $s;var vs=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new h(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},Kc=new vs;var Es=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 h(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 $){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)}},Wc=new Es;var Ps=class{toSql(t){let e=t,n=new h(this.model).formatStringTable("mysql",e.table),o=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${n} (${o})`,bindings:[]}}},Lc=new Ps;var Bs=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:[]}}},jc=new Bs;var Qs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=this.dbType==="mariadb"?"mariadb":"mysql",n=new h(this.model),o=n.getFromForWriteOperations(r,e.fromNode);if(e.withNodes?.length&&!e.source)throw new f("MysqlInsertInterpreter","CTE_NOT_SUPPORTED_ON_INSERT",new Error("MySQL/MariaDB only support a CTE on INSERT ... SELECT (insertFrom), not on a VALUES insert"));let s=n.renderWithNodes(r,e.withNodes,e.currParamIndex),a=e.currParamIndex+s.bindings.length,l=[],u;if(e.source){let m=new b(this.model,r).parse(e.source,a),c=e.targetColumns?.length?` (${e.targetColumns.map(g=>n.formatStringColumn(r,g)).join(", ")})`:"",p=s.sql?` ${s.sql}`:"";u=`${o}${c}${p} ${m.sql}`,l.push(...m.bindings);}else {let m=e.records.length?Object.keys(e.records[0]):[];if(!m.length)u=`${o} () values ()`;else {let c=m.map(g=>n.formatStringColumn(r,g)).join(", "),p=[];for(let g of e.records){let y=m.map(w=>g[w]),T=[];for(let w of y)w instanceof M?T.push(w.rawValue):(l.push(w),T.push("?"));p.push(`(${T.join(", ")})`);}u=`${o} (${c}) VALUES ${p.join(", ")}`;}}let d=`${u}`;if(this.dbType==="mariadb"&&!e.disableReturning){if(e.returning&&e.returning.length){let m=e.returning.map(c=>n.formatStringColumn("mariadb",c)).join(", ");return {sql:`${d} returning ${m}`,bindings:[...s.bindings,...l]}}return {sql:`${d} returning *`,bindings:[...s.bindings,...l]}}return {sql:d,bindings:[...s.bindings,...l]}}},Fc=new Qs;var ks=class{toSql(t){let e=t;if(e.isRawValue)return new h(this.model).formatRawPlaceholders("mysql",e.table,e.bindings??[],e.currParamIndex);let r=new h(this.model),n=e.subquery?.length&&!e.isRawValue?new b(this.model,"mysql").parse(e.subquery,e.currParamIndex):null,o=n?`(${n.sql}) as ${r.quoteIdentifier("mysql",e.table)}`:r.formatStringTable("mysql",e.schema?`${e.schema}.${e.table}`:e.table),s=n?.bindings??[];if(e.type==="cross")return {sql:o,bindings:s};let a;if(e.using?.length){let p=e.using.map(g=>r.formatStringColumn("mysql",g)).join(", ");return a=`${o} using (${p})`,{sql:a,bindings:s}}let l=e.left;l.includes(".")||(l=`${e.table}.${l}`);let u=e.right;u.includes(".")||(u=`${this.model.table}.${u}`);let d=r.formatStringColumn("mysql",l),m=r.formatStringColumn("mysql",u);a=`${o} on ${d} ${e.on?.operator} ${m}`;let c=[...s];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new b(this.model,"mysql");for(let g of e.additionalConditions){let y=p.parse([g],e.currParamIndex+c.length);if(y.sql){let T=y.sql.replace(/^where\s+/i,"");a+=` and ${T}`,c.push(...y.bindings);}}}return {sql:a,bindings:c}}},Uc=new ks;var Bh={set:"JSON_SET",insert:"JSON_INSERT",remove:"JSON_REMOVE"},Ks=class{toSql(t){let e=t,r=new h(this.model).formatStringColumn("mysql",e.column),n=`'${ht(e.path).replace(/'/g,"''")}'`,o=Bh[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}},Vc=new Ks;var Ws=class{toSql(t){let e=t;return e.skipBinding?{sql:`${e.limit}`,bindings:[]}:{sql:"?",bindings:[e.limit]}}},Jc=new Ws;var Qh={for_update:"for update",for_share:"lock in share mode"},Ls=class{toSql(t){let e=t,r=Qh[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},Hc=new Ls;var js=class{toSql(t){let e=t;return e.skipBinding?{sql:`${e.offset}`,bindings:[]}:{sql:"?",bindings:[e.offset]}}},zc=new js;var Fs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(this.model);if(e.mode==="ignore"){let 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:[]}}},Gc=new Fs;var Us=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new h(this.model).formatStringColumn("mysql",e.column),n=e.direction.toLowerCase();if(e.nulls){let o=e.nulls==="first"?"desc":"asc";return {sql:`${r} is null ${o}, ${r} ${n}`,bindings:[]}}return {sql:`${r} ${n}`,bindings:[]}}},Yc=new Us;var Vs=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Zc=new Vs;var Js=class{toSql(t){return {sql:"",bindings:[]}}},Xc=new Js;var Hs=class{toSql(t){return {sql:`SELECT
|
|
51
51
|
cc.CONSTRAINT_NAME AS name,
|
|
52
52
|
cc.CHECK_CLAUSE AS expression
|
|
53
53
|
FROM information_schema.CHECK_CONSTRAINTS cc
|
|
@@ -56,7 +56,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Yd=new Uo;var Vo=class{toSql(t){let
|
|
|
56
56
|
AND cc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
|
|
57
57
|
WHERE tc.TABLE_SCHEMA = DATABASE()
|
|
58
58
|
AND tc.TABLE_NAME = '${t.table}'
|
|
59
|
-
AND tc.CONSTRAINT_TYPE = 'CHECK'`,bindings:[]}}},
|
|
59
|
+
AND tc.CONSTRAINT_TYPE = 'CHECK'`,bindings:[]}}},em=new Hs;var zs=class{toSql(t){return {sql:`SELECT
|
|
60
60
|
k.CONSTRAINT_NAME AS name,
|
|
61
61
|
k.COLUMN_NAME AS column_name,
|
|
62
62
|
k.REFERENCED_TABLE_NAME AS referenced_table,
|
|
@@ -67,13 +67,13 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Yd=new Uo;var Vo=class{toSql(t){let
|
|
|
67
67
|
JOIN information_schema.REFERENTIAL_CONSTRAINTS r
|
|
68
68
|
ON k.CONSTRAINT_NAME = r.CONSTRAINT_NAME AND k.CONSTRAINT_SCHEMA = r.CONSTRAINT_SCHEMA
|
|
69
69
|
WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.REFERENCED_TABLE_NAME IS NOT NULL
|
|
70
|
-
ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},
|
|
70
|
+
ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},tm=new zs;var Gs=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:[]}}},rm=new Gs;var Ys=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:[]}}},nm=new Ys;var Zs=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.check_constraints WHERE constraint_schema = DATABASE() AND constraint_name = '${t.constraint}'`,bindings:[]}}},om=new Zs;var Xs=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:[]}}},sm=new Xs;var ei=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:[]}}},im=new ei;var ti=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:[]}}},am=new ti;var ri=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = '${t.table}'`,bindings:[]}}},lm=new ri;var ni=class{toSql(t){return {sql:`SHOW INDEX FROM \`${t.table}\``,bindings:[]}}},um=new ni;var oi=class{toSql(t){return {sql:`SELECT
|
|
71
71
|
CONSTRAINT_NAME AS name,
|
|
72
72
|
COLUMN_NAME AS column_name
|
|
73
73
|
FROM information_schema.KEY_COLUMN_USAGE k
|
|
74
74
|
WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.CONSTRAINT_NAME = 'PRIMARY'
|
|
75
|
-
ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},ic=new ei;var ti=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:[]}}},ac=new ti;var ri=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("mysql",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"mysql").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"mysql").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new f(this.model).formatStringColumn("mysql",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"mysql").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},lc=new ri;var ni=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("mysql",e.column),n=X.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}},uc=new ni;var oi=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 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}}},dc=new oi;var si=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 h("MysqlTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("MySQL/MariaDB do not support TRUNCATE options"));return {sql:new f(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},mc=new si;var ii=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new f(this.model).formatRawPlaceholders("mysql",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},cc=new ii;var ai=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),n=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=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}}},pc=new ai;var li=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 f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${o}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new f(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,n=e.value;else {let o=e.value.map(s=>"?").join(", ");r=`${new f(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 f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${o}`,n=[];}else if(e.operator.includes("null"))r=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new f(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 f(this.model).formatStringColumn("mysql",t):t}},yc=new li;var ui=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}}},fc=new ui;var di=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new f(this.model).formatStringColumn("mysql",e.column);switch(e.jsonOperator){case "=":r=this.dbType==="mariadb"?`${o} = ?`:`${o} = CAST(? AS JSON)`,n=[JSON.stringify(e.value)];break;case "contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "subset":r=`JSON_CONTAINS(?, ${o})`,n=[JSON.stringify(e.value)];break;case "path":{let s=X.from(e.path??"");r=`JSON_UNQUOTE(JSON_EXTRACT(${o}, '${s.toMysql()}')) ${e.comparisonOperator??"="} ?`,n=[e.value];break}case "has none":throw new h("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}}},hc=new di;var mi=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}}},gc=new mi;var ci=class{toSql(t){let e=t,r=new f(this.model),n=s=>r.formatStringColumn("mysql",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},bc=new ci;var pi=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.columns?.length?` (${e.columns.map(a=>new f(this.model).formatStringColumnBare("mysql",a)).join(", ")})`:"";return {sql:`${e.alias}${s} as (${o.sql})`,bindings:o.bindings}}},Tc=new pi;var yi=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:[]}}},wc=new yi;var fi=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Nc=new fi;var hi=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`"${n}"`).join(", ")})`,bindings:[]}}},Sc=new hi;var gi=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:[]}}},qc=new gi;var bi=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"postgres"),s=[],a=[];for(let 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}}},Cc=new bi;var Ti=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Rc=new Ti;var wi=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},_c=new wi;var Ni=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Mc=new Ni;var Si=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Oc=new Si;var qi=class{toSql(t){return {sql:"",bindings:[]}}},Ac=new qi;var Ci=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},xc=new Ci;var Ri=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Dc=new Ri;var _i=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:[]}}},Ic=new _i;var Mi=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},$c=new Mi;var Oi=class{toSql(t){return {sql:"",bindings:[]}}},vc=new Oi;var Ai=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new f(this.model).formatStringColumn("postgres",q(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:[]}}},Ec=new Ai;var xi=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
76
|
-
`:e,bindings:[]}}},Pc=new xi;var Di=class{toSql(t){return {sql:"",bindings:[]}}},Bc=new Di;var Ii=class{toSql(t){let e=t,r=new f(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let n=e.constraintName?`constraint "${e.constraintName}" `:"",o=(e.columns??[]).map(s=>r.formatStringColumn("postgres",q(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",q(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",q(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",q(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:[]}}},Qc=new Ii;var $i=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"postgres"),s=[],a=[];for(let T of e.children){let{sql:S,bindings:x}=o.parse([T]);if(T.folder==="constraint"){let C=s.pop()??"",I=S;if(/not null/i.test(I)||/null/i.test(I)||/default/i.test(I)){let D=`${C} ${I}`.trim();D=D.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(D),a.push(...x);continue}s.push(C),s.push(I),a.push(...x);continue}s.push(S),a.push(...x);}for(let T of e.namedConstraints){let{sql:S,bindings:x}=o.parse([T]);s.push(S),a.push(...x);}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 T=Object.entries(e.postgresWith).map(([S,x])=>`${S}=${x}`).join(", ");T&&c.push(`WITH (${T})`);}let m=e.tablespace?`TABLESPACE ${e.tablespace}`:"",p=d.length>0?`${d.join(" ")} `:"",g=c.length>0?` ${c.join(" ")}`:"",y=m?` ${m}`:"";return {sql:`${u}${p}${n} (${l})${g}${y}`,bindings:a}}},Kc=new $i;var vi=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},kc=new vi;var Ei=class{toSql(t){return {sql:"",bindings:[]}}},Lc=new Ei;var Pi=class{toSql(t){return {sql:`(${t.columns.map(n=>new f(this.model).formatStringColumn("postgres",n)).join(", ")})`,bindings:[]}}},Wc=new Pi;var Bi=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Fc=new Bi;var Qi=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},jc=new Qi;var Ki=class{toSql(t){let e=t,r=new f(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}}},Uc=new Ki;var ki=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},Vc=new ki;var Li=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,n=new b(this.model,"postgres"),o=new f(this.model);if(e.group?.length){let{sql:u,bindings:d}=n.parse(e.group,e.currParamIndex,true);return {sql:`(${u})`,bindings:d}}let s=o.formatStringColumn("postgres",e.column),a="",l=[];if(e.subquery!==void 0){let u=this.parseSubquery(n,e,r);a=`${e.column?`${s} `:""}${e.operator} (${u.sql})`,l=u.bindings;}else if(e.value instanceof 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)}},Jc=new Li;var Wi=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("postgres",e.table),o=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${n} (${o})`,bindings:[]}}},Hc=new Wi;var Fi=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},zc=new Fi;var ji=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode),o=r.renderWithNodes("postgres",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u;if(e.source){let 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(y=>r.formatStringColumn("postgres",y)).join(", "),p=[],g=typeof this.model?.getColumnsByName=="function"?this.model.getColumnsByName():new Map;for(let y of e.records){let w=c.map(S=>y[S]),T=[];for(let S=0;S<c.length;S++){let x=w[S];x instanceof O?T.push(x.rawValue):(l.push(x),T.push(`$${a++}${this.formatTypeCast(x,g.get(c[S])?.type)}`));}p.push(`(${T.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}},Gc=new ji;var Ui=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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 g=p.sql.replace(/^where\s+/i,"");o+=` and ${g}`,d.push(...p.bindings);}}}return {sql:o,bindings:d}}},Yc=new Ui;var Vi=class{toSql(t){let e=t,r=new f(this.model).formatStringColumn("postgres",e.column),n=Dd(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}},Zc=new Vi;var Ji=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},Xc=new Ji;var vh={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},Hi=class{toSql(t){let e=t,r=vh[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},ep=new Hi;var zi=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},tp=new zi;var Gi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=e.conflictColumns.map(l=>r.formatStringColumnBare("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:[]}}},rp=new Gi;var Yi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("postgres",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},np=new Yi;var Zi=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},op=new Zi;var Xi=class{toSql(t){let e=t,r=new f(this.model);return {sql:`returning ${!e.columns.length||e.columns.includes("*")?"*":e.columns.map(o=>r.formatStringColumn("postgres",o)).join(", ")}`,bindings:[]}}},sp=new Xi;var ea=class{toSql(t){return {sql:`SELECT
|
|
75
|
+
ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},dm=new oi;var si=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:[]}}},cm=new si;var ii=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 h(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 h(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}\``:""}},mm=new ii;var ai=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new h(this.model).formatStringColumn("mysql",e.column),n=X.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}},pm=new ai;var li=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 M?s.rawValue:s instanceof $?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "(uuid())";case "$now":return "now()";case "$currentTimestamp":return "current_timestamp";default:return}}},ym=new li;var ui=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 f("MysqlTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("MySQL/MariaDB do not support TRUNCATE options"));return {sql:new h(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},fm=new ui;var di=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 h(this.model).formatRawPlaceholders("mysql",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:e.wrap?`(${o.sql})`:o.sql,bindings:o.bindings}}},hm=new di;var ci=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new h(this.model),n=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a="";if(e.joinNodes?.length){let d=new b(this.model,"mysql").parse(e.joinNodes,s);a=`${d.sql} `,o.push(...d.bindings),s+=d.bindings.length;}let l=e.columns.map((d,m)=>{let c=e.values[m],p=r.formatStringColumn("mysql",d);if(c instanceof M)return `${p} = ${c.rawValue}`;if(c instanceof S){let g=new b(this.model,"mysql").parse([c],s,true);return o.push(...g.bindings),s+=g.bindings.length,`${p} = ${g.sql}`}return o.push(c),`${p} = ?`}).join(", ");return {sql:`${n} ${a}set ${l}`,bindings:o}}},gm=new ci;var mi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",n=[],o=e.operator.toLowerCase(),s=o==="ilike"||o==="not ilike",a=o==="not ilike"?"not like":s?"like":e.operator,l=u=>s?`lower(${u})`:u;if(this.isRawNode(e.value)){let u=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${l(new h(this.model).formatStringColumn("mysql",e.column))} ${a} ${l(u)}`,n=[];}else if(e.tupleColumns?.length){let u=e.tupleColumns.map(c=>new h(this.model).formatStringColumn("mysql",c)).join(", "),d=e.value,m=d.map(c=>`(${c.map(()=>"?").join(", ")})`).join(", ");r=`(${u}) ${e.operator} (${m})`,n=d.flat();}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new h(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,n=e.value;else {let u=e.value.map(d=>"?").join(", ");r=`${new h(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${u})`,n=e.value;}else if(e.value instanceof $){let u=new b(this.model,"mysql").parse([e.value],1,true).sql;r=`${l(new h(this.model).formatStringColumn("mysql",e.column))} ${a} ${l(u)}`,n=[];}else if(e.operator.includes("null"))r=`${new h(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${l(new h(this.model).formatStringColumn("mysql",e.column))} ${a} ${s?"lower(?)":"?"}`,n=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new h(this.model).formatStringColumn("mysql",t):t}},bm=new mi;var pi=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"mysql"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:e.isNegated?`not (${n})`:`(${n})`,bindings:o}}},Tm=new pi;var yi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new h(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=X.from(e.path??"");r=`JSON_UNQUOTE(JSON_EXTRACT(${o}, '${s.toMysql()}')) ${e.comparisonOperator??"="} ?`,n=[e.value];break}case "has none":throw new f("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}}},wm=new yi;var fi=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}}},Sm=new fi;var hi=class{toSql(t){let e=t,r=new h(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:[]}}},Nm=new hi;var gi=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 h(this.model).formatStringColumnBare("mysql",a)).join(", ")})`:"";return {sql:`${e.alias}${s} as (${o.sql})`,bindings:o.bindings}}},qm=new gi;var bi=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:[]}}},Cm=new bi;var Ti=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Rm=new Ti;var wi=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`"${n}"`).join(", ")})`,bindings:[]}}},_m=new wi;var Si=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 Si;var Ni=class{toSql(t){let e=t,n=new h(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"postgres"),s=[],a=[];for(let m of e.children){let{sql:c,bindings:p}=o.parse([m]);s.push(c.trim()),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifExists?"if exists ":""}${n} ${l}`,bindings:a}}},Om=new Ni;var qi=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},xm=new qi;var Ci=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},Am=new Ci;var Ri=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Dm=new Ri;var _i=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Im=new _i;var Mi=class{toSql(t){return {sql:"",bindings:[]}}},$m=new Mi;var Oi=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},vm=new Oi;var xi=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Em=new xi;var Ai=class{toSql(t){let e=t,r;return e.defaultValue instanceof M?r=e.defaultValue.rawValue:e.defaultValue instanceof $?r=new b(this.model,"postgres").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},Pm=new Ai;var Di=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Bm=new Di;var Ii=class{toSql(t){return {sql:"",bindings:[]}}},Qm=new Ii;var $i=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new h(this.model).formatStringColumn("postgres",q(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:[]}}},km=new $i;var vi=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
76
|
+
`:e,bindings:[]}}},Km=new vi;var Ei=class{toSql(t){return {sql:"",bindings:[]}}},Wm=new Ei;var Pi=class{toSql(t){let e=t,r=new h(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",q(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",q(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 M?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof $?{sql:`default ${new b(this.model,"postgres").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let n=e.columns.map(u=>r.formatStringColumn("postgres",q(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",q(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:[]}}},Lm=new Pi;var Bi=class{toSql(t){let e=t,n=new h(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:N,bindings:x}=o.parse([w]);if(w.folder==="constraint"){let R=s.pop()??"",D=N;if(/not null/i.test(D)||/null/i.test(D)||/default/i.test(D)){let I=`${R} ${D}`.trim();I=I.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(I),a.push(...x);continue}s.push(R),s.push(D),a.push(...x);continue}s.push(N),a.push(...x);}for(let w of e.namedConstraints){let{sql:N,bindings:x}=o.parse([w]);s.push(N),a.push(...x);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.temporary&&d.push("TEMPORARY"),e.unlogged&&d.push("UNLOGGED");let m=[];if(e.postgresWith){let w=Object.entries(e.postgresWith).map(([N,x])=>`${N}=${x}`).join(", ");w&&m.push(`WITH (${w})`);}let c=e.tablespace?`TABLESPACE ${e.tablespace}`:"",p=d.length>0?`${d.join(" ")} `:"",g=m.length>0?` ${m.join(" ")}`:"",y=c?` ${c}`:"";return {sql:`${u}${p}${n} (${l})${g}${y}`,bindings:a}}},jm=new Bi;var Qi=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode.table=="string")return {sql:e.fromNode.table,bindings:[]};let r=new h(this.model),o=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.usingNode)return {sql:o,bindings:[]};let s=r.getWriteSource("postgres",e.usingNode,e.currParamIndex);return {sql:`${o} using ${s.sql}`,bindings:s.bindings}}},Fm=new Qi;var ki=class{toSql(t){return {sql:"",bindings:[]}}},Um=new ki;var Ki=class{toSql(t){return {sql:`(${t.columns.map(n=>new h(this.model).formatStringColumn("postgres",n)).join(", ")})`,bindings:[]}}},Vm=new Ki;var Wi=class{toSql(t){let e=t,n=new h(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Jm=new Wi;var Li=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},Hm=new Li;var ji=class{toSql(t){let e=t,r=new h(this.model),n=e.alias?` as ${r.quoteIdentifier("postgres",e.alias)}`:"";if(e.table instanceof M){let{sql:l,bindings:u}=r.formatRawPlaceholders("postgres",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string"){let l=r.formatStringTable("postgres",e.schema?`${e.schema}.${e.table}`:e.table);return {sql:`${e.only?"only ":""}${l}${n}`,bindings:[]}}let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"postgres").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},zm=new ji;var Fi=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new h(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},Gm=new Fi;var Ui=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 h(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 $){let u=n.parse([e.value],1,true).sql;a=`${s} ${e.operator} ${u}`;}else if(e.operator==="is null"||e.operator==="is not null")a=`${s} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")a=`${s} ${e.operator} $${r} and $${r+1}`;else {let u=e.value.map((d,m)=>`$${r+m}`).join(", ");a=`${s} ${e.operator} (${u})`;}l=e.value;}else a=`${s} ${e.operator} $${r}`,l=[e.value];return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:l}}parseSubquery(t,e,r){let n=e.subquery;if(typeof n=="string")return {sql:n,bindings:[]};let o=Array.isArray(n)?n:[n];return t.parse(o,r)}},Ym=new Ui;var Vi=class{toSql(t){let e=t,n=new h(this.model).formatStringTable("postgres",e.table),o=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${n} (${o})`,bindings:[]}}},Zm=new Vi;var Ji=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},Xm=new Ji;var Hi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new h(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode),o=r.renderWithNodes("postgres",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u;if(e.source){let m=new b(this.model,"postgres").parse(e.source,a),c=e.targetColumns?.length?` (${e.targetColumns.map(p=>r.formatStringColumn("postgres",p)).join(", ")})`:"";u=`${n}${c} ${m.sql}`,l.push(...m.bindings);}else {let m=e.records.length?Object.keys(e.records[0]):[];if(!m.length)u=`${n} default values`;else {let c=m.map(y=>r.formatStringColumn("postgres",y)).join(", "),p=[],g=typeof this.model?.getColumnsByName=="function"?this.model.getColumnsByName():new Map;for(let y of e.records){let T=m.map(N=>y[N]),w=[];for(let N=0;N<m.length;N++){let x=T[N];x instanceof M?w.push(x.rawValue):(l.push(x),w.push(`$${a++}${this.formatTypeCast(x,g.get(m[N])?.type)}`));}p.push(`(${w.join(", ")})`);}u=`${n} (${c}) values ${p.join(", ")}`;}}let d=`${s}${u}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(c=>r.formatStringColumn("postgres",c)).join(", ");d+=` returning ${m}`;}else d+=" returning *";return {sql:d,bindings:[...o.bindings,...l]}}formatTypeCast(t,e){if(typeof t=="string"&&(e==="jsonb"||e==="json"))return "::text::jsonb";let r="";return Buffer.isBuffer(t)?r="::bytea":Array.isArray(t)?r="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?r="::jsonb":typeof t=="boolean"?r="::boolean":typeof t=="bigint"&&(r="::bigint"),r}},ep=new Hi;var zi=class{toSql(t){let e=t;if(e.isRawValue)return new h(this.model).formatRawPlaceholders("postgres",e.table,e.bindings??[],e.currParamIndex);let r=new h(this.model),n=e.subquery?.length&&!e.isRawValue?new b(this.model,"postgres").parse(e.subquery,e.currParamIndex):null,o=n?`(${n.sql}) as ${r.quoteIdentifier("postgres",e.table)}`:r.formatStringTable("postgres",e.schema?`${e.schema}.${e.table}`:e.table),s=n?.bindings??[];if(e.type==="cross")return {sql:o,bindings:s};let a;if(e.using?.length){let p=e.using.map(g=>r.formatStringColumn("postgres",g)).join(", ");return a=`${o} using (${p})`,{sql:a,bindings:s}}let l=e.left;l.includes(".")||(l=`${e.table}.${l}`);let u=e.right;u.includes(".")||(u=`${this.model.table}.${u}`);let d=r.formatStringColumn("postgres",l),m=r.formatStringColumn("postgres",u);a=`${o} on ${d} ${e.on?.operator} ${m}`;let c=[...s];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new b(this.model,"postgres");for(let g of e.additionalConditions){let y=p.parse([g],e.currParamIndex+c.length);if(y.sql){let T=y.sql.replace(/^where\s+/i,"");a+=` and ${T}`,c.push(...y.bindings);}}}return {sql:a,bindings:c}}},tp=new zi;var Gi=class{toSql(t){let e=t,r=new h(this.model).formatStringColumn("postgres",e.column),n=Ed(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}},rp=new Gi;var Yi=class{toSql(t){let e=t,r=e.currParamIndex;return e.skipBinding?{sql:`${e.limit}`,bindings:[]}:{sql:`$${r}`,bindings:[e.limit]}}},np=new Yi;var kh={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},Zi=class{toSql(t){let e=t,r=kh[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},op=new Zi;var Xi=class{toSql(t){let e=t,r=e.currParamIndex;return e.skipBinding?{sql:`${e.offset}`,bindings:[]}:{sql:`$${r}`,bindings:[e.offset]}}},sp=new Xi;var ea=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(this.model),n=e.conflictColumns.map(u=>r.formatStringColumnBare("postgres",u)).join(", "),o="";e.conflictConstraint?o=` on constraint ${r.formatStringColumnBare("postgres",e.conflictConstraint)}`:e.conflictTargetRaw?o=` ${e.conflictTargetRaw}`:n&&(o=` (${n})`);let s=this.renderMergeWhere(e);if(e.mode==="ignore"){let u=`on conflict${o} do nothing`;return u+=this.renderReturning(e),{sql:u,bindings:s.bindings}}let a=e.columnsToUpdate.map(u=>`${r.formatStringColumnBare("postgres",u)} = excluded.${r.formatStringColumnBare("postgres",u)}`).join(", "),l=`on conflict${o} do update set ${a}${s.sql}`;return l+=this.renderReturning(e),{sql:l,bindings:s.bindings}}renderMergeWhere(t){if(!t.whereNodes?.length)return {sql:"",bindings:[]};let e=new b(this.model,"postgres").parse(t.whereNodes,t.currParamIndex,true);return {sql:e.sql?` where ${e.sql}`:"",bindings:e.bindings}}renderReturning(t){return t.returning?.length?` returning ${t.returning.map(r=>new h(this.model).formatStringColumn("postgres",r)).join(", ")}`:""}},ip=new ea;var ta=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new h(this.model).formatStringColumn("postgres",e.column),n=e.direction.toLowerCase(),o=e.nulls?` nulls ${e.nulls}`:"";return {sql:`${r} ${n}${o}`,bindings:[]}}},ap=new ta;var ra=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},lp=new ra;var na=class{toSql(t){let e=t,r=new h(this.model);return {sql:`returning ${!e.columns.length||e.columns.includes("*")?"*":e.columns.map(o=>r.formatStringColumn("postgres",o)).join(", ")}`,bindings:[]}}},up=new na;var oa=class{toSql(t){return {sql:`SELECT
|
|
77
77
|
con.conname AS name,
|
|
78
78
|
pg_get_constraintdef(con.oid) AS expression
|
|
79
79
|
FROM pg_constraint con
|
|
@@ -81,7 +81,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Yd=new Uo;var Vo=class{toSql(t){let
|
|
|
81
81
|
JOIN pg_namespace nsp ON nsp.oid = rel.relnamespace
|
|
82
82
|
WHERE con.contype = 'c'
|
|
83
83
|
AND rel.relname = '${t.table}'
|
|
84
|
-
AND nsp.nspname = current_schema()`,bindings:[]}}},
|
|
84
|
+
AND nsp.nspname = current_schema()`,bindings:[]}}},dp=new oa;var sa=class{toSql(t){return {sql:`SELECT
|
|
85
85
|
tc.constraint_name as name,
|
|
86
86
|
kcu.column_name as column_name,
|
|
87
87
|
ccu.table_name as referenced_table,
|
|
@@ -96,7 +96,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Yd=new Uo;var Vo=class{toSql(t){let
|
|
|
96
96
|
JOIN information_schema.referential_constraints rc
|
|
97
97
|
ON rc.constraint_name = tc.constraint_name AND rc.constraint_schema = tc.table_schema
|
|
98
98
|
WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
|
|
99
|
-
ORDER BY kcu.ordinal_position`,bindings:[]}}},
|
|
99
|
+
ORDER BY kcu.ordinal_position`,bindings:[]}}},cp=new sa;var ia=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:[]}}},mp=new ia;var aa=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:[]}}},pp=new aa;var la=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:[]}}},yp=new la;var ua=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:[]}}},fp=new ua;var da=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:[]}}},hp=new da;var ca=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:[]}}},gp=new ca;var ma=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:[]}}},bp=new ma;var pa=class{toSql(t){return {sql:`SELECT
|
|
100
100
|
i.relname as index_name,
|
|
101
101
|
a.attname as column_name,
|
|
102
102
|
ix.indisunique as is_unique
|
|
@@ -115,14 +115,14 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Yd=new Uo;var Vo=class{toSql(t){let
|
|
|
115
115
|
AND t.relname = '${t.table}'
|
|
116
116
|
AND t.relnamespace = n.oid
|
|
117
117
|
AND n.nspname = current_schema()
|
|
118
|
-
AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},
|
|
118
|
+
AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},Tp=new pa;var ya=class{toSql(t){return {sql:`SELECT
|
|
119
119
|
tc.constraint_name as name,
|
|
120
120
|
kcu.column_name as column_name
|
|
121
121
|
FROM information_schema.table_constraints tc
|
|
122
122
|
JOIN information_schema.key_column_usage kcu
|
|
123
123
|
ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
|
|
124
124
|
WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
|
|
125
|
-
ORDER BY kcu.ordinal_position`,bindings:[]}}},
|
|
125
|
+
ORDER BY kcu.ordinal_position`,bindings:[]}}},wp=new ya;var fa=class{toSql(t){return {sql:`SELECT column_name,
|
|
126
126
|
data_type,
|
|
127
127
|
is_nullable,
|
|
128
128
|
column_default,
|
|
@@ -132,16 +132,16 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Yd=new Uo;var Vo=class{toSql(t){let
|
|
|
132
132
|
FROM information_schema.columns
|
|
133
133
|
WHERE table_schema = current_schema()
|
|
134
134
|
AND table_name = '${t.table}'
|
|
135
|
-
ORDER BY ordinal_position`,bindings:[]}}},gp=new ma;var ca=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("postgres",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"postgres").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"postgres").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new f(this.model).formatStringColumn("postgres",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"postgres").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},bp=new ca;var pa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("postgres",e.column),n=X.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}},Tp=new pa;var ya=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 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}}},wp=new ya;var fa=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 h("PostgresTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("CockroachDB does not support the identity TRUNCATE options"));let n=new f(this.model).getFromForWriteOperations("postgres",e.fromNode),o="";return r?.restartIdentity?o+=" restart identity":r?.continueIdentity&&(o+=" continue identity"),r?.cascade&&(o+=" cascade"),{sql:`${n}${o}`,bindings:[]}}},Np=new fa;var ha=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new f(this.model).formatRawPlaceholders("postgres",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Sp=new ha;var ga=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=typeof this.model?.getColumnsByName=="function"?this.model.getColumnsByName():new Map,l=e.columns.map((d,c)=>{let m=e.values[c],p=r.formatStringColumn("postgres",d);if(m instanceof O)return `${p} = ${m.rawValue}`;if(m instanceof N){let y=new b(this.model,"postgres").parse([m],s,true);return o.push(...y.bindings),s+=y.bindings.length,`${p} = ${y.sql}`}let g=`$${s++}`;return o.push(m),`${p} = ${g}${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}},qp=new ga;var ba=class{toSql(t){let e=t;if(e.isRawValue){let s=e.value??[];if(s.length===0)return {sql:e.column,bindings:[]};let a=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`$${a++}`),bindings:s}}let r=e.currParamIndex,n="",o=[];if(this.isRawNode(e.value)){let s=this.formatRawIdentifierIfPossible(e.value.rawValue);n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between"){let s=`$${r} AND $${r+1}`;n=`${new f(this.model).formatStringColumn("postgres",e.column)} between ${s}`,o=e.value;}else {let s=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,o=e.value;}else if(e.value instanceof v){let s=new b(this.model,"postgres").parse([e.value],1,true).sql;n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,o=[];}else if(e.operator.includes("null"))n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,o=[e.value];}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new f(this.model).formatStringColumn("postgres",t):t}},Cp=new ba;var Ta=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}}},Rp=new Ta;var wa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],s=new f(this.model).formatStringColumn("postgres",e.column);switch(e.jsonOperator){case "=":n=`${s} = $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "contains":n=`${s} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "not contains":n=`${s} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "subset":n=`${s} <@ $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "path":{let a=X.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}}},_p=new wa;var Na=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}}},Mp=new Na;var Sa=class{toSql(t){let e=t,r=new f(this.model),n=s=>r.formatStringColumn("postgres",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},Op=new Sa;var qa=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" materialized":e.clause==="not materialized"?" not materialized":"",a=e.columns?.length?` (${e.columns.map(l=>new f(this.model).formatStringColumnBare("postgres",l)).join(", ")})`:"";return {sql:`${e.alias}${a} as${s} (${o.sql})`,bindings:o.bindings}}},Ap=new qa;var Ca=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:[]}}},xp=new Ca;var Ra=class{toSql(t){return {sql:"",bindings:[]}}},Dp=new Ra;var _a=class{toSql(t){return {sql:"",bindings:[]}}},Ip=new _a;var Ma=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"sqlite"),s=[],a=[],l=false;for(let m of e.children){let{sql:p,bindings:g}=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 y=s.pop()??"",w=p.replace(/^\s*add\s+/i,"").trimStart();s.push(`${y} ${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(...g);}}let u=s.join(", "),d=e.ifExists?"if exists ":"";return u.trim()?{sql:`${d}${n} ${u}`,bindings:a}:{sql:"",bindings:[]}}},$p=new Ma;var Oa=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},vp=new Oa;var Aa=class{toSql(t){return {sql:"",bindings:[]}}},Ep=new Aa;var xa=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Pp=new xa;var Da=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Bp=new Da;var Ia=class{toSql(t){return {sql:"",bindings:[]}}},Qp=new Ia;var $a=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Kp=new $a;var va=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},kp=new va;var Ea=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:[]}}},Lp=new Ea;var Pa=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Wp=new Pa;var Ba=class{toSql(t){return {sql:"",bindings:[]}}},Fp=new Ba;var Qa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new f(this.model).formatStringColumn("sqlite",q(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:[]}}},jp=new Qa;var Ka=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
136
|
-
`:e,bindings:[]}}},Up=new Ka;var ka=class{toSql(t){return {sql:"",bindings:[]}}},Vp=new ka;var La=class{toSql(t){let e=t,r=new f(this.model),n=e.constraintName?`constraint "${e.constraintName}" `:"";if(e.constraintType==="primary_key"){let o=!!e.autoIncrement,s=(e.columnType||"").toLowerCase();return o&&(s==="integer"||s==="bigint")?{sql:`${n}primary key autoincrement`,bindings:[]}:{sql:`${n}primary key`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length){let o=e.columns.map(s=>r.formatStringColumn("sqlite",q(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",q(u))).join(", "),s=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(u=>r.formatStringColumn("sqlite",q(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:[]}}},Jp=new La;var Wa=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"sqlite"),s=[],a=[];for(let y of e.children){let{sql:w,bindings:T}=o.parse([y]);if(y.folder==="constraint"){let S=s.pop()??"",x=w;if(/not null/i.test(x)||/null/i.test(x)||/default/i.test(x)||/primary key/i.test(x)){let C=`${S} ${x}`.trim();C=C.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(C),a.push(...T);continue}s.push(S),s.push(x),a.push(...T);continue}s.push(w),a.push(...T);}for(let y of e.namedConstraints){let{sql:w,bindings:T}=o.parse([y]);s.push(w),a.push(...T);}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}}},Hp=new Wa;var Fa=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("sqlite",e.fromNode),bindings:[]}}},zp=new Fa;var ja=class{toSql(t){return {sql:"distinct",bindings:[]}}},Gp=new ja;var Ua=class{toSql(t){return _.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},Yp=new Ua;var Va=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Zp=new Va;var Ja=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},Xp=new Ja;var Ha=class{toSql(t){let e=t,r=new f(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}}},ey=new Ha;var za=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},ty=new za;var Ga=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=new b(this.model,"sqlite"),n=new f(this.model);if(e.group?.length){let{sql:l,bindings:u}=r.parse(e.group,e.currParamIndex,true);return {sql:`(${l})`,bindings:u}}let o=n.formatStringColumn("sqlite",e.column),s="",a=[];if(e.subquery!==void 0){let l=this.parseSubquery(r,e);s=`${e.column?`${o} `:""}${e.operator} (${l.sql})`,a=l.bindings;}else if(e.value instanceof 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)}},ry=new Ga;var Ya=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("sqlite",e.table),o=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${n} (${o})`,bindings:[]}}},ny=new Ya;var Za=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},oy=new Za;var Eh=new Set(["where","group_by","having","order_by","limit","offset","union"]),Xa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode),o=r.renderWithNodes("sqlite",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u;if(e.source){let d=new b(this.model,"sqlite").parse(e.source,a),c=e.targetColumns?.length?` (${e.targetColumns.map(p=>r.formatStringColumn("sqlite",p)).join(", ")})`:"",m=e.disambiguateSource&&!e.source.some(p=>Eh.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 g=d.map(w=>p[w]),y=[];for(let w of g)w instanceof O?y.push(w.rawValue):(l.push(w),y.push("?"));m.push(`(${y.join(", ")})`);}u=`${n} (${c}) VALUES ${m.join(", ")}`;}}return {sql:`${s}${u}`,bindings:[...o.bindings,...l]}}},sy=new Xa;var el=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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 g=p.sql.replace(/^where\s+/i,"");o+=` and ${g}`,d.push(...p.bindings);}}}return {sql:o,bindings:d}}},iy=new el;var Ph={set:"json_set",insert:"json_insert",remove:"json_remove"},tl=class{toSql(t){let e=t,r=new f(this.model).formatStringColumn("sqlite",e.column),n=`'${ft(e.path).replace(/'/g,"''")}'`,o=Ph[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}},ay=new tl;var rl=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},ly=new rl;var nl=class{toSql(t){return {sql:"",bindings:[]}}},uy=new nl;var ol=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},dy=new ol;var sl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(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:[]}}},my=new sl;var il=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("sqlite",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},cy=new il;var al=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},py=new al;var ll=class{toSql(t){let e=t,r=new f(this.model);return {sql:`returning ${!e.columns.length||e.columns.includes("*")?"*":e.columns.map(o=>r.formatStringColumn("sqlite",o)).join(", ")}`,bindings:[]}}},yy=new ll;var ul=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},fy=new ul;var dl=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},hy=new dl;var ml=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},gy=new ml;var cl=class{toSql(t){return {sql:"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name",bindings:[]}}},by=new cl;var pl=class{toSql(t){return {sql:`SELECT sql FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},Ty=new pl;var yl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},wy=new yl;var fl=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:[]}}},Ny=new fl;var hl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Sy=new hl;var gl=class{toSql(t){return {sql:`SELECT name FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},qy=new gl;var bl=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},Cy=new bl;var Tl=class{toSql(t){return {sql:`SELECT
|
|
135
|
+
ORDER BY ordinal_position`,bindings:[]}}},Sp=new fa;var ha=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 h(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 h(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}"`})}},Np=new ha;var ga=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new h(this.model).formatStringColumn("postgres",e.column),n=X.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}},qp=new ga;var ba=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 M?s.rawValue:s instanceof $?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "gen_random_uuid()";case "$now":return "now()";case "$currentTimestamp":return "current_timestamp";default:return}}},Cp=new ba;var Ta=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 f("PostgresTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("CockroachDB does not support the identity TRUNCATE options"));let n=new h(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:[]}}},Rp=new Ta;var wa=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 h(this.model).formatRawPlaceholders("postgres",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:e.wrap?`(${o.sql})`:o.sql,bindings:o.bindings}}},_p=new wa;var Sa=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new h(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=typeof this.model?.getColumnsByName=="function"?this.model.getColumnsByName():new Map,l=e.columns.map((d,m)=>{let c=e.values[m],p=r.formatStringColumn("postgres",d);if(c instanceof M)return `${p} = ${c.rawValue}`;if(c instanceof S){let y=new b(this.model,"postgres").parse([c],s,true);return o.push(...y.bindings),s+=y.bindings.length,`${p} = ${y.sql}`}let g=`$${s++}`;return o.push(c),`${p} = ${g}${this.formatTypeCast(c,a.get(d)?.type)}`}).join(", ");return {sql:`${n} set ${l}${this.renderFromSource("postgres",e,s,o)}`,bindings:o}}renderFromSource(t,e,r,n){if(!e.fromSourceNode)return "";let o=new h(this.model).getWriteSource(t,e.fromSourceNode,r);return n.push(...o.bindings),` from ${o.sql}`}formatTypeCast(t,e){if(typeof t=="string"&&(e==="jsonb"||e==="json"))return "::text::jsonb";let r="";return Buffer.isBuffer(t)?r="::bytea":Array.isArray(t)?r="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?r="::jsonb":typeof t=="boolean"?r="::boolean":typeof t=="bigint"&&(r="::bigint"),r}},Mp=new Sa;var Na=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 h(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,o=[];}else if(e.tupleColumns?.length){let s=e.tupleColumns.map(u=>new h(this.model).formatStringColumn("postgres",u)).join(", "),a=e.value,l=a.map((u,d)=>`(${u.map((m,c)=>`$${r+d*u.length+c}`).join(", ")})`).join(", ");n=`(${s}) ${e.operator} (${l})`,o=a.flat();}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between"){let s=`$${r} AND $${r+1}`;n=`${new h(this.model).formatStringColumn("postgres",e.column)} between ${s}`,o=e.value;}else {let s=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new h(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,o=e.value;}else if(e.value instanceof $){let s=new b(this.model,"postgres").parse([e.value],1,true).sql;n=`${new h(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,o=[];}else if(e.operator.includes("null"))n=`${new h(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};n=`${new h(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 h(this.model).formatStringColumn("postgres",t):t}},Op=new Na;var qa=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"postgres"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:e.isNegated?`not (${n})`:`(${n})`,bindings:o}}},xp=new qa;var Ca=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],s=new h(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=X.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}}},Ap=new Ca;var Ra=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}}},Dp=new Ra;var _a=class{toSql(t){let e=t,r=new h(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:[]}}},Ip=new _a;var Ma=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" materialized":e.clause==="not materialized"?" not materialized":"",a=e.columns?.length?` (${e.columns.map(l=>new h(this.model).formatStringColumnBare("postgres",l)).join(", ")})`:"";return {sql:`${e.alias}${a} as${s} (${o.sql})`,bindings:o.bindings}}},$p=new Ma;var Oa=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:[]}}},vp=new Oa;var xa=class{toSql(t){return {sql:"",bindings:[]}}},Ep=new xa;var Aa=class{toSql(t){return {sql:"",bindings:[]}}},Pp=new Aa;var Da=class{toSql(t){let e=t,n=new h(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"sqlite"),s=[],a=[],l=false;for(let c of e.children){let{sql:p,bindings:g}=o.parse([c]);if(!(!p||!p.trim())){if(c.file==="add_column")s.push(p),l=true;else if(c.file==="add_constraint"&&l){let y=s.pop()??"",T=p.replace(/^\s*add\s+/i,"").trimStart();s.push(`${y} ${T}`);}else {if(c.file==="set_not_null"||c.file==="drop_not_null")continue;if(c.file==="set_default"||c.file==="drop_default")continue;s.push(p),l=false;}a.push(...g);}}let u=s.join(", "),d=e.ifExists?"if exists ":"";return u.trim()?{sql:`${d}${n} ${u}`,bindings:a}:{sql:"",bindings:[]}}},Bp=new Da;var Ia=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Qp=new Ia;var $a=class{toSql(t){return {sql:"",bindings:[]}}},kp=new $a;var va=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Kp=new va;var Ea=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Wp=new Ea;var Pa=class{toSql(t){return {sql:"",bindings:[]}}},Lp=new Pa;var Ba=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},jp=new Ba;var Qa=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Fp=new Qa;var ka=class{toSql(t){let e=t,r;return e.defaultValue instanceof M?r=e.defaultValue.rawValue:e.defaultValue instanceof $?r=new b(this.model,"sqlite").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},Up=new ka;var Ka=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Vp=new Ka;var Wa=class{toSql(t){return {sql:"",bindings:[]}}},Jp=new Wa;var La=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new h(this.model).formatStringColumn("sqlite",q(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:[]}}},Hp=new La;var ja=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
|
|
136
|
+
`:e,bindings:[]}}},zp=new ja;var Fa=class{toSql(t){return {sql:"",bindings:[]}}},Gp=new Fa;var Ua=class{toSql(t){let e=t,r=new h(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",q(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 M?{sql:`default ${o.rawValue}`,bindings:[]}:o instanceof $?{sql:`default ${new b(this.model,"sqlite").parse([o],1,true).sql}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let o=(e.columns??[]).map(u=>r.formatStringColumn("sqlite",q(u))).join(", "),s=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(u=>r.formatStringColumn("sqlite",q(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:[]}}},Yp=new Ua;var Va=class{toSql(t){let e=t,n=new h(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"sqlite"),s=[],a=[];for(let y of e.children){let{sql:T,bindings:w}=o.parse([y]);if(y.folder==="constraint"){let N=s.pop()??"",x=T;if(/not null/i.test(x)||/null/i.test(x)||/default/i.test(x)||/primary key/i.test(x)){let R=`${N} ${x}`.trim();R=R.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(R),a.push(...w);continue}s.push(N),s.push(x),a.push(...w);continue}s.push(T),a.push(...w);}for(let y of e.namedConstraints){let{sql:T,bindings:w}=o.parse([y]);s.push(T),a.push(...w);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.sqliteTemporary&&d.push("TEMPORARY");let m=d.length>0?`${d.join(" ")} `:"",c=e.withoutRowId?" WITHOUT ROWID":"",p=e.strict?" STRICT":"";return {sql:`${u}${m}${n} (${l})${c}${p}`,bindings:a}}},Zp=new Va;var Ja=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new h(this.model).getFromForWriteOperations("sqlite",e.fromNode),bindings:[]}}},Xp=new Ja;var Ha=class{toSql(t){return {sql:"distinct",bindings:[]}}},ey=new Ha;var za=class{toSql(t){return C.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},ty=new za;var Ga=class{toSql(t){let e=t,n=new h(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},ry=new Ga;var Ya=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},ny=new Ya;var Za=class{toSql(t){let e=t,r=new h(this.model),n=e.alias?` as ${r.quoteIdentifier("sqlite",e.alias)}`:"";if(e.table instanceof M){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}}},oy=new Za;var Xa=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new h(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},sy=new Xa;var el=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 h(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 $){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)}},iy=new el;var tl=class{toSql(t){let e=t,n=new h(this.model).formatStringTable("sqlite",e.table),o=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${n} (${o})`,bindings:[]}}},ay=new tl;var rl=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},ly=new rl;var Kh=new Set(["where","group_by","having","order_by","limit","offset","union"]),nl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new h(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode),o=r.renderWithNodes("sqlite",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u;if(e.source){let d=new b(this.model,"sqlite").parse(e.source,a),m=e.targetColumns?.length?` (${e.targetColumns.map(p=>r.formatStringColumn("sqlite",p)).join(", ")})`:"",c=e.disambiguateSource&&!e.source.some(p=>Kh.has(p.folder));u=`${n}${m} ${d.sql}${c?" where true":""}`,l.push(...d.bindings);}else {let d=e.records.length?Object.keys(e.records[0]):[];if(!d.length)u=`${n} default values`;else {let m=d.map(p=>r.formatStringColumn("sqlite",p)).join(", "),c=[];for(let p of e.records){let g=d.map(T=>p[T]),y=[];for(let T of g)T instanceof M?y.push(T.rawValue):(l.push(T),y.push("?"));c.push(`(${y.join(", ")})`);}u=`${n} (${m}) VALUES ${c.join(", ")}`;}}return {sql:`${s}${u}`,bindings:[...o.bindings,...l]}}},uy=new nl;var ol=class{toSql(t){let e=t;if(e.isRawValue)return new h(this.model).formatRawPlaceholders("sqlite",e.table,e.bindings??[],e.currParamIndex);let r=new h(this.model),n=e.subquery?.length&&!e.isRawValue?new b(this.model,"sqlite").parse(e.subquery,e.currParamIndex):null,o=n?`(${n.sql}) as ${r.quoteIdentifier("sqlite",e.table)}`:r.formatStringTable("sqlite",e.schema?`${e.schema}.${e.table}`:e.table),s=n?.bindings??[];if(e.type==="cross")return {sql:o,bindings:s};let a;if(e.using?.length){let p=e.using.map(g=>r.formatStringColumn("sqlite",g)).join(", ");return a=`${o} using (${p})`,{sql:a,bindings:s}}let l=e.left;l.includes(".")||(l=`${e.table}.${l}`);let u=e.right;u.includes(".")||(u=`${this.model.table}.${u}`);let d=r.formatStringColumn("sqlite",l),m=r.formatStringColumn("sqlite",u);a=`${o} on ${d} ${e.on?.operator} ${m}`;let c=[...s];if(e.additionalConditions&&e.additionalConditions.length>0){let p=new b(this.model,"sqlite");for(let g of e.additionalConditions){let y=p.parse([g],e.currParamIndex+c.length);if(y.sql){let T=y.sql.replace(/^where\s+/i,"");a+=` and ${T}`,c.push(...y.bindings);}}}return {sql:a,bindings:c}}},dy=new ol;var Wh={set:"json_set",insert:"json_insert",remove:"json_remove"},sl=class{toSql(t){let e=t,r=new h(this.model).formatStringColumn("sqlite",e.column),n=`'${ht(e.path).replace(/'/g,"''")}'`,o=Wh[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}},cy=new sl;var il=class{toSql(t){let e=t;return e.skipBinding?{sql:`${e.limit}`,bindings:[]}:{sql:"?",bindings:[e.limit]}}},my=new il;var al=class{toSql(t){return {sql:"",bindings:[]}}},py=new al;var ll=class{toSql(t){let e=t;return e.skipBinding?{sql:`${e.offset}`,bindings:[]}:{sql:"?",bindings:[e.offset]}}},yy=new ll;var ul=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new h(this.model),n=e.conflictColumns.map(l=>r.formatStringColumnBare("sqlite",l)).join(", "),o="";if(e.conflictTargetRaw?o=` ${e.conflictTargetRaw}`:n&&(o=` (${n})`),e.mode==="ignore")return {sql:`ON CONFLICT${o} DO NOTHING`,bindings:[]};let s=e.columnsToUpdate.map(l=>`${r.formatStringColumnBare("sqlite",l)} = EXCLUDED.${r.formatStringColumnBare("sqlite",l)}`).join(", "),a=this.renderMergeWhere(e);return {sql:`ON CONFLICT${o} DO UPDATE SET ${s}${a.sql}`,bindings:a.bindings}}renderMergeWhere(t){if(!t.whereNodes?.length)return {sql:"",bindings:[]};let e=new b(this.model,"sqlite").parse(t.whereNodes,t.currParamIndex,true);return {sql:e.sql?` WHERE ${e.sql}`:"",bindings:e.bindings}}},fy=new ul;var dl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new h(this.model).formatStringColumn("sqlite",e.column),n=e.direction.toLowerCase(),o=e.nulls?` nulls ${e.nulls}`:"";return {sql:`${r} ${n}${o}`,bindings:[]}}},hy=new dl;var cl=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},gy=new cl;var ml=class{toSql(t){let e=t,r=new h(this.model);return {sql:`returning ${!e.columns.length||e.columns.includes("*")?"*":e.columns.map(o=>r.formatStringColumn("sqlite",o)).join(", ")}`,bindings:[]}}},by=new ml;var pl=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},Ty=new pl;var yl=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},wy=new yl;var fl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Sy=new fl;var hl=class{toSql(t){return {sql:"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name",bindings:[]}}},Ny=new hl;var gl=class{toSql(t){return {sql:`SELECT sql FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},qy=new gl;var bl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Cy=new bl;var Tl=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:[]}}},Ry=new Tl;var wl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},_y=new wl;var Sl=class{toSql(t){return {sql:`SELECT name FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},My=new Sl;var Nl=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},Oy=new Nl;var ql=class{toSql(t){return {sql:`SELECT
|
|
137
137
|
'PRIMARY' as name,
|
|
138
138
|
name as column_name
|
|
139
139
|
FROM pragma_table_info('${t.table}')
|
|
140
140
|
WHERE pk > 0
|
|
141
|
-
ORDER BY pk`,bindings:[]}}},Ry=new Tl;var wl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},_y=new wl;var Nl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("sqlite",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"sqlite").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"sqlite").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new f(this.model).formatStringColumn("sqlite",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"sqlite").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},My=new Nl;var Sl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("sqlite",e.column),n=X.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}},Oy=new Sl;var ql=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 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}}},Ay=new ql;var Cl=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 h("SqliteTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("SQLite does not support TRUNCATE options"));let r=new f(this.model).getFromForWriteOperations("sqlite",e.fromNode);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},xy=new Cl;var Rl=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new f(this.model).formatRawPlaceholders("sqlite",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Dy=new Rl;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 f(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((l,u)=>{let d=e.values[u],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}}},Iy=new _l;var Ml=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 f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${o}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new f(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,n=e.value;else {let o=e.value.map(s=>"?").join(", ");r=`${new f(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 f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${o}`,n=[];}else if(e.operator.includes("null"))r=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new f(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 f(this.model).formatStringColumn("sqlite",t):t}},$y=new Ml;var Ol=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}}},vy=new Ol;var Al=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new f(this.model).formatStringColumn("sqlite",e.column);switch(e.jsonOperator){case "=":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "path":{let s=X.from(e.path??"");r=`json_extract(${o}, '${s.toSqlite()}') ${e.comparisonOperator??"="} ?`,n=[e.value];break}case "subset":case "has none":throw new h("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}}},Ey=new Al;var xl=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}}},Py=new xl;var Dl=class{toSql(t){let e=t,r=new f(this.model),n=s=>r.formatStringColumn("sqlite",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},By=new Dl;var Il=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 f(this.model).formatStringColumnBare("sqlite",a)).join(", ")})`:"";return {sql:`${e.alias}${s} as (${o.sql})`,bindings:o.bindings}}},Qy=new Il;var $l={mssql:{alter_table:{add_column:Wu,add_constraint:Fu,add_primary_key:ju,alter_column_type:Uu,alter_table:Vu,drop_column:Ju,drop_constraint:Hu,drop_default:zu,drop_not_null:nd,drop_primary_key:od,rename_column:sd,rename_table:id,set_default:ad,set_not_null:ld,set_table_options:ud},column:{column_type:dd},comment:{comment:md},constraint:{after:cd,constraint:pd},create_table:{create_table:yd},delete:{delete:fd},distinct:{distinct:hd,distinct_on:gd},drop_table:{drop_table:bd},extension:{create_extension:Td},from:{from:wd},group_by:{group_by:Nd},having:{having:Sd},index_op:{create_index:qd,drop_index:Cd},insert:{insert:Rd},join:{join:_d},json_mutation:{json_mutation:Id},limit:{limit:$d},lock:{lock:vd},offset:{offset:Ed},on_duplicate:{on_duplicate:Pd},order_by:{order_by:Bd},raw:{raw:Qd},returning:{returning:Kd},schema:{check_constraint_info:kd,foreign_key_info:Ld,get_column_listing:Wd,get_tables:Fd,has_check_constraint:jd,has_column:Ud,has_index:Vd,has_primary_key:Jd,has_table:Hd,index_info:zd,primary_key_info:Gd,table_info:Yd},select:{select:Zd,select_json:Xd},sqlfunc:{sqlfunc:em},truncate:{truncate:tm},union:{union:rm},update:{update:nm},where:{where:om,where_group:sm,where_json:im,where_subquery:am},window:{window:lm},with:{with:um}},mysql:{alter_table:{add_column:dm,add_constraint:mm,add_primary_key:cm,alter_column_type:pm,alter_table:ym,drop_column:fm,drop_constraint:hm,drop_default:gm,drop_not_null:bm,drop_primary_key:Tm,rename_column:wm,rename_table:Nm,set_default:Sm,set_not_null:qm,set_table_options:Cm},column:{column_type:Rm},comment:{comment:_m},constraint:{after:Mm,constraint:Om},create_table:{create_table:Am},delete:{delete:xm},distinct:{distinct:Dm,distinct_on:Im},drop_table:{drop_table:$m},extension:{create_extension:vm},from:{from:Em},group_by:{group_by:Pm},having:{having:Bm},index_op:{create_index:Qm,drop_index:Km},insert:{insert:km},join:{join:Lm},json_mutation:{json_mutation:Wm},limit:{limit:Fm},lock:{lock:jm},offset:{offset:Um},on_duplicate:{on_duplicate:Vm},order_by:{order_by:Jm},raw:{raw:Hm},returning:{returning:zm},schema:{check_constraint_info:Gm,foreign_key_info:Ym,get_column_listing:Zm,get_tables:Xm,has_check_constraint:ec,has_column:tc,has_index:rc,has_primary_key:nc,has_table:oc,index_info:sc,primary_key_info:ic,table_info:ac},select:{select:lc,select_json:uc},sqlfunc:{sqlfunc:dc},truncate:{truncate:mc},union:{union:cc},update:{update:pc},where:{where:yc,where_group:fc,where_json:hc,where_subquery:gc},window:{window:bc},with:{with:Tc}},postgres:{alter_table:{add_column:wc,add_constraint:Nc,add_primary_key:Sc,alter_column_type:qc,alter_table:Cc,drop_column:Rc,drop_constraint:_c,drop_default:Mc,drop_not_null:Oc,drop_primary_key:Ac,rename_column:xc,rename_table:Dc,set_default:Ic,set_not_null:$c,set_table_options:vc},column:{column_type:Ec},comment:{comment:Pc},constraint:{after:Bc,constraint:Qc},create_table:{create_table:Kc},delete:{delete:kc},distinct:{distinct:Lc,distinct_on:Wc},drop_table:{drop_table:Fc},extension:{create_extension:jc},from:{from:Uc},group_by:{group_by:Vc},having:{having:Jc},index_op:{create_index:Hc,drop_index:zc},insert:{insert:Gc},join:{join:Yc},json_mutation:{json_mutation:Zc},limit:{limit:Xc},lock:{lock:ep},offset:{offset:tp},on_duplicate:{on_duplicate:rp},order_by:{order_by:np},raw:{raw:op},returning:{returning:sp},schema:{check_constraint_info:ip,foreign_key_info:ap,get_column_listing:lp,get_tables:up,has_check_constraint:dp,has_column:mp,has_index:cp,has_primary_key:pp,has_table:yp,index_info:fp,primary_key_info:hp,table_info:gp},select:{select:bp,select_json:Tp},sqlfunc:{sqlfunc:wp},truncate:{truncate:Np},union:{union:Sp},update:{update:qp},where:{where:Cp,where_group:Rp,where_json:_p,where_subquery:Mp},window:{window:Op},with:{with:Ap}},sqlite:{alter_table:{add_column:xp,add_constraint:Dp,alter_column_type:Ip,alter_table:$p,drop_column:vp,drop_constraint:Ep,drop_default:Pp,drop_not_null:Bp,drop_primary_key:Qp,rename_column:Kp,rename_table:kp,set_default:Lp,set_not_null:Wp,set_table_options:Fp},column:{column_type:jp},comment:{comment:Up},constraint:{after:Vp,constraint:Jp},create_table:{create_table:Hp},delete:{delete:zp},distinct:{distinct:Gp,distinct_on:Yp},drop_table:{drop_table:Zp},extension:{create_extension:Xp},from:{from:ey},group_by:{group_by:ty},having:{having:ry},index_op:{create_index:ny,drop_index:oy},insert:{insert:sy},join:{join:iy},json_mutation:{json_mutation:ay},limit:{limit:ly},lock:{lock:uy},offset:{offset:dy},on_duplicate:{on_duplicate:my},order_by:{order_by:cy},raw:{raw:py},returning:{returning:yy},schema:{check_constraint_info:fy,foreign_key_info:hy,get_column_listing:gy,get_tables:by,has_check_constraint:Ty,has_column:wy,has_index:Ny,has_primary_key:Sy,has_table:qy,index_info:Cy,primary_key_info:Ry,table_info:_y},select:{select:My,select_json:Oy},sqlfunc:{sqlfunc:Ay},truncate:{truncate:xy},union:{union:Dy},update:{update:Iy},where:{where:$y,where_group:vy,where_json:Ey,where_subquery:Py},window:{window:By},with:{with:Qy}}};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(C=>!!C&&C.folder==="distinctOn"),o=!n&&t.find(C=>!!C&&C.folder==="distinct"),s=t.filter(C=>!!C&&C.folder==="comment"&&C.isHint).map(C=>this.renderNode(C)).filter(C=>C.length>0).join(" "),a=this.dbType==="mssql"?t.find(C=>!!C&&C.folder==="lock")??null:null,l=a?this.getMssqlTableHints(a):"",u=t.filter(C=>C!==null&&C.folder!=="distinct"&&C.folder!=="distinctOn"&&!(C.folder==="comment"&&C.isHint)),d=u.some(C=>C.folder==="offset"),c=u.some(C=>C.folder==="order_by"),m=u.find(C=>C.folder==="limit"),p=u.find(C=>C.folder==="offset"),g=this.dbType==="mssql"&&m&&!d&&!c,y=this.dbType==="mssql"&&!g&&(m||p),w=[],T=[],S=null;g&&m&&T.push(m.limit);for(let C=0;C<u.length;C++){let I=u[C];if(g&&I.folder==="limit"||y&&(I.folder==="limit"||I.folder==="offset"))continue;I.currParamIndex=e+T.length;let D=$l[this.mapCommonDbType(this.dbType)][I.folder][I.file];if(!D)throw new Error(`Interpreter not found for ${this.dbType} ${I.keyword}`);D.model=this.model,D.dbType=this.dbType;let A=D.toSql(I);if(!A.sql||!A.sql.trim().length)continue;let L=u[C+1],P=!L||L.keyword!==I.keyword?"":L.chainsWith;if(I.folder==="lock"||I.folder==="on_duplicate"||I.folder==="returning"||I.folder==="schema"||I.folder==="comment"){w.push(`${A.sql}${P}`),T.push(...A.bindings),S=I.keyword;continue}if(S!==I.keyword||I.canKeywordBeSeenMultipleTimes){if(r)w.push(`${A.sql}${P}`);else {let oe=I.keyword;if(I.folder==="with"&&this.dbType!=="mssql"){let Re=C,_e=false;for(;Re<u.length&&u[Re].keyword===I.keyword;){let au=u[Re];if(au.folder==="with"&&au.clause==="recursive"){_e=true;break}Re++;}_e&&(oe=`${oe} recursive`);}let Xe=s?`${s} `:"";if(oe==="select"){let Re=g?`top (@${e}) `:"";if(n){let _e=Array.isArray(n.columns)?n.columns.join(", "):"";w.push(`select ${Re}${Xe}distinct on (${_e}) ${A.sql}${P}`);}else o?w.push(`select ${Re}${Xe}distinct ${A.sql}${P}`):w.push(`select ${Re}${Xe}${A.sql}${P}`);}else oe==="from"&&l?w.push(`${oe} ${A.sql}${l}${P}`):w.push(`${oe} ${A.sql}${P}`);}S=I.keyword;}else w.push(`${A.sql}${P}`);T.push(...A.bindings);}if(y){c||w.push("order by (select null)");let C=p?.offset??0;T.push(C);let D=`offset @${e+T.length-1} rows`;if(m){T.push(m.limit);let A=e+T.length-1;D+=` fetch next @${A} rows only`;}w.push(D);}return {sql:w.join(" "),bindings:T}}renderNode(t){let e=$l[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 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},vl=i=>!i.expression&&(i.type==="date"||i.type==="datetime"||i.type==="timestamp"),f=class{constructor(t){this.model=t;this.modelColumnsMap=typeof t.getColumnsByName=="function"?t.getColumnsByName():new Map;let e=[],r=[];for(let n of this.modelColumnsMap.values())n.expression||((n.type==="ulid"||n.autoCreate==="js")&&e.push(n),n.autoUpdate&&r.push(n));this.jsInsertColumns=e,this.autoUpdateColumns=r;}formatStringColumn(t,e){if(e==="*")return "*";let r=this.resolveComputedExpression(e);if(r!==void 0)return `(${r})`;if(e.includes(".")){let[s,a]=e.split(".");if(a==="*")switch(t){case "mysql":case "mariadb":return `\`${s}\`.*`;case "postgres":case "cockroachdb":case "sqlite":return `"${s}".*`;case "mssql":return `[${s}].*`;default:throw new Error(`Unsupported database type: ${t}`)}let l=this.modelColumnsMap.get(a)?.databaseName??V(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??V(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&&vl(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&&vl(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&&vl(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 ht=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 G=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 te=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 ve=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 gt=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 Ky;Ky=Symbol.toStringTag;var ie=class{constructor(t,e,r,n){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=n;this[Ky]="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 El=i=>{let t=i.lastIndexOf(".");return t===-1?i:i.slice(t+1)},De=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 h(l,"ON_CONFLICT_REQUIRES_MERGE_OR_IGNORE");return o()});this.conflictColumns=null;this.conflictState=u,this.commit=s,this.insertColumns=a.map(El),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(El);if(!r.length)throw new h(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(El);return this.commitConflict(r,"update",n),this}ignore(){if(!this.conflictState.requested)throw new h(`${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 h(`${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 Qh=(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,g=d||o?true:n?n.has(m):true;if(p){if(!g)continue;if(u===null){a[m]=null;continue}if(c?.serialize){let y=c.serialize(u);if(y!==null&&typeof y?.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]=y;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},fe=(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 y=c.match(/\s+as\s+(.+)$/i);y&&a.push(y[1].trim());continue}let p=c;if(p.includes(".")&&(p=p.split(".").pop()),p==="*")continue;let g=n.get(p)?.columnName??p;a.push(g);}let l=a.length?new Set(a):null,u=new Set(r),d=i.map(c=>Qh(c,t,n,o,l,s,u));return d.length===1?d[0]:d};var bt=class{constructor(t){this.observers=t??[];}add(t){this.observers.push(t);}async notifyBefore(t){for(let e of this.observers)e?.onBeforeQuery&&await e.onBeforeQuery(t);}async notifyAfter(t,e){for(let r of this.observers)r?.onAfterQuery&&(t.result??(t.result=e),await r.onAfterQuery(t));}async notifyError(t){for(let e of this.observers)e?.onQueryError&&await e.onQueryError(t);}},ky=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 hr=ne();function Pl(i){let t=hr.timing.now()-i;return Math.round(t*100)/100}var Y=async(i,t,e,r,n="rows",o)=>{await e.ensureConnected();let s={id:hr.crypto.randomUUID(),sql:i,params:t,model:void 0,operation:ky(i),timestamp:hr.timing.now()};try{let u=e.observerChain;u&&typeof u.notifyBefore=="function"&&await u.notifyBefore(s);}catch{}let a=hr.timing.now(),l=u=>{o?.shouldNotLog||yt(i,e.logs,t,e.inputDetails.queryFormatOptions,r,u);};try{let u=e.driverAdapter;if(!u)throw new h("ExecSql","CONNECTION_NOT_ESTABLISHED");let d=o?.timeout,c=d?new AbortController:void 0,m,p=Kh(()=>u.execute(i,t,{returning:n,sqlLiteOptions:o?.sqlLiteOptions,signal:c?.signal,connection:e.sqlConnection}),e.inputDetails.connectionPolicies?.retry,e.logs),g;try{d&&c?(g=await Promise.race([p,new Promise((y,w)=>{m=setTimeout(()=>{let T=new h("ExecSql::timeout","QUERY_TIMEOUT",new Error(`Query exceeded the ${d.ms}ms timeout`));d.cancel&&c.abort(T),w(T);},d.ms);})]),p.catch(()=>{})):g=await p;}finally{m&&clearTimeout(m);}try{let y=Pl(a),w=e.observerChain;if(w&&typeof w.notifyAfter=="function"){let T={...s,duration:y,result:g};await w.notifyAfter(T);}}catch{}return l(Pl(a)),u.extract(g,n)}catch(u){throw l(Pl(a)),u}},gr=async(i,t,e,r={},n)=>{let o=e.driverAdapter;if(!o)throw new h("ExecSqlStreaming","CONNECTION_NOT_ESTABLISHED");return await o.stream(i,t,{...r,connection:e.sqlConnection??void 0},{onData:n.onData})};async function Kh(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++,rd(`Retrying sql in ${o}ms (attempt ${r}/${n})`,"info",e),await new Promise(l=>setTimeout(l,o)),s();throw a}}return s()}function Ly(){return {}}var et=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=Ly(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new b(this.model,this.sqlType),this.interpreterUtils=new f(this.model);}setReplicationMode(t){return this.replicationMode=t,this}async find(t){if(!t)return this.query().many();let e=this.query();return t.select&&e.select(...t.select),t.relations&&t.relations.forEach(r=>{e.load(r);}),t.where&&this.handleWhereCondition(e,t.where),t.orderBy&&Object.entries(t.orderBy).forEach(([r,n])=>{e.orderBy(r,n);}),t.limit&&e.limit(t.limit),t.offset&&e.offset(t.offset),t.groupBy&&e.groupBy(...t.groupBy),e.many()}async findOne(t){let e=await this.find({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,offset:t.offset,limit:1});return e.length?e[0]:null}async findOneOrFail(t){let e=await this.findOne({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,offset:t.offset});if(e===null)throw t.customError?t.customError:new h(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new h(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 te(new G(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:Qt(this.sqlDataSource,c.sql),bindings:c.bindings}},d=()=>{let{sql:c,bindings:m}=u();return Bt(c,m)};return new De(l,u,d,async()=>{try{await this.model.validate?.(t);}catch(C){throw C}let{columns:c,values:m}=this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert",this.sqlType),p={};if(c.forEach((C,I)=>{let D=m[I];p[C]=D,t[C]??(t[C]=D);}),a)return (await this.executeInsertConflict([p],[t],a,e.returning,e.withNodes))[0];let g=!e.returning||e.returning.length===0,{sql:y,bindings:w}=this.astParser.parse(this.withInsertNodes(new te(new G(this.model.table),[p],e.returning,g,false),null,e.withNodes)),T=await Y(y,w,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(g)return;if(this.sqlType==="mysql")return this.handleMysqlInsert(T,[t],"one",e.returning);let S=T[0];return S?fe([S],this.model,e.returning):t},c=>{if(a=c,c.conflictColumns.length===0&&this.sqlType==="mssql")throw new h("ModelManager::onConflict","NOT_SUPPORTED_IN_MSSQL",new Error("MSSQL cannot express a target-less ON CONFLICT; provide the conflict columns"));o=new te(new G(this.model.table),o.records,void 0,true,false),s=this.sqlType==="mssql"?null:new ve(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 te(new G(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:Qt(this.sqlDataSource,m.sql),bindings:m.bindings}},c=()=>{let{sql:m,bindings:p}=d();return Bt(m,p)};return new De(u,d,c,async()=>{if(r)try{await this.model.validate?.(t);}catch(x){throw x}let m=t.map(x=>{let{columns:C,values:I}=this.interpreterUtils.prepareColumns(Object.keys(x),Object.values(x),"insert",this.sqlType),D={};return C.forEach((A,L)=>{let ce=I[L];D[A]=ce,x[A]??(x[A]=ce);}),D});if(l)return this.executeInsertConflict(m,t,l,e.returning,e.withNodes);let p=!e.returning||e.returning.length===0,{sql:g,bindings:y}=this.astParser.parse(this.withInsertNodes(new te(new G(this.model.table),m,e.returning,p,false),null,e.withNodes)),w=await Y(g,y,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(p)return [];if(this.sqlType==="mysql")return await this.handleMysqlInsert(w,t,"many",e.returning)||[];let T=w;return T.length?fe(T,this.model,e.returning)||[]:[]},m=>{if(l=m,m.conflictColumns.length===0&&this.sqlType==="mssql")throw new h("ModelManager::onConflict","NOT_SUPPORTED_IN_MSSQL",new Error("MSSQL cannot express a target-less ON CONFLICT; provide the conflict columns"));s=new te(new G(this.model.table),s.records,void 0,true,false),a=this.sqlType==="mssql"?null:new ve(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 te(new G(this.model.table),t,void 0,true,false),new ve(this.model.table,r.conflictColumns,r.columnsToUpdate,r.mode,l),o)),c=await Y(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=fe(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=D=>this.interpreterUtils.formatStringColumn("mssql",D),u=[],d=t.map(D=>`select ${s.map(L=>(u.push(D[L]),`@${u.length}`)).join(", ")}`),c=s.map(l).join(", "),m=d.join(" union all "),p=e.map(D=>`target.${l(D)} = source.${l(D)}`).join(" and "),g=r.filter(D=>!e.includes(D)).map(D=>`target.${l(D)} = source.${l(D)}`).join(", "),y=s.map(l).join(", "),w=s.map(D=>`source.${l(D)}`).join(", "),T=n.returning&&n.returning.length?n.returning.map(D=>`inserted.${l(D)}${this.interpreterUtils.resolveColumnAlias("mssql",D)}`).join(", "):s.map(D=>`inserted.${l(D)}${this.interpreterUtils.resolveColumnAlias("mssql",D)}`).join(", "),x=(n.updateOnConflict??true)&&g?`when matched then update set ${g}`:"",C=`merge into ${a} as target using (${m}) as source (${c}) on ${p} ${x} when not matched then insert (${y}) values (${w}) output ${T};`,I=await Y(C,u,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});if(I.length===0&&!(n.updateOnConflict??true)){let D=e[0],A=o.map(ce=>ce[D]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(D,A).many()}return I}async updateRecord(t,e,r){let n=new Set(this.model.getColumns().map(T=>T.columnName)),o=Object.keys(e).filter(T=>n.has(T)),s=o.map(T=>e[T]),{columns:a,values:l}=this.interpreterUtils.prepareColumns(o,s,"update",this.sqlType),{primaryKey:u}=this.model;if(!u)throw new h(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:g}=this.astParser.parse([new Ee(new G(this.model.table),a,l),new M(u,"and",false,"=",t),...m?[new gt(c)]:[]]),y=await Y(p,g,this.sqlDataSource,this.sqlType,m?"rows":"affectedRows",m?{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}:void 0);if(!c.length)return;if(m){if(!y.length)throw new h(this.model.name+"::updateRecord","ROW_NOT_FOUND");return fe([y[0]],this.model,c)}let w=await this.findOneByPrimaryKey(t,r?.returning);if(!w)throw new h(this.model.name+"::updateRecord","ROW_NOT_FOUND");return w}async deleteRecord(t){if(!this.model.primaryKey)throw new h(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 ht(new G(this.model.table)),e]);await Y(r,n,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new Ue(this.model,this.sqlDataSource);return this.replicationMode&&t.setReplicationMode(this.replicationMode),t}async handleMysqlInsert(t,e,r,n){if(!this.model.primaryKey){if(r==="one"){let a=e.length?e[0]:null;return a?fe([a],this.model):null}return fe(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(d=>d[this.model.primaryKey]),l=a.map(d=>`'${d}'`).join(","),u=await this.query().select(...n??["*"]).whereIn(this.model.primaryKey,a).orderByRaw(`FIELD(${this.model.primaryKey}, ${l})`).many();return r==="one"?u.length?u[0]:null:u}let o=Array.from({length:t.affectedRows},(a,l)=>l+t.insertId),s=await this.query().select(...n||["*"]).whereIn(this.model.primaryKey,o).many();return r==="one"?s.length?s[0]:null:s}handleWhereCondition(t,e,r=false){if(e)for(let[n,o]of Object.entries(e))n==="$and"&&Array.isArray(o)?t[r?"orWhere":"where"](a=>{for(let l of o)this.handleWhereCondition(a,l,false);}):n==="$or"&&Array.isArray(o)?t[r?"orWhere":"where"](a=>{let l=true;for(let u of o)this.handleWhereCondition(a,u,!l),l=false;}):this.applyFieldCondition(t,n,o,r);}applyFieldCondition(t,e,r,n=false){if(r==null||typeof r!="object"){r===null?n?t.orWhereNull(e):t.whereNull(e):n?t.orWhere(e,"=",r):t.where(e,"=",r);return}let o=r,s=o.op,a=o.value;switch(s){case "$eq":a===null?n?t.orWhereNull(e):t.whereNull(e):n?t.orWhere(e,"=",a):t.where(e,"=",a);break;case "$ne":a===null?n?t.orWhereNotNull(e):t.whereNotNull(e):n?t.orWhere(e,"!=",a):t.where(e,"!=",a);break;case "$gt":n?t.orWhere(e,">",a):t.where(e,">",a);break;case "$gte":n?t.orWhere(e,">=",a):t.where(e,">=",a);break;case "$lt":n?t.orWhere(e,"<",a):t.where(e,"<",a);break;case "$lte":n?t.orWhere(e,"<=",a):t.where(e,"<=",a);break;case "$between":{let[l,u]=a;n?t.orWhereBetween(e,l,u):t.whereBetween(e,l,u);break}case "$not between":{let[l,u]=a;n?t.orWhereNotBetween(e,l,u):t.whereNotBetween(e,l,u);break}case "$regexp":n?t.orWhereRegexp(e,a):t.whereRegexp(e,a);break;case "$not regexp":n?t.orWhereNotRegexp(e,a):t.whereNotRegexp(e,a);break;case "$is null":n?t.orWhereNull(e):t.whereNull(e);break;case "$is not null":n?t.orWhereNotNull(e):t.whereNotNull(e);break;case "$like":n?t.orWhereLike(e,a):t.whereLike(e,a);break;case "$not like":n?t.orWhereNotLike(e,a):t.whereNotLike(e,a);break;case "$ilike":n?t.orWhereILike(e,a):t.whereILike(e,a);break;case "$not ilike":n?t.orWhereNotILike(e,a):t.whereNotILike(e,a);break;case "$in":n?t.orWhereIn(e,a):t.whereIn(e,a);break;case "$nin":n?t.orWhereNotIn(e,a):t.whereNotIn(e,a);break;default:n?t.orWhere(e,"=",r):t.where(e,"=",r);}}};var kt=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=Du(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 h("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function br(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 Tt=i=>typeof i=="number"?i:parseFloat(i);var Tr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var qe=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 wr=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 he=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 Nr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var Ce=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 Sr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var Nt=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var qr=class extends N{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var Cr=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 Rr=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 Q=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 J=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 _r=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 Mr=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 Or=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 Ar=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 xr=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 tt=class extends N{constructor(e,r=false,n=false){super("lock");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="lock";this.file="lock";this.lockType=e,this.skipLocked=r,this.noWait=n;}};var Dr=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 Wy(i){return i?Array.isArray(i)?i:[i]:[]}function Fy(i){return i?(Array.isArray(i)?i:[i]).map(e=>typeof e=="string"?{column:e}:e):[]}var Pe=class extends N{constructor(e,r=false,n="union",o){super(r?`${n} all`:n);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="union";this.file="union";this.query=e,this.isAll=r,this.type=n,this.bindings=o;}};var rt=class extends N{constructor(e,r,n,o){e==="normal"&&(e="");super("with");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="with";this.file="with";this.alias=r,this.body=n,this.clause=e,this.columns=o;}};var qt=class extends N{constructor(e,r=false,n){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e,this.options=n;}};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 Ir=class extends N{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var $r=class extends N{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var Ve=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 re=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 Ft=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 vr=class extends N{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var Er=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 Br=class Br{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=Br.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 Ft(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Ft(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"&&_.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new vr(t),this}offset(t){return typeof t!="number"&&_.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new Er(t),this}};Br.EMPTY_MAP=new Map;var Pr=Br;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 xe(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 xe(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 Qr=class extends Pr{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new re(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new re(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new re(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new re(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new re(t,"","","cross",{operator:"="},true)),this}crossJoin(t,e){let r=typeof t=="string"?t:t.table;return this.joinNodes.push(new re(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 h("JoinQueryBuilder::using","USING_REQUIRES_JOIN");return e.using=t.map(r=>String(r)),this}naturalJoinRaw(t){return this.joinNodes.push(new re(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 h("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 re(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 h("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 re(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 re(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 h("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 re(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 re(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 h("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 re(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 h("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 re(typeof t=="string"?t:t.table,e,s,"full",{operator:a||"="},false,u)),this}};var kh=/\bas\s+"?([A-Za-z_][A-Za-z0-9_]*)"?\s*(?:,|$)/gi,Lh=/^[A-Za-z_][A-Za-z0-9_.]*$/,Wh=i=>{let t=[];for(let e of i.matchAll(kh))t.push(e[1]);if(!t.length){let e=i.trim();Lh.test(e)&&t.push(e.split(".").pop());}return t},Kr=class extends Qr{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.userOutputColumns=[];this.dbType=r.getDbType(),this.fromNode=new G(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 z(`(${u.expression}) as ${l}`,void 0,void 0,true));return}let d=V(a,this.model.databaseCaseConvention);this.selectNodes.push(new z(d,l));return}let n=r;this.modelSelectedColumns.push(n);let o=this.resolveComputedColumn(n);if(o){this.selectNodes.push(new z(`(${o.expression}) as ${o.alias}`,void 0,void 0,true));return}let s=V(n,this.model.databaseCaseConvention);this.selectNodes.push(new z(s));}),this}selectRaw(e){return this.selectNodes.push(new z(e,void 0,void 0,true)),this.userOutputColumns.push(...Wh(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 z(r,n,e)),this}countDistinct(e,r){return this.selectNodes.push(new z(e,r,"count",false,true)),this}sumDistinct(e,r){return this.selectNodes.push(new z(e,r,"sum",false,true)),this}avgDistinct(e,r){return this.selectNodes.push(new z(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 z(new Dr(e,Wy(n.partitionBy),Fy(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 G(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new G(e),this}distinct(){return this.distinctNode=new Ir,this}distinctOn(...e){return this.distinctOnNode=new $r(e),this}selectJson(e,r,n){return this.selectNodes.push(new Ve(e,r,n,"extract")),this}selectJsonText(e,r,n){return this.selectNodes.push(new Ve(e,r,n,"extract_text")),this}selectJsonArrayLength(e,r,n){return this.selectNodes.push(new Ve(e,r,n,"array_length")),this}selectJsonKeys(e,r,n){return this.selectNodes.push(new Ve(e,r,n,"object_keys")),this}selectJsonRaw(e,r){return this.selectNodes.push(new Ve(e,"",r,"raw",true)),this}};var kr=class extends Kr{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 O(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 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 M(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 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 Se("","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 Se("","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 Se("","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 Se("","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 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 Se(e,r,o.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new Se(e,r,o.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new B(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new xe(r.whereNodes,"and");return this.whereNodes.push(n),this}orWhereGroup(e){let r=new B(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new xe(r.whereNodes,"or");return this.whereNodes.push(n),this}};var Lr=class extends kr{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new U(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new U(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new U(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new U(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new U(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new U(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new U(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new U(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new U(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new U(t,"or",false,"raw",e)),this}whereJsonObject(t,e){return this.andWhereJsonObject(t,e)}andWhereJsonObject(t,e){return this.whereNodes.push(new U(t,"and",false,"=",e)),this}orWhereJsonObject(t,e){return this.whereNodes.push(new U(t,"or",false,"=",e)),this}whereNotJsonObject(t,e){return this.andWhereNotJsonObject(t,e)}andWhereNotJsonObject(t,e){return this.whereNodes.push(new U(t,"and",true,"=",e)),this}orWhereNotJsonObject(t,e){return this.whereNodes.push(new U(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 U(t,"and",false,"contains",e)),this}orWhereJsonSupersetOf(t,e){return this.whereNodes.push(new U(t,"or",false,"contains",e)),this}whereJsonNotSupersetOf(t,e){return this.andWhereJsonNotSupersetOf(t,e)}andWhereJsonNotSupersetOf(t,e){return this.whereNodes.push(new U(t,"and",true,"contains",e)),this}orWhereJsonNotSupersetOf(t,e){return this.whereNodes.push(new U(t,"or",true,"contains",e)),this}whereJsonSubsetOf(t,e){return this.andWhereJsonSubsetOf(t,e)}andWhereJsonSubsetOf(t,e){return this.whereNodes.push(new U(t,"and",false,"subset",e)),this}orWhereJsonSubsetOf(t,e){return this.whereNodes.push(new U(t,"or",false,"subset",e)),this}whereJsonNotSubsetOf(t,e){return this.andWhereJsonNotSubsetOf(t,e)}andWhereJsonNotSubsetOf(t,e){return this.whereNodes.push(new U(t,"and",true,"subset",e)),this}orWhereJsonNotSubsetOf(t,e){return this.whereNodes.push(new U(t,"or",true,"subset",e)),this}whereJsonHasNone(t,e){return this.andWhereJsonHasNone(t,e)}andWhereJsonHasNone(t,e){return this.whereNodes.push(new U(t,"and",false,"has none",e)),this}orWhereJsonHasNone(t,e){return this.whereNodes.push(new U(t,"or",false,"has none",e)),this}pushJsonPath(t,e,r,n,o,s){let a=new U(e,t,s,"path",o,false,r,n);this.whereNodes.push(a);}};var B=class i extends Lr{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 f(this.model)),this._interpreterUtils}setReplicationMode(e){return this.replicationMode=e,this}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof i)&&typeof e[1]=="string"){let[r,n]=e;if(typeof r=="function"){let o=new i(this.model,this.sqlDataSource),s=r(o),a=s!=null&&"extractQueryNodes"in s?s:o;return this.selectNodes.push(new z(a.extractQueryNodes(),n)),this}return this.selectNodes.push(new z(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=>Y(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 h("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 gr(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 h(this.model.name+"::paginateWithCursor","ORDER_BY_REQUIRED");let n=this.orderByNodes;if(n.some(m=>m.isRawValue))throw new h(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 g=0;g<o.length;g++){let y=g;p.orWhere(w=>{for(let T=0;T<y;T++)w.where(o[T],"=",m[T]);w.where(o[y],s,m[y]);});}});}this.limit(e+1);let a=await this.many(),l=a.length>e,u=l?a.slice(0,e):a,d=u[u.length-1],c=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 tt("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new tt("for_share",e.skipLocked,e.noWait)),this}forNoKeyUpdate(e={}){return this.assertPgLockStrength("forNoKeyUpdate","FOR NO KEY UPDATE"),this.lockQueryNodes.push(new tt("for_no_key_update",e.skipLocked,e.noWait)),this}forKeyShare(e={}){return this.assertPgLockStrength("forKeyShare","FOR KEY SHARE"),this.lockQueryNodes.push(new tt("for_key_share",e.skipLocked,e.noWait)),this}assertPgLockStrength(e,r){if(this.dbType!=="postgres")throw new h(`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 h("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 Pe(e,false,"union",r)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Pe(o)),this}unionAll(e,r){if(typeof e=="string")return this.unionNodes.push(new Pe(e,true,"union",r)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Pe(o,true)),this}intersect(e,r){return this.unionNodes.push(new Pe(this.resolveSetOperationNodes(e),false,"intersect",r)),this}except(e,r){return this.unionNodes.push(new Pe(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?Tt(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 G(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?Tt(r.total):0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?Tt(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?Tt(r.total):0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?Tt(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")&&_.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:br(e,r,a),data:s}}table(e,r){if(typeof e=="function"){if(!r)throw new h("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 G(a,r),this}return this.fromNode=new G(e,r),this}withSchema(e){return this.schemaName=e,this}fromRaw(e,r=[]){return this.fromNode=new G(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 rt("normal",e,u.extractQueryNodes(),o)),this}withRecursive(e,r){let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new rt("recursive",e,s.extractQueryNodes())),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new h("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 rt("materialized",e,s.extractQueryNodes())),this}withNotMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new h("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 rt("not materialized",e,s.extractQueryNodes())),this}insert(e,r){this.assertWriteClausesSupported("QueryBuilder::insert");let n=Object.fromEntries(Object.keys(e).map(s=>[s,e[s]])),o=!r||r.length===0;return this.insertNodeSource=void 0,this.insertConflictConfig=null,this.onDuplicateNode=null,this.insertNode=new te(this.fromNode,[this.interpreterUtils.stripComputedFromData(n)],r,o),new De(()=>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((g,y)=>[g,a[y]])),u=this.insertConflictConfig;if(this.insertNode=new te(this.fromNode,[l],u?void 0:r,u?true:o),u&&this.dbType==="mssql"){let g=await this.executeMssqlMergeRaw([l],u.conflictColumns,u.columnsToUpdate,{updateOnConflict:u.mode==="update",returning:r},[e]);return o?void 0:g[0]}let{sql:d,bindings:c}=this.astParser.parse(this.extractWriteNodes()),m=await this.getSqlDataSource("write"),p=await Y(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 te(this.fromNode,n,r,o),new De(()=>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:g}=this.interpreterUtils.prepareColumns(Object.keys(m),Object.values(m),"insert",this.dbType);return Object.fromEntries(p.map((y,w)=>[y,g[w]]))})),a=this.insertConflictConfig;if(this.insertNode=new te(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 Y(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 h("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 te(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 ve(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 te(this.fromNode,[],void 0,true,false,{source:e,targetColumns:r}),new De(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:n,bindings:o}=this.astParser.parse(this.extractWriteNodes()),s=await this.getSqlDataSource("write"),a=await Y(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=L=>this.interpreterUtils.formatStringColumn("mssql",L),d=[],c=e.map(L=>`select ${a.map(P=>(d.push(L[P]),`@${d.length}`)).join(", ")}`),m=a.map(u).join(", "),p=c.join(" union all "),g=r.map(L=>`target.${u(L)} = source.${u(L)}`).join(" and "),y=n.filter(L=>!r.includes(L)).map(L=>`target.${u(L)} = source.${u(L)}`).join(", "),w=a.map(u).join(", "),T=a.map(L=>`source.${u(L)}`).join(", "),S=o.returning&&o.returning.length?o.returning.map(L=>`inserted.${u(L)}`).join(", "):a.map(L=>`inserted.${u(L)}`).join(", "),C=(o.updateOnConflict??true)&&y?`when matched then update set ${y}`:"",I=`merge into ${l} as target using (${p}) as source (${m}) on ${g} ${C} when not matched then insert (${w}) values (${T}) output ${S};`,D=await this.getSqlDataSource("write"),A=await Y(I,d,D,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(A)?A:[A]}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 h("QueryBuilder::update","UPDATE_REQUIRES_COLUMNS");this.updateNode=new Ee(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 Ee(this.fromNode,l,u);let{sql:d,bindings:c}=this.astParser.parse(this.extractWriteNodes()),m=await this.getSqlDataSource("write");return Y(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 gt(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 h("QueryBuilder::truncate","CTE_NOT_SUPPORTED_ON_TRUNCATE");return this.truncateNode=new qt(this.fromNode,false,e),new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:r,bindings:n}=this.astParser.parse(this.extractWriteNodes()),o=await this.getSqlDataSource("write");await Y(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 ht(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 Y(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=lt()}=e||{};return this.updateNode=new Ee(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 Ee(this.fromNode,o,s);let{sql:a,bindings:l}=this.astParser.parse(this.extractWriteNodes()),u=await this.getSqlDataSource("write");return Y(a,l,u,this.dbType,"affectedRows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return Bt(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),n=Qt(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${n}`:n,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new z("*")]);let{sql:e,bindings:r}=this.astParser.parse(this.extractQueryNodes());return {sql:this.withQuery?`${this.withQuery} ${e}`:e,bindings:[...r||[]]}}clone(){let e=new i(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=F(this.modelSelectedColumns),e.distinctNode=F(this.distinctNode),e.distinctOnNode=F(this.distinctOnNode),e.selectNodes=F(this.selectNodes),e.withQuery=F(this.withQuery),e.joinNodes=F(this.joinNodes),e.whereNodes=F(this.whereNodes),e.groupByNodes=F(this.groupByNodes),e.havingNodes=F(this.havingNodes),e.orderByNodes=F(this.orderByNodes),e.lockQueryNodes=F(this.lockQueryNodes),e.unionNodes=F(this.unionNodes),e.withNodes=F(this.withNodes),e.comments=[...this.comments],e.hints=[...this.hints],e.schemaName=this.schemaName,e.fromNode=F(this.fromNode),e.limitNode=F(this.limitNode),e.offsetNode=F(this.offsetNode),e.returningNode=F(this.returningNode),e.isNestedCondition=this.isNestedCondition,e}clear(){let e=new i(this.model,this.sqlDataSource);return this.fromNode.alias&&e.table(e.model.table,this.fromNode.alias),e}clearLockQuery(){return this.lockQueryNodes=[],this}clearUnionQuery(){return this.unionNodes=[],this}clearWithQuery(){return this.withNodes=[],this}assertWriteClausesSupported(e,r=false,n=true){if(!n&&this.withNodes.length&&this.dbType==="mariadb")throw new h(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 h(e,"SELECT_ONLY_CLAUSE_ON_WRITE");if(this.joinNodes.length>0)throw new h(e,"JOIN_NOT_SUPPORTED_ON_WRITE");let s=this.orderByNodes.length>0||this.limitNode!==null;if(this.offsetNode||!r&&s)throw new h(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 z("*")]);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 jy(i,t){return t.strategy&&t.strategy!=="auto"?t.strategy:Fh(i)}function Fh(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 Bl=ne(),Ue=class i extends B{constructor(e,r){super(e,r);this.loadOptions={strategy:"auto"};this.sqlModelManagerUtils=new kt(e,this.dbType,r),this.relationQueryBuilders=[],this.modelSelectedColumns=[],this.modelColumnsMap=this.model.getColumnsByDatabaseName(),this.modelColumnsDatabaseNames=new Map;for(let[n,o]of this.modelColumnsMap)this.modelColumnsDatabaseNames.set(n,o.columnName);}expandModelSelectColumns(){let e=this.selectNodes;if(!e.length){if(this.joinNodes.length)return;for(let[,r]of this.modelColumnsMap)r.expression||e.push(new z(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 h(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=fe(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 gr(n,o,s,e,{onData:async(l,u)=>{let d=fe([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 et(this.model,r)}async find(e){return this.getModelManager().find(e)}async findOne(e){return this.getModelManager().findOne(e)}async findOneOrFail(e){return this.getModelManager().findOneOrFail(e)}async findOneByPrimaryKey(e,r){return this.getModelManager().findOneByPrimaryKey(e,r)}async updateRecord(e,r,n){return this.getModelManager(n?.trx).updateRecord(e,r,n)}async deleteRecord(e,r){return this.getModelManager(r?.trx).deleteRecord(e)}async save(e,r){let n=this.model.primaryKey;if(!n)throw new h(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 h(`${this.model.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let l=V(a.leftForeignKey,s.caseConvention||this.model.databaseCaseConvention),u=V(a.rightForeignKey,s.caseConvention||this.model.databaseCaseConvention),d=n.map((p,g)=>({[l]:r[this.model.primaryKey],[u]:p[a.model.primaryKey],...o?o(p,g):{}}));class c extends de{static get table(){return a.throughModel}}c.databaseCaseConvention="preserve",c.modelCaseConvention="preserve",await new et(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 fe(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 fe(o,this.model,r)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?+r.total:0}async getMax(e){this.clearForFunctions(),this.selectFunc("max",e,"total");let r=await this.one();return r?+r.total:0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?+r.total:0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?+r.total:0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?+r.total:0}async paginate(e,r){let n=this.clone(),o=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>o.many(),()=>n.getCount("*"));return {paginationMetadata:br(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=F(this.relationQueryBuilders),e}async processRelationsRecursively(e){await Promise.all(this.relationQueryBuilders.filter(r=>r.isRelationQueryBuilder).map(async r=>{let n=await this.getRelatedModelsForRelation(r,r.relation,e);this.mapRelatedModelsToModels(r.relation,e,n);}));}async processRelationsWithStrategy(e){let r=e.length,n=this.relationQueryBuilders.filter(s=>s.isRelationQueryBuilder),o=async s=>{let a=jy({parentCount:r,relationType:s.relation.type,hasLimitOffset:!!s.limitNode||!!s.offsetNode,hasOrderBy:s.orderByNodes.length>0},s.loadOptions),l=s.relationQueryBuilders.length>0;a==="join"&&!l?await this.loadRelationViaJoin(s,e):await this.loadRelationViaBatch(s,e);};if(this.dbType==="mssql"){for(let s of n)await o(s);return}await Promise.all(n.map(o));}async loadRelationViaJoin(e,r){let n=e.relation,o=e.loadOptions.joinSeparator||"__",a=await this.buildJoinQuery(e,n,o).many();this.mapJoinedResultsToModels(a,r,n,o);}buildJoinQuery(e,r,n){let o=new i(this.model,this.sqlDataSource);if(this.modelSelectedColumns.length>0)for(let s of this.selectNodes)o.selectNodes.push(F(s));else for(let[s,a]of this.model.getColumnsByDatabaseName())a.expression||o.selectNodes.push(new z(`${this.model.table}.${s}`,void 0,void 0,true));for(let s of this.whereNodes){let a=F(s);this.qualifyWhereNodeColumns(a,this.model.table),o.whereNodes.push(a);}for(let s of this.groupByNodes)o.groupByNodes.push(F(s));for(let s of this.orderByNodes)o.orderByNodes.push(F(s));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(o.limitNode=F(this.limitNode)),this.offsetNode&&(o.offsetNode=F(this.offsetNode))),r.type){case "hasOne":case "hasMany":o.leftJoin(r.model.table,`${this.model.table}.${this.model.primaryKey}`,`${r.model.table}.${r.foreignKey}`);break;case "belongsTo":o.leftJoin(r.model.table,`${this.model.table}.${r.foreignKey}`,`${r.model.table}.${r.model.primaryKey}`);break;case "manyToMany":{let s=r;o.leftJoin(s.throughModel,`${this.model.table}.${this.model.primaryKey}`,`${s.throughModel}.${s.leftForeignKey}`),o.leftJoin(s.model.table,`${s.throughModel}.${s.rightForeignKey}`,`${s.model.table}.${s.model.primaryKey}`);break}}this.selectRelationColumnsWithAlias(o,r,e,n);for(let s of e.whereNodes)o.whereNodes.push(F(s));for(let s of e.orderByNodes)o.orderByNodes.push(F(s));return o}selectRelationColumnsWithAlias(e,r,n,o){let s=r.columnName,a=r.model,l=a.getColumnsByName(),u=a.getColumnsByDatabaseName(),d=n.selectNodes.filter(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,g=p.includes(".")?p.split(".").pop():p,y=u.get(g)||l.get(g),w=y?.databaseName??g,T=m.alias??y?.columnName??g;e.selectRaw(`${a.table}.${w} as ${s}${o}${T}`);}}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 Se)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof xe)for(let n of e.nodes)this.qualifyWhereNodeColumns(n,r);}serializeRelationData(e,r){for(let n of Object.keys(e)){let o=r.get(n);o?.serialize&&e[n]!==null&&e[n]!==void 0&&(e[n]=o.serialize(e[n]));}}async loadRelationViaBatch(e,r){let n=await this.getRelatedModelsForRelation(e,e.relation,r);this.mapRelatedModelsToModels(e.relation,r,n);}mapRelatedModelsToModels(e,r,n){switch(e.type){case "hasOne":if(!this.model.primaryKey)throw new h(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 g=o.get(String(p));m[e.columnName]=g||null;});break;case "belongsTo":let s=new Map;n.forEach(m=>{if(!e.model.primaryKey)throw new h(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 g=s.get(String(p));m[e.columnName]=g||null;});break;case "hasMany":if(!this.model.primaryKey)throw new h(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 g=String(p);a.has(g)||a.set(g,[]),a.get(g).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let g=a.get(String(p))||[];m[e.columnName]=g;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new h(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)||V(d,this.model.modelCaseConvention);n.forEach(m=>{let p=m[c];if(p==null)return;let g=String(p);u.has(g)||u.set(g,[]),delete m[c],u.get(g).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let g=u.get(String(p))||[];m[e.columnName]=g;});break;default:throw new h(this.model.name+"::mapRelatedModelsToModels","UNSUPPORTED_RELATION_TYPE")}}async getRelatedModelsForRelation(e,r,n){return this.getRelatedModelsQueryForRelation(e,r,n).many()}getRelatedModelsQueryForRelation(e,r,n){let o=this.getFilterValuesFromModelsForRelation(r,n);switch(r.type){case "belongsTo":case "hasOne":return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,o);case "hasMany":let s=e.limitNode?.limit,a=e.offsetNode?.offset;if(!s&&!a)return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,o);let l=ke(Bl.crypto.randomBytes(6)),u=`${r.model.table}_cte_${l}`,d=e.orderByNodes.map(A=>A.isRawValue?A.column:`${this.interpreterUtils.formatStringColumn(this.dbType,A.column)} ${A.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let c=e.with(u,A=>A.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${d}) as rn_${l}`).whereIn(r.foreignKey,o));s&&c.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&c.whereRaw(`rn_${l} > ${a}`);let m=e.modelSelectedColumns.map(A=>kn(A,u,e.model.table));return c.select(...m).table(u);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new h(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!n.length)return e;let g=e.limitNode?.limit,y=e.offsetNode?.offset,w=e.modelSelectedColumns.length?e.modelSelectedColumns.map(A=>A.includes(".")?A:`${r.model.table}.${A}`):[`${r.model.table}.*`];if(!g&&!y)return e.select(...w).select([`${p.throughModel}.${p.leftForeignKey}`,p.leftForeignKey]).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o);let T=ke(Bl.crypto.randomBytes(6)),S=`${r.model.table}_cte_${T}`,x=e.orderByNodes.map(A=>{if(A.isRawValue)return A.column;let L=A.column.includes(".")?A.column:`${r.model.table}.${A.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,L)} ${A.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let C=`${ke(Bl.crypto.randomBytes(6))}_left_foreign_key`,I=e.with(S,A=>A.select(...w).select([`${p.throughModel}.${p.leftForeignKey}`,C]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${x}) as rn_${T}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o));g&&I.whereRaw(`rn_${T} <= ${g+(y||0)}`),y&&I.whereRaw(`rn_${T} > ${y}`);let D=w.map(A=>kn(A,S,e.model.table));return I.select(...D).select([`${S}.${C}`,p.leftForeignKey]).table(S);default:throw new h(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new h(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 h(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);default:throw new h(this.model.name+"::getFilterValuesFromModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}applyHavingRelatedFilter(e,r,n,o){let s=new f(r.model),a=new f(this.model),l=this.dbType;switch(r.type){case "hasOne":case "hasMany":{if(!this.model.primaryKey||!r.foreignKey)throw new h(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 h(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 h(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 h(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}};var Ql=class{constructor(t,e,r){this.sqlDataSource=t,this.typeofModel=e,this.modelData=r;}merge(t){this.modelData={...this.modelData,...t};}getQueryBuilder(){return new Ue(this.typeofModel,this.sqlDataSource)}async create(t){if(t<=0)return [];let e=this.getQueryBuilder();if(t===1)return await e.insert(this.modelData,{returning:["*"]});let r=Array.from({length:t});return await e.insertMany(r.map(()=>({...this.modelData})),{returning:["*"]})}},jh=(i,t,e)=>new Ql(i,t,e);var Ct=new Map,Je=new Map,Wr=class{async get(t){return Ct.get(t)}async set(t,e,r){let n=Je.get(t);if(n&&(clearTimeout(n),Je.delete(t)),Ct.set(t,e),r){let o=setTimeout(()=>{Ct.delete(t),Je.delete(t);},r);Je.set(t,o);}}async invalidate(t){let e=Je.get(t);e&&(clearTimeout(e),Je.delete(t)),Ct.delete(t);}async invalidateAll(t){let e=Ct.keys();for(let r of e)if(r.startsWith(t)){let n=Je.get(r);n&&(clearTimeout(n),Je.delete(r)),Ct.delete(r);}}};me();var Uy=class{constructor(t){this.ioRedisOptions=t;}async getClient(){if(this.redisInstance)return this.redisInstance;let{default:t}=await import('ioredis').catch(()=>{throw _.error("RedisCacheAdapter::getClient ioredis driver not found and required for the RedisCacheAdapter"),new k("ioredis")});return this.redisInstance=new t(this.ioRedisOptions),this.redisInstance}async get(t){let r=await(await this.getClient()).get(t);if(r!=null)return this.deserializeData(r)}async set(t,e,r){let n=await this.getClient(),o=this.serializeData(e);if(o){if(r){await n.set(t,o,"PX",r);return}await n.set(t,o);}}async invalidate(t){await(await this.getClient()).del(t);}async invalidateAll(t){let e=await this.getClient(),r=await e.keys(`${t}:*`);for(let n of r)await e.del(n);}serializeData(t){if(t!=null){if(typeof t=="string")return t;if(Buffer.isBuffer(t))return t.toString("base64");if(typeof t=="object"||Array.isArray(t))try{return JSON.stringify(t)}catch(e){throw _.error("RedisCacheAdapter::set failed to serialize data"),e}return String(t)}}deserializeData(t){try{return JSON.parse(t)}catch{return t}}async disconnect(){this.redisInstance&&await this.redisInstance.quit();}};var ee=ne(),E={DB_TYPE:ee.readEnv("DB_TYPE"),DB_HOST:ee.readEnv("DB_HOST"),DB_PORT:ee.readEnv("DB_PORT"),DB_USER:ee.readEnv("DB_USER"),DB_PASSWORD:ee.readEnv("DB_PASSWORD"),DB_DATABASE:ee.readEnv("DB_DATABASE"),DB_LOGS:ee.readEnv("DB_LOGS")==="true",MIGRATION_PATH:ee.readEnv("MIGRATION_PATH")||"database/migrations",REDIS_HOST:ee.readEnv("REDIS_HOST"),REDIS_PORT:ee.readEnv("REDIS_PORT"),REDIS_USERNAME:ee.readEnv("REDIS_USERNAME"),REDIS_PASSWORD:ee.readEnv("REDIS_PASSWORD"),REDIS_DATABASE:ee.readEnv("REDIS_DATABASE"),MONGO_URL:ee.readEnv("MONGO_URL"),MONGO_LOGS:ee.readEnv("MONGO_LOGS")==="true",MSSQL_TRUST_SERVER_CERTIFICATE:ee.readEnv("MSSQL_TRUST_SERVER_CERTIFICATE")==="true"||false},Uh=()=>{try{if(!ee.fs.exists(".env"))return E;let i=ee.fs.readFileSync(".env");if(!i)return E;new TextDecoder().decode(i).split(`
|
|
142
|
-
`).forEach(r=>{let[n,o]=r.split("="),s=n.trim(),a=o.trim();switch(s){case "DB_TYPE":
|
|
143
|
-
Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}let e=fr(this.logs);e?.customLogger&&_.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||$.DB_HOST,this.port=+t?.port||+$.DB_PORT,this.username=t?.username||$.DB_USER,this.password=t?.password||$.DB_PASSWORD,this.database=t?.database||$.DB_DATABASE,this.logs=t?.logs||$.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||$.DB_HOST,this.port=+t?.port||+$.DB_PORT,this.username=t?.username||$.DB_USER,this.password=t?.password||$.DB_PASSWORD,this.database=t?.database||$.DB_DATABASE,this.logs=t?.logs||$.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||$.DB_HOST,this.port=+t?.port||+$.DB_PORT,this.username=t?.username||$.DB_USER,this.password=t?.password||$.DB_PASSWORD,this.database=t?.database||$.DB_DATABASE,this.logs=t?.logs||$.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||$.DB_DATABASE||":memory:",this.logs=t?.logs||$.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||$.MONGO_URL,this.logs=t?.logs||$.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||$.DB_HOST,this.port=+t?.port||+$.DB_PORT,this.username=t?.username||$.DB_USER,this.password=t?.password||$.DB_PASSWORD,this.database=t?.database||$.DB_DATABASE,this.logs=t?.logs||$.DB_LOGS||false,this.port||(this.port=1433);}};var ge=class{constructor(t){this.options=t;}static async createDriver(t){throw new h("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};me();var Ut=class Ut extends ge{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new Ut(this.mongoClient);let e=await import('mongodb').catch(()=>{throw new k("mongodb")});if(this.mongoClient=e.default??e,!this.mongoClient)throw new k("mongodb");return new Ut(this.mongoClient)}};Ut.mongoClient=null;var Fr=Ut;me();var Vt=class Vt extends ge{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new Vt(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new k("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new k("mssql");return new Vt(this.mssqlClient)}};Vt.mssqlClient=null;var jr=Vt;me();var Jt=class Jt extends ge{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new Jt(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new k("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new k("mysql2");return new Jt(this.mysqlClient)}};Jt.mysqlClient=null;var Ur=Jt;me();var Ht=class Ht extends ge{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new Ht(this.pgClient);let e=await import('pg').catch(()=>{throw new k("pg")});if("default"in e&&(e.default,this.pgClient=e.default??e),!this.pgClient)throw new k("pg");return new Ht(this.pgClient)}};Ht.pgClient=null;var Vr=Ht;me();var zt=class zt extends ge{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 k("sqlite3")});if(this.sqlite3Client=e.default??e,!this.sqlite3Client)throw new k("sqlite3");return new zt(this.sqlite3Client)}};zt.sqlite3Client=null;var Jr=zt;var ae=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await Ur.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await Vr.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await Jr.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await Fr.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await jr.createDriver(),this.mssqlDriver;default:throw new h(`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}}};ae.mysqlDriver=null,ae.pgDriver=null,ae.sqliteDriver=null,ae.mssqlDriver=null,ae.mongodbDriver=null;var Kl=Symbol("mongoProperties");function Hr(){return (i,t)=>{let e=K.getMetadata(Kl,i)||[];e.push(t),K.defineMetadata(Kl,e,i);}}function Vy(i){return K.getMetadata(Kl,i.prototype)||[]}function Jy(){return {$annotations:{}}}var _t=class extends We{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}};mu([Hr()],_t.prototype,"id");function Vh(i){return typeof i!="function"||!i.prototype}function Jh(i){let t={id:i._id?.toString()};for(let e of Object.keys(i))e!=="_id"&&(t[e]=i[e]);return t}async function He(i,t,e){if(!t)return null;if(Vh(i))return Jh(t);let r=Jy(),n=Vy(i);return (!e||!e.length)&&(e=n),e.includes("id")||e.push("id"),r.$annotations||(r.$annotations={}),await Promise.all(Object.keys(t).map(async o=>{if(o==="_id"){r.id=t._id?.toString();return}if(!n.includes(o)){let a=V(o,i.modelCaseConvention);r.$annotations[a]=t[o];return}let s=V(o,i.modelCaseConvention);r[s]=t[o];})),Object.keys(r.$annotations).length||delete r.$annotations,await Promise.all(e.map(async o=>{if(o!=="id"&&!t.hasOwnProperty(o)){let s=V(o,i.modelCaseConvention);r[s]=null;}})),r}async function zr(i,t,e){return (await Promise.all(t.map(async n=>await He(i,n,e)))).filter(n=>n!==null)}var Gr=class{constructor(t,e,r,n=false){this.model=t,this.idObject={},this.whereObject={},this.logs=n,this.session,this.mongoDataSource=e,e.isConnected&&this.initCollection();}initCollection(){this.collection=this.mongoDataSource.getCurrentConnection().db().collection(this.model.collection);}async ensureInitialized(){await this.mongoDataSource.ensureConnected(),this.collection||this.initCollection();}async one(t={throwErrorOnNull:false}){await this.ensureInitialized(),t.ignoreHooks?.includes("beforeFetch")||this.model.beforeFetch?.(this);let e={...this.whereObject};Object.keys(this.idObject).length&&(e._id=this.idObject);let r=await this.collection.findOne(e,{projection:this.selectObject,session:this.session}),n=await He(this.model,r,this.selectFields);return t.ignoreHooks?.includes("afterFetch")?n:(await(this.model.afterFetch?.([n])??[n]))[0]}async oneOrFail(t={throwErrorOnNull:true}){let e=await this.one(t);if(!e)throw new h("MongoQueryBuilder::oneOrFail","ROW_NOT_FOUND");return e}async many(t={}){await this.ensureInitialized(),t.ignoreHooks?.includes("beforeFetch")||this.model.beforeFetch?.(this);let e={...this.whereObject};Object.keys(this.idObject).length&&(e._id=this.idObject);let r=await this.collection.find(e,{projection:this.selectFields,sort:this.sortObject,limit:this.limitNumber,skip:this.offsetNumber,session:this.session}).toArray(),n=await zr(this.model,r,this.selectFields);return t.ignoreHooks?.includes("afterFetch")?n:await(this.model.afterFetch?.(n)??n)}async insert(t,e={}){await this.ensureInitialized(),e.ignoreHooks||this.model.beforeInsert?.(t);let r=await this.collection.insertOne(t,{session:this.session});if(!e.returning)return {id:r.insertedId.toString()};let n=await this.collection.findOne({_id:r.insertedId});return await He(this.model,n,this.selectFields)}async insertMany(t,e={}){await this.ensureInitialized(),e.ignoreHooks||this.model.beforeInsert?.(t);let r=await this.collection.insertMany(t,{session:this.session});if(!e.returning)return Object.values(r.insertedIds).map(o=>({id:o.toString()}));let n=await this.collection.find({_id:{$in:Object.values(r.insertedIds)}}).toArray();return await zr(this.model,n,this.selectFields)}async update(t,e={}){if(await this.ensureInitialized(),e.ignoreHooks||this.model.beforeUpdate?.(this),(await this.collection.updateMany({_id:this.idObject,...this.whereObject},{$set:t,session:this.session})).modifiedCount===0)return [];let n=await this.collection.find({_id:Object.keys(this.idObject).length?this.idObject:void 0,...this.whereObject},{projection:this.selectFields}).toArray();return await zr(this.model,n,this.selectFields)}async delete(t={}){await this.ensureInitialized(),t.ignoreHooks||this.model.beforeDelete?.(this),await this.collection.deleteMany(this.whereObject,{session:this.session});}async count(t={}){return await this.ensureInitialized(),t.ignoreHooks||this.model.beforeFetch?.(this),this.collection.countDocuments(this.whereObject,{session:this.session})}select(t){return this.selectFields=t,this.selectObject=t.reduce((e,r)=>(e[r]=1,e),{}),this}where(t,e,r){let n="$eq",o;typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="$eq");let s=se("mongodb");if(t==="id")return this.idObject={$eq:new s.ObjectId(o)},this;let a={[t]:{[n]:o}};return this.whereObject?(this.whereObject.$and||(this.whereObject.$and=[]),this.whereObject.$and.push(a)):this.whereObject={$and:[a]},this}andWhere(t,e,r){let n="$eq",o;typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="$eq");let s=se("mongodb"),a={[t]:{[n]:o}};return t==="id"?(this.idObject={$eq:new s.ObjectId(o)},this):(this.whereObject?(this.whereObject.$and||(this.whereObject.$and=[]),this.whereObject.$and.push(a)):this.whereObject={$and:[a]},this)}orWhere(t,e,r){let n="$eq",o;typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="$eq");let s=se("mongodb"),a={[t]:{[n]:o}};return t==="id"?(this.idObject={$eq:new s.ObjectId(o)},this):(this.whereObject?(this.whereObject.$or||(this.whereObject.$or=[]),this.whereObject.$or.push(a)):this.whereObject={$or:[a]},this)}whereExists(t){let e={[t]:{$exists:true}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}andWhereExists(t){let e={[t]:{$exists:true}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}orWhereExists(t){let e={[t]:{$exists:true}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(e),this):(this.whereObject.$or=[e],this):(this.whereObject={$or:[e]},this)}whereNotExists(t){let e={[t]:{$exists:false}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}andWhereNotExists(t){let e={[t]:{$exists:false}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}orWhereNotExists(t){let e={[t]:{$exists:false}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(e),this):(this.whereObject.$or=[e],this):(this.whereObject={$or:[e]},this)}whereNot(t,e){let r={[t]:{$ne:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}andWhereNot(t,e){let r={[t]:{$ne:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}orWhereNot(t,e){let r={[t]:{$ne:e}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(r),this):(this.whereObject.$or=[r],this):(this.whereObject={$or:[r]},this)}whereLike(t,e){let r={[t]:{$regex:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}andWhereLike(t,e){let r={[t]:{$regex:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}orWhereLike(t,e){let r={[t]:{$regex:e}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(r),this):(this.whereObject.$or=[r],this):(this.whereObject={$or:[r]},this)}whereNotLike(t,e){let r={[t]:{$not:{$regex:e}}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}andWhereNotLike(t,e){let r={[t]:{$not:{$regex:e}}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}orWhereNotLike(t,e){let r={[t]:{$not:{$regex:e}}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(r),this):(this.whereObject.$or=[r],this):(this.whereObject={$or:[r]},this)}whereIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$in:o},this}let n={[t]:{$in:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}andWhereIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$in:o},this}let n={[t]:{$in:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}orWhereIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$in:o},this}let n={[t]:{$in:e}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(n),this):(this.whereObject.$or=[n],this):(this.whereObject={$or:[n]},this)}whereNotIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$nin:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}andWhereNotIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$nin:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}orWhereNotIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$nin:e}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(n),this):(this.whereObject.$or=[n],this):(this.whereObject={$or:[n]},this)}whereNull(t){if(t==="id")return _.warn("Id cannot be null"),this;let e={[t]:null};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}andWhereNull(t){if(t==="id")return _.warn("Id cannot be null"),this;let e={[t]:null};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}orWhereNull(t){if(t==="id")return _.warn("Id cannot be null"),this;let e={[t]:null};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(e),this):(this.whereObject.$or=[e],this):(this.whereObject={$or:[e]},this)}whereNotNull(t){if(t==="id")return _.warn("Id cannot be null"),this;let e={[t]:{$ne:null}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}andWhereNotNull(t){if(t==="id")return _.warn("Id cannot be null"),this;let e={[t]:{$ne:null}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}orWhereNotNull(t){if(t==="id")return _.warn("Id cannot be null"),this;let e={[t]:{$ne:null}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(e),this):(this.whereObject.$or=[e],this):(this.whereObject={$or:[e]},this)}whereBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$gte:e[0],$lte:e[1]}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}andWhereBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$gte:e[0],$lte:e[1]}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}orWhereBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$gte:e[0],$lte:e[1]}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(n),this):(this.whereObject.$or=[n],this):(this.whereObject={$or:[n]},this)}whereNotBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$lt:e[0],$gt:e[1]}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}andWhereNotBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$lt:e[0],$gt:e[1]}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}orWhereNotBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$lt:e[0],$gt:e[1]}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(n),this):(this.whereObject.$or=[n],this):(this.whereObject={$or:[n]},this)}whereRaw(t){return this.whereObject={...this.whereObject,...t},this}andRawWhere(t){return this.whereObject={...this.whereObject,...t},this}orRawWhere(t){return this.whereObject.$or||(this.whereObject.$or=[]),this.whereObject.$or.push(t),this}sortById(t){return this.sortObject={_id:t},this}sort(t){return typeof t=="number"?(this.sortObject={_id:t},this):typeof t=="string"?(this.sortObject={[t]:1},this):Array.isArray(t)?(this.sortObject=t.reduce((e,r)=>{if(typeof r=="string")return e[r]=1,e;let n=Object.keys(r)[0],o=Object.values(r)[0];return e[n]=+o,e},{}),this):(this.sortObject=t,this)}limit(t){return this.limitNumber=t,this}offset(t){return this.offsetNumber=t,this}};var Yr=class{constructor(t,e,r,n=false){this.logs=n,this.session=r,this.mongoDataSource=e,this.collection=t,e.isConnected&&this.initConnection();}initConnection(){this.mongoClient=this.mongoDataSource.getCurrentConnection(),this.collectionInstance=this.mongoClient.db().collection(this.collection.collection);}async ensureInitialized(){await this.mongoDataSource.ensureConnected(),this.collectionInstance||this.initConnection();}async find(t){await this.ensureInitialized();let e=this.query();return t?(t.select&&e.select(t.select),t.where&&Object.entries(t.where).forEach(([r,n])=>{e.where(r,n);}),t.sort&&e.sort(t.sort),t.limit&&e.limit(t.limit),t.offset&&e.offset(t.offset),e.many({ignoreHooks:t.ignoreHooks})):e.many()}async findOne(t){await this.ensureInitialized();let e=this.query();return t?(t.where&&Object.entries(t.where).forEach(([r,n])=>{e.where(r,n);}),e.one({ignoreHooks:t.ignoreHooks})):e.oneOrFail()}async findOneOrFail(t){await this.ensureInitialized();let e=this.query();if(!t)return e.oneOrFail();t.select&&e.select(t.select),t.where&&Object.entries(t.where).forEach(([n,o])=>{e.where(n,o);});let r=await e.one({ignoreHooks:t.ignoreHooks});if(r===null)throw t.customError?t.customError:new h("CollectionManager::findOneOrFail No record found","ROW_NOT_FOUND");return r}query(){return new Gr(this.collection,this.mongoDataSource,this.session,this.logs)}async insert(t,e={}){await this.ensureInitialized(),e.ignoreHooks||this.collection.beforeInsert(t);let n=(await this.collectionInstance.insertOne(t)).insertedId,o=await this.collectionInstance.findOne({_id:n},{session:this.session});return await He(this.collection,o)}async insertMany(t,e={}){await this.ensureInitialized(),e.ignoreHooks||t.forEach(s=>{this.collection.beforeInsert(s);});let n=(await this.collectionInstance.insertMany(t)).insertedIds,o=await this.collectionInstance.find({_id:{$in:Object.values(n)}},{session:this.session}).toArray();return Promise.all(o.map(async s=>await He(this.collection,s)))}async updateRecord(t){await this.ensureInitialized();let e=t.id;if(!e)throw new h("CollectionManager::updateRecord","ROW_NOT_FOUND");let r=await import('mongodb');if((await this.collectionInstance.updateOne({_id:new r.ObjectId(e)},{$set:t})).modifiedCount===0)throw new h("CollectionManager::updateRecord","ROW_NOT_FOUND");let o=await this.collectionInstance.findOne({_id:new r.ObjectId(e)},{session:this.session});return await He(this.collection,o)}async deleteRecord(t){await this.ensureInitialized();let e=t.id;if(!e)throw new h("CollectionManager::deleteRecord","ROW_NOT_FOUND");let r=await import('mongodb');return await this.collectionInstance.deleteOne({_id:new r.ObjectId(e)},{session:this.session}),t}};var kl=class extends Rt{constructor(e){super({type:"mongo",url:e?.url,logs:e?.logs});this.mongoClient=null;this.connecting=null;this.isConnected=false,this.mongoOptions=e?.options,this.lazyLoad=e?.lazyLoad??false,this.url||(this.url=$.MONGO_URL);}async connect(){if(!this.url)throw new h("MongoDataSource::connect url is required to connect to mongo database and was not provided in the options nor the environment variables","REQUIRED_VALUE_NOT_SET");let e=(await ae.getDriver("mongo")).client;this.mongoClient=new e.MongoClient(this.url,this.mongoOptions),await this.mongoClient.connect(),this.isConnected=true;}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new h("MongoDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.connect().finally(()=>{this.connecting=null;})),await this.connecting;}}getCurrentConnection(){if(!this.mongoClient)throw new h("MongoDataSource::getCurrentConnection mongo database connection not established","CONNECTION_NOT_ESTABLISHED");return this.mongoClient}startSession(){if(!this.mongoClient)throw new h("MongoDataSource::startSession mongo database connection not established","CONNECTION_NOT_ESTABLISHED");let e=this.mongoClient.startSession();return e.startTransaction(),e}async disconnect(){this.mongoClient&&await this.mongoClient.close(),this.isConnected=false;}async closeConnection(){await this.disconnect();}from(e,r){if(!this.isConnected&&!this.lazyLoad)throw new h("MongoDataSource::from","CONNECTION_NOT_ESTABLISHED");if(typeof e=="string"){let n={_collection:e,collection:e,beforeInsert:void 0,beforeFetch:void 0,beforeUpdate:void 0,beforeDelete:void 0,afterFetch:void 0};return this.getModelManager(n,this).query()}return this.getModelManager(e,this,r?.session)}getModelManager(e,r,n){return new Yr(e,r,n,this.logs)}async ping(){let e=Date.now();try{return await this.ensureConnected(),this.mongoClient?(await this.mongoClient.db().command({ping:1}),{ok:!0,latencyMs:Date.now()-e,dialect:"mongo"}):{ok:!1,latencyMs:Date.now()-e,dialect:"mongo"}}catch{return {ok:false,latencyMs:Date.now()-e,dialect:"mongo"}}}async isHealthy(){try{return (await this.ping()).ok}catch{return false}}};me();var Ll=class i{constructor(t){this.OK="OK";this.ioRedisConnection=null;this.connecting=null;this.isConnected=false,this.inputOptions=t||{},this.lazyLoad=t?.lazyLoad??false;}get ioredis(){if(!this.ioRedisConnection)throw new h("RedisDataSource::ioredis connection not established","CONNECTION_NOT_ESTABLISHED");return this.ioRedisConnection}async connect(){if(this.isConnected)return;let t=this.inputOptions.port||+$.REDIS_PORT||6379,e=await import('ioredis').catch(()=>{throw new k("ioredis")});this.ioRedisConnection=new e.default({host:this.inputOptions.host||$.REDIS_HOST,username:this.inputOptions.username||$.REDIS_USERNAME,port:t,password:this.inputOptions.password||$.REDIS_PASSWORD,...this.inputOptions});try{await this.ioRedisConnection.ping(),this.isConnected=!0;}catch{throw new h("RedisDataSource::connect","CONNECTION_NOT_ESTABLISHED")}}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new h("RedisDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.connect().finally(()=>{this.connecting=null;})),await this.connecting;}}async set(t,e,r){await this.ensureConnected(),r=r?r/1e3:void 0,typeof e=="object"&&!Buffer.isBuffer(e)&&(e=JSON.stringify(e)),typeof e=="boolean"&&(e=e.toString());try{if(r){await this.ioredis.setex(t,r,e);return}await this.ioredis.set(t,e);}catch{throw new h("RedisDataSource::set","SET_FAILED")}}async get(t){try{let e=await this.ioredis.get(t);return i.getValue(e)}catch{throw new h("RedisDataSource::get","GET_FAILED")}}async getBuffer(t){await this.ensureConnected();try{return await this.ioredis.getBuffer(t)}catch{throw new h("RedisDataSource::getBuffer","GET_FAILED")}}async consume(t){try{let e=await this.ioredis.get(t);return await this.ioredis.del(t),i.getValue(e)}catch{throw new h("RedisDataSource::consume","GET_FAILED")}}async delete(t){await this.ensureConnected();try{await this.ioredis.del(t);}catch{throw new h("RedisDataSource::delete","DELETE_FAILED")}}async flushAll(){await this.ensureConnected();try{await this.ioredis.flushall();}catch{throw new h("RedisDataSource::flushAll","FLUSH_FAILED")}}async disconnect(t){if(!(!this.isConnected||!this.ioRedisConnection))try{await this.ioRedisConnection.quit(),this.isConnected=!1,this.ioRedisConnection=null;}catch{if(t)throw new h("RedisDataSource::disconnect","DISCONNECT_FAILED");_.warn("RedisDataSource::disconnect DISCONNECT_FAILED");}}async lpush(t,...e){await this.ensureConnected();try{let r=e.map(n=>typeof n=="object"&&!Buffer.isBuffer(n)?JSON.stringify(n):typeof n=="boolean"?n.toString():n);return await this.ioredis.lpush(t,...r)}catch{throw new h("RedisDataSource::lpush","LPUSH_FAILED")}}async rpush(t,...e){await this.ensureConnected();try{let r=e.map(n=>typeof n=="object"&&!Buffer.isBuffer(n)?JSON.stringify(n):typeof n=="boolean"?n.toString():n);return await this.ioredis.rpush(t,...r)}catch{throw new h("RedisDataSource::rpush","RPUSH_FAILED")}}async lpop(t){try{let e=await this.ioredis.lpop(t);return i.getValue(e)}catch{throw new h("RedisDataSource::lpop","LPOP_FAILED")}}async rpop(t){try{let e=await this.ioredis.rpop(t);return i.getValue(e)}catch{throw new h("RedisDataSource::rpop","RPOP_FAILED")}}async lrange(t,e,r){try{return (await this.ioredis.lrange(t,e,r)).map(o=>i.getValue(o)).filter(o=>o!==null)}catch{throw new h("RedisDataSource::lrange","LRANGE_FAILED")}}async llen(t){await this.ensureConnected();try{return await this.ioredis.llen(t)}catch{throw new h("RedisDataSource::llen","LLEN_FAILED")}}async hset(t,e,r){await this.ensureConnected();try{return typeof r=="object"&&!Buffer.isBuffer(r)&&(r=JSON.stringify(r)),typeof r=="boolean"&&(r=r.toString()),await this.ioredis.hset(t,e,r)}catch{throw new h("RedisDataSource::hset","HSET_FAILED")}}async hmset(t,e){await this.ensureConnected();try{let r={};for(let[n,o]of Object.entries(e))typeof o=="object"&&!Buffer.isBuffer(o)?r[n]=JSON.stringify(o):typeof o=="boolean"?r[n]=o.toString():r[n]=String(o);return await this.ioredis.hmset(t,r)}catch{throw new h("RedisDataSource::hmset","HMSET_FAILED")}}async hget(t,e){try{let r=await this.ioredis.hget(t,e);return i.getValue(r)}catch{throw new h("RedisDataSource::hget","HGET_FAILED")}}async hgetall(t){try{let e=await this.ioredis.hgetall(t),r={};for(let[n,o]of Object.entries(e))r[n]=i.getValue(o);return r}catch{throw new h("RedisDataSource::hgetall","HGETALL_FAILED")}}async hmget(t,...e){try{return (await this.ioredis.hmget(t,...e)).map(n=>i.getValue(n))}catch{throw new h("RedisDataSource::hmget","HMGET_FAILED")}}async hdel(t,...e){await this.ensureConnected();try{return await this.ioredis.hdel(t,...e)}catch{throw new h("RedisDataSource::hdel","HDEL_FAILED")}}async hexists(t,e){await this.ensureConnected();try{return await this.ioredis.hexists(t,e)}catch{throw new h("RedisDataSource::hexists","HEXISTS_FAILED")}}async hkeys(t){await this.ensureConnected();try{return await this.ioredis.hkeys(t)}catch{throw new h("RedisDataSource::hkeys","HKEYS_FAILED")}}async hlen(t){await this.ensureConnected();try{return await this.ioredis.hlen(t)}catch{throw new h("RedisDataSource::hlen","HLEN_FAILED")}}async sadd(t,...e){await this.ensureConnected();try{let r=e.map(n=>typeof n=="object"&&!Buffer.isBuffer(n)?JSON.stringify(n):typeof n=="boolean"?n.toString():n);return await this.ioredis.sadd(t,...r)}catch{throw new h("RedisDataSource::sadd","SADD_FAILED")}}async smembers(t){try{return (await this.ioredis.smembers(t)).map(r=>i.getValue(r)).filter(r=>r!==null)}catch{throw new h("RedisDataSource::smembers","SMEMBERS_FAILED")}}async srem(t,...e){await this.ensureConnected();try{let r=e.map(n=>typeof n=="object"&&!Buffer.isBuffer(n)?JSON.stringify(n):typeof n=="boolean"?n.toString():n);return await this.ioredis.srem(t,...r)}catch{throw new h("RedisDataSource::srem","SREM_FAILED")}}async sismember(t,e){await this.ensureConnected();try{return typeof e=="object"&&!Buffer.isBuffer(e)&&(e=JSON.stringify(e)),typeof e=="boolean"&&(e=e.toString()),await this.ioredis.sismember(t,e)}catch{throw new h("RedisDataSource::sismember","SISMEMBER_FAILED")}}async scard(t){await this.ensureConnected();try{return await this.ioredis.scard(t)}catch{throw new h("RedisDataSource::scard","SCARD_FAILED")}}async sinter(...t){try{return (await this.ioredis.sinter(...t)).map(r=>i.getValue(r)).filter(r=>r!==null)}catch{throw new h("RedisDataSource::sinter","SINTER_FAILED")}}async sunion(...t){try{return (await this.ioredis.sunion(...t)).map(r=>i.getValue(r)).filter(r=>r!==null)}catch{throw new h("RedisDataSource::sunion","SUNION_FAILED")}}async sdiff(...t){try{return (await this.ioredis.sdiff(...t)).map(r=>i.getValue(r)).filter(r=>r!==null)}catch{throw new h("RedisDataSource::sdiff","SDIFF_FAILED")}}async zadd(t,e,r){await this.ensureConnected();try{if(typeof e=="number"&&r!==void 0){let n=r;return typeof r=="object"&&!Buffer.isBuffer(r)?n=JSON.stringify(r):typeof r=="boolean"&&(n=r.toString()),await this.ioredis.zadd(t,e,n)}else if(Array.isArray(e)){let n=[];for(let[o,s]of e)n.push(o),typeof s=="object"&&!Buffer.isBuffer(s)?n.push(JSON.stringify(s)):typeof s=="boolean"?n.push(s.toString()):n.push(s);return await this.ioredis.zadd(t,...n)}throw new Error("Invalid arguments for zadd")}catch{throw new h("RedisDataSource::zadd","ZADD_FAILED")}}async zrange(t,e,r,n=false){try{let o;if(n){o=await this.ioredis.zrange(t,e,r,"WITHSCORES");let s=[];for(let a=0;a<o.length;a+=2){let l=i.getValue(o[a]),u=Number(o[a+1]);l!==null&&s.push({value:l,score:u});}return s}return o=await this.ioredis.zrange(t,e,r),o.map(s=>i.getValue(s)).filter(s=>s!==null)}catch{throw new h("RedisDataSource::zrange","ZRANGE_FAILED")}}async zrevrange(t,e,r,n=false){try{let o;if(n){o=await this.ioredis.zrevrange(t,e,r,"WITHSCORES");let s=[];for(let a=0;a<o.length;a+=2){let l=i.getValue(o[a]),u=Number(o[a+1]);l!==null&&s.push({value:l,score:u});}return s}return o=await this.ioredis.zrevrange(t,e,r),o.map(s=>i.getValue(s)).filter(s=>s!==null)}catch{throw new h("RedisDataSource::zrevrange","ZREVRANGE_FAILED")}}async zrem(t,...e){await this.ensureConnected();try{let r=e.map(n=>typeof n=="object"&&!Buffer.isBuffer(n)?JSON.stringify(n):typeof n=="boolean"?n.toString():n);return await this.ioredis.zrem(t,...r)}catch{throw new h("RedisDataSource::zrem","ZREM_FAILED")}}async zscore(t,e){await this.ensureConnected();try{typeof e=="object"&&!Buffer.isBuffer(e)&&(e=JSON.stringify(e)),typeof e=="boolean"&&(e=e.toString());let r=await this.ioredis.zscore(t,e);return r!==null?Number(r):null}catch{throw new h("RedisDataSource::zscore","ZSCORE_FAILED")}}async zcard(t){await this.ensureConnected();try{return await this.ioredis.zcard(t)}catch{throw new h("RedisDataSource::zcard","ZCARD_FAILED")}}async subscribe(t,e){await this.ensureConnected();try{await this.ioredis.subscribe(...t),this.ioredis.on("message",e);}catch{throw new h("RedisDataSource::subscribe","SUBSCRIBE_FAILED")}}async unsubscribe(...t){await this.ensureConnected();try{await this.ioredis.unsubscribe(...t);}catch{throw new h("RedisDataSource::unsubscribe","UNSUBSCRIBE_FAILED")}}async publish(t,e){await this.ensureConnected();try{let r;return typeof e=="object"&&!Buffer.isBuffer(e)?r=JSON.stringify(e):typeof e=="boolean"||typeof e=="number"?r=e.toString():Buffer.isBuffer(e)?r=e:r=String(e),await this.ioredis.publish(t,r)}catch{throw new h("RedisDataSource::publish","PUBLISH_FAILED")}}async psubscribe(t,e){await this.ensureConnected();try{await this.ioredis.psubscribe(...t),this.ioredis.on("pmessage",(r,n,o)=>{e(n,o);});}catch{throw new h("RedisDataSource::psubscribe","PSUBSCRIBE_FAILED")}}async punsubscribe(...t){await this.ensureConnected();try{await this.ioredis.punsubscribe(...t);}catch{throw new h("RedisDataSource::punsubscribe","PUNSUBSCRIBE_FAILED")}}async exists(t){await this.ensureConnected();try{return await this.ioredis.exists(t)}catch{throw new h("RedisDataSource::exists","EXISTS_FAILED")}}async expire(t,e){await this.ensureConnected();try{return await this.ioredis.expire(t,e)}catch{throw new h("RedisDataSource::expire","EXPIRE_FAILED")}}async expireat(t,e){await this.ensureConnected();try{return await this.ioredis.expireat(t,e)}catch{throw new h("RedisDataSource::expireat","EXPIREAT_FAILED")}}async pexpire(t,e){await this.ensureConnected();try{return await this.ioredis.pexpire(t,e)}catch{throw new h("RedisDataSource::pexpire","PEXPIRE_FAILED")}}async ttl(t){await this.ensureConnected();try{return await this.ioredis.ttl(t)}catch{throw new h("RedisDataSource::ttl","TTL_FAILED")}}async pttl(t){await this.ensureConnected();try{return await this.ioredis.pttl(t)}catch{throw new h("RedisDataSource::pttl","PTTL_FAILED")}}async persist(t){await this.ensureConnected();try{return await this.ioredis.persist(t)}catch{throw new h("RedisDataSource::persist","PERSIST_FAILED")}}async keys(t){await this.ensureConnected();try{return await this.ioredis.keys(t)}catch{throw new h("RedisDataSource::keys","KEYS_FAILED")}}async rename(t,e){await this.ensureConnected();try{return await this.ioredis.rename(t,e)}catch{throw new h("RedisDataSource::rename","RENAME_FAILED")}}async type(t){await this.ensureConnected();try{return await this.ioredis.type(t)}catch{throw new h("RedisDataSource::type","TYPE_FAILED")}}static getValue(t){if(!t)return null;try{return JSON.parse(t)}catch{}return t==="true"||t==="false"?!!t:Number.isNaN(Number(t))?t:Number(t)}};me();var Zr={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 zy=null;function ot(i,t){return t.getModelManager(i)}function Hy(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=Zr[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 Gt(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 Hh(){let i=await import('adminjs').catch(()=>{throw new k("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(o){super(o),this._model=o,this._db=zy;}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=Zr[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=Zr[l]||"string";return new r({path:a.columnName,type:u,isId:a.isPrimary,isSortable:true})}async count(o){let a=ot(this._model,this._db).query();return Hy(a,o,this._model),a.getCount()}async find(o,s={}){let l=ot(this._model,this._db).query();return Hy(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(Gt(d,this._model),this))}async findOne(o){if(!this._model.primaryKey)return null;let l=await ot(this._model,this._db).findOneByPrimaryKey(o);return l?new e(Gt(l,this._model),this):null}async findMany(o){let s=this._model.primaryKey;return s?(await ot(this._model,this._db).query().whereIn(s,o).many()).map(u=>new e(Gt(u,this._model),this)):[]}async create(o){let a=await ot(this._model,this._db).insert(o,{returning:["*"]});return Gt(a,this._model)}async update(o,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=ot(this._model,this._db);if(!await l.findOneByPrimaryKey(o))throw new Error("Record not found");let d=await l.updateRecord(o,s,{returning:["*"]});return Gt(d,this._model)}async delete(o){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=ot(this._model,this._db);await a.findOneByPrimaryKey(o)&&await a.deleteRecord(o);}}}async function zh(){let i=await import('adminjs').catch(()=>{throw new k("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function Gh(){let i=await import('adminjs').catch(()=>{throw new k("adminjs")}),t=await Hh(),e=await zh();i.default.registerAdapter({Database:e,Resource:t});}async function Wl(i,t){zy=i;let e=await import('adminjs').catch(()=>{throw new k("adminjs")});await Gh();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 Gy(i,t){let{admin:e}=await Wl(i,t),r;try{r=await import('@adminjs/express');}catch{throw new k("@adminjs/express")}let n=r.buildRouter(e);return {admin:e,router:n}}var Yh=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},Zh=i=>i.openApi?.required??false,Xh=i=>{let t=i.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=Yh(r));return e},eg=i=>{let t=i.getColumns(),e=[];for(let r of t)Zh(r)&&e.push(r.columnName);return e||[]},Fl=i=>{let t=Xh(i),e=eg(i);return {type:"object",properties:t,required:e.length?e:[]}},vk=i=>i.map(t=>Fl(t)),Ek=i=>Fl(i),Yy=i=>i.map(t=>({...Fl(t),modelName:t.table,$id:t.table}));var jl=(i,t)=>{let e=$e.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var Xr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var en=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var tn=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var rn=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var nn=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var on=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_table";this.table=e;}};var sn=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 an=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 ln=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_primary_key";this.table=e;}};var un=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 dn=class extends N{constructor(){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_tables";}};var mn=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_column_listing";this.table=e;}};var ze=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var cn=class extends N{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var pn=class extends ze{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=Ne(this.tableName,q(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new J("primary_key",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new J("primary_key",{columns:[q(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??H(this.tableName??"",q(this.columnNode.column),o[0]);return this.context==="alter_table"?(this.nodes.push(new J("foreign_key",{columns:[q(this.columnNode.column)],references:{table:r,columns:o},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this):(this.namedConstraints.push(new J("foreign_key",{columns:[q(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 J("not_null",{columns:[q(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new J("null",{columns:[q(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 J("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new J("unique",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??pe(this.tableName??"",q(this.columnNode.column))})),this):(this.namedConstraints.push(new J("unique",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName||pe(this.tableName??"",q(this.columnNode.column))})),this)}check(t,e){let r=q(this.columnNode.column),n=e?.constraintName??`chk_${this.tableName}_${r}`.substring(0,63);return this.context==="alter_table"?(this.nodes.push(new J("check",{columns:[r],checkExpression:t,constraintName:n})),this):(this.namedConstraints.push(new J("check",{columns:[r],checkExpression:t,constraintName:n})),this)}after(t){return this.sqlType!=="mysql"?this:(this.nodes.push(new cn(t)),this)}collate(t){return this.columnNode.collate=t,this}handleSqliteAutoIncrement(t){return this.isInlineSqlitePrimaryKey()?this:(this.nodes.push(new J("primary_key",{columns:[q(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 st=class extends ze{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 pn(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new O(e)}char(e,r=1){let n=new Q(e,"char",{length:r});return this.build(n)}varchar(e,r=255){let n=new Q(e,"varchar",{length:r});return this.build(n)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let n=new Q(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 Q(e,"uuid");return this.build(r)}ulid(e){let r=new Q(e,"ulid");return this.build(r)}integer(e,r=255){let n=new Q(e,"integer",{length:r});return this.build(n)}tinyint(e,r=255){let n=new Q(e,"tinyint",{length:r});return this.build(n)}smallint(e,r=255){let n=new Q(e,"smallint",{length:r});return this.build(n)}mediumint(e,r=255){let n=new Q(e,"mediumint",{length:r});return this.build(n)}biginteger(e,r=255){let n=new Q(e,"bigint",{length:r});return this.build(n)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let n=new Q(e,"float",{precision:r});return this.build(n)}double(e,r=10){let n=new Q(e,"double",{precision:r});return this.build(n)}real(e,r=10){let n=new Q(e,"real",{precision:r});return this.build(n)}decimal(e,r=10,n=2){let o=new Q(e,"decimal",{precision:r,scale:n});return this.build(o)}numeric(e,r=10,n=2){let o=new Q(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 Q(e,"date",{precision:r});return this.build(n)}time(e,r){let n=new Q(e,"time",{precision:r});return this.build(n)}year(e){let r=new Q(e,"year");return this.build(r)}datetime(e,r){let n=new Q(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 Q(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}boolean(e){let r=new Q(e,"boolean");return this.build(r)}binary(e){let r=new Q(e,"binary");return this.build(r)}varbinary(e,r=255){let n=new Q(e,"varbinary",{length:r});return this.build(n)}blob(e){let r=new Q(e,"blob");return this.build(r)}tinyblob(e){let r=new Q(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new Q(e,"mediumblob");return this.build(r)}longblob(e){let r=new Q(e,"longblob");return this.build(r)}json(e){let r=new Q(e,"json");return this.build(r)}jsonb(e){let r=new Q(e,"jsonb");return this.build(r)}enum(e,r){let n=new Q(e,"enum",{enumValues:r});return this.build(n)}custom(e,r,n){let o=new Q(e,r,{length:n});return this.build(o)}rawColumn(e){let r=new Q(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new Q(e,"geometry");return this.build(r)}point(e){let r=new Q(e,"point");return this.build(r)}linestring(e){let r=new Q(e,"linestring");return this.build(r)}polygon(e){let r=new Q(e,"polygon");return this.build(r)}multiPoint(e){let r=new Q(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var yn=class extends ze{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new O(t)}addColumn(t){let e=[],r=new st(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 Tr(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 qe(c));});}alterColumn(t){if(this.sqlType==="sqlite")throw new h("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new st(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=q(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 wr(q(a),s,m)),d&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(d.constraintType==="not_null"?this.nodes.push(new Rr(q(a))):d.constraintType==="null"&&this.nodes.push(new Sr(q(a)))),c&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(c.defaultValue===void 0||c.defaultValue===null||c.defaultValue==="NULL"?this.nodes.push(new Lt(q(a))):this.nodes.push(new Cr(q(a),c.defaultValue))),n.getNodes().forEach(p=>{let g=p;switch(g.constraintType){case "primary_key":this.addPrimaryKey(q(a));break;case "unique":this.unique(q(a),{constraintName:g.constraintName});break;case "foreign_key":this.foreignKey(q(a),g.references?.table??"",q(g.references?.columns?.[0]??""),{constraintName:g.constraintName,onDelete:g.onDelete,onUpdate:g.onUpdate});break}});}dropColumn(t){this.nodes.push(new Nr(t));}renameColumn(t,e){this.nodes.push(new qr(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new h("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 h("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 h("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new qe(new J(...t)));}foreignKey(t,e,r,n){if(this.sqlType==="sqlite")throw new h("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new qe(new J("foreign_key",{columns:[t],references:{table:e,columns:[r]},constraintName:n?.constraintName??H(this.table,t,r),onDelete:n?.onDelete,onUpdate:n?.onUpdate})));}unique(t,e){if(this.sqlType==="sqlite")throw new h("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new qe(new J("unique",{columns:[t],constraintName:e?.constraintName??pe(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new h("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let r=H(this.table,t,e);this.nodes.push(new Ce(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new h("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new h("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??pe(this.table,t);this.nodes.push(new Ce(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new h("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Ce(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new h("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new h("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new Nt(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 le=class{constructor(t){if(this.sqlType=t||$.DB_TYPE,!this.sqlType)throw new h("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(!xn.existsSync(t))throw new h("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=It.basename(t),r=It.extname(e);if(r!==".sql"&&r!==".txt")throw new h("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let o=xn.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 st(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 _r(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 yn(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 he(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 Mr(t,e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}renameTable(t,e){let r=new he(t,[new dt(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||pr(t,e.join("_")),o=new Ar(t,e,n),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([o]).sql);}dropIndex(t,e){let r=new xr(t,e),n=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addPrimaryKey(t,e){let r=new he(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??pe(t,n.join("_")),s=new J("unique",{columns:n,constraintName:o}),a=new he(t,[new qe(s)]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropForeignKey(t,e,r){let n=H(t,e,r),o=new Ce(n),s=new he(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)?pe(t,e.join("_")):pe(t,e),o=r?.constraintName??n,s=new Ce(o),a=new he(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new Nt,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new J(...e),n=new he(t,[new qe(r)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}dropConstraint(t,e){let r=new Ce(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 J("check",{checkExpression:e,constraintName:n}),s=new he(t,[new qe(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 Ce(e),n=new he(t,[r]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}createExtension(t,e=true){let r=new Or(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=>q(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 fn,ef,Yt=class{constructor(t,e){cu(this,fn);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new le(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=pu(this,fn,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(`;
|
|
144
|
-
`)}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 le(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}};fn=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 hn=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 Vl=i=>String(i??"").replace(/::[a-z_ ]+$/i,"").replace(/[()\s]/g,"").toLowerCase(),rg=/^(current[ _]?timestamp\d*|now\d*|getdate\d*|localtimestamp\d*|localtime\d*)$/,ng={postgres:i=>i.includes("nextval"),cockroachdb:i=>i.includes("unique_rowid")},og={postgres:["gen_random_uuid"],cockroachdb:["gen_random_uuid"],mysql:["uuid"],mariadb:["uuid"],mssql:["newid"],sqlite:["lower(hex(randomblob(16)))"]},rf=(i,t)=>(og[i]??[]).includes(Vl(t)),Mt=(i,t)=>!!i.autoCreate&&rg.test(Vl(t)),Ot=(i,t,e)=>{if(t.type!=="increment"&&t.type!=="bigIncrement")return false;let r=ng[i];return r?r(Vl(e)):false};var gn=class gn{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new hn(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 le(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||Ne(n.table,n.columns[0]),l=this.sql.schema().alterTable(n.table,u=>{let d=a||Ne(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 le(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 le(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=q(t.relation.constraintName);if(e)return e;let r=t.table;t.relation.type==="belongsTo"?r=t.relation.model().table:t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(r=q(t.relation.manyToManyOptions.throughModel));let 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,H(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=q(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"&&gn.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||Ne(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!==""&&!Mt(t.modelColumn,t.dbColumns.defaultValue)&&!Ot(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 le(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=q(t.relation.manyToManyOptions.throughModel),r=q(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=q(r);if(t.relation.type==="belongsTo"){let m=t.relation.model(),p=m.primaryKey,y=m.getColumns().find(w=>w.columnName===p);if(y)o=y.databaseName;else {let w=m?.databaseCaseConvention||"preserve";o=V(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(),g=p.find(y=>y.columnName===o);if(g)o=g.databaseName;else {let y=m.primaryKey||"id",w=p.find(T=>T.columnName===y);if(w)o=w.databaseName;else {let T=m?.databaseCaseConvention||"preserve";o=V(o||y,T);}}}else {let p=m.primaryKey||"id",y=m.getColumns().find(w=>w.columnName===p);if(y)o=y.databaseName;else {let w=m?.databaseCaseConvention||"preserve";o=V(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=V(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=V(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.manyToManyOptions.leftForeignKey,p=q(m),g=a.find(y=>y.columnName===p);if(g)l=g.databaseName;else {let y=s?.databaseCaseConvention||"preserve";l=V(p,y);}}let d=t.relation.onDelete?.toLowerCase(),c=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,m=>{let p=n||H(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," "))}))}};gn.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 Zt=gn;var Tn=class Tn{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||H(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||Ne(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||Ne(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!==""&&!Mt(e,r.defaultValue)&&!Ot(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)})`:Tn.BUILTIN_COLUMN_TYPES.has(r)?`table.${r}(${this.quote(e)})`:t.length!=null?`table.custom(${this.quote(e)}, ${this.quote(r)}, ${t.length})`:`table.custom(${this.quote(e)}, ${this.quote(r)})`}resolveRelationDetails(t){let e=t.table,r="id";if(t.relation.type==="belongsTo"){let l=t.relation.model();e=l.table;let u=l.primaryKey||"id";r=l.getColumns().find(m=>m.columnName===u)?.databaseName||u;}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){e=q(t.relation.manyToManyOptions.throughModel);let l=q(t.relation.manyToManyOptions.rightForeignKey);l&&l!=="undefined"?r=l:r=t.relation.model().primaryKey||"id";}let 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=q(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:q(t.relation.constraintName)||void 0;return {sourceColumn:s,referencedTable:e,referencedColumn:r,constraintName:a}}quote(t){return `"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}formatDefaultValue(t){return t==null?"null":t==="NULL"?'"NULL"':typeof t=="boolean"||typeof t=="number"?t.toString():t==="TRUE"||t==="true"?"true":t==="FALSE"||t==="false"?"false":this.quote(String(t))}};Tn.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 bn=Tn;function ig(i){return i.replace(/\s+/g," ").trim()}function ag(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function lg(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 ug(i,t){return t.length===0?i:`${i} ${t.join(" ")}`}function Ge(i,t){let e=ig(t.toLowerCase()),r=ag(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}=lg(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?ug(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 wn=class i{constructor(t){this.emptyStatements=[/^alter table [`'"]?[\w]+[`'"]?\s*$/i];this.sql=t,this.models=Object.values(this.sql._models),this.data={columnsToAdd:[],columnsToDrop:[],columnsToModify:[],indexesToAdd:[],indexesToDrop:[],uniquesToAdd:[],uniquesToDrop:[],checksToAdd:[],checksToDrop:[],tablesToAdd:[],relationsToAdd:[],relationsToDrop:[],relationsToModify:[],primaryKeysToAdd:[],primaryKeysToDrop:[],primaryKeysToModify:[]};}static async makeDiff(t){let e=new i(t);return await Promise.all(e.models.map(async r=>{let n=await e.sql.getTableSchema(r.table),o={columns:r.getColumns().filter(y=>y?.type!==void 0&&y?.type!==null),indexes:r.getIndexes(),relations:r.getRelations()};if(!n.columns.length){e.data.tablesToAdd.push({table:r.table,columns:o.columns});for(let T of o.indexes)n.indexes.map(S=>S.name).includes(T.name)||e.data.indexesToAdd.push({table:r.table,index:T.name});let y=r.getUniques?.()||[];for(let T of y)e.data.uniquesToAdd.push({table:r.table,name:T.name||"mandatory",columns:T.columns});let w=r.getChecks?.()||[];for(let T of w)e.data.checksToAdd.push({table:r.table,name:T.name,expression:T.expression});for(let T of o.relations){if(T.type!=="belongsTo")continue;let S=q(T.constraintName);n.foreignKeys.find(C=>C.name===S)||e.data.relationsToAdd.push({table:r.table,relation:T,onDelete:T.onDelete,onUpdate:T.onUpdate});}return}for(let y of o.columns)n.columns.some(T=>T.name===y.databaseName||T.name===y.columnName)||e.data.columnsToAdd.push({table:r.table,column:y});let s=r.getColumns();for(let y of n.columns)s.some(T=>T.databaseName===y.name||T.columnName===y.name)||e.data.columnsToDrop.push({table:r.table,column:y.name});for(let y of o.indexes)n.indexes.map(w=>w.name).includes(y.name)||e.data.indexesToAdd.push({table:r.table,index:y.name});let a=r.getUniques?.()||[];for(let y of a)n.indexes.some(T=>T.name===y.name&&T.isUnique)||e.data.uniquesToAdd.push({table:r.table,name:y.name||"mandatory",columns:y.columns});let l=n.foreignKeys.map(y=>y.name);for(let y of n.indexes)y.isUnique||l.includes(y.name)||o.indexes.map(T=>T.name).includes(y.name)||e.data.indexesToDrop.push({table:r.table,index:y.name});for(let y of n.indexes){if(!y.isUnique||y.name==="PRIMARY")continue;(r.getUniques?.()||[]).map(T=>T.name).includes(y.name)||e.data.uniquesToDrop.push({table:r.table,name:y.name});}let u=r.getChecks?.()||[];for(let y of u)n.checkConstraints.some(T=>T.name===y.name)||e.data.checksToAdd.push({table:r.table,name:y.name,expression:y.expression});let d=new Set(u.map(y=>y.name)),c=o.columns.filter(y=>Array.isArray(y.type)),m=new Set(c.map(y=>y.databaseName||y.columnName));for(let y of n.checkConstraints)if(!d.has(y.name)){let w=[...m].find(T=>{let S=T.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),x=new RegExp(`[\\["\\[]?${S}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),C=new RegExp(`[\\("\\[]?${S}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return x.test(y.expression)||C.test(y.expression)});if(w){let T=c.find(x=>(x.databaseName||x.columnName)===w),S=n.columns.find(x=>x.name===w);if(T&&S?.enumValues&&Array.isArray(T.type)){let x=[...T.type].sort(),C=[...S.enumValues].sort();if(!(x.length===C.length&&x.every((D,A)=>D===C[A]))){e.data.checksToDrop.push({table:r.table,name:y.name});let D=e.sql.getDbType(),A=D==="mssql"?"[":'"',L=D==="mssql"?"]":'"',ce=T.type.map(P=>`'${P.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:y.name,expression:`${A}${w}${L} IN (${ce})`});}}}else e.data.checksToDrop.push({table:r.table,name:y.name});}for(let y of o.columns){let w=n.columns.find(x=>x.name===y.databaseName||x.name===y.columnName);if(!w)continue;let T=!e.areColumnsEqual(w,y,n.indexes),S=e.getDefaultChange({table:r.table,dbColumns:w,modelColumn:y});(T||S)&&e.data.columnsToModify.push({table:r.table,dbColumns:w,modelColumn:y});}for(let y of o.relations){if(y.type!=="belongsTo"&&y.type!=="manyToMany")continue;if(y.type==="manyToMany"&&y.manyToManyOptions){let S=q(y.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:S,relation:{type:"belongsTo",model:()=>r,columnName:q(y.manyToManyOptions.leftForeignKey),foreignKey:y.manyToManyOptions.leftForeignKey,constraintName:y.constraintName?q(y.constraintName):H(S,q(y.manyToManyOptions.leftForeignKey||Le(r.table)),r.table),onDelete:y.onDelete,onUpdate:y.onUpdate},onDelete:y.onDelete,onUpdate:y.onUpdate});continue}let w=q(y.constraintName);if(w&&n.foreignKeys.some(S=>S.name===w))continue;n.foreignKeys.find(S=>e.relationMatchesDbRelation(r,y,S))||e.data.relationsToAdd.push({table:r.table,relation:y,onDelete:y.onDelete,onUpdate:y.onUpdate});}let p=new Set(o.relations.filter(y=>y.type==="belongsTo").map(y=>{let w=q(y.foreignKey)||y.columnName,S=r.getColumns().find(x=>x.columnName===w)?.databaseName||w;return q(y.constraintName)||H(r.table,S,y.model().table)}));for(let y of n.foreignKeys){if(y.name&&p.has(y.name))continue;o.relations.find(T=>T.type!=="belongsTo"&&T.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,T,y))||e.data.relationsToDrop.push({table:r.table,relation:y});}for(let y of o.relations){if(y.type!=="belongsTo"&&y.type!=="manyToMany")continue;let w=n.foreignKeys.find(T=>e.relationMatchesDbRelation(r,y,T));w&&!e.areRelationsEqual(w,y)&&e.data.relationsToModify.push({table:r.table,dbRelation:w,modelRelation:y,onDelete:y.onDelete,onUpdate:y.onUpdate});}let g=r.primaryKey;if(g&&!n.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[g]}),n.primaryKey&&!g&&e.data.primaryKeysToDrop.push({table:r.table,columns:n.primaryKey.columns,name:n.primaryKey.name}),g&&n.primaryKey){let y=r.getColumns().find(w=>w.columnName===g);y&&!e.arePrimaryKeysEqual(n.primaryKey,y)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:n.primaryKey,modelPrimaryKey:g});}})),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 Zt(this.sql).generateOperations(this.data);return new bn(this.sql).generateCode(e)}getSqlStatementsByPhase(){let t=new Zt(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=Ge(o,t.dataType),a=typeof e.type=="string"?Ge(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=q(e.constraintName),n=r?t.name===r:true;if(e.type==="belongsTo"){let u=e.model(),d=u.primaryKey||"id",c=u.getColumns().find(g=>g.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=q(e.manyToManyOptions.throughModel);n=n&&t.referencedTable===u;}let o=t.onDelete?.toLowerCase(),s=t.onUpdate?.toLowerCase(),a=e.onDelete?.toLowerCase(),l=e.onUpdate?.toLowerCase();return a&&n&&(n=o===a),l&&n&&(n=s===l),n}relationMatchesDbRelation(t,e,r){let n,o=e;if(o&&o.model){if(typeof o.model=="function"&&o.model.table)n=o.model;else if(typeof o.model=="function")try{let y=o.model();y&&y.table&&(n=y);}catch{}}if(!n)return false;let s=e.type==="belongsTo"?n.table:e.type==="manyToMany"&&e.manyToManyOptions?q(e.manyToManyOptions.throughModel):void 0;if(s&&r.referencedTable!==s)return false;let a=q(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),d=(o.type||"belongsTo")==="belongsTo"?q(o.foreignKey):o.columnName,c=l.find(y=>y.columnName===d);c&&(d=c.databaseName);let m=n.primaryKey||"id",g=n.getColumns().find(y=>y.columnName===m)?.databaseName||m;return r.columns.length===1&&r.columns[0]===d&&r.referencedColumns.length===1&&r.referencedColumns[0]===g}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=Ge(e,t.dbColumns.dataType),n=typeof t.modelColumn.type=="string"?Ge(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 Ot(e,t.modelColumn,l)||Mt(t.modelColumn,l)||t.modelColumn.type==="uuid"&&rf(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=q(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=q(n.manyToManyOptions.leftForeignKey)||l,p=q(n.manyToManyOptions.rightForeignKey)||u,g=await this.sql.getTableSchema(o);if(!g.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 y=this.clonePkAsColumn(d,m),w=this.clonePkAsColumn(c,p),T=g.columns.find(P=>P.name===m),S=g.columns.find(P=>P.name===p),x=T?this.areColumnsEqual(T,y,g.indexes):false,C=S?this.areColumnsEqual(S,w,g.indexes):false;for(let P of g.foreignKeys){let oe=P.referencedTable===s.table,Xe=P.referencedTable===a.table;if(!oe&&!Xe)continue;let Re=oe?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 I={};x||(I[y.databaseName]=y),C||(I[w.databaseName]=I[w.databaseName]||w);for(let P of Object.keys(I))this.data.columnsToAdd.push({table:o,column:I[P]});let D=this.buildBelongsToRelation(o,()=>s,m,l,void 0,n.onDelete,n.onUpdate),A=this.buildBelongsToRelation(o,n.model,p,u,void 0,n.onDelete,n.onUpdate),L=g.foreignKeys.find(P=>P.referencedTable===s.table&&P.columns.length===1&&P.columns[0]===m),ce=g.foreignKeys.find(P=>P.referencedTable===a.table&&P.columns.length===1&&P.columns[0]===p);if(!L){let P=g.foreignKeys.find(oe=>oe.referencedTable===s.table);P&&this.data.relationsToDrop.push({table:o,relation:P}),this.data.relationsToAdd.push(D);}if(!ce){let P=g.foreignKeys.find(oe=>oe.referencedTable===a.table);P&&this.data.relationsToDrop.push({table:o,relation:P}),this.data.relationsToAdd.push(A);}}}}async removeFkChurnByName(){let t=new Set;for(let n of this.data.relationsToAdd)t.add(n.table);for(let n of this.data.relationsToDrop)t.add(n.table);let e=new Map;for(let n of t){let o=await this.sql.getTableSchema(n),s=new Set((o.foreignKeys||[]).map(a=>a.name).filter(Boolean));e.set(n,s);}let r=new Map;for(let n of this.models){let o=n.getRelations(),s=new Set;for(let a of o){if(a.type!=="belongsTo")continue;let l=a.foreignKey||a.columnName,d=n.getColumns().find(m=>m.columnName===l)?.databaseName||l,c=q(a.constraintName)||H(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(y=>y.table===n.table),a=s?.getColumns()||[],l=n.relation.columnName;n.relation.type==="belongsTo"?l=a.find(w=>w.columnName===n.relation.foreignKey)?.databaseName||n.relation.foreignKey:l=a.find(w=>w.columnName===l)?.databaseName||l;let u=n.table,d=n.relation.foreignKey;if(n.relation.type==="belongsTo"){let y=n.relation.model();u=y.table;let w=y.primaryKey||"id";d=y.getColumns().find(S=>S.columnName===w)?.databaseName||w;}let c=new Set([l,n.relation.columnName].filter(Boolean)),m=o.foreignKeys.some(y=>{if(y.columns.length!==1||y.referencedColumns.length!==1)return false;let w=c.has(y.columns[0]),T=y.referencedTable===u,S=y.referencedColumns[0]===d;return w&&T&&S}),p=q(n.relation.constraintName)||H(n.table,l,u),g=e.get(n.table)||new Set;if(m||p&&g.has(p))return null;if(n.relation.type==="manyToMany"&&n.relation.manyToManyOptions){let y=q(n.relation.manyToManyOptions.throughModel),w=q(n.relation.manyToManyOptions.leftForeignKey),T=q(n.relation.manyToManyOptions.rightForeignKey),S=n.table===y&&n.relation.columnName===w&&n.relation.model().table===s?.table,x=n.table===y&&n.relation.columnName===T&&n.relation.model().table!==s?.table,C=await this.sql.getTableSchema(y),I=C.foreignKeys.some(A=>A.columns.length===1&&A.columns[0]===w&&A.referencedTable===(s?.table||"")),D=C.foreignKeys.some(A=>A.columns.length===1&&A.columns[0]===T&&A.referencedTable===n.relation.model().table);if(S&&I||x&&D)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",y=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]===y})?null:n})).then(n=>n.filter(Boolean));}clonePkAsColumn(t,e){let r=t.type;return r==="bigIncrement"?r="bigint":r==="increment"&&(r="integer"),{columnName:e,databaseName:e,isPrimary:false,type:r,length:t.length,precision:t.precision,scale:t.scale,withTimezone:t.withTimezone,constraints:{nullable:false}}}pushM2mFkRelations(t){let e=this.buildBelongsToRelation(t.throughTable,()=>t.leftModel,t.leftFkName,t.leftModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate),r=this.buildBelongsToRelation(t.throughTable,()=>t.rightModel,t.rightFkName,t.rightModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate);this.data.relationsToAdd.push(e),this.data.relationsToAdd.push(r);}buildBelongsToRelation(t,e,r,n,o,s,a){let l=o?q(o):H(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 Jl=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??lt()});At();At();me();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 k("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),g=0,y=false,w=false,T=S=>{if(s)try{a.release(S);}catch{}};return p.on("data",S=>{if(n.onData){g++,Promise.resolve(n.onData(u,S)).then(()=>{g--,y&&g===0&&!w&&(T(),u.end());}).catch(x=>{w=true,T(x),u.destroy(x);});return}u.write(S);}),p.on("end",()=>{y=true,g===0&&!w&&(T(),u.end());}),p.on("error",S=>{w=true,T(S),u.destroy(S);}),u}};var Sn=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",g=>{if(n.onData){d++,Promise.resolve(n.onData(a,g)).then(()=>{d--,c&&d===0&&!m&&(p(),a.end());}).catch(y=>{m=true,p(),a.destroy(y);});return}a.write(g);}),u.on("end",()=>{c=true,d===0&&!m&&(p(),a.end());}),u.on("error",g=>{m=true,p(),a.destroy(g);}),a.on("close",()=>{p();}),a}};var qn=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 h("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 Hl(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);});})}},Hl=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);});}};me();var Cn=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:$.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,g)=>{a.input(`p${g}`,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(g=>{m=true,s.destroy(g);});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 _.error(r),new k("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 h("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${t}`)}}};var fg=()=>{be({name:"pg",dialects:["postgres","cockroachdb"],create:async({dialect:i,input:t})=>{let e=(await ae.getDriver(i)).client;return new Nn(i,t,e)}}),be({name:"mysql2",dialects:["mysql","mariadb"],create:async({dialect:i,input:t})=>{let e=(await ae.getDriver(i)).client;return new Sn(i,t,e)}}),be({name:"sqlite3",dialects:["sqlite"],create:async({dialect:i,input:t})=>{let e=(await ae.getDriver(i)).client;return new qn(i,t,e)}}),be({name:"mssql",dialects:["mssql"],create:async({dialect:i,input:t})=>{let e=(await ae.getDriver(i)).client;return new Cn(i,t,e)}});};fg();var Ng=async i=>{if(i==="bun"){await(await Promise.resolve().then(()=>(cf(),mf))).registerBunDrivers();return}if(i==="web"){(await Promise.resolve().then(()=>(Xl(),Zl))).registerWebDrivers();return}if(i==="react-native"){await(await Promise.resolve().then(()=>(Xl(),Zl))).registerReactNativeDrivers();return}},An=async(i,t)=>{let e=rr(t?.jsEnvironment);await Ng(e);let r=await of(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 Ye=er;var tr=class i{constructor(t,e,r=false,n=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=ke(ne().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 Ye.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")&&yt("BEGIN TRANSACTION",this.sql.logs);let t=this.sql.driverAdapter,e=this.sql.sqlConnection;if(!t||!e)throw new h("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 h("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");_.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")&&yt("COMMIT",this.sql.logs),e&&r&&await e.commitTransaction(r,{rawQuery:(n,o)=>this.sql.rawQuery(n,o??[])});}catch(e){throw _.error(e),e}finally{await this.releaseConnection(),this.isActive=false;}}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new h("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");_.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 h("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")&&yt("ROLLBACK",this.sql.logs),e&&r&&await e.rollbackTransaction(r,{rawQuery:(n,o)=>this.sql.rawQuery(n,o??[])});}catch(e){throw _.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,_.error(e);}this.sql.sqlConnection=null;try{await this.sql.disconnect();}catch(e){_.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 h("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 h("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}};var eu=Symbol.for("hysteria.orm.SqlDataSource"),gf,bf,Be=class i extends(bf=Rt,gf=eu,bf){constructor(e){super(e);this[gf]=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=ne().crypto.randomUUID();this.logicalSourceId=ne().crypto.randomUUID();this.cacheAdapter=new Wr;this.migrationConfig={path:$.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:Pt(this.sqlType),keywordCase:"lower",dataTypeCase:"lower",functionCase:"lower"},this.cacheKeys=e?.cacheStrategy?.keys??{},this.cacheAdapter=e?.cacheStrategy?.cacheAdapter??this.cacheAdapter,this.adminJsOptions=e?.adminJs,e?.migrations&&(this.migrationConfig={path:e.migrations.path||this.migrationConfig.path,tsconfig:e.migrations.tsconfig,lock:e.migrations.lock??this.migrationConfig.lock,transactional:"transactional"in e.migrations?e.migrations.transactional??this.migrationConfig.transactional:this.migrationConfig.transactional}),e?.seeders&&(this.seederConfig={path:e.seeders.path||this.seederConfig.path,tsconfig:e.seeders.tsconfig}),this._models=e?.models||{},this.slaves=(e?.replication?.slaves||[]).map(n=>new i(n)),this.slaveAlgorithm=e?.replication?.slaveAlgorithm||"roundRobin",this.onSlaveServerFailure=e?.replication?.onSlaveServerFailure,this.lazyLoad=e?.lazyLoad??false,this.clsEnabled=e?.clsEnabled??true;}static isSqlDataSource(e){return typeof e=="object"&&e!==null&&eu in e&&e[eu]===true}get isClsEnabled(){return this.clsEnabled}getOnSlaveServerFailure(){return this.onSlaveServerFailure}addObserver(e){return this.observerChain||(this.observerChain=new bt([])),this.observerChain.add(e),this}static async useConnection(e,r){let n=new i(e);await n.connect();try{await r(n),n.isConnected&&await n.disconnect();}catch(o){throw n.isConnected&&await n.disconnect(),o}}async connect(){if(this.isConnected)throw new h("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 h("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=Ye.getTransaction();if(e?.isActive&&e.sql.logicalSourceId===this.logicalSourceId)return e.sql}return null}async useCache(e,r,...n){if(!this.cacheAdapter)throw new h("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new h("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=jl(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 h("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new h("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=jl(JSON.stringify(r)),a=s?`${e}:${s}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new h("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(Jl(e,r),n);return r?.alias&&o.table(e,r.alias),o}return new Ue(e,n)}fromRaw(e,r=[],n){let o=this.getTransactionBoundSqlDataSource()??this;return new B(Jl("",n),o).fromRaw(e,r)}schema(){if(!this.isConnected&&!this.lazyLoad)throw new h("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new Yt(this,this.getDbType())}async startGlobalTransaction(e){for(;this.globalTransactionLock;)await this.globalTransactionLock;if(this.globalTransaction?.isActive)throw new h("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 h("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");try{await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async rollbackGlobalTransaction(e){if(!this.globalTransaction){_.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?Ye.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 Ye.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 h("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");let r=this.getTransactionBoundSqlDataSource()??this;return new et(e,r)}getPool(){if(!this.sqlPool)throw this.lazyLoad?new h("SqlDataSource::getPool - call ensureConnected() or connect() first when using lazyLoad","CONNECTION_NOT_ESTABLISHED"):new h("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 h("SqlDataSource::getConnection","CONNECTION_NOT_ESTABLISHED");return e.reserveConnection()}async disconnect(){if(!this.isConnected){_.warn("Connection already closed or not established");return}if(!this.ownsPool){if(this.sqlConnection)try{this.driverAdapter?.releaseConnection(this.sqlConnection);}catch(e){_.warn(`SqlDataSource::disconnect - releasing borrowed connection failed: ${e?.message??e}`);}this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{_.warn("SqlDataSource::disconnect - Error while rolling back global transaction");}if(this.lockConnection){try{this.driverAdapter?.releaseConnection(this.lockConnection);}catch(e){_.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){_.warn(`SqlDataSource::disconnect - Error while closing slave connection: ${r.message}`);}})),_.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=`
|
|
141
|
+
ORDER BY pk`,bindings:[]}}},xy=new ql;var Cl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Ay=new Cl;var Rl=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 h(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 h(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}"`})}},Dy=new Rl;var _l=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new h(this.model).formatStringColumn("sqlite",e.column),n=X.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}},Iy=new _l;var Ml=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 M?s.rawValue:s instanceof $?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "lower(hex(randomblob(16)))";case "$now":case "$currentTimestamp":return "current_timestamp";default:return}}},$y=new Ml;var Ol=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 f("SqliteTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("SQLite does not support TRUNCATE options"));let r=new h(this.model).getFromForWriteOperations("sqlite",e.fromNode);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},vy=new Ol;var xl=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 h(this.model).formatRawPlaceholders("sqlite",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:e.wrap?`(${o.sql})`:o.sql,bindings:o.bindings}}},Ey=new xl;var Al=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new h(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((l,u)=>{let d=e.values[u],m=r.formatStringColumn("sqlite",l);if(d instanceof M)return `${m} = ${d.rawValue}`;if(d instanceof S){let c=new b(this.model,"sqlite").parse([d],s,true);return o.push(...c.bindings),s+=c.bindings.length,`${m} = ${c.sql}`}return o.push(d),`${m} = ?`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},Py=new Al;var Dl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",n=[],o=e.operator.toLowerCase(),s=o==="ilike"||o==="not ilike",a=o==="not ilike"?"not like":s?"like":e.operator,l=u=>s?`lower(${u})`:u;if(this.isRawNode(e.value)){let u=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${l(new h(this.model).formatStringColumn("sqlite",e.column))} ${a} ${l(u)}`,n=[];}else if(e.tupleColumns?.length){let u=e.tupleColumns.map(c=>new h(this.model).formatStringColumn("sqlite",c)).join(", "),d=e.value,m=d.map(c=>`(${c.map(()=>"?").join(", ")})`).join(", ");r=`(${u}) ${e.operator} (${m})`,n=d.flat();}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new h(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,n=e.value;else {let u=e.value.map(d=>"?").join(", ");r=`${new h(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${u})`,n=e.value;}else if(e.value instanceof $){let u=new b(this.model,"sqlite").parse([e.value],1,true).sql;r=`${l(new h(this.model).formatStringColumn("sqlite",e.column))} ${a} ${l(u)}`,n=[];}else if(e.operator.includes("null"))r=`${new h(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${l(new h(this.model).formatStringColumn("sqlite",e.column))} ${a} ${s?"lower(?)":"?"}`,n=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new h(this.model).formatStringColumn("sqlite",t):t}},By=new Dl;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:e.isNegated?`not (${n})`:`(${n})`,bindings:o}}},Qy=new Il;var $l=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new h(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=X.from(e.path??"");r=`json_extract(${o}, '${s.toSqlite()}') ${e.comparisonOperator??"="} ?`,n=[e.value];break}case "subset":case "has none":throw new f("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}}},ky=new $l;var vl=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}}},Ky=new vl;var El=class{toSql(t){let e=t,r=new h(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:[]}}},Wy=new El;var Pl=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" materialized":e.clause==="not materialized"?" not materialized":"",a=e.columns?.length?` (${e.columns.map(l=>new h(this.model).formatStringColumnBare("sqlite",l)).join(", ")})`:"";return {sql:`${e.alias}${a} as${s} (${o.sql})`,bindings:o.bindings}}},Ly=new Pl;var Bl={mssql:{alter_table:{add_column:Ju,add_constraint:Hu,add_primary_key:zu,alter_column_type:Gu,alter_table:Yu,drop_column:Zu,drop_constraint:Xu,drop_default:ed,drop_not_null:ad,drop_primary_key:ld,rename_column:ud,rename_table:dd,set_default:cd,set_not_null:md,set_table_options:pd},column:{column_type:yd},comment:{comment:fd},constraint:{after:hd,constraint:gd},create_table:{create_table:bd},delete:{delete:Td},distinct:{distinct:wd,distinct_on:Sd},drop_table:{drop_table:Nd},extension:{create_extension:qd},from:{from:Cd},group_by:{group_by:Rd},having:{having:_d},index_op:{create_index:Md,drop_index:Od},insert:{insert:xd},join:{join:Ad},json_mutation:{json_mutation:Pd},limit:{limit:Bd},lock:{lock:Qd},offset:{offset:kd},on_duplicate:{on_duplicate:Kd},order_by:{order_by:Wd},raw:{raw:Ld},returning:{returning:jd},schema:{check_constraint_info:Fd,foreign_key_info:Ud,get_column_listing:Vd,get_tables:Jd,has_check_constraint:Hd,has_column:zd,has_index:Gd,has_primary_key:Yd,has_table:Zd,index_info:Xd,primary_key_info:ec,table_info:tc},select:{select:rc,select_json:nc},sqlfunc:{sqlfunc:oc},truncate:{truncate:sc},union:{union:ic},update:{update:ac},where:{where:lc,where_group:uc,where_json:dc,where_subquery:cc},window:{window:mc},with:{with:pc}},mysql:{alter_table:{add_column:yc,add_constraint:fc,add_primary_key:hc,alter_column_type:gc,alter_table:bc,drop_column:Tc,drop_constraint:wc,drop_default:Sc,drop_not_null:Nc,drop_primary_key:qc,rename_column:Cc,rename_table:Rc,set_default:_c,set_not_null:Mc,set_table_options:Oc},column:{column_type:xc},comment:{comment:Ac},constraint:{after:Dc,constraint:Ic},create_table:{create_table:$c},delete:{delete:vc},distinct:{distinct:Ec,distinct_on:Pc},drop_table:{drop_table:Bc},extension:{create_extension:Qc},from:{from:kc},group_by:{group_by:Kc},having:{having:Wc},index_op:{create_index:Lc,drop_index:jc},insert:{insert:Fc},join:{join:Uc},json_mutation:{json_mutation:Vc},limit:{limit:Jc},lock:{lock:Hc},offset:{offset:zc},on_duplicate:{on_duplicate:Gc},order_by:{order_by:Yc},raw:{raw:Zc},returning:{returning:Xc},schema:{check_constraint_info:em,foreign_key_info:tm,get_column_listing:rm,get_tables:nm,has_check_constraint:om,has_column:sm,has_index:im,has_primary_key:am,has_table:lm,index_info:um,primary_key_info:dm,table_info:cm},select:{select:mm,select_json:pm},sqlfunc:{sqlfunc:ym},truncate:{truncate:fm},union:{union:hm},update:{update:gm},where:{where:bm,where_group:Tm,where_json:wm,where_subquery:Sm},window:{window:Nm},with:{with:qm}},postgres:{alter_table:{add_column:Cm,add_constraint:Rm,add_primary_key:_m,alter_column_type:Mm,alter_table:Om,drop_column:xm,drop_constraint:Am,drop_default:Dm,drop_not_null:Im,drop_primary_key:$m,rename_column:vm,rename_table:Em,set_default:Pm,set_not_null:Bm,set_table_options:Qm},column:{column_type:km},comment:{comment:Km},constraint:{after:Wm,constraint:Lm},create_table:{create_table:jm},delete:{delete:Fm},distinct:{distinct:Um,distinct_on:Vm},drop_table:{drop_table:Jm},extension:{create_extension:Hm},from:{from:zm},group_by:{group_by:Gm},having:{having:Ym},index_op:{create_index:Zm,drop_index:Xm},insert:{insert:ep},join:{join:tp},json_mutation:{json_mutation:rp},limit:{limit:np},lock:{lock:op},offset:{offset:sp},on_duplicate:{on_duplicate:ip},order_by:{order_by:ap},raw:{raw:lp},returning:{returning:up},schema:{check_constraint_info:dp,foreign_key_info:cp,get_column_listing:mp,get_tables:pp,has_check_constraint:yp,has_column:fp,has_index:hp,has_primary_key:gp,has_table:bp,index_info:Tp,primary_key_info:wp,table_info:Sp},select:{select:Np,select_json:qp},sqlfunc:{sqlfunc:Cp},truncate:{truncate:Rp},union:{union:_p},update:{update:Mp},where:{where:Op,where_group:xp,where_json:Ap,where_subquery:Dp},window:{window:Ip},with:{with:$p}},sqlite:{alter_table:{add_column:vp,add_constraint:Ep,alter_column_type:Pp,alter_table:Bp,drop_column:Qp,drop_constraint:kp,drop_default:Kp,drop_not_null:Wp,drop_primary_key:Lp,rename_column:jp,rename_table:Fp,set_default:Up,set_not_null:Vp,set_table_options:Jp},column:{column_type:Hp},comment:{comment:zp},constraint:{after:Gp,constraint:Yp},create_table:{create_table:Zp},delete:{delete:Xp},distinct:{distinct:ey,distinct_on:ty},drop_table:{drop_table:ry},extension:{create_extension:ny},from:{from:oy},group_by:{group_by:sy},having:{having:iy},index_op:{create_index:ay,drop_index:ly},insert:{insert:uy},join:{join:dy},json_mutation:{json_mutation:cy},limit:{limit:my},lock:{lock:py},offset:{offset:yy},on_duplicate:{on_duplicate:fy},order_by:{order_by:hy},raw:{raw:gy},returning:{returning:by},schema:{check_constraint_info:Ty,foreign_key_info:wy,get_column_listing:Sy,get_tables:Ny,has_check_constraint:qy,has_column:Cy,has_index:Ry,has_primary_key:_y,has_table:My,index_info:Oy,primary_key_info:xy,table_info:Ay},select:{select:Dy,select_json:Iy},sqlfunc:{sqlfunc:$y},truncate:{truncate:vy},union:{union:Ey},update:{update:Py},where:{where:By,where_group:Qy,where_json:ky,where_subquery:Ky},window:{window:Wy},with:{with:Ly}}};var b=class{constructor(t,e){this.dbType=e,this.model=t;}parse(t,e=1,r=false){if(!t.length)return {sql:"",bindings:[]};let n=t.find(R=>!!R&&R.folder==="distinctOn"),o=!n&&t.find(R=>!!R&&R.folder==="distinct"),s=t.filter(R=>!!R&&R.folder==="comment"&&R.isHint).map(R=>this.renderNode(R)).filter(R=>R.length>0).join(" "),a=this.dbType==="mssql"?t.find(R=>!!R&&R.folder==="lock")??null:null,l=a?this.getMssqlTableHints(a):"",u=t.filter(R=>R!==null&&R.folder!=="distinct"&&R.folder!=="distinctOn"&&!(R.folder==="comment"&&R.isHint)),d=u.some(R=>R.folder==="offset"),m=u.some(R=>R.folder==="order_by"),c=u.find(R=>R.folder==="limit"),p=u.find(R=>R.folder==="offset"),g=this.dbType==="mssql"&&c&&!d&&!m,y=this.dbType==="mssql"&&!g&&(c||p),T=[],w=[],N=null;g&&c&&!c.skipBinding&&w.push(c.limit);for(let R=0;R<u.length;R++){let D=u[R];if(g&&D.folder==="limit"||y&&(D.folder==="limit"||D.folder==="offset"))continue;D.currParamIndex=e+w.length;let I=Bl[this.mapCommonDbType(this.dbType)][D.folder][D.file];if(!I)throw new Error(`Interpreter not found for ${this.dbType} ${D.keyword}`);I.model=this.model,I.dbType=this.dbType;let A=I.toSql(D);if(!A.sql||!A.sql.trim().length)continue;let W=u[R+1],B=!W||W.keyword!==D.keyword?"":W.chainsWith;if(D.folder==="lock"||D.folder==="on_duplicate"||D.folder==="returning"||D.folder==="schema"||D.folder==="comment"){T.push(`${A.sql}${B}`),w.push(...A.bindings),N=D.keyword;continue}if(N!==D.keyword||D.canKeywordBeSeenMultipleTimes){if(r)T.push(`${A.sql}${B}`);else {let oe=D.keyword;if(D.folder==="with"&&this.dbType!=="mssql"){let Re=R,_e=false;for(;Re<u.length&&u[Re].keyword===D.keyword;){let mu=u[Re];if(mu.folder==="with"&&mu.clause==="recursive"){_e=true;break}Re++;}_e&&(oe=`${oe} recursive`);}let et=s?`${s} `:"";if(oe==="select"){let Re=g?c?.skipBinding?`top ${c.limit} `:`top (@${e}) `:"";if(n){let _e=Array.isArray(n.columns)?n.columns.join(", "):"";T.push(`select ${Re}${et}distinct on (${_e}) ${A.sql}${B}`);}else o?T.push(`select ${Re}${et}distinct ${A.sql}${B}`):T.push(`select ${Re}${et}${A.sql}${B}`);}else oe==="from"&&l?T.push(`${oe} ${A.sql}${l}${B}`):T.push(`${oe} ${A.sql}${B}`);}N=D.keyword;}else T.push(`${A.sql}${B}`);w.push(...A.bindings);}if(y){m||T.push("order by (select null)");let R=p?.offset??0,D="";p?.skipBinding?D=`offset ${R} rows`:(w.push(R),D=`offset @${e+w.length-1} rows`),c&&(c.skipBinding?D+=` fetch next ${c.limit} rows only`:(w.push(c.limit),D+=` fetch next @${e+w.length-1} rows only`)),T.push(D);}return {sql:T.join(" "),bindings:w}}renderNode(t){let e=Bl[this.mapCommonDbType(this.dbType)][t.folder][t.file];if(!e)throw new Error(`Interpreter not found for ${this.dbType} ${t.keyword}`);return e.model=this.model,e.dbType=this.dbType,e.toSql(t).sql}mapCommonDbType(t){switch(t){case "mariadb":return "mysql";case "cockroachdb":return "postgres";default:return t}}getMssqlTableHints(t){let e=[];switch(t.lockType){case "for_update":e.push("UPDLOCK");break;case "for_share":e.push("HOLDLOCK");break;case "for_no_key_update":e.push("UPDLOCK");break;case "for_key_share":e.push("HOLDLOCK");break}return t.skipLocked&&e.push("READPAST"),t.noWait&&e.push("NOWAIT"),e.length>0?` with (${e.join(", ")})`:""}};var Lh=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},Ql=i=>!i.expression&&(i.type==="date"||i.type==="datetime"||i.type==="timestamp"),h=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??V(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??V(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${o}"`;case "mssql":return `[${o}]`;default:throw new Error(`Unsupported database type: ${t}`)}}resolveComputedExpression(t){let e=t.includes(".")?t.split(".").pop():t;return this.modelColumnsMap.get(e)?.expression}isComputedColumn(t){return !!this.modelColumnsMap.get(t)?.expression}filterComputedColumns(t){return this.modelColumnsMap.size===0?t:t.filter(e=>!this.isComputedColumn(e))}stripComputedFromData(t){if(this.modelColumnsMap.size===0)return t;let e={};for(let r of Object.keys(t))this.isComputedColumn(r)||(e[r]=t[r]);return e}formatStringColumnBare(t,e){let r=e.includes(".")?e.split(".")[1]:e;return this.formatStringColumn(t,r)}dialectEmitsReturning(t){switch(t){case "postgres":case "cockroachdb":case "sqlite":case "mssql":return true;default:return false}}shouldFetchNatively(t,e){if(!this.dialectEmitsReturning(t)||t==="mssql")return false;if(t==="sqlite"&&e==="update"){for(let r of this.modelColumnsMap.values())if(r.autoUpdate)return false}return true}hasComputedColumn(t){return t.some(e=>this.isComputedColumn(e))}resolveColumnAlias(t,e){let r=this.modelColumnsMap.get(e);if(!r||r.columnName===r.databaseName)return "";switch(t){case "mssql":return ` as [${r.columnName}]`;case "mysql":case "mariadb":return ` as \`${r.columnName}\``;case "postgres":case "cockroachdb":case "sqlite":return ` as "${r.columnName}"`;default:return ""}}formatStringTable(t,e){e=e.replace(/\s+/g," ").trim();let r="";return e.toLowerCase().includes(" as ")&&([e,r]=e.split(" as ")),`${e.split(".").map(o=>this.quoteIdentifier(t,o)).join(".")}${r?` as ${this.quoteIdentifier(t,r)}`:""}`}quoteIdentifier(t,e){switch(t){case "mysql":case "mariadb":return `\`${e}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${e}"`;case "mssql":return `[${e}]`;default:return e}}formatRawPlaceholders(t,e,r=[],n=1){if(!r.length)return {sql:e,bindings:[]};let o=n;return {sql:e.replace(/\?/g,()=>{switch(t){case "postgres":case "cockroachdb":return `$${o++}`;case "mssql":return `@${o++}`;default:return "?"}}),bindings:r}}prepareColumns(t,e,r="insert",n="postgres"){if(!t.length)return {columns:t,values:e};let o=[],s=[];for(let l=0;l<t.length;l++){let u=t[l],d=e[l];u!=="*"&&(o.push(u),s.push(d));}let a=n==="mysql"||n==="mariadb";for(let l=0;l<o.length;l++){let u=o[l],d=s[l],m=this.modelColumnsMap.get(u);if(m?.expression){o.splice(l,1),s.splice(l,1),l--;continue}if(!(d instanceof S)){if(!m){Lh(d)&&(s[l]=JSON.stringify(d));continue}if(d==null&&(m.autoCreate===true||m.type==="uuid"&&n!=="mysql"&&n!=="mariadb")){o.splice(l,1),s.splice(l,1),l--;continue}if(m.prepare){let c=r==="insert"?m.prepare(d):m.prepare(d)??d;if(c!==null&&typeof c?.then=="function")throw new Error(`hysteria-orm: prepare on column "${u}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);s[l]=c;}n==="sqlite"&&s[l]instanceof Date&&Ql(m)&&(s[l]=ue(s[l],"ISO","UTC"));}}if(r==="insert"){let l=new Set(t);for(let u of this.jsInsertColumns)l.has(u.columnName)||this.generateJsInsertColumn(u,o,s,n);if(a){let u=this.model.primaryKey;if(u){let d=this.modelColumnsMap.get(u);d&&d.type==="uuid"&&d.isPrimary&&!l.has(u)&&this.generateJsInsertColumn(d,o,s,n);}}}else {let l=new Set(t);for(let u of this.autoUpdateColumns){if(l.has(u.columnName))continue;let d=u.prepare?.(new Date);if(d!=null){if(typeof d?.then=="function")throw new Error(`hysteria-orm: prepare on column "${u.columnName}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);o.push(u.columnName),s.push(n==="sqlite"&&d instanceof Date&&Ql(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&&Ql(t)?ue(o,"ISO","UTC"):o??void 0);}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new b(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}getWriteSource(t,e,r){if(typeof e.table=="string"){let a=e.schema?`${e.schema}.${e.table}`:e.table,l=e.alias?` as ${e.alias}`:"";return {sql:`${this.formatStringTable(t,a)}${l}`,bindings:[]}}let n=new b(this.model,t),{sql:o,bindings:s}=n.parse(Array.isArray(e.table)?e.table:[e.table],r);return {sql:e.alias?`(${o}) as ${e.alias}`:`(${o})`,bindings:s}}renderWithNodes(t,e,r){return e?.length?new b(this.model,t).parse(e,r):{sql:"",bindings:[]}}};var gt=class extends S{constructor(e,r=false){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.fromNode=e;}};var J=class extends S{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var re=class extends S{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 ve=class extends S{constructor(e,r,n,o="update",s,a=false){super("on duplicate",a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="on_duplicate";this.file="on_duplicate";this.table=e,this.conflictColumns=r,this.columnsToUpdate=n,this.mode=o,this.returning=s;}};var bt=class extends S{constructor(e=[],r="inserted"){super("returning");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="returning";this.file="returning";this.columns=e,this.prefix=r;}};var Ee=class extends S{constructor(e,r=[],n=[],o=false){super("update",o);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="update";this.file="update";this.fromNode=e,this.columns=r,this.values=n;}};var br=(i,t)=>t!==void 0||i===null||typeof i!="object"?false:!(Array.isArray(i)||i instanceof M||i instanceof $),jy=(i,t,e,r,n,o)=>{let s=i;if(r===null){n===null?t?s.orWhereNull(e):s.whereNull(e):t?s.orWhere(e,"=",n):s.where(e,"=",n);return}let a=(l,u)=>{t?s.orWhere(e,l,u):s.where(e,l,u);};switch(r){case "$eq":n===null?t?s.orWhereNull(e):s.whereNull(e):a("=",n);break;case "$ne":n===null?t?s.orWhereNotNull(e):s.whereNotNull(e):a("!=",n);break;case "$gt":a(">",n);break;case "$gte":a(">=",n);break;case "$lt":a("<",n);break;case "$lte":a("<=",n);break;case "$between":{let[l,u]=n;t?s.orWhereBetween(e,l,u):s.whereBetween(e,l,u);break}case "$not between":{let[l,u]=n;t?s.orWhereNotBetween(e,l,u):s.whereNotBetween(e,l,u);break}case "$regexp":t?s.orWhereRegexp(e,n):s.whereRegexp(e,n);break;case "$not regexp":t?s.orWhereNotRegexp(e,n):s.whereNotRegexp(e,n);break;case "$is null":t?s.orWhereNull(e):s.whereNull(e);break;case "$is not null":t?s.orWhereNotNull(e):s.whereNotNull(e);break;case "$like":t?s.orWhereLike(e,n):s.whereLike(e,n);break;case "$not like":t?s.orWhereNotLike(e,n):s.whereNotLike(e,n);break;case "$ilike":t?s.orWhereILike(e,n):s.whereILike(e,n);break;case "$not ilike":t?s.orWhereNotILike(e,n):s.whereNotILike(e,n);break;case "$in":t?s.orWhereIn(e,n):s.whereIn(e,n);break;case "$nin":t?s.orWhereNotIn(e,n):s.whereNotIn(e,n);break;default:a("=",o);}},jh=(i,t,e,r)=>{if(e==null||typeof e!="object"){jy(i,r,t,null,e,e);return}let n=e;jy(i,r,t,n.op,n.value,e);},Ue=(i,t,e=false)=>{if(t)for(let[r,n]of Object.entries(t))r==="$and"&&Array.isArray(n)?i[e?"orWhere":"where"](s=>{for(let a of n)Ue(s,a,false);}):r==="$or"&&Array.isArray(n)?i[e?"orWhere":"where"](s=>{let a=true;for(let l of n)Ue(s,l,!a),a=false;}):jh(i,r,n,e);};var Fy;Fy=Symbol.toStringTag;var ie=class{constructor(t,e,r,n){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=n;this[Fy]="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 kl=i=>{let t=i.lastIndexOf(".");return t===-1?i:i.slice(t+1)},De=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 f(l,"ON_CONFLICT_REQUIRES_MERGE_OR_IGNORE");return o()});this.conflictColumns=null;this.conflictTargetRaw=null;this.conflictConstraint=null;this.conflictState=u,this.commit=s,this.insertColumns=a.map(kl),this.caller=l;}onConflict(e){if(e===void 0)return this.conflictColumns=[],this.conflictState.requested=true,this;if(e instanceof M)return this.conflictTargetRaw=e.rawValue,this.conflictColumns=[],this.conflictState.requested=true,this;if(!Array.isArray(e)&&typeof e=="object"){let n=e.constraint;if(!n)throw new f(this.caller,"ON_CONFLICT_COLUMNS_REQUIRED");return this.conflictConstraint=n,this.conflictColumns=[],this.conflictState.requested=true,this}let r=(Array.isArray(e)?e:[e]).map(kl);if(!r.length)throw new f(this.caller,"ON_CONFLICT_COLUMNS_REQUIRED");return this.conflictColumns=r,this.conflictState.requested=true,this}merge(e){let r=this.requireConflictTarget("merge"),n=e!==null&&typeof e=="object"&&!Array.isArray(e)?e:void 0,o=n?n.columns:e,s=o===void 0?this.insertColumns.filter(a=>!r.includes(a)):(Array.isArray(o)?o:[o]).map(kl);if(!s.length)throw new f(`${this.caller}::merge`,"MERGE_REQUIRES_COLUMNS");return this.commitConflict(r,"update",s,{conflictTargetRaw:this.conflictTargetRaw??void 0,conflictConstraint:this.conflictConstraint??void 0,mergeWhere:n?.where}),this}ignore(){if(!this.conflictState.requested)throw new f(`${this.caller}::ignore`,"MERGE_REQUIRES_ON_CONFLICT");return this.conflictState.actionProvided=true,this.commitConflict(this.conflictColumns??[],"ignore",[],{conflictTargetRaw:this.conflictTargetRaw??void 0,conflictConstraint:this.conflictConstraint??void 0}),this}requireConflictTarget(e){if(!(!!this.conflictColumns?.length||!!this.conflictTargetRaw||!!this.conflictConstraint))throw new f(`${this.caller}::${e}`,"MERGE_REQUIRES_ON_CONFLICT");return this.conflictColumns??[]}commitConflict(e,r,n,o){this.conflictState.actionProvided=true,this.commit({conflictColumns:e,mode:r,columnsToUpdate:n,...o});}};var Fh=(i,t,e,r,n,o=false,s=new Set)=>{let a=Object.create(t.prototype);for(let l of Object.keys(i)){let u=i[l],d=s.has(l),m=e.get(l),c=l;!m&&!d&&(m=r.get(l),m&&(c=m.columnName));let p=m!==void 0,g=d||o?true:n?n.has(c):true;if(p){if(!g)continue;if(u===null){a[c]=null;continue}if(m?.serialize){let y=m.serialize(u);if(y!==null&&typeof y?.then=="function")throw new Error(`hysteria-orm: column "${c}" on model "${t.name}" has an async serialize function, but serializers must be synchronous. Move async work to prepare or a getter.`);a[c]=y;continue}a[c]=u;continue}(d||!o||n&&n.has(c))&&(a[c]=u);}if(n)for(let l of n)l in a||(a[l]=null);return a},he=(i,t,e=[],r=[])=>{if(!i.length)return null;let n=t.getColumnsByName(),o=t.getColumnsByDatabaseName(),s=e.some(m=>m.includes("*")),a=[];for(let m of e){if(m.toLowerCase().includes(" as ")){let y=m.match(/\s+as\s+(.+)$/i);y&&a.push(y[1].trim());continue}let p=m;if(p.includes(".")&&(p=p.split(".").pop()),p==="*")continue;let g=n.get(p)?.columnName??p;a.push(g);}let l=a.length?new Set(a):null,u=new Set(r),d=i.map(m=>Fh(m,t,n,o,l,s,u));return d.length===1?d[0]:d};var Tt=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);}},Uy=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 Tr=ne();function Kl(i){let t=Tr.timing.now()-i;return Math.round(t*100)/100}function Wl(i,t,e){no(`Observer ${i} hook failed: ${t instanceof Error?t.message:String(t)}`,"warn",e);}var Y=async(i,t,e,r,n="rows",o)=>{await e.ensureConnected();let s={...o?.queryContext,id:Tr.crypto.randomUUID(),sql:i,params:t,model:o?.queryContext?.model,operation:Uy(i),timestamp:Tr.timing.now()};try{let u=e.observerChain;u&&typeof u.notifyBefore=="function"&&await u.notifyBefore(s);}catch(u){Wl("before-query",u,e.logs);}let a=Tr.timing.now(),l=u=>{let d=o?.shouldLog??e.logs;ft(i,d,t,e.inputDetails.queryFormatOptions,r,u);};try{let u=e.driverAdapter;if(!u)throw new f("ExecSql","CONNECTION_NOT_ESTABLISHED");let d=o?.timeout,m=d?new AbortController:void 0,c,p=Uh(()=>u.execute(i,t,{returning:n,sqlLiteOptions:o?.sqlLiteOptions,signal:m?.signal,connection:e.sqlConnection}),e.inputDetails.connectionPolicies?.retry,e.logs),g;try{d&&m?(g=await Promise.race([p,new Promise((y,T)=>{c=setTimeout(()=>{let w=new f("ExecSql::timeout","QUERY_TIMEOUT",new Error(`Query exceeded the ${d.ms}ms timeout`));d.cancel&&m.abort(w),T(w);},d.ms);})]),p.catch(()=>{})):g=await p;}finally{c&&clearTimeout(c);}try{let y=Kl(a),T=e.observerChain;if(T&&typeof T.notifyAfter=="function"){let w={...s,duration:y,result:g};await T.notifyAfter(w);}}catch(y){Wl("after-query",y,e.logs);}return l(Kl(a)),u.extract(g,n)}catch(u){try{let d=e.observerChain;d&&typeof d.notifyError=="function"&&await d.notifyError({...s,error:u instanceof Error?u:new Error(String(u))});}catch(d){Wl("error",d,e.logs);}throw l(Kl(a)),u}},wr=async(i,t,e,r={},n)=>{await e.ensureConnected();let o=e.driverAdapter;if(!o)throw new f("ExecSqlStreaming","CONNECTION_NOT_ESTABLISHED");return await o.stream(i,t,{...r,connection:e.sqlConnection??void 0},{onData:n.onData})};async function Uh(i,t={maxRetries:0,delay:0},e=false){let r=0,n=t.maxRetries||0,o=t.delay||0;async function s(){try{return await i()}catch(a){if(!Object.prototype.hasOwnProperty.call(a,"code")||a.code!=="ECONNREFUSED")throw a;if(r<n)return r++,no(`Retrying sql in ${o}ms (attempt ${r}/${n})`,"info",e),await new Promise(l=>setTimeout(l,o)),s();throw a}}return s()}function Vy(){return {}}var tt=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=Vy(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new b(this.model,this.sqlType),this.interpreterUtils=new h(this.model);}setReplicationMode(t){return this.replicationMode=t,this}async find(t){if(!t)return this.query().many();let e=this.query();return t.select&&e.select(...t.select),t.relations&&t.relations.forEach(r=>{e.load(r);}),t.where&&this.handleWhereCondition(e,t.where),t.orderBy&&Object.entries(t.orderBy).forEach(([r,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 f(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new f(this.model.name+"::findOneByPrimaryKey","MODEL_HAS_NO_PRIMARY_KEY");return this.query().select(...e||[]).where(this.model.primaryKey,t).one()}withInsertNodes(t,e,r){let n=this.sqlType==="mysql"||this.sqlType==="mariadb";return t.withNodes=n&&r?.length?r:void 0,[...n?[]:r??[],t,e].filter(Boolean)}insert(t,e={}){let r=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(t).map(m=>[m,t[m]]))),n=!e.returning||e.returning.length===0,o=new re(new J(this.model.table),[r],e.returning,n,false),s=null,a=null,l=()=>{let m=this.astParser.parse(this.withInsertNodes(o,s,e.withNodes));return {sql:m.sql,bindings:m.bindings}},u=()=>{let m=this.astParser.parse(this.withInsertNodes(o,s,e.withNodes));return {sql:Wt(this.sqlDataSource,m.sql),bindings:m.bindings}},d=()=>{let{sql:m,bindings:c}=u();return Kt(m,c)};return new De(l,u,d,async()=>{try{await this.model.validate?.(t);}catch(R){throw R}let{columns:m,values:c}=this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert",this.sqlType),p={};if(m.forEach((R,D)=>{let I=c[D];p[R]=I,t[R]??(t[R]=I);}),a)return (await this.executeInsertConflict([p],[t],a,e.returning,e.withNodes))[0];let g=!e.returning||e.returning.length===0,{sql:y,bindings:T}=this.astParser.parse(this.withInsertNodes(new re(new J(this.model.table),[p],e.returning,g,false),null,e.withNodes)),w=await Y(y,T,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(g)return;if(this.sqlType==="mysql")return this.handleMysqlInsert(w,[t],"one",e.returning);let N=w[0];return N?he([N],this.model,e.returning):t},m=>{if(a=m,m.conflictColumns.length===0&&this.sqlType==="mssql")throw new f("ModelManager::onConflict","NOT_SUPPORTED_IN_MSSQL",new Error("MSSQL cannot express a target-less ON CONFLICT; provide the conflict columns"));o=new re(new J(this.model.table),o.records,void 0,true,false),s=this.sqlType==="mssql"?null:new ve(this.model.table,m.conflictColumns,m.columnsToUpdate,m.mode,e.returning);},this.interpreterUtils.filterComputedColumns(Object.keys(t)),"ModelManager::insert")}insertMany(t,e={}){return this.insertManyInternal(t,e,true)}insertManyInternal(t,e,r){let n=t.map(c=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(c).map(p=>[p,c[p]])))),o=!e.returning||e.returning.length===0,s=new re(new J(this.model.table),n,e.returning,o,false),a=null,l=null,u=()=>{let c=this.astParser.parse(this.withInsertNodes(s,a,e.withNodes));return {sql:c.sql,bindings:c.bindings}},d=()=>{let c=this.astParser.parse(this.withInsertNodes(s,a,e.withNodes));return {sql:Wt(this.sqlDataSource,c.sql),bindings:c.bindings}},m=()=>{let{sql:c,bindings:p}=d();return Kt(c,p)};return new De(u,d,m,async()=>{if(r)try{await this.model.validate?.(t);}catch(x){throw x}let c=t.map(x=>{let{columns:R,values:D}=this.interpreterUtils.prepareColumns(Object.keys(x),Object.values(x),"insert",this.sqlType),I={};return R.forEach((A,W)=>{let pe=D[W];I[A]=pe,x[A]??(x[A]=pe);}),I});if(l)return this.executeInsertConflict(c,t,l,e.returning,e.withNodes);let p=!e.returning||e.returning.length===0,{sql:g,bindings:y}=this.astParser.parse(this.withInsertNodes(new re(new J(this.model.table),c,e.returning,p,false),null,e.withNodes)),T=await Y(g,y,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(p)return [];if(this.sqlType==="mysql")return await this.handleMysqlInsert(T,t,"many",e.returning)||[];let w=T;if(!w.length)return [];let N=he(w,this.model,e.returning);return N?Array.isArray(N)?N:[N]:[]},c=>{if(l=c,c.conflictColumns.length===0&&this.sqlType==="mssql")throw new f("ModelManager::onConflict","NOT_SUPPORTED_IN_MSSQL",new Error("MSSQL cannot express a target-less ON CONFLICT; provide the conflict columns"));s=new re(new J(this.model.table),s.records,void 0,true,false),a=this.sqlType==="mssql"?null:new ve(this.model.table,c.conflictColumns,c.columnsToUpdate,c.mode,e.returning);},t.length?this.interpreterUtils.filterComputedColumns(Object.keys(t[0])):[],"ModelManager::insertMany")}upsertMany(t,e,r,n={updateOnConflict:true}){let o=this.insertManyInternal(r,n,false).onConflict(t);return n.updateOnConflict??true?o.merge(this.interpreterUtils.filterComputedColumns(e)):o.ignore()}async executeInsertConflict(t,e,r,n,o){let s=r.mode==="update";if(this.sqlType==="mssql")return this.executeMssqlMerge(t,r.conflictColumns,r.columnsToUpdate,{updateOnConflict:s,returning:n},e);let a=!n||n.length===0,l=!a&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?n:void 0,{sql:u,bindings:d}=this.astParser.parse(this.withInsertNodes(new re(new J(this.model.table),t,void 0,true,false),new ve(this.model.table,r.conflictColumns,r.columnsToUpdate,r.mode,l),o)),m=await Y(u,d,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:e}});if(a)return [];if(this.sqlType==="postgres"||this.sqlType==="cockroachdb"){if(m.length<e.length&&!s)return this.refetchByConflictColumn(r.conflictColumns[0],e,n);let p=he(m,this.model,n);return p?Array.isArray(p)?p:[p]:[]}return this.refetchByConflictColumn(r.conflictColumns[0],e,n)}async refetchByConflictColumn(t,e,r){if(!t)return [];let n=e.map(s=>s[t]);return await this.query().select(...r?.length?r:["*"]).whereIn(t,n).many()}async executeMssqlMerge(t,e,r,n,o){if(!t.length)return [];let s=Object.keys(t[0]),a=this.interpreterUtils.formatStringColumn("mssql",this.model.table),l=I=>this.interpreterUtils.formatStringColumn("mssql",I),u=[],d=t.map(I=>`select ${s.map(W=>(u.push(I[W]),`@${u.length}`)).join(", ")}`),m=s.map(l).join(", "),c=d.join(" union all "),p=e.map(I=>`target.${l(I)} = source.${l(I)}`).join(" and "),g=r.filter(I=>!e.includes(I)).map(I=>`target.${l(I)} = source.${l(I)}`).join(", "),y=s.map(l).join(", "),T=s.map(I=>`source.${l(I)}`).join(", "),w=n.returning&&n.returning.length?n.returning.map(I=>`inserted.${l(I)}${this.interpreterUtils.resolveColumnAlias("mssql",I)}`).join(", "):s.map(I=>`inserted.${l(I)}${this.interpreterUtils.resolveColumnAlias("mssql",I)}`).join(", "),x=(n.updateOnConflict??true)&&g?`when matched then update set ${g}`:"",R=`merge into ${a} as target using (${c}) as source (${m}) on ${p} ${x} when not matched then insert (${y}) values (${T}) output ${w};`,D=await Y(R,u,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});if(D.length===0&&!(n.updateOnConflict??true)){let I=e[0],A=o.map(pe=>pe[I]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(I,A).many()}return D}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 f(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let d=a.indexOf(u);d!==-1&&(a.splice(d,1),l.splice(d,1));let m=r?.returning??[],c=m.length>0&&!this.interpreterUtils.hasComputedColumn(m)&&this.interpreterUtils.shouldFetchNatively(this.sqlType,"update"),{sql:p,bindings:g}=this.astParser.parse([new Ee(new J(this.model.table),a,l),new O(u,"and",false,"=",t),...c?[new bt(m)]:[]]),y=await Y(p,g,this.sqlDataSource,this.sqlType,c?"rows":"affectedRows",c?{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}:void 0);if(!m.length)return;if(c){if(!y.length)throw new f(this.model.name+"::updateRecord","ROW_NOT_FOUND");return he([y[0]],this.model,m)}let T=await this.findOneByPrimaryKey(t,r?.returning);if(!T)throw new f(this.model.name+"::updateRecord","ROW_NOT_FOUND");return T}async deleteRecord(t){if(!this.model.primaryKey)throw new f(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new O(this.model.primaryKey,"and",false,"=",t),{sql:r,bindings:n}=this.astParser.parse([new gt(new J(this.model.table)),e]);await Y(r,n,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new Ve(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){Ue(t,e??{},r);}};var jt=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=Pu(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 f("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function Sr(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 wt=i=>typeof i=="number"?i:parseFloat(i);var Nr=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var qe=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var St=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var qr=class extends S{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="alter_column_type";this.column=e,this.newType=r,this.options=n;}};var ge=class extends S{constructor(e,r=[],n=false){super("alter table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="alter_table";this.table=e,this.children=r,this.ifExists=n;}};var Cr=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var Ce=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var Ft=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var Rr=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var Nt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var _r=class extends S{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var Mr=class extends S{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_default";this.column=e,this.defaultValue=r;}};var Or=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var qt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="set_table_options";this.engine=e.engine,this.charset=e.charset,this.collate=e.collate;}};var Q=class extends S{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="column";this.file="column_type";this.isRawValue=false;this.column=e,this.dataType=r,this.length=n.length,this.precision=n.precision,this.scale=n.scale,this.enumValues=n.enumValues,this.withTimezone=n.withTimezone,this.autoIncrement=n.autoIncrement,this.autoCreate=n.autoCreate,this.autoUpdate=n.autoUpdate,this.collate=n.collate,this.isRawValue=n.isRawValue??false,this.unsigned=n.unsigned,this.zerofill=n.zerofill;}};var Ut=class extends S{constructor(e,r=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="comment";this.file="comment";this.value=e,this.isHint=r;}};var H=class extends S{constructor(e,r={},n=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="constraint";this.constraintType=e,this.columns=r.columns,this.references=r.references,this.constraintName=r.constraintName,this.onDelete=r.onDelete,this.onUpdate=r.onUpdate,this.defaultValue=r.defaultValue,this.checkExpression=r.checkExpression,this.isRawValue=n;}};var xr=class extends S{constructor(e,r=[],n=[],o=false,s){super("create table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="create_table";this.file="create_table";this.table=e,this.children=r,this.namedConstraints=n,this.ifNotExists=o,s&&Object.assign(this,s);}};var Ar=class extends S{constructor(e,r=false){super("drop table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="drop_table";this.file="drop_table";this.table=e,this.ifExists=r;}};var Dr=class extends S{constructor(e,r=true){super("create extension");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="extension";this.file="create_extension";this.extensionName=e,this.ifNotExists=r;}};var Ir=class extends S{constructor(e,r,n,o=false){super("create index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="index_op";this.file="create_index";this.table=e,this.columns=r,this.indexName=n,this.unique=o;}};var $r=class extends S{constructor(e,r,n){super("drop index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.cascade=false;this.folder="index_op";this.file="drop_index";this.indexName=e,this.table=r,this.cascade=n??false;}};var rt=class extends S{constructor(e,r=false,n=false){super("lock");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="lock";this.file="lock";this.lockType=e,this.skipLocked=r,this.noWait=n;}};var vr=class extends S{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 Jy(i){return i?Array.isArray(i)?i:[i]:[]}function Hy(i){return i?(Array.isArray(i)?i:[i]).map(e=>typeof e=="string"?{column:e}:e):[]}var Pe=class extends S{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 nt=class extends S{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 Ct=class extends S{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;}};var Z=class extends S{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 Er=class extends S{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var Pr=class extends S{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var Je=class extends S{constructor(e,r,n,o="extract",s=false){super("select");this.folder="select";this.file="select_json";this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.column=e,this.jsonPath=r,this.alias=n,this.jsonOperator=o,this.isRawValue=s;}};var ee=class extends S{constructor(e,r,n,o="inner",s,a=false,l){super(`${o} join`,a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="join";this.file="join";this.type="inner";this.table=e,this.left=r,this.right=n,this.type=o,this.on=s,this.additionalConditions=l;}};var Vt=class extends S{constructor(e,r=false){super("group by",r);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="group_by";this.file="group_by";this.column=e;}};var Br=class extends S{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var Qr=class extends S{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var Rt=class extends S{constructor(e,r="asc",n=false){super("order by",n);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="order_by";this.file="order_by";this.column=e,this.direction=r;}};var Kr=class Kr{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=Kr.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){let r=typeof e=="string"?new Rt(t,e):new Rt(t,e.direction);return typeof e!="string"&&e.nulls&&(r.nulls=e.nulls),this.orderByNodes.push(r),this}orderByRaw(t){return this.orderByNodes.push(new Rt(t,"asc",true)),this}limit(t,e){return typeof t!="number"&&C.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new Br(t),this.limitNode.skipBinding=e?.skipBinding,this}offset(t,e){return typeof t!="number"&&C.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new Qr(t),this.offsetNode.skipBinding=e?.skipBinding,this}};Kr.EMPTY_MAP=new Map;var kr=Kr;var ot=class i{constructor(t,e,r=false){this.model=t;this.sqlDataSource=e;this.isNestedCondition=false;this.whereNodes=[],this.isNestedCondition=r;}getConditions(){return this.whereNodes}where(t,e,r){return typeof t=="function"?this.andWhereGroup(t):this.andWhere(t,e,r)}andWhere(t,e,r){if(typeof t=="function")return this.andWhereGroup(t);let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new O(t,"and",false,n,o)),this}orWhere(t,e,r){if(typeof t=="function")return this.orWhereGroup(t);let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new O(t,"or",false,n,o)),this}whereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new O(t,"and",true,n,o)),this}andWhereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new O(t,"and",true,n,o)),this}orWhereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new O(t,"or",true,n,o)),this}whereColumn(t,e,r){return this.pushColumnWhere("and",t,e,r,false)}andWhereColumn(t,e,r){return this.pushColumnWhere("and",t,e,r,false)}orWhereColumn(t,e,r){return this.pushColumnWhere("or",t,e,r,false)}whereNotColumn(t,e,r){return this.pushColumnWhere("and",t,e,r,true)}andWhereNotColumn(t,e,r){return this.pushColumnWhere("and",t,e,r,true)}orWhereNotColumn(t,e,r){return this.pushColumnWhere("or",t,e,r,true)}pushColumnWhere(t,e,r,n,o){let s=o?"!=":"=",a=false,l;return n!==void 0?(s=r,l=n,a=o):l=r,this.whereNodes.push(new O(e,t,a,s,new M(l))),this}whereBetween(t,e,r){return this.andWhereBetween(t,e,r)}andWhereBetween(t,e,r){return this.whereNodes.push(new O(t,"and",false,"between",[e,r])),this}orWhereBetween(t,e,r){return this.whereNodes.push(new O(t,"or",false,"between",[e,r])),this}whereNotBetween(t,e,r){return this.andWhereNotBetween(t,e,r)}andWhereNotBetween(t,e,r){return this.whereNodes.push(new O(t,"and",true,"between",[e,r])),this}orWhereNotBetween(t,e,r){return this.whereNodes.push(new O(t,"or",true,"between",[e,r])),this}whereLike(t,e){return this.andWhereLike(t,e)}andWhereLike(t,e){return this.where(t,"like",e),this}orWhereLike(t,e){return this.orWhere(t,"like",e),this}whereILike(t,e){return this.andWhereILike(t,e)}andWhereILike(t,e){return this.where(t,"ilike",e),this}orWhereILike(t,e){return this.orWhere(t,"ilike",e),this}whereNotLike(t,e){return this.andWhereNotLike(t,e)}andWhereNotLike(t,e){return this.where(t,"not like",e),this}orWhereNotLike(t,e){return this.orWhere(t,"not like",e),this}whereNotILike(t,e){return this.andWhereNotILike(t,e)}andWhereNotILike(t,e){return this.where(t,"not ilike",e),this}orWhereNotILike(t,e){return this.orWhere(t,"not ilike",e),this}whereIn(t,e){return this.andWhereIn(t,e)}andWhereIn(t,e){return e.length?(this.whereNodes.push(new O(t,"and",false,"in",e)),this):(this.whereNodes.push(new O("false","and",true,"=",[],true)),this)}orWhereIn(t,e){return e.length?(this.whereNodes.push(new O(t,"or",false,"in",e)),this):(this.whereNodes.push(new O("false","or",true,"=",[],true)),this)}whereNotIn(t,e){return this.andWhereNotIn(t,e)}andWhereNotIn(t,e){return e.length?(this.whereNodes.push(new O(t,"and",true,"in",e)),this):(this.whereNodes.push(new O("true","and",true,"=",[],true)),this)}orWhereNotIn(t,e){return e.length?(this.whereNodes.push(new O(t,"or",true,"in",e)),this):(this.whereNodes.push(new O("true","or",true,"=",[],true)),this)}whereNull(t){return this.andWhereNull(t)}andWhereNull(t){return this.whereNodes.push(new O(t,"and",false,"is null",void 0)),this}orWhereNull(t){return this.whereNodes.push(new O(t,"or",false,"is null",void 0)),this}whereNotNull(t){return this.andWhereNotNull(t)}andWhereNotNull(t){return this.whereNodes.push(new O(t,"and",false,"is not null",void 0)),this}orWhereNotNull(t){return this.whereNodes.push(new O(t,"or",false,"is not null",void 0)),this}whereRegexp(t,e){return this.andWhereRegexp(t,e)}andWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(t,"and",false,r?"~":"regexp",e.source)),this}orWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(t,"or",false,r?"~":"regexp",e.source)),this}whereNotRegexp(t,e){return this.andWhereNotRegexp(t,e)}andWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(t,"and",true,r?"~":"regexp",e.source)),this}orWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(t,"or",true,r?"~":"regexp",e.source)),this}whereGroup(t){return this.andWhereGroup(t)}andWhereGroup(t){let e=new i(this.model,this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new Ae(r,"and")),this}orWhereGroup(t){let e=new i(this.model,this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new Ae(r,"or")),this}whereRaw(t,e){return this.andWhereRaw(t,e)}andWhereRaw(t,e){return this.whereNodes.push(new O(t,"and",true,"=",e??[],true)),this}orWhereRaw(t,e){return this.whereNodes.push(new O(t,"or",true,"=",e??[],true)),this}whereExists(t){return this.pushExists("exists","and",t)}andWhereExists(t){return this.pushExists("exists","and",t)}orWhereExists(t){return this.pushExists("exists","or",t)}whereNotExists(t){return this.pushExists("not exists","and",t)}andWhereNotExists(t){return this.pushExists("not exists","and",t)}orWhereNotExists(t){return this.pushExists("not exists","or",t)}pushExists(t,e,r){let n=r instanceof E?r:new E(this.model,this.sqlDataSource);return n.isNestedCondition=true,typeof r=="function"&&r(n),this.whereNodes.push(new ce("",t,n.extractQueryNodes(),e)),this}whereJson(t,e){return this.pushJson("and",t,"contains",e)}andWhereJson(t,e){return this.pushJson("and",t,"contains",e)}orWhereJson(t,e){return this.pushJson("or",t,"contains",e)}whereNotJson(t,e){return this.pushJson("and",t,"contains",e,true)}andWhereNotJson(t,e){return this.pushJson("and",t,"contains",e,true)}orWhereNotJson(t,e){return this.pushJson("or",t,"contains",e,true)}whereJsonObject(t,e){return this.pushJson("and",t,"=",e)}andWhereJsonObject(t,e){return this.pushJson("and",t,"=",e)}orWhereJsonObject(t,e){return this.pushJson("or",t,"=",e)}whereNotJsonObject(t,e){return this.pushJson("and",t,"=",e,true)}andWhereNotJsonObject(t,e){return this.pushJson("and",t,"=",e,true)}orWhereNotJsonObject(t,e){return this.pushJson("or",t,"=",e,true)}whereJsonPath(t,e,r,n){return this.pushJson("and",t,"path",n,false,e,r)}andWhereJsonPath(t,e,r,n){return this.pushJson("and",t,"path",n,false,e,r)}orWhereJsonPath(t,e,r,n){return this.pushJson("or",t,"path",n,false,e,r)}whereJsonSubsetOf(t,e){return this.pushJson("and",t,"subset",e)}andWhereJsonSubsetOf(t,e){return this.pushJson("and",t,"subset",e)}orWhereJsonSubsetOf(t,e){return this.pushJson("or",t,"subset",e)}whereJsonNotSubsetOf(t,e){return this.pushJson("and",t,"subset",e,true)}andWhereJsonNotSubsetOf(t,e){return this.pushJson("and",t,"subset",e,true)}orWhereJsonNotSubsetOf(t,e){return this.pushJson("or",t,"subset",e,true)}whereJsonHasNone(t,e){return this.pushJson("and",t,"has none",e)}andWhereJsonHasNone(t,e){return this.pushJson("and",t,"has none",e)}orWhereJsonHasNone(t,e){return this.pushJson("or",t,"has none",e)}whereJsonRaw(t,e){return this.pushJson("and",t,"raw",e??[])}andWhereJsonRaw(t,e){return this.pushJson("and",t,"raw",e??[])}orWhereJsonRaw(t,e){return this.pushJson("or",t,"raw",e??[])}pushJson(t,e,r,n,o=false,s,a){return this.whereNodes.push(new F(e,t,o,r,n,false,s,a)),this}};var _t=i=>typeof i=="function"&&!("table"in i),Wr=class extends kr{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t,e=[]){let r=new ee(t,"","","inner",{operator:"="},true);return r.bindings=e,this.joinNodes.push(r),this}leftJoinRaw(t,e=[]){let r=new ee(t,"","","left",{operator:"="},true);return r.bindings=e,this.joinNodes.push(r),this}rightJoinRaw(t,e=[]){let r=new ee(t,"","","right",{operator:"="},true);return r.bindings=e,this.joinNodes.push(r),this}fullJoinRaw(t,e=[]){let r=new ee(t,"","","full",{operator:"="},true);return r.bindings=e,this.joinNodes.push(r),this}crossJoinRaw(t,e=[]){let r=new ee(t,"","","cross",{operator:"="},true);return r.bindings=e,this.joinNodes.push(r),this}crossJoin(t,e){if(_t(t))return this.derivedJoin(t,"cross",e);let r=typeof t=="string"?t:t.table;return this.joinNodes.push(new ee(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 f("JoinQueryBuilder::using","USING_REQUIRES_JOIN");if(e.additionalConditions?.length)throw new f("JoinQueryBuilder::using","USING_CONFLICTS_WITH_ON_CONDITIONS");return e.using=t.map(r=>String(r)),this}naturalJoinRaw(t,e=[]){let r=new ee(t,"","","natural",{operator:"="},true);return r.bindings=e,this.joinNodes.push(r),this}innerJoin(t,e,r,n,o){if(_t(t))return this.derivedJoin(t,"inner",e,r,n,o);if(e===void 0)return this.join(typeof t=="string"?t:t.table);let s=r,a=n,l=typeof n=="function"?n:o;if(!s){if(!this.model.primaryKey)throw new f("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(_t(t))return this.derivedJoin(t,"inner",e,r,n,o);if(e===void 0)return this.joinNodes.push(new ee(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 f("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new ot(this.model,this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ee(typeof t=="string"?t:t.table,e,s,"inner",{operator:a||"="},false,u)),this}leftJoin(t,e,r,n,o){if(_t(t))return this.derivedJoin(t,"left",e,r,n,o);if(e===void 0)return this.joinNodes.push(new ee(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 f("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new ot(this.model,this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ee(typeof t=="string"?t:t.table,e,s,"left",{operator:a||"="},false,u)),this}rightJoin(t,e,r,n,o){if(_t(t))return this.derivedJoin(t,"right",e,r,n,o);if(e===void 0)return this.joinNodes.push(new ee(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 f("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new ot(this.model,this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ee(typeof t=="string"?t:t.table,e,s,"right",{operator:a||"="},false,u)),this}fullJoin(t,e,r,n,o){if(_t(t))return this.derivedJoin(t,"full",e,r,n,o);let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new f("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new ot(this.model,this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ee(typeof t=="string"?t:t.table,e,s,"full",{operator:a||"="},false,u)),this}derivedJoin(t,e,r,n,o,s){let a=r?String(r):"";if(!a)throw new f("JoinQueryBuilder::join","MISSING_ALIAS_FOR_SUBQUERY");let l=new E(this.model,this.sqlDataSource),u=t(l),d=u!=null&&"extractQueryNodes"in u?u:l,m=o?String(o):"";if(n&&!m){if(!this.model.primaryKey)throw new f("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");m=`${this.model.table}.${this.model.primaryKey}`;}let c=new ee(a,n?String(n):"",m,e,{operator:s||"="});return c.subquery=d.extractQueryNodes(),this.joinNodes.push(c),this}leftOuterJoin(t,e,r,n,o){return this.leftJoin(t,e,r,n,o)}rightOuterJoin(t,e,r,n,o){return this.rightJoin(t,e,r,n,o)}fullOuterJoin(t,e,r,n,o){return this.fullJoin(t,e,r,n,o)}};var Vh=/\bas\s+"?([A-Za-z_][A-Za-z0-9_]*)"?\s*(?:,|$)/gi,Jh=/^[A-Za-z_][A-Za-z0-9_.]*$/,Hh=i=>{let t=[];for(let e of i.matchAll(Vh))t.push(e[1]);if(!t.length){let e=i.trim();Jh.test(e)&&t.push(e.split(".").pop());}return t},Lr=class extends Wr{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.userOutputColumns=[];this.dbType=r.getDbType(),this.fromNode=new J(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 G(`(${u.expression}) as ${l}`,void 0,void 0,true));return}let d=V(a,this.model.databaseCaseConvention);this.selectNodes.push(new G(d,l));return}let n=r;this.modelSelectedColumns.push(n);let o=this.resolveComputedColumn(n);if(o){this.selectNodes.push(new G(`(${o.expression}) as ${o.alias}`,void 0,void 0,true));return}let s=V(n,this.model.databaseCaseConvention);this.selectNodes.push(new G(s));}),this}selectRaw(e){return this.selectNodes.push(new G(e,void 0,void 0,true)),this.userOutputColumns.push(...Hh(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 G(r,n,e)),this}countDistinct(e,r){return this.selectNodes.push(new G(e,r,"count",false,true)),this}sumDistinct(e,r){return this.selectNodes.push(new G(e,r,"sum",false,true)),this}avgDistinct(e,r){return this.selectNodes.push(new G(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 G(new vr(e,Jy(n.partitionBy),Hy(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 J(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new J(e),this}distinct(){return this.distinctNode=new Er,this}distinctOn(...e){return this.distinctOnNode=new Pr(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 jr=class extends Lr{constructor(e,r,n=false){super(e,r);this.isNestedCondition=false;this.whereNodes=[],this.havingNodes=[],this.isNestedCondition=n;}clearWhere(){return this.whereNodes=[],this}clearHaving(){return this.havingNodes=[],this}strictWhen(e,r){return e==null?this:(r(this),this)}when(e,r){return e?(r(this),this):this}modify(e,...r){return e(this,...r),this}where(e,r,n){return typeof e=="function"?this.andWhereGroup(e):br(e,r)?(Ue(this,e,false),this):typeof r=="function"&&n===void 0?this.andWhereSubQuery(e,"in",r):r instanceof E&&n===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof E||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(br(e,r))return Ue(this,e,false),this;if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(r instanceof E&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof E||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof E)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new O(e,"and",false,o,s)),this}orWhere(e,r,n){if(typeof e=="function")return this.orWhereGroup(e);if(br(e,r))return Ue(this,e,true),this;if(typeof r=="function"&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(r instanceof E&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof E||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof E)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new O(e,"or",false,o,s)),this}whereColumn(e,r,n){return this.andWhereColumn(e,r,n)}andWhereColumn(e,r,n){let o="=",s;return n!==void 0?(o=r,s=n):s=r,this.whereNodes.push(new O(e,"and",false,o,new M(s))),this}orWhereColumn(e,r,n){let o="=",s;return n!==void 0?(o=r,s=n):s=r,this.whereNodes.push(new O(e,"or",false,o,new M(s))),this}whereNotColumn(e,r,n){return this.andWhereNotColumn(e,r,n)}andWhereNotColumn(e,r,n){return this.pushNotColumnWhere("and",e,r,n)}orWhereNotColumn(e,r,n){return this.pushNotColumnWhere("or",e,r,n)}pushNotColumnWhere(e,r,n,o){let s="!=",a=false,l;return o!==void 0?(s=n,l=o,a=true):l=n,this.whereNodes.push(new O(r,e,a,s,new M(l))),this}whereNot(e,r,n){if(typeof e=="function"&&r===void 0)return this.andWhereGroup(e,true);if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof E&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof E||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof E)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new O(e,"and",true,o,s)),this}andWhereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof E&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof E||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof E)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new O(e,"and",true,o,s)),this}orWhereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(r instanceof E&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof E||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof E)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new O(e,"or",true,o,s)),this}whereBetween(e,r,n){return this.andWhereBetween(e,r,n)}andWhereBetween(e,r,n){return this.whereNodes.push(new O(e,"and",false,"between",[r,n])),this}orWhereBetween(e,r,n){return this.whereNodes.push(new O(e,"or",false,"between",[r,n])),this}whereNotBetween(e,r,n){return this.andWhereNotBetween(e,r,n)}andWhereNotBetween(e,r,n){return this.whereNodes.push(new O(e,"and",true,"between",[r,n])),this}orWhereNotBetween(e,r,n){return this.whereNodes.push(new O(e,"or",true,"between",[r,n])),this}whereLike(e,r){return this.andWhereLike(e,r)}andWhereLike(e,r){return this.where(e,"like",r),this}orWhereLike(e,r){return this.orWhere(e,"like",r),this}whereILike(e,r){return this.andWhereILike(e,r)}andWhereILike(e,r){return this.where(e,"ilike",r),this}orWhereILike(e,r){return this.orWhere(e,"ilike",r),this}whereNotLike(e,r){return this.andWhereNotLike(e,r)}andWhereNotLike(e,r){return this.where(e,"not like",r),this}orWhereNotLike(e,r){return this.orWhere(e,"not like",r),this}whereNotILike(e,r){return this.andWhereNotILike(e,r)}andWhereNotILike(e,r){return this.where(e,"not ilike",r),this}orWhereNotILike(e,r){return this.orWhere(e,"not ilike",r),this}whereIn(e,r){return this.andWhereIn(e,r)}andWhereIn(e,r){return Array.isArray(e)?this.pushTupleIn(e,r,"and","in"):Array.isArray(r)?r.length?(this.whereNodes.push(new O(e,"and",false,"in",r)),this):(this.whereNodes.push(new O("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(e)?this.pushTupleIn(e,r,"or","in"):Array.isArray(r)?r.length?(this.whereNodes.push(new O(e,"or",false,"in",r)),this):(this.whereNodes.push(new O("false","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"in",r)}whereNotIn(e,r){return this.andWhereNotIn(e,r)}andWhereNotIn(e,r){return Array.isArray(e)?this.pushTupleIn(e,r,"and","not in"):Array.isArray(r)?r.length?(this.whereNodes.push(new O(e,"and",true,"in",r)),this):(this.whereNodes.push(new O("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(e)?this.pushTupleIn(e,r,"or","not in"):Array.isArray(r)?r.length?(this.whereNodes.push(new O(e,"or",true,"in",r)),this):(this.whereNodes.push(new O("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new O(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new O(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new O(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new O(e,"or",false,"is not null",void 0)),this}whereRegexp(e,r){return this.andWhereRegexp(e,r)}andWhereRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(e,"and",false,n?"~":"regexp",r.source)),this}orWhereRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new O(e,"or",false,n?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new O(e,"and",true,n?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new O(e,"and",true,n?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new O(e,"or",true,n?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof E?e:new E(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 E?e:new E(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 E?e:new E(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 E?e:new E(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new ce("","not exists",r.extractQueryNodes(),"or")),this}whereRaw(e,r=[]){return this.andWhereRaw(e,r)}andWhereRaw(e,r=[]){return this.whereNodes.push(new O(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new O(e,"or",false,"=",r,true)),this}having(e,r,n){return this.andHaving(e,r,n)}andHaving(e,r,n){let o="=",s;return typeof r=="string"&&n?(o=r,s=n):(s=r,o="="),this.havingNodes.push(new Z(e,"and",false,o,s)),this}orHaving(e,r,n){let o="=",s;return typeof r=="string"&&n?(o=r,s=n):(s=r,o="="),this.havingNodes.push(new Z(e,"or",false,o,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Z(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Z(e,"or",false,"=",[],true)),this}havingNull(e){return this.andHavingNull(e)}andHavingNull(e){return this.havingNodes.push(new Z(e,"and",false,"is null",void 0)),this}orHavingNull(e){return this.havingNodes.push(new Z(e,"or",false,"is null",void 0)),this}havingNotNull(e){return this.andHavingNotNull(e)}andHavingNotNull(e){return this.havingNodes.push(new Z(e,"and",false,"is not null",void 0)),this}orHavingNotNull(e){return this.havingNodes.push(new Z(e,"or",false,"is not null",void 0)),this}havingIn(e,r){return this.andHavingIn(e,r)}andHavingIn(e,r){return this.pushHavingIn("and",e,r,false)}orHavingIn(e,r){return this.pushHavingIn("or",e,r,false)}havingNotIn(e,r){return this.andHavingNotIn(e,r)}andHavingNotIn(e,r){return this.pushHavingIn("and",e,r,true)}orHavingNotIn(e,r){return this.pushHavingIn("or",e,r,true)}havingBetween(e,r){return this.andHavingBetween(e,r)}andHavingBetween(e,r){return this.havingNodes.push(new Z(e,"and",false,"between",r)),this}orHavingBetween(e,r){return this.havingNodes.push(new Z(e,"or",false,"between",r)),this}havingNotBetween(e,r){return this.andHavingNotBetween(e,r)}andHavingNotBetween(e,r){return this.havingNodes.push(new Z(e,"and",false,"not between",r)),this}orHavingNotBetween(e,r){return this.havingNodes.push(new Z(e,"or",false,"not between",r)),this}havingExists(e){return this.andHavingExists(e)}andHavingExists(e){return this.pushHavingExists("and",e,false)}orHavingExists(e){return this.pushHavingExists("or",e,false)}havingNotExists(e){return this.andHavingNotExists(e)}andHavingNotExists(e){return this.pushHavingExists("and",e,true)}orHavingNotExists(e){return this.pushHavingExists("or",e,true)}havingWrapped(e){return this.andHavingWrapped(e)}andHavingWrapped(e){return this.pushHavingGroup("and",e)}orHavingWrapped(e){return this.pushHavingGroup("or",e)}pushHavingIn(e,r,n,o){let s=o?"not in":"in";if(Array.isArray(n))return this.havingNodes.push(new Z(r,e,false,s,n)),this;let a=this.buildSubQuery(n);return this.havingNodes.push(new Z(r,e,false,s,[],false,a.extractQueryNodes())),this}pushHavingExists(e,r,n){let o=r instanceof E?r:new E(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 E(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 E)return e;let r=new E(this.model,this.sqlDataSource),n=e(r);return n!=null&&"extractQueryNodes"in n?n:r}andWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new ce(e,r,o.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new ce(e,r,o.extractQueryNodes(),"or")),this}pushTupleIn(e,r,n,o){if(!e.length)throw new f("QueryBuilder::whereIn","WHERE_TUPLE_COLUMNS_REQUIRED");if(!r.length)return this.whereNodes.push(new O(o==="in"?"false":"true",n,true,"=",[],true)),this;let s=new O(e.join(", "),n,o==="not in","in",r);return s.tupleColumns=e,this.whereNodes.push(s),this}andWhereGroup(e,r=false){let n=new E(this.model,this.sqlDataSource);n.isNestedCondition=true,e(n);let o=new Ae(n.whereNodes,"and",r);return this.whereNodes.push(o),this}orWhereGroup(e){let r=new E(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new Ae(r.whereNodes,"or");return this.whereNodes.push(n),this}};var Fr=class extends jr{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new F(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new F(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new F(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new F(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new F(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new F(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new F(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new F(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new F(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new F(t,"or",false,"raw",e)),this}whereJsonObject(t,e){return this.andWhereJsonObject(t,e)}andWhereJsonObject(t,e){return this.whereNodes.push(new F(t,"and",false,"=",e)),this}orWhereJsonObject(t,e){return this.whereNodes.push(new F(t,"or",false,"=",e)),this}whereNotJsonObject(t,e){return this.andWhereNotJsonObject(t,e)}andWhereNotJsonObject(t,e){return this.whereNodes.push(new F(t,"and",true,"=",e)),this}orWhereNotJsonObject(t,e){return this.whereNodes.push(new F(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 F(t,"and",false,"contains",e)),this}orWhereJsonSupersetOf(t,e){return this.whereNodes.push(new F(t,"or",false,"contains",e)),this}whereJsonNotSupersetOf(t,e){return this.andWhereJsonNotSupersetOf(t,e)}andWhereJsonNotSupersetOf(t,e){return this.whereNodes.push(new F(t,"and",true,"contains",e)),this}orWhereJsonNotSupersetOf(t,e){return this.whereNodes.push(new F(t,"or",true,"contains",e)),this}whereJsonSubsetOf(t,e){return this.andWhereJsonSubsetOf(t,e)}andWhereJsonSubsetOf(t,e){return this.whereNodes.push(new F(t,"and",false,"subset",e)),this}orWhereJsonSubsetOf(t,e){return this.whereNodes.push(new F(t,"or",false,"subset",e)),this}whereJsonNotSubsetOf(t,e){return this.andWhereJsonNotSubsetOf(t,e)}andWhereJsonNotSubsetOf(t,e){return this.whereNodes.push(new F(t,"and",true,"subset",e)),this}orWhereJsonNotSubsetOf(t,e){return this.whereNodes.push(new F(t,"or",true,"subset",e)),this}whereJsonHasNone(t,e){return this.andWhereJsonHasNone(t,e)}andWhereJsonHasNone(t,e){return this.whereNodes.push(new F(t,"and",false,"has none",e)),this}orWhereJsonHasNone(t,e){return this.whereNodes.push(new F(t,"or",false,"has none",e)),this}pushJsonPath(t,e,r,n,o,s){let a=new F(e,t,s,"path",o,false,r,n);this.whereNodes.push(a);}};var zh=["postgres","cockroachdb","sqlite"],E=class i extends Fr{constructor(e,r){super(e,r);this.isNestedCondition=false;this._interpreterUtils=null;this.insertNode=null;this.insertNodeSource=void 0;this.onDuplicateNode=null;this.insertConflictConfig=null;this.updateNode=null;this.updateFromNode=null;this.deleteNode=null;this.deleteUsingNode=null;this.returningNode=null;this.truncateNode=null;this.replicationMode=null;this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.comments=[],this.hints=[],this.astParser=new b(this.model,this.dbType);}get interpreterUtils(){return this._interpreterUtils||(this._interpreterUtils=new h(this.model)),this._interpreterUtils}setReplicationMode(e){return this.replicationMode=e,this}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof i)&&typeof e[1]=="string"){let[r,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 G(a.extractQueryNodes(),n)),this}return this.selectNodes.push(new G(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=>Y(e,r,n,this.dbType,"rows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery,sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}))}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async pluck(e){return (await this.many()).map(n=>n[e])}async value(e){let r=await this.limit(1).many();if(!(!r||!r.length))return r[0][e]}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async oneOrFail(){let e=await this.one();if(!e)throw new f("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 wr(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 f(this.model.name+"::paginateWithCursor","ORDER_BY_REQUIRED");let n=this.orderByNodes;if(n.some(c=>c.isRawValue))throw new f(this.model.name+"::paginateWithCursor","ORDER_BY_RAW_NOT_SUPPORTED");if(n.some(c=>c.nulls))throw new f(this.model.name+"::paginateWithCursor","ORDER_BY_NULLS_WITH_CURSOR_NOT_SUPPORTED");let o=n.map(c=>c.column),s=n[0].direction==="desc"?"<":">";if(r){let c=Array.isArray(r.value)?r.value:[r.value];this.andWhere(p=>{for(let g=0;g<o.length;g++){let y=g;p.orWhere(T=>{for(let w=0;w<y;w++)T.where(o[w],"=",c[w]);T.where(o[y],s,c[y]);});}});}this.limit(e+1);let a=await this.many(),l=a.length>e,u=l?a.slice(0,e):a,d=u[u.length-1],m=o.map(c=>c.includes(".")?c.slice(c.lastIndexOf(".")+1):c);return {data:u,hasMore:l,nextCursor:d?{key:m.length===1?m[0]:m,value:m.length===1?d[m[0]]:m.map(c=>d[c])}:null}}lockForUpdate(e={}){return this.lockQueryNodes.push(new rt("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new rt("for_share",e.skipLocked,e.noWait)),this}forNoKeyUpdate(e={}){return this.assertPgLockStrength("forNoKeyUpdate","FOR NO KEY UPDATE"),this.lockQueryNodes.push(new rt("for_no_key_update",e.skipLocked,e.noWait)),this}forKeyShare(e={}){return this.assertPgLockStrength("forKeyShare","FOR KEY SHARE"),this.lockQueryNodes.push(new rt("for_key_share",e.skipLocked,e.noWait)),this}assertPgLockStrength(e,r){if(this.dbType!=="postgres")throw new f(`QueryBuilder::${e}`,`LOCK_STRENGTH_NOT_SUPPORTED_IN_${this.dbType.toUpperCase()}`,new Error(`${r} is only supported by postgres`))}timeout(e,r={}){return this.queryTimeout={ms:e,cancel:r.cancel??false},this}queryContext(e){return this.queryContextOptions={...this.queryContextOptions,...e},this}debug(e=true){return this.shouldLogQuery=e,this}comment(e){return this.assertValidSqlComment(e),this.comments.push(e),this}hintComment(e){this.assertValidSqlComment(e);let r=e.slice(3,-2).trim(),n=this.hints[0];return this.hints=[n?`${n.slice(0,-2).trimEnd()} ${r} */`:`/*+ ${r} */`],this}clearComment(){return this.comments=[],this}clearHintComment(){return this.hints=[],this}assertValidSqlComment(e){let r=()=>{throw new f("QueryBuilder::comment","INVALID_SQL_COMMENT")};(!e.trim().length||e.includes("?"))&&r();let n=(this.dbType==="mysql"||this.dbType==="mariadb")&&e.startsWith("#");if(e.startsWith("--")||n){/[\r\n]/.test(e)&&r();return}if(e.startsWith("/*")&&e.endsWith("*/")&&e.length>=4){let o=e.slice(2,-2);(o.includes("/*")||o.includes("*/"))&&r();return}r();}resolveSetOperationOptions(e,r){return {bindings:Array.isArray(e)?e:void 0,wrap:r?.wrap??e?.wrap}}union(e,r,n){let{bindings:o,wrap:s}=this.resolveSetOperationOptions(r,n);if(typeof e=="string")return this.unionNodes.push(new Pe(e,false,"union",o)),this.unionNodes[this.unionNodes.length-1].wrap=s,this;let l=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes(),u=new Pe(l);return u.wrap=s,this.unionNodes.push(u),this}unionAll(e,r,n){let{bindings:o,wrap:s}=this.resolveSetOperationOptions(r,n);if(typeof e=="string"){let d=new Pe(e,true,"union",o);return d.wrap=s,this.unionNodes.push(d),this}let l=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes(),u=new Pe(l,true);return u.wrap=s,this.unionNodes.push(u),this}intersect(e,r,n){let{bindings:o,wrap:s}=this.resolveSetOperationOptions(r,n),a=new Pe(this.resolveSetOperationNodes(e),false,"intersect",o);return a.wrap=n?.wrap??r?.wrap,this.unionNodes.push(a),this}except(e,r,n){let{bindings:o,wrap:s}=this.resolveSetOperationOptions(r,n),a=new Pe(this.resolveSetOperationNodes(e),false,"except",o);return a.wrap=n?.wrap??r?.wrap,this.unionNodes.push(a),this}resolveSetOperationNodes(e){return typeof e=="string"?e:(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes()}increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?wt(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 J(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?wt(r.total):0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?wt(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?wt(r.total):0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?wt(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")&&C.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:Sr(e,r,a),data:s}}table(e,r){if(typeof e=="function"){if(!r)throw new f("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 J(a,r),this}return this.fromNode=new J(e,r),this}withSchema(e){return this.schemaName=e,this}fromRaw(e,r=[]){return this.fromNode=new J(new M(e,r)),this}fromOnly(e=true){if(this.dbType!=="postgres")throw new f("QueryBuilder::fromOnly","ONLY_NOT_SUPPORTED");return this.fromNode.only=e,this}with(e,r,n){let o=Array.isArray(r)?r:void 0,s=Array.isArray(r)?n:r,a=new i(this.model,this.sqlDataSource),l=s(a),u=l!=null&&"extractQueryNodes"in l?l:a;return this.withNodes.push(new nt("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 nt("recursive",e,s.extractQueryNodes())),this}withMaterialized(e,r){if(!zh.includes(this.dbType))throw new f("QueryBuilder::withMaterialized","MATERIALIZED_CTE_NOT_SUPPORTED",new Error(`MATERIALIZED CTE is not supported by ${this.dbType}`));let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new nt("materialized",e,s.extractQueryNodes())),this}withNotMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new f("QueryBuilder::withNotMaterialized","NOT_MATERIALIZED_CTE_NOT_SUPPORTED",new Error(`NOT MATERIALIZED CTE is not supported by ${this.dbType}`));let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new nt("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 De(()=>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((g,y)=>[g,a[y]])),u=this.insertConflictConfig;if(this.insertNode=new re(this.fromNode,[l],u?void 0:r,u?true:o),u&&this.dbType==="mssql"){let g=await this.executeMssqlMergeRaw([l],u.conflictColumns,u.columnsToUpdate,{updateOnConflict:u.mode==="update",returning:r},[e]);return o?void 0:g[0]}let{sql:d,bindings:m}=this.astParser.parse(this.extractWriteNodes()),c=await this.getSqlDataSource("write"),p=await Y(d,m,c,this.dbType,"rows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery,sqlLiteOptions:{typeofModel:this.model,mode:u?"raw":"insertOne",models:[e]}});if(!o)return Array.isArray(p)&&p.length?p[0]:p},this.buildInsertConflictCommit(r),this.interpreterUtils.filterComputedColumns(Object.keys(e)),"QueryBuilder::insert")}insertMany(e,r){this.assertWriteClausesSupported("QueryBuilder::insertMany");let n=e.map(s=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(s).map(a=>[a,s[a]])))),o=!r||r.length===0;return this.insertNodeSource=void 0,this.insertConflictConfig=null,this.onDuplicateNode=null,this.insertNode=new re(this.fromNode,n,r,o),new De(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{if(!e.length)return o?void 0:[];let s=await Promise.all(e.map(async c=>{let{columns:p,values:g}=this.interpreterUtils.prepareColumns(Object.keys(c),Object.values(c),"insert",this.dbType);return Object.fromEntries(p.map((y,T)=>[y,g[T]]))})),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"),m=await Y(l,u,d,this.dbType,"rows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery,sqlLiteOptions:{typeofModel:this.model,mode:a?"raw":"insertMany",models:s}});if(!o)return m},this.buildInsertConflictCommit(r),e.length?this.interpreterUtils.filterComputedColumns(Object.keys(e[0])):[],"QueryBuilder::insertMany")}async batchInsert(e,r={}){let n=this.resolveBatchSize(r.chunkSize),o=[];for(let s=0;s<e.length;s+=n){let a=e.slice(s,s+n),l=r.returning?.length?await this.insertMany(a,r.returning):await this.insertMany(a);l&&o.push(...l);}return o}resolveBatchSize(e){let r=e??500;if(!Number.isInteger(r)||r<1)throw new f("QueryBuilder::batchInsert","INVALID_BATCH_SIZE");return r}upsert(e,r,n={updateOnConflict:true}){return this.buildRawUpsert([{...r,...e}],Object.keys(r),this.interpreterUtils.filterComputedColumns(Object.keys(e)),n)}upsertMany(e,r,n,o={updateOnConflict:true}){return this.buildRawUpsert(n,e,this.interpreterUtils.filterComputedColumns(r),o)}buildRawUpsert(e,r,n,o){let s=o.returning?.length?[...o.returning]:void 0,a=s?this.insertMany(e,s):this.insertMany(e),l=o.updateOnConflict??true?a.onConflict(r).merge(n):a.onConflict(r).ignore();return new ie(()=>l.unWrap(),()=>l.toSql(),()=>l.toQuery(),async()=>{let u=await l;return Array.isArray(u)?u:[u]})}buildInsertConflictCommit(e){return r=>{this.insertConflictConfig=r;let n=r.conflictColumns.length===0&&!r.conflictTargetRaw&&!r.conflictConstraint,o=this.dbType==="mysql"||this.dbType==="mariadb";if(r.conflictTargetRaw&&(o||this.dbType==="mssql"))throw new f("QueryBuilder::onConflict",`NOT_SUPPORTED_IN_${this.dbType.toUpperCase()}`,new Error(`${this.dbType} cannot express a raw ON CONFLICT target; pass the conflict columns`));if(r.conflictConstraint&&this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new f("QueryBuilder::onConflict",`NOT_SUPPORTED_IN_${this.dbType.toUpperCase()}`,new Error(`${this.dbType} cannot name a constraint in ON CONFLICT; only PostgreSQL and CockroachDB can`));if(n&&this.dbType==="mssql")throw new f("QueryBuilder::onConflict","NOT_SUPPORTED_IN_MSSQL",new Error("MSSQL cannot express a target-less ON CONFLICT; provide the conflict columns"));let s=n&&o;if(this.insertNode=new re(this.fromNode,this.insertNode?.records??[],void 0,true,false,{source:this.insertNode?.source,targetColumns:this.insertNode?.targetColumns}),this.onDuplicateNode=this.dbType==="mssql"||s?null:new ve(this.model.table,r.conflictColumns,r.columnsToUpdate,r.mode,e?.length?e:void 0),!!this.onDuplicateNode&&(this.onDuplicateNode.conflictTargetRaw=r.conflictTargetRaw,this.onDuplicateNode.conflictConstraint=r.conflictConstraint,r.mergeWhere)){if(o||this.dbType==="mssql")throw new f("QueryBuilder::merge","MERGE_WHERE_NOT_SUPPORTED",new Error(`${this.dbType} has no WHERE clause on its conflict update`));let a=new i(this.model,this.sqlDataSource);a.isNestedCondition=true,r.mergeWhere(a),this.onDuplicateNode.whereNodes=a.whereNodes;}}}insertFrom(e,r){this.assertWriteClausesSupported("QueryBuilder::insertFrom");let n=Array.isArray(e),o=n?e:void 0,s=n?r:e,a=typeof s=="function"?s(new i(this.model,this.sqlDataSource)):s,l=a!=null&&"extractQueryNodes"in a?a:s;return this.buildInsertFrom(l.extractQueryNodes(),o)}buildInsertFrom(e,r){return this.insertNodeSource=e,this.insertConflictConfig=null,this.onDuplicateNode=null,this.insertNode=new re(this.fromNode,[],void 0,true,false,{source:e,targetColumns:r}),new De(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:n,bindings:o}=this.astParser.parse(this.extractWriteNodes()),s=await this.getSqlDataSource("write"),a=await Y(n,o,s,this.dbType,"rows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery});return Array.isArray(a)?a:[a]},this.buildInsertConflictCommit(),r?this.interpreterUtils.filterComputedColumns(r):[],"QueryBuilder::insertFrom")}async executeMssqlMergeRaw(e,r,n,o,s){if(!e.length)return [];let a=Object.keys(e[0]),l=this.interpreterUtils.formatStringColumn("mssql",this.model.table),u=W=>this.interpreterUtils.formatStringColumn("mssql",W),d=[],m=e.map(W=>`select ${a.map(B=>(d.push(W[B]),`@${d.length}`)).join(", ")}`),c=a.map(u).join(", "),p=m.join(" union all "),g=r.map(W=>`target.${u(W)} = source.${u(W)}`).join(" and "),y=n.filter(W=>!r.includes(W)).map(W=>`target.${u(W)} = source.${u(W)}`).join(", "),T=a.map(u).join(", "),w=a.map(W=>`source.${u(W)}`).join(", "),N=o.returning&&o.returning.length?o.returning.map(W=>`inserted.${u(W)}`).join(", "):a.map(W=>`inserted.${u(W)}`).join(", "),R=(o.updateOnConflict??true)&&y?`when matched then update set ${y}`:"",D=`merge into ${l} as target using (${p}) as source (${c}) on ${g} ${R} when not matched then insert (${T}) values (${w}) output ${N};`,I=await this.getSqlDataSource("write"),A=await Y(D,d,I,this.dbType,"rows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery,sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(A)?A:[A]}updateFrom(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb"&&this.dbType!=="mssql")throw new f("QueryBuilder::updateFrom","UPDATE_FROM_NOT_SUPPORTED");return this.updateFromNode=this.buildFromSource("QueryBuilder::updateFrom",e,r),this}deleteUsing(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new f("QueryBuilder::deleteUsing","DELETE_USING_NOT_SUPPORTED");return this.deleteUsingNode=this.buildFromSource("QueryBuilder::deleteUsing",e,r),this}buildFromSource(e,r,n){if(typeof r!="function")return new J(r,n);if(!n)throw new f(e,"MISSING_ALIAS_FOR_SUBQUERY");let o=new i(this.model,this.sqlDataSource),s=r(o),a=s!=null&&"extractQueryNodes"in s?s:o;return new J(a.extractQueryNodes(),n)}update(e,r,n){let o=typeof e=="string"?{[e]:r}:e,s=typeof e=="string"?n:r;this.assertWriteClausesSupported("QueryBuilder::update",{allowCte:false});let a=this.interpreterUtils.stripComputedFromData(o),l=Object.keys(a),u=Object.values(a);if(!l.length)throw new f("QueryBuilder::update","UPDATE_REQUIRES_COLUMNS");this.updateNode=new Ee(this.fromNode,l,u),this.returningNode=this.buildReturningNode("update",s);let d=this.returningNode!==null;return new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:m,values:c}=this.interpreterUtils.prepareColumns(l,u,"update",this.dbType);this.updateNode=new Ee(this.fromNode,m,c);let{sql:p,bindings:g}=this.astParser.parse(this.extractWriteNodes()),y=await this.getSqlDataSource("write");return Y(p,g,y,this.dbType,d?"rows":"affectedRows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery,sqlLiteOptions:{typeofModel:this.model,mode:d?"fetch":"affectedRows"}})})}buildReturningNode(e,r){return !r?.length||!this.interpreterUtils.dialectEmitsReturning(this.dbType)?null:new bt(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 f("QueryBuilder::truncate","CTE_NOT_SUPPORTED_ON_TRUNCATE");return this.truncateNode=new Ct(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 Y(r,n,o,this.dbType,"rows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery});})}delete(e){this.assertWriteClausesSupported("QueryBuilder::delete",{allowCte:false}),this.deleteNode=new gt(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 Y(n,o,s,this.dbType,r?"rows":"affectedRows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery,sqlLiteOptions:{typeofModel:this.model,mode:r?"fetch":"affectedRows"}})})}softDelete(e={}){this.assertWriteClausesSupported("QueryBuilder::softDelete",{allowCte:false});let{column:r="deletedAt",value:n=ut()}=e||{};return this.updateNode=new Ee(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 Ee(this.fromNode,o,s);let{sql:a,bindings:l}=this.astParser.parse(this.extractWriteNodes()),u=await this.getSqlDataSource("write");return Y(a,l,u,this.dbType,"affectedRows",{timeout:this.queryTimeout,queryContext:this.queryContextOptions,shouldLog:this.shouldLogQuery,sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return Kt(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),n=Wt(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${n}`:n,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new G("*")]);let{sql:e,bindings:r}=this.astParser.parse(this.extractQueryNodes());return {sql:this.withQuery?`${this.withQuery} ${e}`:e,bindings:[...r||[]]}}clone(){let e=new i(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=j(this.modelSelectedColumns),e.distinctNode=j(this.distinctNode),e.distinctOnNode=j(this.distinctOnNode),e.selectNodes=j(this.selectNodes),e.withQuery=j(this.withQuery),e.joinNodes=j(this.joinNodes),e.whereNodes=j(this.whereNodes),e.groupByNodes=j(this.groupByNodes),e.havingNodes=j(this.havingNodes),e.orderByNodes=j(this.orderByNodes),e.lockQueryNodes=j(this.lockQueryNodes),e.unionNodes=j(this.unionNodes),e.withNodes=j(this.withNodes),e.comments=[...this.comments],e.hints=[...this.hints],e.schemaName=this.schemaName,e.fromNode=j(this.fromNode),e.limitNode=j(this.limitNode),e.offsetNode=j(this.offsetNode),e.returningNode=j(this.returningNode),e.isNestedCondition=this.isNestedCondition,e}clear(){let e=new i(this.model,this.sqlDataSource);return this.fromNode.alias&&e.table(e.model.table,this.fromNode.alias),e}clearLockQuery(){return this.lockQueryNodes=[],this}clearUnionQuery(){return this.unionNodes=[],this}clearWithQuery(){return this.withNodes=[],this}assertWriteClausesSupported(e,{allowCte:r=true}={}){let n=this.dbType==="mysql"||this.dbType==="mariadb";if(!r&&this.withNodes.length&&this.dbType==="mariadb")throw new f(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 f(e,"SELECT_ONLY_CLAUSE_ON_WRITE");if(!n&&this.joinNodes.length>0)throw new f(e,"JOIN_NOT_SUPPORTED_ON_WRITE");let s=this.orderByNodes.length>0||this.limitNode!==null;if(this.offsetNode||!n&&s)throw new f(e,"ORDER_BY_LIMIT_NOT_SUPPORTED_ON_WRITE")}extractWriteNodes(){if(this.insertNode){let e=this.dbType==="mysql"||this.dbType==="mariadb";this.insertNode.withNodes=e&&this.withNodes.length?this.withNodes:void 0,this.insertNode.source=this.insertNodeSource;let r=(this.dbType==="mysql"||this.dbType==="mariadb")&&!!this.insertConflictConfig&&this.insertConflictConfig.conflictColumns.length===0&&this.insertConflictConfig.mode==="ignore";return this.insertNode.ignoreInto=r,this.insertNode.keyword=r?"insert ignore into":"insert into",this.insertNode.disambiguateSource=this.dbType==="sqlite"&&!!this.insertNodeSource&&!!this.onDuplicateNode,[...e?[]:this.withNodes,this.insertNode,this.onDuplicateNode].filter(Boolean)}return this.updateNode?(this.updateNode.joinNodes=this.joinNodes,this.updateNode.fromSourceNode=this.updateFromNode??void 0,[...this.withNodes,...this.withReturningNode([this.updateNode,...this.whereNodes,...this.orderByNodes,this.limitNode].filter(Boolean))]):this.deleteNode?(this.deleteNode.joinNodes=this.joinNodes,this.deleteNode.usingNode=this.deleteUsingNode??void 0,this.deleteNode.keyword=this.joinNodes.length?"delete":"delete from",[...this.withNodes,...this.withReturningNode([this.deleteNode,...this.whereNodes,...this.orderByNodes,this.limitNode].filter(Boolean))]):this.truncateNode?[this.truncateNode]:[]}extractQueryNodes(){if(this.schemaName){this.fromNode&&typeof this.fromNode.table=="string"&&(this.fromNode.schema=this.schemaName);for(let n of this.joinNodes)n.schema=this.schemaName;}if(this.insertNode||this.updateNode||this.deleteNode||this.truncateNode)return this.extractWriteNodes();this.selectNodes.length||(this.selectNodes=[new G("*")]);let e=this.comments.map(n=>new Ut(n)),r=this.hints.length?[new Ut(this.hints.join(" "),true)]:[];return [...this.withNodes,...e,this.distinctNode,this.distinctOnNode,...this.selectNodes,...r,this.fromNode,...this.joinNodes,...this.whereNodes,...this.groupByNodes,...this.havingNodes,...this.orderByNodes,this.limitNode,this.offsetNode,...this.lockQueryNodes,...this.unionNodes].filter(Boolean)}clearForFunctions(){return this.clearSelect(),this.clearGroupBy(),this.clearOrderBy(),this.clearLimit(),this.clearOffset(),this}isMssqlTransaction(){return this.sqlDataSource.type==="mssql"&&!!this.sqlDataSource.sqlConnection}async executePaginateQueries(e,r){if(this.isMssqlTransaction()){let n=await e(),o=await r();return [n,o]}return Promise.all([e(),r()])}async getSqlDataSource(e){return this.replicationMode?this.replicationMode==="master"?this.sqlDataSource:e==="write"?this.sqlDataSource:this.sqlDataSource.getSlave()||this.sqlDataSource:e==="read"?this.sqlDataSource.getSlave()||this.sqlDataSource:this.sqlDataSource}async execSqlWithSlaveHandling(e,r){let n=await this.getSqlDataSource(e);if(!(n!==this.sqlDataSource))return r(n);try{return await r(n)}catch(s){let a=s instanceof Error?s:new Error(String(s)),l=this.sqlDataSource.getOnSlaveServerFailure();if(l)return await l(a,{host:n.host,port:n.port,username:n.username,password:n.password,database:n.database,type:n.getDbType()}),await r(this.sqlDataSource);throw a}}};function zy(i,t){return t.strategy&&t.strategy!=="auto"?t.strategy:Gh(i)}function Gh(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 Ll=ne(),Ve=class i extends E{constructor(e,r){super(e,r);this.loadOptions={strategy:"auto"};this.sqlModelManagerUtils=new jt(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 G(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 f(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 wr(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})}async batchInsert(e,r={}){this.assertWriteClausesSupported("ModelQueryBuilder::batchInsert");let n=this.resolveBatchSize(r.chunkSize),o=[];for(let s=0;s<e.length;s+=n){let a=await this.insertMany(e.slice(s,s+n),{returning:r.returning,trx:r.trx});o.push(...a);}return r.returning?.length?o:e.length}insertFrom(e,r){this.assertWriteClausesSupported("ModelQueryBuilder::insertFrom");let n=Array.isArray(e),o=n?e:void 0,s=n?r:e,a=typeof s=="function"?s(new i(this.model,this.sqlDataSource)):s,l=a!=null&&"extractQueryNodes"in a?a:s;return this.buildInsertFrom(l.extractQueryNodes(),o)}upsert(e,r,n={updateOnConflict:true}){this.assertWriteClausesSupported("ModelQueryBuilder::upsert");let o=this.getModelManager(n.trx),s=Object.keys(e),a=Object.keys(r),l={...e,...r};return o.upsertMany(s,a,[l],{updateOnConflict:n.updateOnConflict??true,returning:n.returning}).then(u=>Array.isArray(u)?u[0]:u)}upsertMany(e,r,n={updateOnConflict:true}){this.assertWriteClausesSupported("ModelQueryBuilder::upsertMany");let o=this.getModelManager(n.trx),s=r.length>0?Object.keys(r[0]):[];return o.upsertMany(e,s,r,{updateOnConflict:n.updateOnConflict??true,returning:n.returning})}getModelManager(e){let r=e?e.sql:this.sqlDataSource.getTransactionBoundSqlDataSource()??this.sqlDataSource;return new tt(this.model,r)}async find(e){return this.getModelManager().find(e)}async findOne(e){return this.getModelManager().findOne(e)}async findOneOrFail(e){return this.getModelManager().findOneOrFail(e)}async findOneByPrimaryKey(e,r){return this.getModelManager().findOneByPrimaryKey(e,r)}async updateRecord(e,r,n){return this.getModelManager(n?.trx).updateRecord(e,r,n)}async deleteRecord(e,r){return this.getModelManager(r?.trx).deleteRecord(e)}async save(e,r){let n=this.model.primaryKey;if(!n)throw new f(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 f(`${this.model.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let l=V(a.leftForeignKey,s.caseConvention||this.model.databaseCaseConvention),u=V(a.rightForeignKey,s.caseConvention||this.model.databaseCaseConvention),d=n.map((p,g)=>({[l]:r[this.model.primaryKey],[u]:p[a.model.primaryKey],...o?o(p,g):{}}));class m extends de{static get table(){return a.throughModel}}m.databaseCaseConvention="preserve",m.modelCaseConvention="preserve",await new tt(m,s.trx?s.trx.sql:this.sqlDataSource).insertMany(d);}truncate(e={}){return super.truncate(e)}update(e,r,n){let o=typeof e=="string",s=o?{[e]:r}:e,l=((o?n:r)??{}).returning,u=super.update(s,l);return new ie(()=>u.unWrap(),()=>u.toSql(),()=>u.toQuery(),async()=>{if(!l||!this.returningNode)return u;let d=await u;return he(d,this.model,l)})}softDelete(e={}){let r=super.softDelete(e);return new ie(()=>r.unWrap(),()=>r.toSql(),()=>r.toQuery(),async()=>r)}delete(e={}){let r=e.returning,n=super.delete(r);return new ie(()=>n.unWrap(),()=>n.toSql(),()=>n.toQuery(),async()=>{if(!r||!this.returningNode)return n;let o=await n;return 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:Sr(e,r,a),data:s}}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof E)&&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=j(this.relationQueryBuilders),e}async processRelationsRecursively(e){await Promise.all(this.relationQueryBuilders.filter(r=>r.isRelationQueryBuilder).map(async r=>{let n=await this.getRelatedModelsForRelation(r,r.relation,e);this.mapRelatedModelsToModels(r.relation,e,n);}));}async processRelationsWithStrategy(e){let r=e.length,n=this.relationQueryBuilders.filter(s=>s.isRelationQueryBuilder),o=async s=>{let a=zy({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(j(s));else for(let[s,a]of this.model.getColumnsByDatabaseName())a.expression||o.selectNodes.push(new G(`${this.model.table}.${s}`,void 0,void 0,true));for(let s of this.whereNodes){let a=j(s);this.qualifyWhereNodeColumns(a,this.model.table),o.whereNodes.push(a);}for(let s of this.groupByNodes)o.groupByNodes.push(j(s));for(let s of this.orderByNodes)o.orderByNodes.push(j(s));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(o.limitNode=j(this.limitNode)),this.offsetNode&&(o.offsetNode=j(this.offsetNode))),r.type){case "hasOne":case "hasMany":o.leftJoin(r.model.table,`${this.model.table}.${this.model.primaryKey}`,`${r.model.table}.${r.foreignKey}`);break;case "belongsTo":o.leftJoin(r.model.table,`${this.model.table}.${r.foreignKey}`,`${r.model.table}.${r.model.primaryKey}`);break;case "manyToMany":{let 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(j(s));for(let s of e.orderByNodes)o.orderByNodes.push(j(s));return o}selectRelationColumnsWithAlias(e,r,n,o){let s=r.columnName,a=r.model,l=a.getColumnsByName(),u=a.getColumnsByDatabaseName(),d=n.selectNodes.filter(c=>typeof c.column=="string"),m=d.some(c=>c.column==="*"||c.column.endsWith(".*"));if(d.length===0||m)for(let[c,p]of u)e.selectRaw(`${a.table}.${c} as ${s}${o}${p.columnName}`);else for(let c of d){let p=c.column,g=p.includes(".")?p.split(".").pop():p,y=u.get(g)||l.get(g),T=y?.databaseName??g,w=c.alias??y?.columnName??g;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 m=d[this.model.primaryKey];u.has(m)||u.set(m,[]);let c=this.extractRelationDataFromRow(d,s,o);c&&(this.serializeRelationData(c,l),u.get(m).push(c));}),r.forEach(d=>{let m=d[this.model.primaryKey];d[s]=u.get(m)||[];});}else {let u=new Map;e.forEach(d=>{let m=d[this.model.primaryKey];if(!u.has(m)){let c=this.extractRelationDataFromRow(d,s,o);c&&(this.serializeRelationData(c,l),u.set(m,c));}}),r.forEach(d=>{let m=d[this.model.primaryKey];d[s]=u.get(m)||null;});}}extractRelationDataFromRow(e,r,n){let o=`${r}${n}`,s={},a=false,l=false;for(let u of Object.keys(e))if(u.startsWith(o)){let d=u.substring(o.length);s[d]=e[u],a=true,e[u]!==null&&e[u]!==void 0&&(l=true);}return a&&l?s:null}qualifyWhereNodeColumns(e,r){if(e instanceof O)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof ce)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof 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 f(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let o=new Map;n.forEach(c=>{let p=c[e.foreignKey];p&&o.set(String(p),c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=null;return}let g=o.get(String(p));c[e.columnName]=g||null;});break;case "belongsTo":let s=new Map;n.forEach(c=>{if(!e.model.primaryKey)throw new f(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let p=c[e.model.primaryKey];p&&s.set(String(p),c);}),r.forEach(c=>{let p=c[e.foreignKey];if(!p){c[e.columnName]=null;return}let g=s.get(String(p));c[e.columnName]=g||null;});break;case "hasMany":if(!this.model.primaryKey)throw new f(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;n.forEach(c=>{let p=c[e.foreignKey];if(!p)return;let g=String(p);a.has(g)||a.set(g,[]),a.get(g).push(c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=[];return}let g=a.get(String(p))||[];c[e.columnName]=g;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new f(this.model.name+"::mapRelatedModelsToModels::manyToMany","MODEL_HAS_NO_PRIMARY_KEY");let l=e,u=new Map,d=l.leftForeignKey,m=this.modelColumnsMap.get(d)||this.modelColumnsDatabaseNames.get(d)||V(d,this.model.modelCaseConvention);n.forEach(c=>{let p=c[m];if(p==null)return;let g=String(p);u.has(g)||u.set(g,[]),delete c[m],u.get(g).push(c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=[];return}let g=u.get(String(p))||[];c[e.columnName]=g;});break;default:throw new f(this.model.name+"::mapRelatedModelsToModels","UNSUPPORTED_RELATION_TYPE")}}async getRelatedModelsForRelation(e,r,n){return this.getRelatedModelsQueryForRelation(e,r,n).many()}getRelatedModelsQueryForRelation(e,r,n){let o=this.getFilterValuesFromModelsForRelation(r,n);switch(r.type){case "belongsTo":case "hasOne":return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,o);case "hasMany":let s=e.limitNode?.limit,a=e.offsetNode?.offset;if(!s&&!a)return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,o);let l=Ke(Ll.crypto.randomBytes(6)),u=`${r.model.table}_cte_${l}`,d=e.orderByNodes.map(A=>A.isRawValue?A.column:`${this.interpreterUtils.formatStringColumn(this.dbType,A.column)} ${A.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let m=e.with(u,A=>A.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${d}) as rn_${l}`).whereIn(r.foreignKey,o));s&&m.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&m.whereRaw(`rn_${l} > ${a}`);let c=e.modelSelectedColumns.map(A=>jn(A,u,e.model.table));return m.select(...c).table(u);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new f(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!n.length)return e;let g=e.limitNode?.limit,y=e.offsetNode?.offset,T=e.modelSelectedColumns.length?e.modelSelectedColumns.map(A=>A.includes(".")?A:`${r.model.table}.${A}`):[`${r.model.table}.*`];if(!g&&!y)return e.select(...T).select([`${p.throughModel}.${p.leftForeignKey}`,p.leftForeignKey]).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o);let w=Ke(Ll.crypto.randomBytes(6)),N=`${r.model.table}_cte_${w}`,x=e.orderByNodes.map(A=>{if(A.isRawValue)return A.column;let W=A.column.includes(".")?A.column:`${r.model.table}.${A.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,W)} ${A.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let R=`${Ke(Ll.crypto.randomBytes(6))}_left_foreign_key`,D=e.with(N,A=>A.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 ${x}) as rn_${w}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o));g&&D.whereRaw(`rn_${w} <= ${g+(y||0)}`),y&&D.whereRaw(`rn_${w} > ${y}`);let I=T.map(A=>jn(A,N,e.model.table));return D.select(...I).select([`${N}.${R}`,p.leftForeignKey]).table(N);default:throw new f(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new f(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 f(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);default:throw new f(this.model.name+"::getFilterValuesFromModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}applyHavingRelatedFilter(e,r,n,o){let s=new h(r.model),a=new h(this.model),l=this.dbType;switch(r.type){case "hasOne":case "hasMany":{if(!this.model.primaryKey||!r.foreignKey)throw new f(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 f(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 f(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");e.joinNodes?.some(p=>!p.isRawValue&&p.table===u.throughModel&&p.type==="left")||e.leftJoin(u.throughModel,`${u.relatedModel}.${r.model.primaryKey}`,`${u.throughModel}.${u.rightForeignKey}`);let m=a.formatStringColumn(l,`${u.throughModel}.${u.leftForeignKey}`),c=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${m} = ${c}`),n&&typeof o=="number"&&e.groupByRaw(m).andHavingRaw(`count(*) ${n} ${o}`);return}default:throw new f(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}};var jl=class{constructor(t,e,r){this.sqlDataSource=t,this.typeofModel=e,this.modelData=r;}merge(t){this.modelData={...this.modelData,...t};}getQueryBuilder(){return new Ve(this.typeofModel,this.sqlDataSource)}async create(t){if(t<=0)return [];let e=this.getQueryBuilder();if(t===1)return await e.insert(this.modelData,{returning:["*"]});let r=Array.from({length:t});return await e.insertMany(r.map(()=>({...this.modelData})),{returning:["*"]})}},Yh=(i,t,e)=>new jl(i,t,e);var Mt=new Map,He=new Map,Ur=class{async get(t){return Mt.get(t)}async set(t,e,r){let n=He.get(t);if(n&&(clearTimeout(n),He.delete(t)),Mt.set(t,e),r){let o=setTimeout(()=>{Mt.delete(t),He.delete(t);},r);He.set(t,o);}}async invalidate(t){let e=He.get(t);e&&(clearTimeout(e),He.delete(t)),Mt.delete(t);}async invalidateAll(t){let e=Mt.keys();for(let r of e)if(r.startsWith(t)){let n=He.get(r);n&&(clearTimeout(n),He.delete(r)),Mt.delete(r);}}};me();var Gy=class{constructor(t){this.ioRedisOptions=t;}async getClient(){if(this.redisInstance)return this.redisInstance;let{default:t}=await import('ioredis').catch(()=>{throw C.error("RedisCacheAdapter::getClient ioredis driver not found and required for the RedisCacheAdapter"),new K("ioredis")});return this.redisInstance=new t(this.ioRedisOptions),this.redisInstance}async get(t){let r=await(await this.getClient()).get(t);if(r!=null)return this.deserializeData(r)}async set(t,e,r){let n=await this.getClient(),o=this.serializeData(e);if(o){if(r){await n.set(t,o,"PX",r);return}await n.set(t,o);}}async invalidate(t){await(await this.getClient()).del(t);}async invalidateAll(t){let e=await this.getClient(),r=await e.keys(`${t}:*`);for(let n of r)await e.del(n);}serializeData(t){if(t!=null){if(typeof t=="string")return t;if(Buffer.isBuffer(t))return t.toString("base64");if(typeof t=="object"||Array.isArray(t))try{return JSON.stringify(t)}catch(e){throw C.error("RedisCacheAdapter::set failed to serialize data"),e}return String(t)}}deserializeData(t){try{return JSON.parse(t)}catch{return t}}async disconnect(){let t=this.redisInstance;t&&(this.redisInstance=void 0,await t.quit());}};var te=ne(),P={DB_TYPE:te.readEnv("DB_TYPE"),DB_HOST:te.readEnv("DB_HOST"),DB_PORT:te.readEnv("DB_PORT"),DB_USER:te.readEnv("DB_USER"),DB_PASSWORD:te.readEnv("DB_PASSWORD"),DB_DATABASE:te.readEnv("DB_DATABASE"),DB_LOGS:te.readEnv("DB_LOGS")==="true",MIGRATION_PATH:te.readEnv("MIGRATION_PATH")||"database/migrations",REDIS_HOST:te.readEnv("REDIS_HOST"),REDIS_PORT:te.readEnv("REDIS_PORT"),REDIS_USERNAME:te.readEnv("REDIS_USERNAME"),REDIS_PASSWORD:te.readEnv("REDIS_PASSWORD"),REDIS_DATABASE:te.readEnv("REDIS_DATABASE"),MONGO_URL:te.readEnv("MONGO_URL"),MONGO_LOGS:te.readEnv("MONGO_LOGS")==="true",MSSQL_TRUST_SERVER_CERTIFICATE:te.readEnv("MSSQL_TRUST_SERVER_CERTIFICATE")==="true"||false},Zh=()=>{try{if(!te.fs.exists(".env"))return P;let i=te.fs.readFileSync(".env");if(!i)return P;new TextDecoder().decode(i).split(`
|
|
142
|
+
`).forEach(r=>{let[n,o]=r.split("="),s=n.trim(),a=o.trim();switch(s){case "DB_TYPE":P.DB_TYPE||(P.DB_TYPE=a);break;case "DB_HOST":P.DB_HOST||(P.DB_HOST=a);break;case "DB_PORT":P.DB_PORT||(P.DB_PORT=a);break;case "DB_USER":P.DB_USER||(P.DB_USER=a);break;case "DB_PASSWORD":P.DB_PASSWORD||(P.DB_PASSWORD=a);break;case "DB_DATABASE":P.DB_DATABASE||(P.DB_DATABASE=a);break;case "MIGRATION_PATH":P.MIGRATION_PATH||(P.MIGRATION_PATH=a||"database/migrations");break;case "REDIS_HOST":P.REDIS_HOST||(P.REDIS_HOST=a);break;case "REDIS_PORT":P.REDIS_PORT||(P.REDIS_PORT=a);break;case "REDIS_USERNAME":P.REDIS_USERNAME||(P.REDIS_USERNAME=a);break;case "REDIS_PASSWORD":P.REDIS_PASSWORD||(P.REDIS_PASSWORD=a);break;case "REDIS_DATABASE":P.REDIS_DATABASE||(P.REDIS_DATABASE=a);break;case "MONGO_URL":P.MONGO_URL||(P.MONGO_URL=a);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":P.MSSQL_TRUST_SERVER_CERTIFICATE||(P.MSSQL_TRUST_SERVER_CERTIFICATE=a==="true");break}});}catch{}finally{return P}},v=Zh();var Ot=class{constructor(t){switch(this.type=t?.type||v.DB_TYPE,this.type){case "mongo":this.handleMongoSource(t);break;case "cockroachdb":this.handleCockroachdbSource(t);break;case "postgres":this.handlePostgresSource(t);break;case "mariadb":case "mysql":this.handleMysqlSource(t);break;case "sqlite":this.handleSqliteSource(t);break;case "mssql":this.handleMssqlSource(t);break;default:throw new f(`Invalid database type: ${this.type}, please provide a valid database type in your input or in the .env file with the key DB_TYPE
|
|
143
|
+
Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}let e=gr(this.logs);e?.customLogger&&C.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||v.DB_HOST,this.port=+t?.port||+v.DB_PORT,this.username=t?.username||v.DB_USER,this.password=t?.password||v.DB_PASSWORD,this.database=t?.database||v.DB_DATABASE,this.logs=t?.logs||v.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||v.DB_HOST,this.port=+t?.port||+v.DB_PORT,this.username=t?.username||v.DB_USER,this.password=t?.password||v.DB_PASSWORD,this.database=t?.database||v.DB_DATABASE,this.logs=t?.logs||v.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||v.DB_HOST,this.port=+t?.port||+v.DB_PORT,this.username=t?.username||v.DB_USER,this.password=t?.password||v.DB_PASSWORD,this.database=t?.database||v.DB_DATABASE,this.logs=t?.logs||v.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||v.DB_DATABASE||":memory:",this.logs=t?.logs||v.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||v.MONGO_URL,this.logs=t?.logs||v.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||v.DB_HOST,this.port=+t?.port||+v.DB_PORT,this.username=t?.username||v.DB_USER,this.password=t?.password||v.DB_PASSWORD,this.database=t?.database||v.DB_DATABASE,this.logs=t?.logs||v.DB_LOGS||false,this.port||(this.port=1433);}};var be=class{constructor(t){this.options=t;}static async createDriver(t){throw new f("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};me();var Jt=class Jt extends be{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new Jt(this.mongoClient);let e=await import('mongodb').catch(()=>{throw new K("mongodb")});if(this.mongoClient=e.default??e,!this.mongoClient)throw new K("mongodb");return new Jt(this.mongoClient)}};Jt.mongoClient=null;var Vr=Jt;me();var Ht=class Ht extends be{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new Ht(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new K("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new K("mssql");return new Ht(this.mssqlClient)}};Ht.mssqlClient=null;var Jr=Ht;me();var zt=class zt extends be{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new zt(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new K("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new K("mysql2");return new zt(this.mysqlClient)}};zt.mysqlClient=null;var Hr=zt;me();var Gt=class Gt extends be{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new Gt(this.pgClient);let e=await import('pg').catch(()=>{throw new K("pg")});if("default"in e&&(e.default,this.pgClient=e.default??e),!this.pgClient)throw new K("pg");return new Gt(this.pgClient)}};Gt.pgClient=null;var zr=Gt;me();var Yt=class Yt extends be{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new Yt(this.sqlite3Client);let e=await import('sqlite3').catch(()=>{throw new K("sqlite3")});if(this.sqlite3Client=e.default??e,!this.sqlite3Client)throw new K("sqlite3");return new Yt(this.sqlite3Client)}};Yt.sqlite3Client=null;var Gr=Yt;var ae=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await Hr.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await zr.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await Gr.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await Vr.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await Jr.createDriver(),this.mssqlDriver;default:throw new f(`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}}};ae.mysqlDriver=null,ae.pgDriver=null,ae.sqliteDriver=null,ae.mssqlDriver=null,ae.mongodbDriver=null;var Fl=Symbol("mongoProperties");function Yr(){return (i,t)=>{let e=k.getMetadata(Fl,i)||[];e.push(t),k.defineMetadata(Fl,e,i);}}function Yy(i){return k.getMetadata(Fl,i.prototype)||[]}function Zy(){return {$annotations:{}}}var xt=class extends Le{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}};hu([Yr()],xt.prototype,"id");function Xh(i){return typeof i!="function"||!i.prototype}function eg(i){let t={id:i._id?.toString()};for(let e of Object.keys(i))e!=="_id"&&(t[e]=i[e]);return t}async function ze(i,t,e){if(!t)return null;if(Xh(i))return eg(t);let r=Zy(),n=Yy(i);return (!e||!e.length)&&(e=n),e.includes("id")||e.push("id"),r.$annotations||(r.$annotations={}),await Promise.all(Object.keys(t).map(async o=>{if(o==="_id"){r.id=t._id?.toString();return}if(!n.includes(o)){let a=V(o,i.modelCaseConvention);r.$annotations[a]=t[o];return}let s=V(o,i.modelCaseConvention);r[s]=t[o];})),Object.keys(r.$annotations).length||delete r.$annotations,await Promise.all(e.map(async o=>{if(o!=="id"&&!t.hasOwnProperty(o)){let s=V(o,i.modelCaseConvention);r[s]=null;}})),r}async function Zr(i,t,e){return (await Promise.all(t.map(async n=>await ze(i,n,e)))).filter(n=>n!==null)}var Xr=class{constructor(t,e,r,n=false){this.model=t,this.idObject={},this.whereObject={},this.logs=n,this.session,this.mongoDataSource=e,e.isConnected&&this.initCollection();}initCollection(){this.collection=this.mongoDataSource.getCurrentConnection().db().collection(this.model.collection);}async ensureInitialized(){await this.mongoDataSource.ensureConnected(),this.collection||this.initCollection();}async one(t={throwErrorOnNull:false}){await this.ensureInitialized(),t.ignoreHooks?.includes("beforeFetch")||this.model.beforeFetch?.(this);let e={...this.whereObject};Object.keys(this.idObject).length&&(e._id=this.idObject);let r=await this.collection.findOne(e,{projection:this.selectObject,session:this.session}),n=await ze(this.model,r,this.selectFields);return t.ignoreHooks?.includes("afterFetch")?n:(await(this.model.afterFetch?.([n])??[n]))[0]}async oneOrFail(t={throwErrorOnNull:true}){let e=await this.one(t);if(!e)throw new f("MongoQueryBuilder::oneOrFail","ROW_NOT_FOUND");return e}async many(t={}){await this.ensureInitialized(),t.ignoreHooks?.includes("beforeFetch")||this.model.beforeFetch?.(this);let e={...this.whereObject};Object.keys(this.idObject).length&&(e._id=this.idObject);let r=await this.collection.find(e,{projection:this.selectFields,sort:this.sortObject,limit:this.limitNumber,skip:this.offsetNumber,session:this.session}).toArray(),n=await Zr(this.model,r,this.selectFields);return t.ignoreHooks?.includes("afterFetch")?n:await(this.model.afterFetch?.(n)??n)}async insert(t,e={}){await this.ensureInitialized(),e.ignoreHooks||this.model.beforeInsert?.(t);let r=await this.collection.insertOne(t,{session:this.session});if(!e.returning)return {id:r.insertedId.toString()};let n=await this.collection.findOne({_id:r.insertedId});return await ze(this.model,n,this.selectFields)}async insertMany(t,e={}){await this.ensureInitialized(),e.ignoreHooks||this.model.beforeInsert?.(t);let r=await this.collection.insertMany(t,{session:this.session});if(!e.returning)return Object.values(r.insertedIds).map(o=>({id:o.toString()}));let n=await this.collection.find({_id:{$in:Object.values(r.insertedIds)}}).toArray();return await Zr(this.model,n,this.selectFields)}async update(t,e={}){if(await this.ensureInitialized(),e.ignoreHooks||this.model.beforeUpdate?.(this),(await this.collection.updateMany({_id:this.idObject,...this.whereObject},{$set:t,session:this.session})).modifiedCount===0)return [];let n=await this.collection.find({_id:Object.keys(this.idObject).length?this.idObject:void 0,...this.whereObject},{projection:this.selectFields}).toArray();return await Zr(this.model,n,this.selectFields)}async delete(t={}){await this.ensureInitialized(),t.ignoreHooks||this.model.beforeDelete?.(this),await this.collection.deleteMany(this.whereObject,{session:this.session});}async count(t={}){return await this.ensureInitialized(),t.ignoreHooks||this.model.beforeFetch?.(this),this.collection.countDocuments(this.whereObject,{session:this.session})}select(t){return this.selectFields=t,this.selectObject=t.reduce((e,r)=>(e[r]=1,e),{}),this}where(t,e,r){let n="$eq",o;typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="$eq");let s=se("mongodb");if(t==="id")return this.idObject={$eq:new s.ObjectId(o)},this;let a={[t]:{[n]:o}};return this.whereObject?(this.whereObject.$and||(this.whereObject.$and=[]),this.whereObject.$and.push(a)):this.whereObject={$and:[a]},this}andWhere(t,e,r){let n="$eq",o;typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="$eq");let s=se("mongodb"),a={[t]:{[n]:o}};return t==="id"?(this.idObject={$eq:new s.ObjectId(o)},this):(this.whereObject?(this.whereObject.$and||(this.whereObject.$and=[]),this.whereObject.$and.push(a)):this.whereObject={$and:[a]},this)}orWhere(t,e,r){let n="$eq",o;typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="$eq");let s=se("mongodb"),a={[t]:{[n]:o}};return t==="id"?(this.idObject={$eq:new s.ObjectId(o)},this):(this.whereObject?(this.whereObject.$or||(this.whereObject.$or=[]),this.whereObject.$or.push(a)):this.whereObject={$or:[a]},this)}whereExists(t){let e={[t]:{$exists:true}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}andWhereExists(t){let e={[t]:{$exists:true}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}orWhereExists(t){let e={[t]:{$exists:true}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(e),this):(this.whereObject.$or=[e],this):(this.whereObject={$or:[e]},this)}whereNotExists(t){let e={[t]:{$exists:false}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}andWhereNotExists(t){let e={[t]:{$exists:false}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}orWhereNotExists(t){let e={[t]:{$exists:false}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(e),this):(this.whereObject.$or=[e],this):(this.whereObject={$or:[e]},this)}whereNot(t,e){let r={[t]:{$ne:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}andWhereNot(t,e){let r={[t]:{$ne:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}orWhereNot(t,e){let r={[t]:{$ne:e}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(r),this):(this.whereObject.$or=[r],this):(this.whereObject={$or:[r]},this)}whereLike(t,e){let r={[t]:{$regex:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}andWhereLike(t,e){let r={[t]:{$regex:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}orWhereLike(t,e){let r={[t]:{$regex:e}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(r),this):(this.whereObject.$or=[r],this):(this.whereObject={$or:[r]},this)}whereNotLike(t,e){let r={[t]:{$not:{$regex:e}}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}andWhereNotLike(t,e){let r={[t]:{$not:{$regex:e}}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}orWhereNotLike(t,e){let r={[t]:{$not:{$regex:e}}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(r),this):(this.whereObject.$or=[r],this):(this.whereObject={$or:[r]},this)}whereIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$in:o},this}let n={[t]:{$in:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}andWhereIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$in:o},this}let n={[t]:{$in:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}orWhereIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$in:o},this}let n={[t]:{$in:e}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(n),this):(this.whereObject.$or=[n],this):(this.whereObject={$or:[n]},this)}whereNotIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$nin:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}andWhereNotIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$nin:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}orWhereNotIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$nin:e}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(n),this):(this.whereObject.$or=[n],this):(this.whereObject={$or:[n]},this)}whereNull(t){if(t==="id")return C.warn("Id cannot be null"),this;let e={[t]:null};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}andWhereNull(t){if(t==="id")return C.warn("Id cannot be null"),this;let e={[t]:null};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}orWhereNull(t){if(t==="id")return C.warn("Id cannot be null"),this;let e={[t]:null};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(e),this):(this.whereObject.$or=[e],this):(this.whereObject={$or:[e]},this)}whereNotNull(t){if(t==="id")return C.warn("Id cannot be null"),this;let e={[t]:{$ne:null}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}andWhereNotNull(t){if(t==="id")return C.warn("Id cannot be null"),this;let e={[t]:{$ne:null}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}orWhereNotNull(t){if(t==="id")return C.warn("Id cannot be null"),this;let e={[t]:{$ne:null}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(e),this):(this.whereObject.$or=[e],this):(this.whereObject={$or:[e]},this)}whereBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$gte:e[0],$lte:e[1]}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}andWhereBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$gte:e[0],$lte:e[1]}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}orWhereBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$gte:e[0],$lte:e[1]}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(n),this):(this.whereObject.$or=[n],this):(this.whereObject={$or:[n]},this)}whereNotBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$lt:e[0],$gt:e[1]}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}andWhereNotBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$lt:e[0],$gt:e[1]}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}orWhereNotBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$lt:e[0],$gt:e[1]}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(n),this):(this.whereObject.$or=[n],this):(this.whereObject={$or:[n]},this)}whereRaw(t){return this.whereObject={...this.whereObject,...t},this}andRawWhere(t){return this.whereObject={...this.whereObject,...t},this}orRawWhere(t){return this.whereObject.$or||(this.whereObject.$or=[]),this.whereObject.$or.push(t),this}sortById(t){return this.sortObject={_id:t},this}sort(t){return typeof t=="number"?(this.sortObject={_id:t},this):typeof t=="string"?(this.sortObject={[t]:1},this):Array.isArray(t)?(this.sortObject=t.reduce((e,r)=>{if(typeof r=="string")return e[r]=1,e;let n=Object.keys(r)[0],o=Object.values(r)[0];return e[n]=+o,e},{}),this):(this.sortObject=t,this)}limit(t){return this.limitNumber=t,this}offset(t){return this.offsetNumber=t,this}};var en=class{constructor(t,e,r,n=false){this.logs=n,this.session=r,this.mongoDataSource=e,this.collection=t,e.isConnected&&this.initConnection();}initConnection(){this.mongoClient=this.mongoDataSource.getCurrentConnection(),this.collectionInstance=this.mongoClient.db().collection(this.collection.collection);}async ensureInitialized(){await this.mongoDataSource.ensureConnected(),this.collectionInstance||this.initConnection();}async find(t){await this.ensureInitialized();let e=this.query();return t?(t.select&&e.select(t.select),t.where&&Object.entries(t.where).forEach(([r,n])=>{e.where(r,n);}),t.sort&&e.sort(t.sort),t.limit&&e.limit(t.limit),t.offset&&e.offset(t.offset),e.many({ignoreHooks:t.ignoreHooks})):e.many()}async findOne(t){await this.ensureInitialized();let e=this.query();return t?(t.where&&Object.entries(t.where).forEach(([r,n])=>{e.where(r,n);}),e.one({ignoreHooks:t.ignoreHooks})):e.oneOrFail()}async findOneOrFail(t){await this.ensureInitialized();let e=this.query();if(!t)return e.oneOrFail();t.select&&e.select(t.select),t.where&&Object.entries(t.where).forEach(([n,o])=>{e.where(n,o);});let r=await e.one({ignoreHooks:t.ignoreHooks});if(r===null)throw t.customError?t.customError:new f("CollectionManager::findOneOrFail No record found","ROW_NOT_FOUND");return r}query(){return new Xr(this.collection,this.mongoDataSource,this.session,this.logs)}async insert(t,e={}){await this.ensureInitialized(),e.ignoreHooks||this.collection.beforeInsert(t);let n=(await this.collectionInstance.insertOne(t)).insertedId,o=await this.collectionInstance.findOne({_id:n},{session:this.session});return await ze(this.collection,o)}async insertMany(t,e={}){await this.ensureInitialized(),e.ignoreHooks||t.forEach(s=>{this.collection.beforeInsert(s);});let n=(await this.collectionInstance.insertMany(t)).insertedIds,o=await this.collectionInstance.find({_id:{$in:Object.values(n)}},{session:this.session}).toArray();return Promise.all(o.map(async s=>await ze(this.collection,s)))}async updateRecord(t){await this.ensureInitialized();let e=t.id;if(!e)throw new f("CollectionManager::updateRecord","ROW_NOT_FOUND");let r=await import('mongodb');if((await this.collectionInstance.updateOne({_id:new r.ObjectId(e)},{$set:t})).modifiedCount===0)throw new f("CollectionManager::updateRecord","ROW_NOT_FOUND");let o=await this.collectionInstance.findOne({_id:new r.ObjectId(e)},{session:this.session});return await ze(this.collection,o)}async deleteRecord(t){await this.ensureInitialized();let e=t.id;if(!e)throw new f("CollectionManager::deleteRecord","ROW_NOT_FOUND");let r=await import('mongodb');return await this.collectionInstance.deleteOne({_id:new r.ObjectId(e)},{session:this.session}),t}};var Ul=class extends Ot{constructor(e){super({type:"mongo",url:e?.url,logs:e?.logs});this.mongoClient=null;this.connecting=null;this.isConnected=false,this.mongoOptions=e?.options,this.lazyLoad=e?.lazyLoad??false,this.url||(this.url=v.MONGO_URL);}async connect(){if(!this.url)throw new f("MongoDataSource::connect url is required to connect to mongo database and was not provided in the options nor the environment variables","REQUIRED_VALUE_NOT_SET");let e=(await ae.getDriver("mongo")).client;this.mongoClient=new e.MongoClient(this.url,this.mongoOptions),await this.mongoClient.connect(),this.isConnected=true;}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new f("MongoDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.connect().finally(()=>{this.connecting=null;})),await this.connecting;}}getCurrentConnection(){if(!this.mongoClient)throw new f("MongoDataSource::getCurrentConnection mongo database connection not established","CONNECTION_NOT_ESTABLISHED");return this.mongoClient}startSession(){if(!this.mongoClient)throw new f("MongoDataSource::startSession mongo database connection not established","CONNECTION_NOT_ESTABLISHED");let e=this.mongoClient.startSession();return e.startTransaction(),e}async disconnect(){this.mongoClient&&await this.mongoClient.close(),this.isConnected=false;}async closeConnection(){await this.disconnect();}from(e,r){if(!this.isConnected&&!this.lazyLoad)throw new f("MongoDataSource::from","CONNECTION_NOT_ESTABLISHED");if(typeof e=="string"){let n={_collection:e,collection:e,beforeInsert:void 0,beforeFetch:void 0,beforeUpdate:void 0,beforeDelete:void 0,afterFetch:void 0};return this.getModelManager(n,this).query()}return this.getModelManager(e,this,r?.session)}getModelManager(e,r,n){return new en(e,r,n,this.logs)}async ping(){let e=Date.now();try{return await this.ensureConnected(),this.mongoClient?(await this.mongoClient.db().command({ping:1}),{ok:!0,latencyMs:Date.now()-e,dialect:"mongo"}):{ok:!1,latencyMs:Date.now()-e,dialect:"mongo"}}catch{return {ok:false,latencyMs:Date.now()-e,dialect:"mongo"}}}async isHealthy(){try{return (await this.ping()).ok}catch{return false}}};me();var Vl=class i{constructor(t){this.OK="OK";this.ioRedisConnection=null;this.connecting=null;this.isConnected=false,this.inputOptions=t||{},this.lazyLoad=t?.lazyLoad??false;}get ioredis(){if(!this.ioRedisConnection)throw new f("RedisDataSource::ioredis connection not established","CONNECTION_NOT_ESTABLISHED");return this.ioRedisConnection}async connect(){if(this.isConnected)return;let t=this.inputOptions.port||+v.REDIS_PORT||6379,e=await import('ioredis').catch(()=>{throw new K("ioredis")});this.ioRedisConnection=new e.default({host:this.inputOptions.host||v.REDIS_HOST,username:this.inputOptions.username||v.REDIS_USERNAME,port:t,password:this.inputOptions.password||v.REDIS_PASSWORD,...this.inputOptions});try{await this.ioRedisConnection.ping(),this.isConnected=!0;}catch{throw new f("RedisDataSource::connect","CONNECTION_NOT_ESTABLISHED")}}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new f("RedisDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.connect().finally(()=>{this.connecting=null;})),await this.connecting;}}async set(t,e,r){await this.ensureConnected(),r=r?r/1e3:void 0,typeof e=="object"&&!Buffer.isBuffer(e)&&(e=JSON.stringify(e)),typeof e=="boolean"&&(e=e.toString());try{if(r){await this.ioredis.setex(t,r,e);return}await this.ioredis.set(t,e);}catch{throw new f("RedisDataSource::set","SET_FAILED")}}async get(t){try{let e=await this.ioredis.get(t);return i.getValue(e)}catch{throw new f("RedisDataSource::get","GET_FAILED")}}async getBuffer(t){await this.ensureConnected();try{return await this.ioredis.getBuffer(t)}catch{throw new f("RedisDataSource::getBuffer","GET_FAILED")}}async consume(t){try{let e=await this.ioredis.get(t);return await this.ioredis.del(t),i.getValue(e)}catch{throw new f("RedisDataSource::consume","GET_FAILED")}}async delete(t){await this.ensureConnected();try{await this.ioredis.del(t);}catch{throw new f("RedisDataSource::delete","DELETE_FAILED")}}async flushAll(){await this.ensureConnected();try{await this.ioredis.flushall();}catch{throw new f("RedisDataSource::flushAll","FLUSH_FAILED")}}async disconnect(t){if(!(!this.isConnected||!this.ioRedisConnection))try{await this.ioRedisConnection.quit(),this.isConnected=!1,this.ioRedisConnection=null;}catch{if(t)throw new f("RedisDataSource::disconnect","DISCONNECT_FAILED");C.warn("RedisDataSource::disconnect DISCONNECT_FAILED");}}async lpush(t,...e){await this.ensureConnected();try{let r=e.map(n=>typeof n=="object"&&!Buffer.isBuffer(n)?JSON.stringify(n):typeof n=="boolean"?n.toString():n);return await this.ioredis.lpush(t,...r)}catch{throw new f("RedisDataSource::lpush","LPUSH_FAILED")}}async rpush(t,...e){await this.ensureConnected();try{let r=e.map(n=>typeof n=="object"&&!Buffer.isBuffer(n)?JSON.stringify(n):typeof n=="boolean"?n.toString():n);return await this.ioredis.rpush(t,...r)}catch{throw new f("RedisDataSource::rpush","RPUSH_FAILED")}}async lpop(t){try{let e=await this.ioredis.lpop(t);return i.getValue(e)}catch{throw new f("RedisDataSource::lpop","LPOP_FAILED")}}async rpop(t){try{let e=await this.ioredis.rpop(t);return i.getValue(e)}catch{throw new f("RedisDataSource::rpop","RPOP_FAILED")}}async lrange(t,e,r){try{return (await this.ioredis.lrange(t,e,r)).map(o=>i.getValue(o)).filter(o=>o!==null)}catch{throw new f("RedisDataSource::lrange","LRANGE_FAILED")}}async llen(t){await this.ensureConnected();try{return await this.ioredis.llen(t)}catch{throw new f("RedisDataSource::llen","LLEN_FAILED")}}async hset(t,e,r){await this.ensureConnected();try{return typeof r=="object"&&!Buffer.isBuffer(r)&&(r=JSON.stringify(r)),typeof r=="boolean"&&(r=r.toString()),await this.ioredis.hset(t,e,r)}catch{throw new f("RedisDataSource::hset","HSET_FAILED")}}async hmset(t,e){await this.ensureConnected();try{let r={};for(let[n,o]of Object.entries(e))typeof o=="object"&&!Buffer.isBuffer(o)?r[n]=JSON.stringify(o):typeof o=="boolean"?r[n]=o.toString():r[n]=String(o);return await this.ioredis.hmset(t,r)}catch{throw new f("RedisDataSource::hmset","HMSET_FAILED")}}async hget(t,e){try{let r=await this.ioredis.hget(t,e);return i.getValue(r)}catch{throw new f("RedisDataSource::hget","HGET_FAILED")}}async hgetall(t){try{let e=await this.ioredis.hgetall(t),r={};for(let[n,o]of Object.entries(e))r[n]=i.getValue(o);return r}catch{throw new f("RedisDataSource::hgetall","HGETALL_FAILED")}}async hmget(t,...e){try{return (await this.ioredis.hmget(t,...e)).map(n=>i.getValue(n))}catch{throw new f("RedisDataSource::hmget","HMGET_FAILED")}}async hdel(t,...e){await this.ensureConnected();try{return await this.ioredis.hdel(t,...e)}catch{throw new f("RedisDataSource::hdel","HDEL_FAILED")}}async hexists(t,e){await this.ensureConnected();try{return await this.ioredis.hexists(t,e)}catch{throw new f("RedisDataSource::hexists","HEXISTS_FAILED")}}async hkeys(t){await this.ensureConnected();try{return await this.ioredis.hkeys(t)}catch{throw new f("RedisDataSource::hkeys","HKEYS_FAILED")}}async hlen(t){await this.ensureConnected();try{return await this.ioredis.hlen(t)}catch{throw new f("RedisDataSource::hlen","HLEN_FAILED")}}async sadd(t,...e){await this.ensureConnected();try{let r=e.map(n=>typeof n=="object"&&!Buffer.isBuffer(n)?JSON.stringify(n):typeof n=="boolean"?n.toString():n);return await this.ioredis.sadd(t,...r)}catch{throw new f("RedisDataSource::sadd","SADD_FAILED")}}async smembers(t){try{return (await this.ioredis.smembers(t)).map(r=>i.getValue(r)).filter(r=>r!==null)}catch{throw new f("RedisDataSource::smembers","SMEMBERS_FAILED")}}async srem(t,...e){await this.ensureConnected();try{let r=e.map(n=>typeof n=="object"&&!Buffer.isBuffer(n)?JSON.stringify(n):typeof n=="boolean"?n.toString():n);return await this.ioredis.srem(t,...r)}catch{throw new f("RedisDataSource::srem","SREM_FAILED")}}async sismember(t,e){await this.ensureConnected();try{return typeof e=="object"&&!Buffer.isBuffer(e)&&(e=JSON.stringify(e)),typeof e=="boolean"&&(e=e.toString()),await this.ioredis.sismember(t,e)}catch{throw new f("RedisDataSource::sismember","SISMEMBER_FAILED")}}async scard(t){await this.ensureConnected();try{return await this.ioredis.scard(t)}catch{throw new f("RedisDataSource::scard","SCARD_FAILED")}}async sinter(...t){try{return (await this.ioredis.sinter(...t)).map(r=>i.getValue(r)).filter(r=>r!==null)}catch{throw new f("RedisDataSource::sinter","SINTER_FAILED")}}async sunion(...t){try{return (await this.ioredis.sunion(...t)).map(r=>i.getValue(r)).filter(r=>r!==null)}catch{throw new f("RedisDataSource::sunion","SUNION_FAILED")}}async sdiff(...t){try{return (await this.ioredis.sdiff(...t)).map(r=>i.getValue(r)).filter(r=>r!==null)}catch{throw new f("RedisDataSource::sdiff","SDIFF_FAILED")}}async zadd(t,e,r){await this.ensureConnected();try{if(typeof e=="number"&&r!==void 0){let n=r;return typeof r=="object"&&!Buffer.isBuffer(r)?n=JSON.stringify(r):typeof r=="boolean"&&(n=r.toString()),await this.ioredis.zadd(t,e,n)}else if(Array.isArray(e)){let n=[];for(let[o,s]of e)n.push(o),typeof s=="object"&&!Buffer.isBuffer(s)?n.push(JSON.stringify(s)):typeof s=="boolean"?n.push(s.toString()):n.push(s);return await this.ioredis.zadd(t,...n)}throw new Error("Invalid arguments for zadd")}catch{throw new f("RedisDataSource::zadd","ZADD_FAILED")}}async zrange(t,e,r,n=false){try{let o;if(n){o=await this.ioredis.zrange(t,e,r,"WITHSCORES");let s=[];for(let a=0;a<o.length;a+=2){let l=i.getValue(o[a]),u=Number(o[a+1]);l!==null&&s.push({value:l,score:u});}return s}return o=await this.ioredis.zrange(t,e,r),o.map(s=>i.getValue(s)).filter(s=>s!==null)}catch{throw new f("RedisDataSource::zrange","ZRANGE_FAILED")}}async zrevrange(t,e,r,n=false){try{let o;if(n){o=await this.ioredis.zrevrange(t,e,r,"WITHSCORES");let s=[];for(let a=0;a<o.length;a+=2){let l=i.getValue(o[a]),u=Number(o[a+1]);l!==null&&s.push({value:l,score:u});}return s}return o=await this.ioredis.zrevrange(t,e,r),o.map(s=>i.getValue(s)).filter(s=>s!==null)}catch{throw new f("RedisDataSource::zrevrange","ZREVRANGE_FAILED")}}async zrem(t,...e){await this.ensureConnected();try{let r=e.map(n=>typeof n=="object"&&!Buffer.isBuffer(n)?JSON.stringify(n):typeof n=="boolean"?n.toString():n);return await this.ioredis.zrem(t,...r)}catch{throw new f("RedisDataSource::zrem","ZREM_FAILED")}}async zscore(t,e){await this.ensureConnected();try{typeof e=="object"&&!Buffer.isBuffer(e)&&(e=JSON.stringify(e)),typeof e=="boolean"&&(e=e.toString());let r=await this.ioredis.zscore(t,e);return r!==null?Number(r):null}catch{throw new f("RedisDataSource::zscore","ZSCORE_FAILED")}}async zcard(t){await this.ensureConnected();try{return await this.ioredis.zcard(t)}catch{throw new f("RedisDataSource::zcard","ZCARD_FAILED")}}async subscribe(t,e){await this.ensureConnected();try{await this.ioredis.subscribe(...t),this.ioredis.on("message",e);}catch{throw new f("RedisDataSource::subscribe","SUBSCRIBE_FAILED")}}async unsubscribe(...t){await this.ensureConnected();try{await this.ioredis.unsubscribe(...t);}catch{throw new f("RedisDataSource::unsubscribe","UNSUBSCRIBE_FAILED")}}async publish(t,e){await this.ensureConnected();try{let r;return typeof e=="object"&&!Buffer.isBuffer(e)?r=JSON.stringify(e):typeof e=="boolean"||typeof e=="number"?r=e.toString():Buffer.isBuffer(e)?r=e:r=String(e),await this.ioredis.publish(t,r)}catch{throw new f("RedisDataSource::publish","PUBLISH_FAILED")}}async psubscribe(t,e){await this.ensureConnected();try{await this.ioredis.psubscribe(...t),this.ioredis.on("pmessage",(r,n,o)=>{e(n,o);});}catch{throw new f("RedisDataSource::psubscribe","PSUBSCRIBE_FAILED")}}async punsubscribe(...t){await this.ensureConnected();try{await this.ioredis.punsubscribe(...t);}catch{throw new f("RedisDataSource::punsubscribe","PUNSUBSCRIBE_FAILED")}}async exists(t){await this.ensureConnected();try{return await this.ioredis.exists(t)}catch{throw new f("RedisDataSource::exists","EXISTS_FAILED")}}async expire(t,e){await this.ensureConnected();try{return await this.ioredis.expire(t,e)}catch{throw new f("RedisDataSource::expire","EXPIRE_FAILED")}}async expireat(t,e){await this.ensureConnected();try{return await this.ioredis.expireat(t,e)}catch{throw new f("RedisDataSource::expireat","EXPIREAT_FAILED")}}async pexpire(t,e){await this.ensureConnected();try{return await this.ioredis.pexpire(t,e)}catch{throw new f("RedisDataSource::pexpire","PEXPIRE_FAILED")}}async ttl(t){await this.ensureConnected();try{return await this.ioredis.ttl(t)}catch{throw new f("RedisDataSource::ttl","TTL_FAILED")}}async pttl(t){await this.ensureConnected();try{return await this.ioredis.pttl(t)}catch{throw new f("RedisDataSource::pttl","PTTL_FAILED")}}async persist(t){await this.ensureConnected();try{return await this.ioredis.persist(t)}catch{throw new f("RedisDataSource::persist","PERSIST_FAILED")}}async keys(t){await this.ensureConnected();try{return await this.ioredis.keys(t)}catch{throw new f("RedisDataSource::keys","KEYS_FAILED")}}async rename(t,e){await this.ensureConnected();try{return await this.ioredis.rename(t,e)}catch{throw new f("RedisDataSource::rename","RENAME_FAILED")}}async type(t){await this.ensureConnected();try{return await this.ioredis.type(t)}catch{throw new f("RedisDataSource::type","TYPE_FAILED")}}static getValue(t){if(!t)return null;try{return JSON.parse(t)}catch{}return t==="true"||t==="false"?!!t:Number.isNaN(Number(t))?t:Number(t)}};me();var tn={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 ef=null;function st(i,t){return t.getModelManager(i)}function Xy(i,t,e){if(!t||typeof t!="object")return;let r=t;if(!r.filters)return;let n=e.getColumns();for(let[o,s]of Object.entries(r.filters)){let a=s.value;if(a==null||a==="")continue;let l=n.find(m=>m.columnName===o||m.databaseName===o);if(!l)continue;let u=typeof l.type=="string"?l.type:"string",d=tn[u]||"string";if(d==="string"||d==="textarea"){i.whereLike(o,`%${a}%`);continue}if(d==="boolean"){i.where(o,a==="true"||a===true);continue}if(d==="date"||d==="datetime"){if(typeof a=="object"&&a!==null){let m=a;m.from&&i.where(o,">=",m.from),m.to&&i.where(o,"<=",m.to);continue}i.where(o,a);continue}i.where(o,a);}}function Zt(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 tg(){let i=await import('adminjs').catch(()=>{throw new K("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(o){super(o),this._model=o,this._db=ef;}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=tn[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=tn[l]||"string";return new r({path:a.columnName,type:u,isId:a.isPrimary,isSortable:true})}async count(o){let a=st(this._model,this._db).query();return Xy(a,o,this._model),a.getCount()}async find(o,s={}){let l=st(this._model,this._db).query();return Xy(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(Zt(d,this._model),this))}async findOne(o){if(!this._model.primaryKey)return null;let l=await st(this._model,this._db).findOneByPrimaryKey(o);return l?new e(Zt(l,this._model),this):null}async findMany(o){let s=this._model.primaryKey;return s?(await st(this._model,this._db).query().whereIn(s,o).many()).map(u=>new e(Zt(u,this._model),this)):[]}async create(o){let a=await st(this._model,this._db).insert(o,{returning:["*"]});return Zt(a,this._model)}async update(o,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=st(this._model,this._db);if(!await l.findOneByPrimaryKey(o))throw new Error("Record not found");let d=await l.updateRecord(o,s,{returning:["*"]});return Zt(d,this._model)}async delete(o){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=st(this._model,this._db);await a.findOneByPrimaryKey(o)&&await a.deleteRecord(o);}}}async function rg(){let i=await import('adminjs').catch(()=>{throw new K("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function ng(){let i=await import('adminjs').catch(()=>{throw new K("adminjs")}),t=await tg(),e=await rg();i.default.registerAdapter({Database:e,Resource:t});}async function Jl(i,t){ef=i;let e=await import('adminjs').catch(()=>{throw new K("adminjs")});await ng();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 tf(i,t){let{admin:e}=await Jl(i,t),r;try{r=await import('@adminjs/express');}catch{throw new K("@adminjs/express")}let n=r.buildRouter(e);return {admin:e,router:n}}var og=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},sg=i=>i.openApi?.required??false,ig=i=>{let t=i.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=og(r));return e},ag=i=>{let t=i.getColumns(),e=[];for(let r of t)sg(r)&&e.push(r.columnName);return e||[]},Hl=i=>{let t=ig(i),e=ag(i);return {type:"object",properties:t,required:e.length?e:[]}},rW=i=>i.map(t=>Hl(t)),nW=i=>Hl(i),rf=i=>i.map(t=>({...Hl(t),modelName:t.table,$id:t.table}));var zl=(i,t)=>{let e=$e.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var rn=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var nn=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var on=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var sn=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var an=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var ln=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_table";this.table=e;}};var un=class extends S{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_column";this.table=e,this.column=r;}};var dn=class extends S{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_index";this.table=e,this.index=r;}};var cn=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_primary_key";this.table=e;}};var mn=class extends S{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_check_constraint";this.table=e,this.constraint=r;}};var pn=class extends S{constructor(){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_tables";}};var yn=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_column_listing";this.table=e;}};var Ge=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var fn=class extends S{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var hn=class extends Ge{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=Ne(this.tableName,q(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new H("primary_key",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new H("primary_key",{columns:[q(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??"",q(this.columnNode.column),o[0]);return this.context==="alter_table"?(this.nodes.push(new H("foreign_key",{columns:[q(this.columnNode.column)],references:{table:r,columns:o},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this):(this.namedConstraints.push(new H("foreign_key",{columns:[q(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 H("not_null",{columns:[q(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new H("null",{columns:[q(this.columnNode.column)]})),this}default(t){let e;return t instanceof M||t instanceof $?e=t:t===null?e="NULL":typeof t=="boolean"?e=t?"TRUE":"FALSE":t!==void 0&&(e=t.toString()),this.nodes.push(new H("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new H("unique",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??ye(this.tableName??"",q(this.columnNode.column))})),this):(this.namedConstraints.push(new H("unique",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName||ye(this.tableName??"",q(this.columnNode.column))})),this)}check(t,e){let r=q(this.columnNode.column),n=e?.constraintName??`chk_${this.tableName}_${r}`.substring(0,63);return this.context==="alter_table"?(this.nodes.push(new H("check",{columns:[r],checkExpression:t,constraintName:n})),this):(this.namedConstraints.push(new H("check",{columns:[r],checkExpression:t,constraintName:n})),this)}after(t){return this.sqlType!=="mysql"?this:(this.nodes.push(new fn(t)),this)}collate(t){return this.columnNode.collate=t,this}handleSqliteAutoIncrement(t){return this.isInlineSqlitePrimaryKey()?this:(this.nodes.push(new H("primary_key",{columns:[q(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 it=class extends Ge{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 hn(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new M(e)}char(e,r=1){let n=new Q(e,"char",{length:r});return this.build(n)}varchar(e,r=255){let n=new Q(e,"varchar",{length:r});return this.build(n)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let n=new Q(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 Q(e,"uuid");return this.build(r)}ulid(e){let r=new Q(e,"ulid");return this.build(r)}integer(e,r=255){let n=new Q(e,"integer",{length:r});return this.build(n)}tinyint(e,r=255){let n=new Q(e,"tinyint",{length:r});return this.build(n)}smallint(e,r=255){let n=new Q(e,"smallint",{length:r});return this.build(n)}mediumint(e,r=255){let n=new Q(e,"mediumint",{length:r});return this.build(n)}biginteger(e,r=255){let n=new Q(e,"bigint",{length:r});return this.build(n)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let n=new Q(e,"float",{precision:r});return this.build(n)}double(e,r=10){let n=new Q(e,"double",{precision:r});return this.build(n)}real(e,r=10){let n=new Q(e,"real",{precision:r});return this.build(n)}decimal(e,r=10,n=2){let o=new Q(e,"decimal",{precision:r,scale:n});return this.build(o)}numeric(e,r=10,n=2){let o=new Q(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 Q(e,"date",{precision:r});return this.build(n)}time(e,r){let n=new Q(e,"time",{precision:r});return this.build(n)}year(e){let r=new Q(e,"year");return this.build(r)}datetime(e,r){let n=new Q(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 Q(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}boolean(e){let r=new Q(e,"boolean");return this.build(r)}binary(e){let r=new Q(e,"binary");return this.build(r)}varbinary(e,r=255){let n=new Q(e,"varbinary",{length:r});return this.build(n)}blob(e){let r=new Q(e,"blob");return this.build(r)}tinyblob(e){let r=new Q(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new Q(e,"mediumblob");return this.build(r)}longblob(e){let r=new Q(e,"longblob");return this.build(r)}json(e){let r=new Q(e,"json");return this.build(r)}jsonb(e){let r=new Q(e,"jsonb");return this.build(r)}enum(e,r){let n=new Q(e,"enum",{enumValues:r});return this.build(n)}custom(e,r,n){let o=new Q(e,r,{length:n});return this.build(o)}rawColumn(e){let r=new Q(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new Q(e,"geometry");return this.build(r)}point(e){let r=new Q(e,"point");return this.build(r)}linestring(e){let r=new Q(e,"linestring");return this.build(r)}polygon(e){let r=new Q(e,"polygon");return this.build(r)}multiPoint(e){let r=new Q(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var gn=class extends Ge{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new M(t)}addColumn(t){let e=[],r=new it(this.sqlType,e,this.table,"alter_table"),n=t(r);if(!e.length)return;let o=r.getNamedConstraints(),s=e.filter(m=>m.folder==="column");if(e=e.concat(o),s.length!==1)throw new Error("addColumn callback must define exactly one column");let a=s[0],l=n.getNodes().filter(m=>{let c=m;return c.constraintType==="not_null"||c.constraintType==="null"||c.constraintType==="default"}),u=new Nr(a);u.inlineConstraints=l,this.nodes.push(u),n.getNodes().filter(m=>{let c=m;return c.constraintType==="unique"||c.constraintType==="foreign_key"||c.constraintType==="primary_key"}).forEach(m=>{this.nodes.push(new qe(m));});}alterColumn(t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new it(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=q(s.column),l=n.getNodes().find(p=>p.constraintType==="null"),d=n.getNodes().find(p=>p.constraintType==="not_null")||l,m=n.getNodes().find(p=>p.constraintType==="default"),c={};d&&(c.nullable=d.constraintType==="null"),m&&(m.defaultValue===void 0||m.defaultValue===null||m.defaultValue==="NULL"?c.dropDefault=true:c.default=m.defaultValue),s.collate&&(this.sqlType==="mysql"||this.sqlType==="mariadb")&&(c.collate=s.collate),this.nodes.push(new qr(q(a),s,c)),d&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(d.constraintType==="not_null"?this.nodes.push(new Or(q(a))):d.constraintType==="null"&&this.nodes.push(new Rr(q(a)))),m&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(m.defaultValue===void 0||m.defaultValue===null||m.defaultValue==="NULL"?this.nodes.push(new Ft(q(a))):this.nodes.push(new Mr(q(a),m.defaultValue))),n.getNodes().forEach(p=>{let g=p;switch(g.constraintType){case "primary_key":this.addPrimaryKey(q(a));break;case "unique":this.unique(q(a),{constraintName:g.constraintName});break;case "foreign_key":this.foreignKey(q(a),g.references?.table??"",q(g.references?.columns?.[0]??""),{constraintName:g.constraintName,onDelete:g.onDelete,onUpdate:g.onUpdate});break}});}dropColumn(t){this.nodes.push(new Cr(t));}renameColumn(t,e){this.nodes.push(new _r(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Ft(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new St([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new qe(new H(...t)));}foreignKey(t,e,r,n){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new qe(new H("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 f("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new qe(new H("unique",{columns:[t],constraintName:e?.constraintName??ye(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new f("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 Ce(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new f("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??ye(this.table,t);this.nodes.push(new Ce(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Ce(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new f("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new f("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new Nt(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 qt(t)):r?this.nodes.push(new qt(t)):n&&this.nodes.push(new qt(t)),this)}};var le=class{constructor(t){if(this.sqlType=t||v.DB_TYPE,!this.sqlType)throw new f("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new M(t)}rawQuery(t){this.queryStatements.push(t);}async execute(){for(let t of this.queryStatements)this.rawQuery(t);}runFile(t){if(!$n.existsSync(t))throw new f("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=Et.basename(t),r=Et.extname(e);if(r!==".sql"&&r!==".txt")throw new f("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let o=$n.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 it(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 xr(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 gn(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 ge(t,s),d=o.parse([u]).sql;if(!d||!d.trim())return;let m=d.startsWith("alter table")?d:`alter table ${d}`;this.rawQuery(m),s=[];};for(let u of r)u.file==="add_constraint"&&s.length&&s[0].file==="add_column"||a(),s.push(u);a();let l=r.filter(u=>u.file==="add_column").map(u=>u.column);this.generateAutoUpdateTriggers(t,l);}dropTable(t,e=false){let r=new Ar(t,e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}renameTable(t,e){let r=new ge(t,[new ct(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}truncateTable(t){let e=new Ct(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||fr(t,e.join("_")),o=new Ir(t,e,n),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([o]).sql);}dropIndex(t,e){let r=new $r(t,e),n=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addPrimaryKey(t,e){if(this.sqlType==="sqlite")throw new f("Schema::addPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite cannot add a primary key to an existing table"));let r=new ge(t,[new St(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??ye(t,n.join("_")),s=new H("unique",{columns:n,constraintName:o}),a=new ge(t,[new qe(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 Ce(n),s=new ge(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)?ye(t,e.join("_")):ye(t,e),o=r?.constraintName??n,s=new Ce(o),a=new ge(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new Nt,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new H(...e),n=new ge(t,[new qe(r)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}dropConstraint(t,e){let r=new Ce(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 H("check",{checkExpression:e,constraintName:n}),s=new ge(t,[new qe(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 Ce(e),n=new ge(t,[r]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}createExtension(t,e=true){let r=new Dr(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=>q(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 bn,sf,Xt=class{constructor(t,e){gu(this,bn);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new le(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=bu(this,bn,sf).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(`;
|
|
144
|
+
`)}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 le(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}};bn=new WeakSet,sf=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 Tn=class{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}buildDropDependencies(t){let e=new Map,r=new Map,n=new Map;for(let o of t.relationsToDrop||[]){let s=`${o.table}.${o.relation.name}`,a=[];if(o.relation.referencedTable&&a.push(`table.${o.relation.referencedTable}`),o.relation.referencedColumns)for(let l of o.relation.referencedColumns)a.push(`column.${o.relation.referencedTable}.${l}`);e.set(s,a);}for(let o of t.tablesToDrop||[]){let s=`table.${o.table}`,a=[];for(let l of this.models){let u=l.getRelations();for(let d of u)d.type==="belongsTo"&&d.model().table===o.table&&a.push(`fk.${l.table}.${d.constraintName}`);}r.set(s,a);}for(let o of t.columnsToDrop||[]){let s=`column.${o.table}.${o.column}`,a=[],l=this.models.find(u=>u.table===o.table);if(l){let u=l.getColumns().find(d=>d.databaseName===o.column);if(u){u.isPrimary&&a.push(`pk.${o.table}`);let d=l.getRelations();for(let m of d)m.columnName===u.columnName&&a.push(`fk.${o.table}.${m.constraintName}`);}}n.set(s,a);}return {foreignKeys:e,tables:r,constraints:n}}topologicalSortReverse(t,e){let r=new Set,n=new Set,o=[],s=a=>{if(n.has(a))throw new Error(`Circular dependency detected: ${a}`);if(r.has(a))return;n.add(a);let l=e(a);for(let u of l)s(u);n.delete(a),r.add(a),o.push(a);};for(let a of t.keys())r.has(a)||s(a);return o}generateDropOperations(t){let e=this.buildDropDependencies(t),r=[],n=this.topologicalSortReverse(e.foreignKeys,s=>e.foreignKeys.get(s)||[]);for(let s of n){let[a,l]=s.split("."),u=t.relationsToDrop?.find(d=>d.table===a&&d.relation.name===l);u&&r.push({type:"DROP_FOREIGN_KEY",phase:"DESTRUCTIVE_OPERATIONS",table:a,constraint:l,data:u,dependencies:e.foreignKeys.get(s)||[],sqlStatements:this.generateDropForeignKeySql(u)});}let o=this.topologicalSortReverse(e.tables,s=>e.tables.get(s)||[]);for(let s of t.columnsToDrop||[]){let a=`column.${s.table}.${s.column}`,l=e.constraints.get(a)||[];for(let u of l)u.startsWith("pk.")?r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:"PRIMARY KEY",data:{type:"primary_key",table:s.table},dependencies:[a],sqlStatements:this.generateDropPrimaryKeySql(s.table)}):u.startsWith("unique.")&&r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:`UNIQUE_${s.column}`,data:{type:"unique",table:s.table,column:s.column},dependencies:[a],sqlStatements:this.generateDropUniqueConstraintSql(s.table,s.column)});}for(let s of t.columnsToDrop||[])r.push({type:"DROP_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,column:s.column,data:s,dependencies:[],sqlStatements:this.generateDropColumnSql(s)});for(let s of o){let a=s.replace("table.",""),l=t.tablesToDrop?.find(u=>u.table===a);l&&r.push({type:"DROP_TABLE",phase:"DESTRUCTIVE_OPERATIONS",table:a,data:l,dependencies:e.tables.get(s)||[],sqlStatements:this.generateDropTableSql(l)});}return r}analyzeConstraintImpact(t){let e=new Map;for(let r of t.columnsToDrop||[]){let n=[],o=this.models.find(s=>s.table===r.table);if(o){let s=o.getColumns().find(a=>a.databaseName===r.column);if(s){s.isPrimary&&n.push(`PRIMARY KEY on ${r.table}`);let a=o.getRelations();for(let l of a)l.columnName===s.columnName&&n.push(`FOREIGN KEY ${l.constraintName} on ${r.table}`);}}e.set(`${r.table}.${r.column}`,n);}return e}detectMixedOperations(t){let e=[];for(let r of t.columnsToModify||[]){let n=this.models.find(o=>o.table===r.table);n&&n.getColumns().find(s=>s.databaseName===r.dbColumns.name)&&this.hasConstraintChanges(r.dbColumns,r.modelColumn)&&e.push({type:"column_modification_with_constraints",table:r.table,column:r.dbColumns.name,description:`Column ${r.dbColumns.name} modification requires constraint recreation`});}for(let r of t.primaryKeysToModify||[])e.push({type:"primary_key_modification",table:r.table,description:`Primary key modification on ${r.table} requires FK recreation`});return e}hasConstraintChanges(t,e){return t.isNullable!==!e.constraints?.nullable||t.isUnique!==!!e.constraints?.unique||t.defaultValue!==e.constraints?.default}generateDropForeignKeySql(t){if(this.sql.getDbType()==="sqlite")return [];if(!t.relation.name)return [];let e=this.sql.schema().alterTable(t.table,n=>{n.dropConstraint(t.relation.name);}).toQueries(),r=this.sql.getDbType();return (r==="mysql"||r==="mariadb")&&e.push(`DROP INDEX \`${t.relation.name}\` ON \`${t.table}\``),e}generateDropPrimaryKeySql(t){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,e=>{e.dropPrimaryKey();}).toQueries()}generateDropUniqueConstraintSql(t,e){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,r=>{r.dropConstraint(`UNIQUE_${e}`);}).toQueries()}generateDropColumnSql(t){return this.sql.schema().alterTable(t.table,e=>{e.dropColumn(t.column);}).toQueries()}generateDropTableSql(t){return [`DROP TABLE ${t.table}`]}};var Yl=i=>String(i??"").replace(/::[a-z_ ]+$/i,"").replace(/[()\s]/g,"").toLowerCase(),ug=/^(current[ _]?timestamp\d*|now\d*|getdate\d*|localtimestamp\d*|localtime\d*)$/,dg={postgres:i=>i.includes("nextval"),cockroachdb:i=>i.includes("unique_rowid")},cg={postgres:["gen_random_uuid"],cockroachdb:["gen_random_uuid"],mysql:["uuid"],mariadb:["uuid"],mssql:["newid"],sqlite:["lower(hex(randomblob(16)))"]},lf=(i,t)=>(cg[i]??[]).includes(Yl(t)),At=(i,t)=>!!i.autoCreate&&ug.test(Yl(t)),Dt=(i,t,e)=>{if(t.type!=="increment"&&t.type!=="bigIncrement")return false;let r=dg[i];return r?r(Yl(e)):false};var wn=class wn{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new Tn(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 le(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||Ne(n.table,n.columns[0]),l=this.sql.schema().alterTable(n.table,u=>{let d=a||Ne(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 le(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 le(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=q(t.relation.constraintName);if(e)return e;let r=t.table;t.relation.type==="belongsTo"?r=t.relation.model().table:t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(r=q(t.relation.manyToManyOptions.throughModel));let 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=q(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"&&wn.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||Ne(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!==""&&!At(t.modelColumn,t.dbColumns.defaultValue)&&!Dt(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 le(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=q(t.relation.manyToManyOptions.throughModel),r=q(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=q(r);if(t.relation.type==="belongsTo"){let c=t.relation.model(),p=c.primaryKey,y=c.getColumns().find(T=>T.columnName===p);if(y)o=y.databaseName;else {let T=c?.databaseCaseConvention||"preserve";o=V(p,T);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let c=t.relation.model();if(typeof o=="string"&&o){let p=c.getColumns(),g=p.find(y=>y.columnName===o);if(g)o=g.databaseName;else {let y=c.primaryKey||"id",T=p.find(w=>w.columnName===y);if(T)o=T.databaseName;else {let w=c?.databaseCaseConvention||"preserve";o=V(o||y,w);}}}else {let p=c.primaryKey||"id",y=c.getColumns().find(T=>T.columnName===p);if(y)o=y.databaseName;else {let T=c?.databaseCaseConvention||"preserve";o=V(p,T);}}}let s=this.models.find(c=>c.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,u=a.find(c=>c.columnName===l);if(u)l=u.databaseName;else {let c=s?.databaseCaseConvention||"preserve";l=V(l,c);}if(t.relation.type==="belongsTo"){let c=a.find(p=>p.columnName===t.relation.foreignKey);if(c)l=c.databaseName;else {let p=s?.databaseCaseConvention||"preserve";l=V(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let c=t.relation.manyToManyOptions.leftForeignKey,p=q(c),g=a.find(y=>y.columnName===p);if(g)l=g.databaseName;else {let y=s?.databaseCaseConvention||"preserve";l=V(p,y);}}let d=t.relation.onDelete?.toLowerCase(),m=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,c=>{let p=n||z(t.table,l,e);c.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[o]},constraintName:p,onDelete:d,onUpdate:m});}).toQueries()}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};wn.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 er=wn;var Nn=class Nn{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}generateCode(t){let e=[],r=[],n=null,o={STRUCTURE_CREATION:"Structure creation",CONSTRAINT_CREATION:"Constraints and indexes",DESTRUCTIVE_OPERATIONS:"Destructive operations"};for(let s of t){s.phase!==n&&(n=s.phase,e.length>0&&e.push(""),e.push(`// ${o[n]}`));let{up:a,down:l}=this.generateOperationCode(s);a&&e.push(...a),l&&r.push(...l);}return {up:e,down:r}}generateOperationCode(t){switch(t.type){case "CREATE_TABLE":return this.generateCreateTableCode(t);case "ADD_COLUMN":return this.generateAddColumnCode(t);case "MODIFY_COLUMN":return this.generateModifyColumnCode(t);case "DROP_COLUMN":return this.generateDropColumnCode(t);case "CREATE_INDEX":return this.generateCreateIndexCode(t);case "DROP_INDEX":return this.generateDropIndexCode(t);case "ADD_FOREIGN_KEY":return this.generateAddForeignKeyCode(t);case "DROP_FOREIGN_KEY":return this.generateDropForeignKeyCode(t);case "ADD_UNIQUE_CONSTRAINT":return this.generateAddUniqueCode(t);case "DROP_CONSTRAINT":return this.generateDropConstraintCode(t);case "ADD_CHECK_CONSTRAINT":return this.generateAddCheckCode(t);case "ADD_PRIMARY_KEY":return this.generateAddPrimaryKeyCode(t);case "DROP_TABLE":return this.generateDropTableCode(t);case "MODIFY_PRIMARY_KEY":return this.generateModifyPrimaryKeyCode(t);default:return {up:null,down:null}}}generateCreateTableCode(t){let e=t.data,r=[];r.push(`this.schema.createTable(${this.quote(e.table)}, (table) => {`);for(let o of e.columns){let s=this.generateColumnCode(e.table,o,true);r.push(` ${s}`);}r.push("});");let n=[`this.schema.dropTable(${this.quote(e.table)});`];return {up:r,down:n}}generateAddColumnCode(t){let{table:e,column:r}=t.data,n=this.generateColumnCode(e,r,false),o=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.addColumn((col) => ${n.replace(/^table\./,"col.")});`,"});"],s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r.databaseName)});`,"});"];return {up:o,down:s}}generateModifyColumnCode(t){let{table:e,modelColumn:r,dbColumns:n}=t.data,o=this.generateColumnCodeForModify(e,r,n),s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.alterColumn((col) => ${o.replace(/^table\./,"col.")});`,"});"],a=[`// TODO: reverse column modification for ${this.quote(n.name)} on ${this.quote(e)}`];return {up:s,down:a}}generateDropColumnCode(t){let{table:e,column:r}=t.data,n=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r)});`,"});"],o=[`// TODO: reverse column drop for ${this.quote(r)} on ${this.quote(e)}`];return {up:n,down:o}}generateCreateIndexCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=(r?.getIndexes().find(u=>u.name===e.index)?.columns||[]).map(u=>r?.getColumns().find(m=>m.columnName===u)?.databaseName||u),s=o.length===1?this.quote(o[0]):`[${o.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.createIndex(${this.quote(e.table)}, ${s}, { constraintName: ${this.quote(e.index)} });`],l=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`];return {up:a,down:l}}generateDropIndexCode(t){let e=t.data,r=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`],n=[`// TODO: reverse index drop for ${this.quote(e.index)} on ${this.quote(e.table)}`];return {up:r,down:n}}generateAddForeignKeyCode(t){let e=t.data,{sourceColumn:r,referencedTable:n,referencedColumn:o,constraintName:s}=this.resolveRelationDetails(e),a=e.relation.onDelete?.toLowerCase(),l=e.relation.onUpdate?.toLowerCase(),u=[];s&&u.push(`constraintName: ${this.quote(s)}`),a&&u.push(`onDelete: ${this.quote(a)}`),l&&u.push(`onUpdate: ${this.quote(l)}`);let d=u.length>0?`, { ${u.join(", ")} }`:"",m=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.foreignKey(${this.quote(r)}, ${this.quote(n)}, ${this.quote(o)}${d});`,"});"],c=s||z(e.table,r,n),p=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.dropConstraint(${this.quote(c)});`,"});"];return {up:m,down:p}}generateDropForeignKeyCode(t){let e=t.constraint||t.data?.relation?.name;if(!e)return {up:null,down:null};let r=t.table||t.data?.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(e)});`,"});"],o=[`// TODO: reverse FK drop for ${this.quote(e)} on ${this.quote(r)}`];return {up:n,down:o}}generateAddUniqueCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=`[${(e.columns||[]).map(u=>r?.getColumns().find(m=>m.columnName===u)?.databaseName||u).map(u=>this.quote(u)).join(", ")}]`,s=e.name||"mandatory",a=[`this.schema.addUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(s)} });`],l=[`this.schema.dropUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(s)} });`];return {up:a,down:l}}generateDropConstraintCode(t){let e=t.data,r=t.table||e.table,n=t.constraint||e.name;if(!n||!r)return {up:null,down:null};if(e.type==="primary_key"){let a=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});"],l=[`// TODO: reverse primary key drop on ${this.quote(r)}`];return {up:a,down:l}}if(e.type==="unique"){let a=e.column,l=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],u=[`// TODO: reverse unique constraint drop for ${this.quote(a)} on ${this.quote(r)}`];return {up:l,down:u}}if(e.expression!==void 0){let a=[`this.schema.dropCheck(${this.quote(r)}, ${this.quote(n)});`],l=[`// TODO: reverse check constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:a,down:l}}let o=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],s=[`// TODO: reverse constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:o,down:s}}generateAddCheckCode(t){let e=t.data,r=[`this.schema.addCheck(${this.quote(e.table)}, ${this.quote(e.expression)}, { constraintName: ${this.quote(e.name)} });`],n=[`this.schema.dropCheck(${this.quote(e.table)}, ${this.quote(e.name)});`];return {up:r,down:n}}generateAddPrimaryKeyCode(t){let e=t.data,o=this.models.find(u=>u.table===e.table)?.getColumns().find(u=>u.columnName===e.columns[0])?.primaryKeyConstraintName||Ne(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||Ne(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!==""&&!At(e,r.defaultValue)&&!Dt(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)})`:Nn.BUILTIN_COLUMN_TYPES.has(r)?`table.${r}(${this.quote(e)})`:t.length!=null?`table.custom(${this.quote(e)}, ${this.quote(r)}, ${t.length})`:`table.custom(${this.quote(e)}, ${this.quote(r)})`}resolveRelationDetails(t){let e=t.table,r="id";if(t.relation.type==="belongsTo"){let l=t.relation.model();e=l.table;let u=l.primaryKey||"id";r=l.getColumns().find(c=>c.columnName===u)?.databaseName||u;}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){e=q(t.relation.manyToManyOptions.throughModel);let l=q(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=q(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:q(t.relation.constraintName)||void 0;return {sourceColumn:s,referencedTable:e,referencedColumn:r,constraintName:a}}quote(t){return `"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}formatDefaultValue(t){return t==null?"null":t==="NULL"?'"NULL"':typeof t=="boolean"||typeof t=="number"?t.toString():t==="TRUE"||t==="true"?"true":t==="FALSE"||t==="false"?"false":this.quote(String(t))}};Nn.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 Sn=Nn;function pg(i){return i.replace(/\s+/g," ").trim()}function yg(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function fg(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 hg(i,t){return t.length===0?i:`${i} ${t.join(" ")}`}function Ye(i,t){let e=pg(t.toLowerCase()),r=yg(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}=fg(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?hg(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 qn=class i{constructor(t){this.emptyStatements=[/^alter table [`'"]?[\w]+[`'"]?\s*$/i];this.sql=t,this.models=Object.values(this.sql._models),this.data={columnsToAdd:[],columnsToDrop:[],columnsToModify:[],indexesToAdd:[],indexesToDrop:[],uniquesToAdd:[],uniquesToDrop:[],checksToAdd:[],checksToDrop:[],tablesToAdd:[],relationsToAdd:[],relationsToDrop:[],relationsToModify:[],primaryKeysToAdd:[],primaryKeysToDrop:[],primaryKeysToModify:[]};}static async makeDiff(t){let e=new i(t);return await Promise.all(e.models.map(async r=>{let n=await e.sql.getTableSchema(r.table),o={columns:r.getColumns().filter(y=>y?.type!==void 0&&y?.type!==null),indexes:r.getIndexes(),relations:r.getRelations()};if(!n.columns.length){e.data.tablesToAdd.push({table:r.table,columns:o.columns});for(let w of o.indexes)n.indexes.map(N=>N.name).includes(w.name)||e.data.indexesToAdd.push({table:r.table,index:w.name});let y=r.getUniques?.()||[];for(let w of y)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 N=q(w.constraintName);n.foreignKeys.find(R=>R.name===N)||e.data.relationsToAdd.push({table:r.table,relation:w,onDelete:w.onDelete,onUpdate:w.onUpdate});}return}for(let y of o.columns)n.columns.some(w=>w.name===y.databaseName||w.name===y.columnName)||e.data.columnsToAdd.push({table:r.table,column:y});let s=r.getColumns();for(let y of n.columns)s.some(w=>w.databaseName===y.name||w.columnName===y.name)||e.data.columnsToDrop.push({table:r.table,column:y.name});for(let y of o.indexes)n.indexes.map(T=>T.name).includes(y.name)||e.data.indexesToAdd.push({table:r.table,index:y.name});let a=r.getUniques?.()||[];for(let y of a)n.indexes.some(w=>w.name===y.name&&w.isUnique)||e.data.uniquesToAdd.push({table:r.table,name:y.name||"mandatory",columns:y.columns});let l=n.foreignKeys.map(y=>y.name);for(let y of n.indexes)y.isUnique||l.includes(y.name)||o.indexes.map(w=>w.name).includes(y.name)||e.data.indexesToDrop.push({table:r.table,index:y.name});for(let y of n.indexes){if(!y.isUnique||y.name==="PRIMARY")continue;(r.getUniques?.()||[]).map(w=>w.name).includes(y.name)||e.data.uniquesToDrop.push({table:r.table,name:y.name});}let u=r.getChecks?.()||[];for(let y of u)n.checkConstraints.some(w=>w.name===y.name)||e.data.checksToAdd.push({table:r.table,name:y.name,expression:y.expression});let d=new Set(u.map(y=>y.name)),m=o.columns.filter(y=>Array.isArray(y.type)),c=new Set(m.map(y=>y.databaseName||y.columnName));for(let y of n.checkConstraints)if(!d.has(y.name)){let T=[...c].find(w=>{let N=w.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),x=new RegExp(`[\\["\\[]?${N}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),R=new RegExp(`[\\("\\[]?${N}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return x.test(y.expression)||R.test(y.expression)});if(T){let w=m.find(x=>(x.databaseName||x.columnName)===T),N=n.columns.find(x=>x.name===T);if(w&&N?.enumValues&&Array.isArray(w.type)){let x=[...w.type].sort(),R=[...N.enumValues].sort();if(!(x.length===R.length&&x.every((I,A)=>I===R[A]))){e.data.checksToDrop.push({table:r.table,name:y.name});let I=e.sql.getDbType(),A=I==="mssql"?"[":'"',W=I==="mssql"?"]":'"',pe=w.type.map(B=>`'${B.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:y.name,expression:`${A}${T}${W} IN (${pe})`});}}}else e.data.checksToDrop.push({table:r.table,name:y.name});}for(let y of o.columns){let T=n.columns.find(x=>x.name===y.databaseName||x.name===y.columnName);if(!T)continue;let w=!e.areColumnsEqual(T,y,n.indexes),N=e.getDefaultChange({table:r.table,dbColumns:T,modelColumn:y});(w||N)&&e.data.columnsToModify.push({table:r.table,dbColumns:T,modelColumn:y});}for(let y of o.relations){if(y.type!=="belongsTo"&&y.type!=="manyToMany")continue;if(y.type==="manyToMany"&&y.manyToManyOptions){let N=q(y.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:N,relation:{type:"belongsTo",model:()=>r,columnName:q(y.manyToManyOptions.leftForeignKey),foreignKey:y.manyToManyOptions.leftForeignKey,constraintName:y.constraintName?q(y.constraintName):z(N,q(y.manyToManyOptions.leftForeignKey||We(r.table)),r.table),onDelete:y.onDelete,onUpdate:y.onUpdate},onDelete:y.onDelete,onUpdate:y.onUpdate});continue}let T=q(y.constraintName);if(T&&n.foreignKeys.some(N=>N.name===T))continue;n.foreignKeys.find(N=>e.relationMatchesDbRelation(r,y,N))||e.data.relationsToAdd.push({table:r.table,relation:y,onDelete:y.onDelete,onUpdate:y.onUpdate});}let p=new Set(o.relations.filter(y=>y.type==="belongsTo").map(y=>{let T=q(y.foreignKey)||y.columnName,N=r.getColumns().find(x=>x.columnName===T)?.databaseName||T;return q(y.constraintName)||z(r.table,N,y.model().table)}));for(let y of n.foreignKeys){if(y.name&&p.has(y.name))continue;o.relations.find(w=>w.type!=="belongsTo"&&w.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,w,y))||e.data.relationsToDrop.push({table:r.table,relation:y});}for(let y of o.relations){if(y.type!=="belongsTo"&&y.type!=="manyToMany")continue;let T=n.foreignKeys.find(w=>e.relationMatchesDbRelation(r,y,w));T&&!e.areRelationsEqual(T,y)&&e.data.relationsToModify.push({table:r.table,dbRelation:T,modelRelation:y,onDelete:y.onDelete,onUpdate:y.onUpdate});}let g=r.primaryKey;if(g&&!n.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[g]}),n.primaryKey&&!g&&e.data.primaryKeysToDrop.push({table:r.table,columns:n.primaryKey.columns,name:n.primaryKey.name}),g&&n.primaryKey){let y=r.getColumns().find(T=>T.columnName===g);y&&!e.arePrimaryKeysEqual(n.primaryKey,y)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:n.primaryKey,modelPrimaryKey:g});}})),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 er(this.sql).generateOperations(this.data);return new Sn(this.sql).generateCode(e)}getSqlStatementsByPhase(){let t=new er(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=Ye(o,t.dataType),a=typeof e.type=="string"?Ye(o,e.type):void 0,l=s.split(" ").filter(d=>d!=="unsigned"&&d!=="zerofill").join(" ");if(a&&n&&(n=l===a),Array.isArray(e.type)&&(o==="mysql"||o==="mariadb")){let d=[...e.type].sort(),m=t.enumValues?[...t.enumValues].sort():null;m&&n&&(n=d.length===m.length&&d.every((c,p)=>c===m[p]));}e.length!=null&&t.length!=null&&n&&(n=t.length===e.length);let u=a==="real"||a==="double"||a==="float";if(e.precision!=null&&t.precision!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.precision===e.precision)),e.scale!=null&&t.scale!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.scale===e.scale)),typeof e.type=="string"&&(a==="timestamp"||a==="time")&&(o==="postgres"||o==="cockroachdb")&&e.withTimezone!==void 0&&t.withTimezone!==void 0&&n&&(n=!!t.withTimezone==!!e.withTimezone),e.constraints?.nullable!==void 0){let d=e.constraints.nullable,m=t.isNullable;n=n&&d===m;}if(o==="mysql"||o==="mariadb"){if(e.unsigned!==void 0){let d=e.unsigned??false,m=t.unsigned??false;n&&(n=d===m);}if(e.zerofill!==void 0){let d=e.zerofill??false,m=t.zerofill??false;n&&(n=d===m);}}if(e.stringMode!==void 0){let d=e.stringMode??false,m=t.stringMode??false;n&&(n=d===m);}return n}areRelationsEqual(t,e){let r=q(e.constraintName),n=r?t.name===r:true;if(e.type==="belongsTo"){let u=e.model(),d=u.primaryKey||"id",m=u.getColumns().find(g=>g.columnName===d),c=u.table,p=m?.databaseName||d;n=n&&t.referencedTable===c&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===p;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let u=q(e.manyToManyOptions.throughModel);n=n&&t.referencedTable===u;}let o=t.onDelete?.toLowerCase(),s=t.onUpdate?.toLowerCase(),a=e.onDelete?.toLowerCase(),l=e.onUpdate?.toLowerCase();return a&&n&&(n=o===a),l&&n&&(n=s===l),n}relationMatchesDbRelation(t,e,r){let n,o=e;if(o&&o.model){if(typeof o.model=="function"&&o.model.table)n=o.model;else if(typeof o.model=="function")try{let y=o.model();y&&y.table&&(n=y);}catch{}}if(!n)return false;let s=e.type==="belongsTo"?n.table:e.type==="manyToMany"&&e.manyToManyOptions?q(e.manyToManyOptions.throughModel):void 0;if(s&&r.referencedTable!==s)return false;let a=q(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),d=(o.type||"belongsTo")==="belongsTo"?q(o.foreignKey):o.columnName,m=l.find(y=>y.columnName===d);m&&(d=m.databaseName);let c=n.primaryKey||"id",g=n.getColumns().find(y=>y.columnName===c)?.databaseName||c;return r.columns.length===1&&r.columns[0]===d&&r.referencedColumns.length===1&&r.referencedColumns[0]===g}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=Ye(e,t.dbColumns.dataType),n=typeof t.modelColumn.type=="string"?Ye(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 Dt(e,t.modelColumn,l)||At(t.modelColumn,l)||t.modelColumn.type==="uuid"&&lf(e,l)?false:"drop"}if(s&&a){let l=String(t.dbColumns.defaultValue),u=String(t.modelColumn.constraints?.default),d=this.normalizeDefaultValue(e,r,l),m=this.normalizeDefaultValue(e,n||r,u);return d!==m?"set":false}return false}normalizeDefaultValue(t,e,r){let n=String(r).trim();if(!n)return n;if(t==="postgres"||t==="cockroachdb"){if(e==="json"||e==="jsonb")try{n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::(jsonb?|[a-zA-Z_ ]+[\[\]]*)/g,"");let s=n.match(/^'(.*)'$/s);if(s&&(n=s[1]),n==="{}"||n==="")return "{}";let a=JSON.parse(n);return JSON.stringify(a)}catch{}n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::[a-zA-Z_ ]+[\[\]]*/g,"");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),/^true$/i.test(n)?"true":/^false$/i.test(n)?"false":/^null$/i.test(n)?"null":(n)}if(t==="mysql"||t==="mariadb"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);if(o&&(n=o[1]),/^current_timestamp(?:\(\d+\))?$/i.test(n))return "current_timestamp";if(e==="boolean"){if(/^1$/.test(n))return "true";if(/^0$/.test(n))return "false"}return n}if(t==="sqlite"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),n.toLowerCase()}return n}async processManyToMany(){let t=new Set;for(let e of this.models){let r=e.getRelations();for(let n of r){if(n.type!=="manyToMany"||!n.manyToManyOptions||n.manyToManyOptions.wasModelProvided)continue;let o=q(n.manyToManyOptions.throughModel);if(t.has(o))continue;t.add(o);let s=this.models.find(B=>B.table===n?.manyToManyOptions?.primaryModel),a=n.model();if(!s||!a)continue;let l=s.primaryKey||"id",u=a.primaryKey||"id",d=s.getColumns().find(B=>B.columnName===l),m=a.getColumns().find(B=>B.columnName===u);if(!d||!m)continue;let c=q(n.manyToManyOptions.leftForeignKey)||l,p=q(n.manyToManyOptions.rightForeignKey)||u,g=await this.sql.getTableSchema(o);if(!g.columns.length){this.data.tablesToAdd.push({table:o,columns:[this.clonePkAsColumn(d,c),this.clonePkAsColumn(m,p)]}),this.pushM2mFkRelations({throughTable:o,leftModel:s,rightModel:a,leftFkName:c,rightFkName:p,onDelete:n.onDelete,onUpdate:n.onUpdate,constraintName:void 0});continue}let y=this.clonePkAsColumn(d,c),T=this.clonePkAsColumn(m,p),w=g.columns.find(B=>B.name===c),N=g.columns.find(B=>B.name===p),x=w?this.areColumnsEqual(w,y,g.indexes):false,R=N?this.areColumnsEqual(N,T,g.indexes):false;for(let B of g.foreignKeys){let oe=B.referencedTable===s.table,et=B.referencedTable===a.table;if(!oe&&!et)continue;let Re=oe?c:p,_e=B.columns[0];_e&&_e!==Re&&(this.data.relationsToDrop.push({table:o,relation:B}),_e!==c&&_e!==p&&this.data.columnsToDrop.push({table:o,column:_e}));}let D={};x||(D[y.databaseName]=y),R||(D[T.databaseName]=D[T.databaseName]||T);for(let B of Object.keys(D))this.data.columnsToAdd.push({table:o,column:D[B]});let I=this.buildBelongsToRelation(o,()=>s,c,l,void 0,n.onDelete,n.onUpdate),A=this.buildBelongsToRelation(o,n.model,p,u,void 0,n.onDelete,n.onUpdate),W=g.foreignKeys.find(B=>B.referencedTable===s.table&&B.columns.length===1&&B.columns[0]===c),pe=g.foreignKeys.find(B=>B.referencedTable===a.table&&B.columns.length===1&&B.columns[0]===p);if(!W){let B=g.foreignKeys.find(oe=>oe.referencedTable===s.table);B&&this.data.relationsToDrop.push({table:o,relation:B}),this.data.relationsToAdd.push(I);}if(!pe){let B=g.foreignKeys.find(oe=>oe.referencedTable===a.table);B&&this.data.relationsToDrop.push({table:o,relation:B}),this.data.relationsToAdd.push(A);}}}}async removeFkChurnByName(){let t=new Set;for(let n of this.data.relationsToAdd)t.add(n.table);for(let n of this.data.relationsToDrop)t.add(n.table);let e=new Map;for(let n of t){let o=await this.sql.getTableSchema(n),s=new Set((o.foreignKeys||[]).map(a=>a.name).filter(Boolean));e.set(n,s);}let r=new Map;for(let n of this.models){let o=n.getRelations(),s=new Set;for(let a of o){if(a.type!=="belongsTo")continue;let l=a.foreignKey||a.columnName,d=n.getColumns().find(c=>c.columnName===l)?.databaseName||l,m=q(a.constraintName)||z(n.table,d,a.model().table);s.add(m);}r.set(n.table,s);}this.data.relationsToAdd=await Promise.all(this.data.relationsToAdd.map(async n=>{let o=await this.sql.getTableSchema(n.table),s=this.models.find(y=>y.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 y=n.relation.model();u=y.table;let T=y.primaryKey||"id";d=y.getColumns().find(N=>N.columnName===T)?.databaseName||T;}let m=new Set([l,n.relation.columnName].filter(Boolean)),c=o.foreignKeys.some(y=>{if(y.columns.length!==1||y.referencedColumns.length!==1)return false;let T=m.has(y.columns[0]),w=y.referencedTable===u,N=y.referencedColumns[0]===d;return T&&w&&N}),p=q(n.relation.constraintName)||z(n.table,l,u),g=e.get(n.table)||new Set;if(c||p&&g.has(p))return null;if(n.relation.type==="manyToMany"&&n.relation.manyToManyOptions){let y=q(n.relation.manyToManyOptions.throughModel),T=q(n.relation.manyToManyOptions.leftForeignKey),w=q(n.relation.manyToManyOptions.rightForeignKey),N=n.table===y&&n.relation.columnName===T&&n.relation.model().table===s?.table,x=n.table===y&&n.relation.columnName===w&&n.relation.model().table!==s?.table,R=await this.sql.getTableSchema(y),D=R.foreignKeys.some(A=>A.columns.length===1&&A.columns[0]===T&&A.referencedTable===(s?.table||"")),I=R.foreignKeys.some(A=>A.columns.length===1&&A.columns[0]===w&&A.referencedTable===n.relation.model().table);if(N&&D||x&&I)return null}return n})).then(n=>n.filter(Boolean)),this.data.relationsToDrop=await Promise.all(this.data.relationsToDrop.map(async n=>{let o=this.models.find(u=>u.table===n.table);if(!o)return n;let s=o.getRelations(),a=o.getColumns();return s.some(u=>{if(u.type!=="belongsTo")return false;let m=a.find(T=>T.columnName===u.foreignKey)?.databaseName||u.foreignKey,c=u.model(),p=c.primaryKey||"id",y=c.getColumns().find(T=>T.columnName===p)?.databaseName||p;return n.relation.columns.length===1&&n.relation.columns[0]===m&&n.relation.referencedTable===c.table&&n.relation.referencedColumns.length===1&&n.relation.referencedColumns[0]===y})?null:n})).then(n=>n.filter(Boolean));}clonePkAsColumn(t,e){let r=t.type;return r==="bigIncrement"?r="bigint":r==="increment"&&(r="integer"),{columnName:e,databaseName:e,isPrimary:false,type:r,length:t.length,precision:t.precision,scale:t.scale,withTimezone:t.withTimezone,constraints:{nullable:false}}}pushM2mFkRelations(t){let e=this.buildBelongsToRelation(t.throughTable,()=>t.leftModel,t.leftFkName,t.leftModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate),r=this.buildBelongsToRelation(t.throughTable,()=>t.rightModel,t.rightFkName,t.rightModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate);this.data.relationsToAdd.push(e),this.data.relationsToAdd.push(r);}buildBelongsToRelation(t,e,r,n,o,s,a){let l=o?q(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 Zl=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??ut()});It();It();me();var Cn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;let n=e.coerceNumericTypes&&!e.driverOptions?.types?{getTypeParser:(o,s)=>{let a=!s||s==="text";return a&&o===20?l=>BigInt(l):a&&o===1700?l=>Number.parseFloat(l):r.types.getTypeParser(o,s)}}:void 0;this.pool=new r.Pool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions,...n?{types:n}:{}}),this.pool.on("error",o=>{let s=e.onPoolError;if(!s){C.error(`PgDriverAdapter: idle client error - ${o.message}`);return}try{let a=s(o,{type:this.dialect,host:e.host??"",port:e.port??0,database:e.database??""});Promise.resolve(a).catch(l=>C.error(l));}catch(a){C.error(a instanceof Error?a:String(a));}});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.connect()}releaseConnection(t,e){t?.release(e);}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION"),e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=0,o=t.replace(/\?/g,()=>`$${++n}`);if(!r.signal)return (r.connection??this.pool).query(o,e);let s=r.connection??await this.pool.connect(),a=!r.connection,l=()=>{let u=s.processID;u!=null&&this.pool.query("SELECT pg_cancel_backend($1)",[u]).catch(()=>{});};r.signal.addEventListener("abort",l,{once:true});try{return await s.query(o,e)}finally{r.signal.removeEventListener("abort",l),a&&s.release();}}extract(t,e){return e==="rows"?t.rows:e==="raw"?t:t.rowCount}async stream(t,e,r,n){let o=r.connection,s=!o,a=o??await this.pool.connect(),l=await import('pg-query-stream').catch(()=>{throw new K("pg-query-stream")}),u=new PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),d=0,m=t.replace(/\?/g,()=>`$${++d}`),c=new l.default(m,e,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),p=a.query(c),g=0,y=false,T=false,w=false,N=x=>{if(!(!s||w)){w=true;try{a.release(x);}catch{}}};return u.on("close",()=>{if(!(y||T)){T=true;try{p.destroy();}catch{}N();}}),p.on("data",x=>{if(n.onData){g++,Promise.resolve(n.onData(u,x)).then(()=>{g--,y&&g===0&&!T&&(N(),u.end());}).catch(R=>{T=true,N(R),u.destroy(R);});return}u.write(x);}),p.on("end",()=>{y=true,g===0&&!T&&(N(),u.end());}),p.on("error",x=>{T=true,N(x),u.destroy(x);}),u}};var Rn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=r.createPool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.getConnection()}releaseConnection(t,e){if(e){t?.destroy();return}t?.release();}async beginTransaction(t,e){e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await t.beginTransaction();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){if(!r.signal)return (r.connection??this.pool).query(t,e);let n=r.connection??await this.pool.getConnection(),o=!r.connection,s=()=>{let a=n.threadId;a!=null&&this.pool.query(`KILL QUERY ${Number(a)}`).catch(()=>{});};r.signal.addEventListener("abort",s,{once:true});try{return await n.query(t,e)}finally{r.signal.removeEventListener("abort",s),o&&n.release();}}extract(t,e){let r=t;return e==="affectedRows"?r[0]?.affectedRows??0:e==="raw"?t:r[0]}async stream(t,e,r,n){let o=this.pool,s=r.connection??await o.getConnection(),a=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),u=s.connection.query(t,e).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),d=0,m=false,c=false,p=()=>{try{s.release();}catch{}};return u.on("data",g=>{if(n.onData){d++,Promise.resolve(n.onData(a,g)).then(()=>{d--,m&&d===0&&!c&&(p(),a.end());}).catch(y=>{c=true,p(),a.destroy(y);});return}a.write(g);}),u.on("end",()=>{m=true,d===0&&!c&&(p(),a.end());}),u.on("error",g=>{c=true,p(),a.destroy(g);}),a.on("close",()=>{p();}),a}};var _n=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;}createPool(){let t=String(this.input.database??":memory:"),e=this.input.driverOptions?.mode??void 0;return new Promise((r,n)=>{let o=false,s=u=>{o||(o=true,n(new f("SqliteDataSource::createSqlPool","CONNECTION_NOT_ESTABLISHED",u instanceof Error?u:new Error(String(u)))));},a=u=>{if(u){s(u);return}o||(o=true,r());},l=e===void 0?new this.client.Database(t,a):new this.client.Database(t,e,a);l.on("error",u=>{if(o){C.error(`Sqlite3DriverAdapter: ${u instanceof Error?u.message:String(u)}`);return}s(u);}),this.pool=l;})}async closePool(){await new Promise((t,e)=>{this.pool.close(r=>{r&&e(r),t();});});}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){return await this.promisify(t,e,r)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.pool;return new Xl(o,t,e,{onData:n.onData})}promisify(t,e,r){let n=r.sqlLiteOptions??{},o=n.mode||"fetch",s=n.customConnection??r.connection??this.pool;if(["begin","begin transaction","commit","rollback"].includes(t.trim().toLowerCase()))return new Promise((u,d)=>{s.run(t,e,function(m){m&&d(m),u(this.changes);});});if(o==="fetch")return new Promise((u,d)=>{s.all(t,e,(m,c)=>{m&&d(m),u(c||[]);});});if(!n?.typeofModel)return new Promise((u,d)=>{s.run(t,e,function(m){m?d(new Error(m.message)):u(this.changes);});});if(o==="insertOne"||o==="insertMany"){let u=`${t} returning *`;return new Promise((d,m)=>{s.all(u,e,(c,p)=>{if(c)return m(c);d(p||[]);});})}return new Promise((u,d)=>{s.run(t,e,function(m){m?d(new Error(m.message)):u(this.changes);});})}},Xl=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);});}};me();var Mn=class{constructor(t,e,r){this.dialect="mssql";this.jsEnvironment="node";this.pendingTransactions=new Set;this.dialect=t,this.client=r,this.input=e;let n=e.driverOptions,{options:o,...s}=n??{};this.pool=new r.ConnectionPool({server:e.host??"localhost",port:e.port,database:e.database,user:e.username,password:e.password,...s,options:{trustServerCertificate:v.MSSQL_TRUST_SERVER_CERTIFICATE??void 0,...o,abortTransactionOnError:false,enableImplicitTransactions:false}});}async createPool(){await this.pool.connect();}async closePool(){await this.endPendingTransactions(),await this.pool.close();}async reserveConnection(){let t=await this.pool.transaction();return this.pendingTransactions.add(t),t}releaseConnection(t,e){if(!(!t||!this.pendingTransactions.delete(t)))return this.endTransaction(t)}async endPendingTransactions(){let t=[...this.pendingTransactions];this.pendingTransactions.clear();for(let e of t)await this.endTransaction(e);}async endTransaction(t){try{await t.rollback();return}catch(e){C.error(e instanceof Error?e:String(e));}try{await t.request().batch("IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION");}catch(e){C.error(e instanceof Error?e:String(e));}}async beginTransaction(t,e){if(e.isolationLevel){let r=await this.getMssqlTransactionLevel(e.isolationLevel);await t.begin(r);return}await t.begin();}async commitTransaction(t,e){await t.commit(),this.pendingTransactions.delete(t);}async rollbackTransaction(t,e){await t.rollback(),this.pendingTransactions.delete(t);}async execute(t,e,r){let n=this.pool,o=r.connection?r.connection.request():n.request();e.forEach((l,u)=>{o.input(`p${u}`,l);});let s=0,a=t.replace(/\?|@(\d+)/g,()=>`@p${s++}`);if(r.signal){let l=()=>{try{o.cancel();}catch{}};r.signal.addEventListener("abort",l,{once:true});try{return await o.query(a)}finally{r.signal.removeEventListener("abort",l);}}return o.query(a)}extract(t,e){return e==="affectedRows"?t.rowsAffected[0]:e==="raw"?t:t.recordset}async stream(t,e,r,n){let o=r.connection??this.pool,s=new PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),a=o.request();a.stream=true,e.forEach((p,g)=>{a.input(`p${g}`,p);});let l=0,u=t.replace(/\?|@(\d+)/g,()=>`@p${l++}`),d=0,m=false,c=false;return a.on("row",p=>{if(!c){if(n.onData){d++,Promise.resolve(n.onData(s,p)).then(()=>{d--,m&&d===0&&!c&&s.end();}).catch(g=>{c=true,s.destroy(g);});return}s.write(p);}}),a.on("error",p=>{c=true,s.destroy(p);}),a.on("done",()=>{m=true,d===0&&!c&&s.end();}),a.query(u),s}async getMssqlTransactionLevel(t){let e=await import('mssql').then(r=>r.default.ISOLATION_LEVEL).catch(r=>{throw C.error(r),new K("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 f("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${t}`)}}};var Ng=()=>{Te({name:"pg",dialects:["postgres","cockroachdb"],create:async({dialect:i,input:t})=>{let e=(await ae.getDriver(i)).client;return new Cn(i,t,e)}}),Te({name:"mysql2",dialects:["mysql","mariadb"],create:async({dialect:i,input:t})=>{let e=(await ae.getDriver(i)).client;return new Rn(i,t,e)}}),Te({name:"sqlite3",dialects:["sqlite"],create:async({dialect:i,input:t})=>{let e=(await ae.getDriver(i)).client;return new _n(i,t,e)}}),Te({name:"mssql",dialects:["mssql"],create:async({dialect:i,input:t})=>{let e=(await ae.getDriver(i)).client;return new Mn(i,t,e)}});};Ng();var Og=async i=>{if(i==="bun"){await(await Promise.resolve().then(()=>(gf(),hf))).registerBunDrivers();return}if(i==="web"){(await Promise.resolve().then(()=>(ou(),nu))).registerWebDrivers();return}if(i==="react-native"){await(await Promise.resolve().then(()=>(ou(),nu))).registerReactNativeDrivers();return}},In=async(i,t)=>{let e=or(t?.jsEnvironment);await Og(e);let r=await df(i,e,t?.driver,t);return await r.createPool(),r};var rr=class rr{constructor(){}static run(t,e){return rr.storage.run(t,e)}static getTransaction(){return rr.storage.getStore()}};rr.storage=new AsyncLocalStorage;var Ze=rr;var nr=class i{constructor(t,e,r=false,n=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=Ke(ne().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")&&ft("BEGIN TRANSACTION",this.sql.logs);let t=this.sql.driverAdapter,e=this.sql.sqlConnection;if(!t||!e)throw new f("TRANSACTION::transaction","CONNECTION_NOT_ESTABLISHED");try{await t.beginTransaction(e,{isolationLevel:this.isolationLevel,rawQuery:(r,n)=>this.sql.rawQuery(r,n??[])}),this.isActive=!0;}catch(r){throw await this.releaseConnection(r),r}}async commit(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new f("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");C.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let r=this.getSavePointName();switch(this.sql.type){case "mssql":break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "sqlite":await this.sql.rawQuery(`RELEASE SAVEPOINT ${r}`);break}this.isActive=false;return}let e;try{let r=this.sql.driverAdapter,n=this.sql.sqlConnection;(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&ft("COMMIT",this.sql.logs),r&&n&&await r.commitTransaction(n,{rawQuery:(o,s)=>this.sql.rawQuery(o,s??[])});}catch(r){throw e=r,C.error(r),r}finally{this.isActive=false,await this.releaseConnection(e);}}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new f("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");C.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let r=this.getSavePointName();switch(this.sql.type){case "mssql":await this.sql.rawQuery(`ROLLBACK TRANSACTION ${r}`);break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":await this.sql.rawQuery(`ROLLBACK TO SAVEPOINT ${r}`);break;case "sqlite":await this.sql.rawQuery(`ROLLBACK TO ${r}`);break;default:throw new f("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}this.isActive=false;return}let e;try{let r=this.sql.driverAdapter,n=this.sql.sqlConnection;(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&ft("ROLLBACK",this.sql.logs),r&&n&&await r.rollbackTransaction(n,{rawQuery:(o,s)=>this.sql.rawQuery(o,s??[])});}catch(r){throw e=r,C.error(r),r}finally{this.isActive=false,await this.releaseConnection(e);}}async releaseConnection(t){if(this.connectionReleased)return;let e=null;try{await this.sql.driverAdapter?.releaseConnection(this.sql.sqlConnection,t);}catch(r){e=r,C.error(r);}this.sql.sqlConnection=null;try{await this.sql.disconnect();}catch(r){C.warn(`Transaction::releaseConnection - disconnect failed: ${r?.message??r}`);}if(this.connectionReleased=true,e)throw e}getIsolationLevelQuery(){if(!this.isolationLevel||this.sql.type==="mssql")return "";if(this.sql.type==="sqlite"&&this.isolationLevel!=="SERIALIZABLE")throw new f("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 f("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}};var su=Symbol.for("hysteria.orm.SqlDataSource"),Nf,qf,Be=class i extends(qf=Ot,Nf=su,qf){constructor(e){super(e);this[Nf]=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=ne().crypto.randomUUID();this.logicalSourceId=ne().crypto.randomUUID();this.cacheAdapter=new Ur;this.migrationConfig={path:v.MIGRATION_PATH||"database/migrations",lock:true,transactional:true,lockTimeout:3e4};this.seederConfig={path:"database/seeders"};this.zodEngine=null;this.lazyLoad=false;this.connecting=null;this.cloneRegistry=new Set;this.clonedFrom=null;this.sqlType=e?.type||this.type;let r=e;this.inputDetails={...e,type:this.sqlType,host:r?.host??this.host,port:r?.port??this.port,username:r?.username??this.username,password:r?.password??this.password,database:r?.database??this.database,logs:r?.logs??this.logs},this.inputDetails.connectionPolicies=e?.connectionPolicies||{retry:{maxRetries:0,delay:0}},this.inputDetails.queryFormatOptions=e?.queryFormatOptions||{language:kt(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&&su in e&&e[su]===true}get isClsEnabled(){return this.clsEnabled}getOnSlaveServerFailure(){return this.onSlaveServerFailure}addObserver(e){return this.observerChain||(this.observerChain=new Tt([])),this.observerChain.add(e),this}static async useConnection(e,r){let n=new i(e);await n.connect();try{await r(n),n.isConnected&&await n.disconnect();}catch(o){throw n.isConnected&&await n.disconnect(),o}}async connect(){if(this.isConnected||this.connecting)throw new f("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");this.connecting=this.openConnection().finally(()=>{this.connecting=null;}),await this.connecting;}async openConnection(){try{this.driverAdapter=await In(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 In(e.sqlType,e.inputDetails),e.sqlPool=e.driverAdapter.pool??null,e.ownsPool=!0;}));}catch(e){this.sqlPool=null,this.ownsPool=false,await this.closePoolOnFailure();for(let r of this.slaves)r.ownsPool&&await r.closePoolOnFailure();for(let r of this.slaves)r.ownsPool&&(r.sqlPool=null,r.ownsPool=false);throw e}}async closePoolOnFailure(){let e=this.driverAdapter;if(!e)return;let r;try{await Promise.race([e.closePool(),new Promise(n=>{r=setTimeout(n,2e3),r.unref?.();})]);}catch(n){C.warn(`SqlDataSource::openConnection - closing a partially built pool failed: ${n?.message??n}`);}finally{r&&clearTimeout(r);}}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new f("SqlDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.openConnection().finally(()=>{this.connecting=null;})),await this.connecting;}}get isInGlobalTransaction(){return !!this.globalTransaction}get models(){let e=this;return new Proxy(this._models,{get(r,n){if(typeof n=="string"&&n in r)return e.from(r[n])}})}getSlave(){if(this.sqlConnection||!this.slaves.length)return null;if(this.slaveAlgorithm==="random")return this.slaves[Math.floor(Math.random()*this.slaves.length)];let e=this.slaves[this.roundRobinIndex%this.slaves.length];return this.roundRobinIndex=(this.roundRobinIndex+1)%this.slaves.length,e}getTransactionBoundSqlDataSource(){if(this.globalTransaction?.isActive)return this.globalTransaction.sql;if(this.clsEnabled){let e=Ze.getTransaction();if(e?.isActive&&e.sql.logicalSourceId===this.logicalSourceId)return e.sql}return null}hasOpenTransaction(){if(this.getTransactionBoundSqlDataSource())return true;for(let e of this.cloneRegistry)if(e.sqlConnection)return true;return false}async useCache(e,r,...n){if(!this.cacheAdapter)throw new f("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new f("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=zl(JSON.stringify(u)),m=d?`${e}:${d}`:e,c=await this.cacheAdapter.get(m);if(c!==void 0)return c;let p=await o(...u);return this.hasOpenTransaction()||await this.cacheAdapter.set(m,p,l),p}async invalidCache(e,...r){if(!this.cacheAdapter)throw new f("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new f("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=zl(JSON.stringify(r)),a=s?`${e}:${s}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new f("SqlDataSource::invalidateAllCache","CACHE_ADAPTER_NOT_CONFIGURED");await this.cacheAdapter.invalidateAll(e);}async clone(e){let r=new i(this.inputDetails);return r.id=this.id,r.logicalSourceId=this.logicalSourceId,r.observerChain=this.observerChain,r.clonedFrom=this,this.cloneRegistry.add(r),r.sqlType==="sqlite"||!!e?.shouldRecreatePool?(r.driverAdapter=await In(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 E(Zl(e,r),n);return (r?.alias||r?.only)&&o.table(e,r.alias),r?.only&&o.fromOnly(),o}return new Ve(e,n)}fromRaw(e,r=[],n){let o=this.getTransactionBoundSqlDataSource()??this;return new E(Zl("",n),o).fromRaw(e,r)}schema(){if(!this.isConnected&&!this.lazyLoad)throw new f("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new Xt(this,this.getDbType())}async startGlobalTransaction(e){for(;this.globalTransactionLock;)await this.globalTransactionLock;if(this.globalTransaction?.isActive)throw new f("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 nr(n,e?.isolationLevel),await this.globalTransaction.transaction(),this.globalTransaction}catch(n){throw this.globalTransaction=null,n}finally{r(),this.globalTransactionLock=null;}}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new f("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");try{await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async rollbackGlobalTransaction(e){if(!this.globalTransaction){C.warn("SqlDataSource::rollbackGlobalTransaction - GLOBAL_TRANSACTION_NOT_STARTED");return}try{await this.globalTransaction.rollback({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async transaction(e,r){let n=typeof e=="function"?r:e,o=()=>{n?.isolationLevel&&C.warn(`SqlDataSource::transaction - ignoring isolation level "${n.isolationLevel}": a nested transaction is a savepoint on the outer connection, which keeps its own level`);};if(this.globalTransaction?.isActive)return o(),typeof e=="function"?this.globalTransaction.nestedTransaction(e):this.globalTransaction.nestedTransaction();let s=this.clsEnabled?Ze.getTransaction():void 0;if(s?.isActive&&s.sql.logicalSourceId===this.logicalSourceId)return o(),typeof e=="function"?s.nestedTransaction(e):s.nestedTransaction();let a=await this.clone();a.sqlConnection=await a.getConnection();let l=new nr(a,n?.isolationLevel);if(await l.transaction(),typeof e=="function")try{let u=this.clsEnabled?await Ze.run(l,()=>e(l)):await e(l);return await l.commit({throwErrorOnInactiveTransaction:!1}),u}catch(u){try{await l.rollback({throwErrorOnInactiveTransaction:!1});}catch(d){C.error(d instanceof Error?d:String(d));}throw u}return l}getModelManager(e){if(!this.isConnected&&!this.lazyLoad)throw new f("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");let r=this.getTransactionBoundSqlDataSource()??this;return new tt(e,r)}getPool(){if(!this.sqlPool)throw this.lazyLoad?new f("SqlDataSource::getPool - call ensureConnected() or connect() first when using lazyLoad","CONNECTION_NOT_ESTABLISHED"):new f("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 f("SqlDataSource::getConnection","CONNECTION_NOT_ESTABLISHED");return e.reserveConnection()}async disconnect(){if(this.clonedFrom?.cloneRegistry.delete(this),!this.isConnected){C.warn("Connection already closed or not established");return}if(!this.ownsPool){if(this.sqlConnection)try{this.driverAdapter?.releaseConnection(this.sqlConnection);}catch(e){C.warn(`SqlDataSource::disconnect - releasing borrowed connection failed: ${e?.message??e}`);}this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{C.warn("SqlDataSource::disconnect - Error while rolling back global transaction");}if(this.lockConnection){try{this.driverAdapter?.releaseConnection(this.lockConnection);}catch(e){C.warn(`SqlDataSource::disconnect - releasing lock connection failed: ${e?.message??e}`);}this.lockConnection=null,this.lockKeyToId.clear();}this.clonedFrom||await this.cacheAdapter?.disconnect?.(),this.slaves.length&&await Promise.all(this.slaves.map(async e=>{try{await e.disconnect();}catch(r){C.warn(`SqlDataSource::disconnect - Error while closing slave connection: ${r.message}`);}})),C.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=`
|
|
145
145
|
SELECT table_schema AS schema_name, table_name
|
|
146
146
|
FROM information_schema.tables
|
|
147
147
|
WHERE table_type = 'BASE TABLE'
|
|
@@ -167,7 +167,7 @@ Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]
|
|
|
167
167
|
WHERE table_type = 'BASE TABLE'
|
|
168
168
|
AND table_schema NOT IN ('information_schema', 'pg_catalog', 'mysql', 'sys', 'performance_schema')
|
|
169
169
|
ORDER BY table_schema, table_name;
|
|
170
|
-
`;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 _.warn(`Failed to introspect schema: ${n.message}`),[]}}async syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){_.warn("Syncing schema with SQLite is not supported, skipping...");return}let n=(await wn.makeDiff(this)).getSqlStatements();if(!n.length){_.info("No new changes detected between database schema and models metadata");return}if(_.info(`Generated ${n.length} SQL statements to sync schema`),!e?.transactional){for(let o of n)await this.rawQuery(o);_.info(`Synced schema with ${n.length} SQL statements`);return}await this.transaction(async o=>{for(let s of n)await o.sql.rawQuery(s);}),_.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=>Y(e,r,a,this.getDbType(),"raw"));let s=this.getTransactionBoundSqlDataSource()??this;return Y(e,r,s,this.getDbType(),"raw")}rawStatement(e){return new O(e)}jsonSet(e,r,n,o){return Md(e,r,n,o)}jsonInsert(e,r,n,o){return Od(e,r,n,o)}jsonRemove(e,r,n){return Ad(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 Yy(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new h("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await Wl(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new h("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await Gy(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 nn(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(mt(this.getDbType(),l))return [];throw l}let s=this.getDbType();if(s==="sqlite")return o.map(l=>{let u=String(l.type||"").toLowerCase(),d=Ge(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=Ge(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,g=l.column_default??l.COLUMN_DEFAULT??l.defaultValue??l.dflt_value??null,y=s==="mariadb"&&g==="NULL"?null:g,w=l.char_length!=null?Number(l.char_length):null,T=l.numeric_precision!=null?Number(l.numeric_precision):null,S=l.numeric_scale!=null?Number(l.numeric_scale):null,x=l.timezone!=null?!!l.timezone:/with time zone/.test(String(l.column_type||l.udt_name||d||"").toLowerCase()),C=null,I=String(l.column_type||l.COLUMN_TYPE||""),D=I.match(/^enum\((.+)\)$/i);D&&(C=D[1].split(",").map(Xe=>Xe.trim().replace(/^'|'$/g,"")));let A=I.toLowerCase(),L=A.includes(" unsigned"),ce=A.includes(" zerofill"),oe=new Set(["text","tinytext","mediumtext","longtext","varchar","char","nvarchar","nchar","ntext","character varying","character"]).has(c);return {name:u,dataType:c,isNullable:p,defaultValue:y,length:w,precision:T,scale:S,withTimezone:x,enumValues:C,unsigned:L,zerofill:ce,stringMode:oe}});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,g=new RegExp(`[\\["\\[]?${d}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),y=new RegExp(`[\\("\\[]?${d}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return g.test(p)||y.test(p)});if(c){let m=c.expression,p=m.match(/IN\s*\(([^)]+)\)/i);if(p)u.enumValues=p[1].split(",").map(g=>g.trim().replace(/^'|'$/g,""));else {let g=m.match(/ARRAY\[([^\]]+)\]/i);g&&(u.enumValues=g[1].split(",").map(y=>y.trim().replace(/::[a-z ]+$/i,"").replace(/^'|'$/g,"")));}}}}return a}async hasTable(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new on(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 sn(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 an(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 ln(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 un(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 dn]).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 mn(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 tn(e)]).sql,o=this.getDbType(),s=[];try{let l=await this.rawQuery(n);s=this.extractRowsFromRawResult(l);}catch(l){if(mt(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(g=>g.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 en(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(mt(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 rn(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(mt(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 Xr(e)]).sql,o=[];try{let a=await this.rawQuery(n);o=this.extractRowsFromRawResult(a);}catch(a){if(mt(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 _.info("SQLite uses automatic file-based locking, advisory locks not needed"),!0;default:return _.warn(`Advisory locks not implemented for database type: ${n}`),!0}}catch(o){let s=o instanceof Error?o:new Error(String(o));return _.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 _.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(n){let o=n instanceof Error?n:new Error(String(n));return _.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 h("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 Tf=class{constructor(t){this.chain=new bt(t);}get chainInstance(){return this.chain}add(t){this.chain.add(t);}};At();function wf(i,t){if(t instanceof Be)return t;let e=typeof t=="function"?t(i):i[t];if(!e||!(e instanceof Be))throw new h("atomic::resolveSqlDataSource","ATOMIC_DATASOURCE_RESOLUTION_FAILED");return e}function Dt(i,t){let e=typeof i=="string"?{dataSource:i,isolationLevel:t}:i??{};return (r,n,o)=>{let s=o.value;if(!s||typeof s!="function")throw new h("atomic::descriptor","ATOMIC_INVALID_METHOD");return o.value=async function(...a){let l;if(e.dataSource?l=wf(this,e.dataSource):Dt.sqlDataSource?l=Dt.sqlDataSource:l=wf(this,"sql"),!l.isClsEnabled)throw new h("atomic::descriptor","ATOMIC_CLS_DISABLED");return await l.transaction(async()=>await s.apply(this,a),{isolationLevel:e.isolationLevel})},o}}(t=>{})(Dt||(Dt={}));var tu=class{constructor(t){this.dbType=t,this.migrationName=It.basename(fileURLToPath(import.meta.url)),this.schema=new le(this.dbType);}};async function Mg(i){try{return import(pathToFileURL(i).href)}catch{let e=createRequire(import.meta.url)(i);return {default:e.default||e,...e}}}async function Og(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 xn.promises.unlink(r).catch(()=>{});}}async function qf(i,t){let e=It.isAbsolute(i)?i:It.resolve(process.cwd(),i);return e.endsWith(".ts")?Og(e):Mg(e)}var ru=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
|
|
170
|
+
`;try{let n=await this.rawQuery(r),o=this.extractRowsFromRawResult(n),s={dialect:e,tables:[]},a={};for(let l of o){let u=String(l.schema_name||l.SCHEMA_NAME||"public"),d=String(l.table_name||l.TABLE_NAME||l.name||""),m=`${u}.${d}`;!a[m]&&d&&(a[m]={name:d,columns:[]},s.tables.push(a[m]));}return [s]}catch(n){return C.warn(`Failed to introspect schema: ${n.message}`),[]}}async syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){C.warn("Syncing schema with SQLite is not supported, skipping...");return}let n=(await qn.makeDiff(this)).getSqlStatements();if(!n.length){C.info("No new changes detected between database schema and models metadata");return}if(C.info(`Generated ${n.length} SQL statements to sync schema`),!e?.transactional){for(let o of n)await this.rawQuery(o);C.info(`Synced schema with ${n.length} SQL statements`);return}await this.transaction(async o=>{for(let s of n)await o.sql.rawQuery(s);}),C.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=>Y(e,r,a,this.getDbType(),"raw"));let s=this.getTransactionBoundSqlDataSource()??this;return Y(e,r,s,this.getDbType(),"raw")}rawStatement(e){return new M(e)}jsonSet(e,r,n,o){return Dd(e,r,n,o)}jsonInsert(e,r,n,o){return Id(e,r,n,o)}jsonRemove(e,r,n){return $d(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 rf(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new f("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await Jl(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new f("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await tf(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 an(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(mt(this.getDbType(),l))return [];throw l}let s=this.getDbType();if(s==="sqlite")return o.map(l=>{let u=String(l.type||"").toLowerCase(),d=Ye(s,u),m=new Set(["text","varchar","char"]);return {name:l.name,dataType:d,isNullable:l.notnull===0,defaultValue:l.dflt_value??null,withTimezone:null,stringMode:m.has(d)}});let a=o.map(l=>{let u=String(l.column_name||l.COLUMN_NAME||l.name||""),d=String(l.data_type||l.DATA_TYPE||l.type||"").toLowerCase(),m=Ye(s,d),c=l.is_nullable!==void 0?l.is_nullable:l.IS_NULLABLE!==void 0?l.IS_NULLABLE:void 0,p=typeof c=="string"?c.toLowerCase()!=="no":typeof c=="boolean"?c:l.notnull!==void 0?l.notnull===0:true,g=l.column_default??l.COLUMN_DEFAULT??l.defaultValue??l.dflt_value??null,y=s==="mariadb"&&g==="NULL"?null:g,T=l.char_length!=null?Number(l.char_length):null,w=l.numeric_precision!=null?Number(l.numeric_precision):null,N=l.numeric_scale!=null?Number(l.numeric_scale):null,x=l.timezone!=null?!!l.timezone:/with time zone/.test(String(l.column_type||l.udt_name||d||"").toLowerCase()),R=null,D=String(l.column_type||l.COLUMN_TYPE||""),I=D.match(/^enum\((.+)\)$/i);I&&(R=I[1].split(",").map(et=>et.trim().replace(/^'|'$/g,"")));let A=D.toLowerCase(),W=A.includes(" unsigned"),pe=A.includes(" zerofill"),oe=new Set(["text","tinytext","mediumtext","longtext","varchar","char","nvarchar","nchar","ntext","character varying","character"]).has(m);return {name:u,dataType:m,isNullable:p,defaultValue:y,length:T,precision:w,scale:N,withTimezone:x,enumValues:R,unsigned:W,zerofill:pe,stringMode:oe}});if(s==="postgres"||s==="mssql"){let l=[];try{l=await this.getCheckConstraintInfo(e);}catch{}if(l.length>0)for(let u of a){let d=u.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),m=l.find(c=>{let p=c.expression,g=new RegExp(`[\\["\\[]?${d}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),y=new RegExp(`[\\("\\[]?${d}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return g.test(p)||y.test(p)});if(m){let c=m.expression,p=c.match(/IN\s*\(([^)]+)\)/i);if(p)u.enumValues=p[1].split(",").map(g=>g.trim().replace(/^'|'$/g,""));else {let g=c.match(/ARRAY\[([^\]]+)\]/i);g&&(u.enumValues=g[1].split(",").map(y=>y.trim().replace(/::[a-z ]+$/i,"").replace(/^'|'$/g,"")));}}}}return a}async hasTable(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new ln(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 un(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 dn(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 cn(e)]).sql,o=this.getDbType(),s=[];try{let a=await this.rawQuery(n);s=this.extractRowsFromRawResult(a);}catch{return false}return o==="postgres"||o==="cockroachdb"?s.length>0&&s[0].exists===true:o==="mysql"||o==="mariadb"||o==="mssql"?s.length>0&&parseInt(s[0].count)>0:o==="sqlite"?s.some(a=>a.pk>0):false}async hasUnique(e,r){let n=Array.isArray(r)?r:[r];try{return (await this.getIndexInfo(e)).some(s=>{let a=s.unique??s.isUnique??s.Non_unique,l=a===!0||a==="true"||a==="1"||a===0,u=Array.isArray(s.columns)?s.columns:[s.column_name];return l&&u.length===n.length&&u.every((d,m)=>d===n[m])})}catch{return false}}async hasForeignKey(e,r){try{let o=(await this.getForeignKeyInfo(e)).flatMap(a=>a.columns||a.column||[a.from]);return r.every(a=>o.includes(a))&&o.length>=r.length}catch{return false}}async hasCheckConstraint(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new mn(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 pn]).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 yn(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 on(e)]).sql,o=this.getDbType(),s=[];try{let l=await this.rawQuery(n);s=this.extractRowsFromRawResult(l);}catch(l){if(mt(this.getDbType(),l))return [];throw l}if(o==="mysql"||o==="mariadb"){let l=new Map;for(let u of s){let d=u.Key_name,m=u.Non_unique===0,c=l.get(d)||{name:d,columns:[],isUnique:m};c.columns.push(u.Column_name),l.set(d,c);}return Array.from(l.values())}if(o==="postgres"||o==="cockroachdb"){let l=new Map;for(let u of s){let d=u.index_name,m=!!u.is_unique,c=l.get(d)||{name:d,columns:[],isUnique:m};c.columns.push(u.column_name),l.set(d,c);}return Array.from(l.values())}let a=[];for(let l of s){let u=l.name,d=!!l.unique,m=await this.rawQuery(`PRAGMA index_info(${u})`),p=this.extractRowsFromRawResult(m).map(g=>g.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 nn(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(mt(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let u of o){let d=Number(u.id),m=l.get(d)||{name:void 0,columns:[],referencedTable:String(u.table),referencedColumns:[],onDelete:u.on_delete??null,onUpdate:u.on_update??null};m.columns.push(String(u.from)),m.referencedColumns.push(String(u.to)),l.set(d,m);}return Array.from(l.values())}let a=new Map;for(let l of o){let u=String(l.name||""),d=u||`${l.referenced_table}_${l.column_name}`,m=a.get(d)||{name:u||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};m.columns.push(String(l.column_name)),m.referencedColumns.push(String(l.referenced_column)),a.set(d,m);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new sn(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(mt(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 rn(e)]).sql,o=[];try{let a=await this.rawQuery(n);o=this.extractRowsFromRawResult(a);}catch(a){if(mt(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 C.info("SQLite uses automatic file-based locking, advisory locks not needed"),!0;default:return C.warn(`Advisory locks not implemented for database type: ${n}`),!0}}catch(o){let s=o instanceof Error?o:new Error(String(o));return C.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 C.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(n){let o=n instanceof Error?n:new Error(String(n));return C.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 f("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 Cf=class{constructor(t){this.chain=new Tt(t);}get chainInstance(){return this.chain}add(t){this.chain.add(t);}};It();function Rf(i,t){if(t instanceof Be)return t;let e=typeof t=="function"?t(i):i[t];if(!e||!(e instanceof Be))throw new f("atomic::resolveSqlDataSource","ATOMIC_DATASOURCE_RESOLUTION_FAILED");return e}function vt(i,t){let e=typeof i=="string"?{dataSource:i,isolationLevel:t}:i??{};return (r,n,o)=>{let s=o.value;if(!s||typeof s!="function")throw new f("atomic::descriptor","ATOMIC_INVALID_METHOD");return o.value=async function(...a){let l;if(e.dataSource?l=Rf(this,e.dataSource):vt.sqlDataSource?l=vt.sqlDataSource:l=Rf(this,"sql"),!l.isClsEnabled)throw new f("atomic::descriptor","ATOMIC_CLS_DISABLED");return await l.transaction(async()=>await s.apply(this,a),{isolationLevel:e.isolationLevel})},o}}(t=>{})(vt||(vt={}));var iu=class{constructor(t){this.dbType=t,this.migrationName=Et.basename(fileURLToPath(import.meta.url)),this.schema=new le(this.dbType);}};async function vg(i){try{return import(pathToFileURL(i).href)}catch{let e=createRequire(import.meta.url)(i);return {default:e.default||e,...e}}}async function Eg(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 $n.promises.unlink(r).catch(()=>{});}}async function Of(i,t){let e=Et.isAbsolute(i)?i:Et.resolve(process.cwd(),i);return e.endsWith(".ts")?Eg(e):vg(e)}var au=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
|
|
171
171
|
FROM information_schema.tables
|
|
172
172
|
WHERE table_catalog = '${e}'
|
|
173
173
|
AND table_schema = 'public'
|
|
@@ -276,5 +276,5 @@ CREATE TABLE [migrations] (
|
|
|
276
276
|
[name] NVARCHAR(255) NOT NULL,
|
|
277
277
|
[timestamp] DATETIME NOT NULL DEFAULT GETDATE(),
|
|
278
278
|
PRIMARY KEY ([id])
|
|
279
|
-
);`}},Qe=new ru;var Dg=async(i,t)=>{if(i.endsWith(".ts"))return qf(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 h(`MigrationUtils::importMigrationFile Failed to import migration file: ${i}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function Dn(i,t){switch(i){case "mariadb":case "mysql":return await t.rawQuery(Qe.migrationTableTemplateMysql()),(await t.rawQuery(Qe.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":return await t.rawQuery(Qe.migrationTableTemplatePg()),(await t.rawQuery(Qe.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await t.rawQuery(Qe.migrationTableTemplateSQLite()),await t.rawQuery(Qe.selectAllFromMigrationsTemplate());case "mssql":return await t.rawQuery(Qe.migrationTableTemplateMssql()),(await t.rawQuery(Qe.selectAllFromMigrationsTemplate())).recordset;default:throw new h("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function In(i,t,e){let r=$g(t),n=[];for(let{name:o,fullPath:s}of r){let a=await Ig(s),l=new a(i||$.DB_TYPE);l.migrationName=o,n.push(l);}return n}async function Ig(i,t){let e=await Dg(i);if(!e.default)throw new h("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}function $g(i){let t=process.cwd(),e=i||$.MIGRATION_PATH||"database/migrations",r=/[*?{}\[\]]/.test(e);if(!r){let s=It.isAbsolute(e)?e:It.resolve(t,e);if(!xn.existsSync(s))return xn.mkdirSync(s,{recursive:true}),[]}let n=r?e:It.join(e,"**/*.{ts,js}"),o=It.isAbsolute(n)?n:It.resolve(t,n);try{return xn.globSync(o).filter(a=>xn.statSync(a).isFile()).sort().map(a=>({name:It.basename(a),fullPath:a}))}catch{return []}}async function nu(i,t,e,r,n){let o=i.getDbType(),s=n&&o!=="mssql",a=null;_.info("Rolling back migrations for database type: "+o);try{let l=await Dn(o,i),u=await In(o,e,r),d=l.map(p=>p.name),c=u.filter(p=>d.includes(p.migrationName));if(c.length===0){_.info("No pending migrations.");return}if(t);s&&(a=await i.transaction(),i=a.sql),await new Ze(i).downMigrations(c),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}_.info("Migrations rolled back successfully");}async function ou(i,t,e,r,n){let o=i.getDbType(),s=n&&o!=="mssql",a=null;_.info("Running migrations for database type: "+o);try{let l=await Dn(o,i),d=(await In(o,e,r)).filter(m=>!l.map(p=>p.name).includes(m.migrationName));if(!d.length){_.info("No pending migrations.");return}if(t);s&&(a=await i.transaction(),i=a.sql),await new Ze(i).upMigrations(d),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}_.info("Migrations ran successfully");}var Ze=class{constructor(t){this.migrationTable="migrations";this.sql=t;}async upMigrations(t){for(let e of t){_.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){_.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();}},su=class{constructor(t=$.MIGRATION_PATH||"database/migrations",e){this.migrationPath=t,this.sqlDataSourceInput=e;}async up(){return this.migrate("up")}async down(){return this.migrate("down")}async migrate(t){$.MIGRATION_PATH=this.migrationPath;let e;if(this.sqlDataSourceInput instanceof Be)e=this.sqlDataSourceInput;else {let r=this.sqlDataSourceInput;e=new Be(r),await e.connect();}return t==="up"?ou(e,void 0,this.migrationPath,e.migrationConfig.tsconfig,e.migrationConfig.transactional):nu(e,void 0,this.migrationPath,e.migrationConfig.tsconfig,e.migrationConfig.transactional)}},vg=(i,t)=>new su(i,t);var iu=class{constructor(t){this.logger=_;this.sqlDataSource=t;}};var MU=(i,t)=>i!=null&&i!==""?{valid:true}:{valid:false,message:"Value is required"},OU=i=>(t,e)=>t==null?{valid:true}:typeof t!="string"?{valid:false,message:"Value must be a string"}:t.length>=i?{valid:true}:{valid:false,message:`Minimum length is ${i}`},AU=i=>(t,e)=>t==null?{valid:true}:typeof t!="string"?{valid:false,message:"Value must be a string"}:t.length<=i?{valid:true}:{valid:false,message:`Maximum length is ${i}`},xU=i=>(t,e)=>t==null?{valid:true}:typeof t!="number"?{valid:false,message:"Value must be a number"}:t>=i?{valid:true}:{valid:false,message:`Minimum value is ${i}`},DU=i=>(t,e)=>t==null?{valid:true}:typeof t!="number"?{valid:false,message:"Value must be a number"}:t<=i?{valid:true}:{valid:false,message:`Maximum value is ${i}`},IU=i=>(t,e)=>t==null?{valid:true}:typeof t!="string"?{valid:false,message:"Value must be a string"}:i.test(t)?{valid:true}:{valid:false,message:"Value does not match pattern"},$U=(i,t)=>i==null?{valid:true}:typeof i!="string"?{valid:false,message:"Invalid email"}:/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(i)?{valid:true}:{valid:false,message:"Invalid email"},vU=(i,t)=>{if(i==null)return {valid:true};if(typeof i!="string")return {valid:false,message:"Invalid url"};try{return new URL(i),{valid:!0}}catch{return {valid:false,message:"Invalid url"}}},EU=i=>(t,e)=>t==null?{valid:true}:typeof t!="string"?{valid:false,message:"Invalid enum value"}:i.includes(t)?{valid:true}:{valid:false,message:`Value must be one of: ${i.join(", ")}`};function Eg(i){return {_phantom:void 0,_apply:i}}function $t(){return Eg((i,t)=>{Hr()(i,t);})}var Pg={string:()=>$t(),number:()=>$t(),boolean:()=>$t(),date:()=>$t(),object:()=>$t(),any:()=>$t()};function Bg(i,t){let{properties:e,hooks:r}=t;class n extends _t{}n._collection=i;for(let[o,s]of Object.entries(e))s._apply(n.prototype,o);return r&&(r.beforeFetch&&(n.beforeFetch=r.beforeFetch),r.afterFetch&&(n.afterFetch=r.afterFetch),r.beforeInsert&&(n.beforeInsert=r.beforeInsert),r.beforeUpdate&&(n.beforeUpdate=r.beforeUpdate),r.beforeDelete&&(n.beforeDelete=r.beforeDelete)),n}me();function Qg(i){switch(i){case "postgres":case "cockroachdb":return {supportsJSON:true,supportsDates:true,supportsBooleans:true,supportsArrays:true,supportsNumericIds:true};case "mysql":case "mariadb":return {supportsJSON:true,supportsDates:true,supportsBooleans:false,supportsArrays:false,supportsNumericIds:true};case "mssql":return {supportsJSON:false,supportsDates:true,supportsBooleans:false,supportsArrays:false,supportsNumericIds:true};default:return {supportsJSON:false,supportsDates:false,supportsBooleans:false,supportsArrays:false,supportsNumericIds:true}}}function Cf(i,t,e){let{field:r,value:n,mode:o}=t,s=o==="insensitive",a=e?"orWhere":"andWhere",l=e?"orWhereNull":"andWhereNull",u=e?"orWhereNotNull":"andWhereNotNull",d=e?"orWhereIn":"andWhereIn",c=e?"orWhereNotIn":"andWhereNotIn",m=s?e?"orWhereILike":"andWhereILike":e?"orWhereLike":"andWhereLike";switch(t.operator){case "eq":if(n===null){i[l](r);return}i[a](r,"=",n);return;case "ne":if(n===null){i[u](r);return}i[a](r,"!=",n);return;case "lt":i[a](r,"<",n);return;case "lte":i[a](r,"<=",n);return;case "gt":i[a](r,">",n);return;case "gte":i[a](r,">=",n);return;case "in":i[d](r,n);return;case "not_in":i[c](r,n);return;case "contains":i[m](r,`%${n}%`);return;case "starts_with":i[m](r,`${n}%`);return;case "ends_with":i[m](r,`%${n}`);return;default:throw new Error(`Unsupported where operator: ${t.operator}`)}}function Te(i,t=[]){let e=t.filter(n=>n.connector!=="OR"),r=t.filter(n=>n.connector==="OR");for(let n of e)Cf(i,n,false);return r.length&&i.where(n=>{for(let o of r)Cf(n,o,true);}),i}function Rf(i){let t=i.filter(e=>e.field==="id"&&e.connector!=="OR");return t.length?t:i}var Kg=new Set(["postgres","cockroachdb","mssql"]);function kg(i,t,e){return {create:async({model:r,data:n})=>{if(n.id===void 0||n.id===null){if(!Kg.has(e))throw new h("betterAuthAdapter::create",`BETTER_AUTH_MISSING_ID_${r}`);return i.from(r).insert(n,["*"])}return await i.from(r).insert(n),n},findOne:async({model:r,where:n,select:o})=>{let s=Te(i.from(r),n);return o?.length&&s.select(...o),s.one()},findMany:async({model:r,where:n,limit:o,offset:s,sortBy:a,select:l})=>{let u=Te(i.from(r),n).limit(o);return s&&u.offset(s),a&&u.orderBy(t({model:r,field:a.field}),a.direction),l?.length&&u.select(...l),u.many()},count:async({model:r,where:n})=>Te(i.from(r),n).getCount(),update:async({model:r,where:n,update:o})=>await Te(i.from(r),n).update(o)?Te(i.from(r),Rf(n)).one():null,updateMany:async({model:r,where:n,update:o})=>Te(i.from(r),n).update(o),incrementOne:async({model:r,where:n,increment:o,set:s})=>{let a={...s??{}};for(let[u,d]of Object.entries(o)){if(!Number.isFinite(d))throw new h("betterAuthAdapter::incrementOne",`BETTER_AUTH_INVALID_INCREMENT_${u}`);a[u]=new O(`${u} + (${d})`);}return await Te(i.from(r),n).update(a)?Te(i.from(r),Rf(n)).one():null},consumeOne:async({model:r,where:n})=>{let o=await Te(i.from(r),n).one();return o&&await Te(i.from(r),n).delete()?o:null},delete:async({model:r,where:n})=>{await Te(i.from(r),n).delete();},deleteMany:async({model:r,where:n})=>Te(i.from(r),n).delete()}}function _f(i,t,e,r,n=t,o=false){let s=t.getDbType();return i({config:{adapterId:"hysteria",adapterName:"Hysteria ORM",...Qg(s),...e,transaction:o?false:(l=>t.transaction(u=>l(_f(i,t,e,r,u.sql,true))))},adapter:({getFieldName:l})=>kg(n,l,s)})(r)}function Lg(i,t={}){return e=>{let r,n=()=>r??(r=import('better-auth/adapters').catch(()=>{throw new k("better-auth")}).then(({createAdapterFactory:o})=>_f(o,i,t,e)));return {id:"hysteria",create:async o=>(await n()).create(o),findOne:async o=>(await n()).findOne(o),findMany:async o=>(await n()).findMany(o),count:async o=>(await n()).count(o),update:async o=>(await n()).update(o),updateMany:async o=>(await n()).updateMany(o),delete:async o=>(await n()).delete(o),deleteMany:async o=>(await n()).deleteMany(o),consumeOne:async o=>(await n()).consumeOne(o),incrementOne:async o=>(await n()).incrementOne(o),transaction:async o=>(await n()).transaction(o)}}}export{iu as BaseSeeder,_t as Collection,h as HysteriaError,Wr as InMemoryAdapter,De as InsertWriteOperation,tu as Migration,Ue as ModelQueryBuilder,kl as MongoDataSource,bt as ObserverChain,Tf as ObserverChainWrapper,it as PlatformUnsupportedError,O as RawNode,Uy as RedisCacheAdapter,le as Schema,Yt as SchemaBuilder,Be as SqlDataSource,v as SqlFuncNode,vt as ValidationError,ie as WriteOperation,Dt as atomic,Lg as betterAuthAdapter,dh as col,ph as createSchema,Bg as defineCollection,vg as defineMigrator,mh as defineModel,jh as defineModelFactory,ch as defineRelations,yh as defineView,ky as deriveOperationFromQuery,$U as email,EU as enumValidator,vk as generateOpenApiModel,Ek as generateOpenApiModelSchema,Yy as generateOpenApiModelWithMetadata,ne as loadPlatform,_ as logger,DU as max,AU as maxLength,xU as min,OU as minLength,IU as pattern,Pg as prop,Ll as redis,be as registerDriverAdapter,xh as registerSqlFuncRenderer,MU as required,Ah as sqlFunc,vU as url};//# sourceMappingURL=index.js.map
|
|
279
|
+
);`}},Qe=new au;var Qg=async(i,t)=>{if(i.endsWith(".ts"))return Of(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 f(`MigrationUtils::importMigrationFile Failed to import migration file: ${i}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function vn(i,t){switch(i){case "mariadb":case "mysql":return await t.rawQuery(Qe.migrationTableTemplateMysql()),(await t.rawQuery(Qe.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":return await t.rawQuery(Qe.migrationTableTemplatePg()),(await t.rawQuery(Qe.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await t.rawQuery(Qe.migrationTableTemplateSQLite()),await t.rawQuery(Qe.selectAllFromMigrationsTemplate());case "mssql":return await t.rawQuery(Qe.migrationTableTemplateMssql()),(await t.rawQuery(Qe.selectAllFromMigrationsTemplate())).recordset;default:throw new f("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function En(i,t,e){let r=Kg(t),n=[];for(let{name:o,fullPath:s}of r){let a=await kg(s),l=new a(i||v.DB_TYPE);l.migrationName=o,n.push(l);}return n}async function kg(i,t){let e=await Qg(i);if(!e.default)throw new f("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}function Kg(i){let t=process.cwd(),e=i||v.MIGRATION_PATH||"database/migrations",r=/[*?{}\[\]]/.test(e);if(!r){let s=Et.isAbsolute(e)?e:Et.resolve(t,e);if(!$n.existsSync(s))return $n.mkdirSync(s,{recursive:true}),[]}let n=r?e:Et.join(e,"**/*.{ts,js}"),o=Et.isAbsolute(n)?n:Et.resolve(t,n);try{return $n.globSync(o).filter(a=>$n.statSync(a).isFile()).sort().map(a=>({name:Et.basename(a),fullPath:a}))}catch{return []}}async function lu(i,t,e,r,n){let o=i.getDbType(),s=n&&o!=="mssql",a=null;C.info("Rolling back migrations for database type: "+o);try{let l=await vn(o,i),u=await En(o,e,r),d=l.map(p=>p.name),m=u.filter(p=>d.includes(p.migrationName));if(m.length===0){C.info("No pending migrations.");return}if(t);s&&(a=await i.transaction(),i=a.sql),await new Xe(i).downMigrations(m),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}C.info("Migrations rolled back successfully");}async function uu(i,t,e,r,n){let o=i.getDbType(),s=n&&o!=="mssql",a=null;C.info("Running migrations for database type: "+o);try{let l=await vn(o,i),d=(await En(o,e,r)).filter(c=>!l.map(p=>p.name).includes(c.migrationName));if(!d.length){C.info("No pending migrations.");return}if(t);s&&(a=await i.transaction(),i=a.sql),await new Xe(i).upMigrations(d),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}C.info("Migrations ran successfully");}var Xe=class{constructor(t){this.migrationTable="migrations";this.sql=t;}async upMigrations(t){for(let e of t){C.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){C.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();}},du=class{constructor(t=v.MIGRATION_PATH||"database/migrations",e){this.migrationPath=t,this.sqlDataSourceInput=e;}async up(){return this.migrate("up")}async down(){return this.migrate("down")}async migrate(t){v.MIGRATION_PATH=this.migrationPath;let e;if(this.sqlDataSourceInput instanceof Be)e=this.sqlDataSourceInput;else {let r=this.sqlDataSourceInput;e=new Be(r),await e.connect();}return t==="up"?uu(e,void 0,this.migrationPath,e.migrationConfig.tsconfig,e.migrationConfig.transactional):lu(e,void 0,this.migrationPath,e.migrationConfig.tsconfig,e.migrationConfig.transactional)}},Wg=(i,t)=>new du(i,t);var cu=class{constructor(t){this.logger=C;this.sqlDataSource=t;}};var YU=(i,t)=>i!=null&&i!==""?{valid:true}:{valid:false,message:"Value is required"},ZU=i=>(t,e)=>t==null?{valid:true}:typeof t!="string"?{valid:false,message:"Value must be a string"}:t.length>=i?{valid:true}:{valid:false,message:`Minimum length is ${i}`},XU=i=>(t,e)=>t==null?{valid:true}:typeof t!="string"?{valid:false,message:"Value must be a string"}:t.length<=i?{valid:true}:{valid:false,message:`Maximum length is ${i}`},eV=i=>(t,e)=>t==null?{valid:true}:typeof t!="number"?{valid:false,message:"Value must be a number"}:t>=i?{valid:true}:{valid:false,message:`Minimum value is ${i}`},tV=i=>(t,e)=>t==null?{valid:true}:typeof t!="number"?{valid:false,message:"Value must be a number"}:t<=i?{valid:true}:{valid:false,message:`Maximum value is ${i}`},rV=i=>(t,e)=>t==null?{valid:true}:typeof t!="string"?{valid:false,message:"Value must be a string"}:i.test(t)?{valid:true}:{valid:false,message:"Value does not match pattern"},nV=(i,t)=>i==null?{valid:true}:typeof i!="string"?{valid:false,message:"Invalid email"}:/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(i)?{valid:true}:{valid:false,message:"Invalid email"},oV=(i,t)=>{if(i==null)return {valid:true};if(typeof i!="string")return {valid:false,message:"Invalid url"};try{return new URL(i),{valid:!0}}catch{return {valid:false,message:"Invalid url"}}},sV=i=>(t,e)=>t==null?{valid:true}:typeof t!="string"?{valid:false,message:"Invalid enum value"}:i.includes(t)?{valid:true}:{valid:false,message:`Value must be one of: ${i.join(", ")}`};function Lg(i){return {_phantom:void 0,_apply:i}}function Pt(){return Lg((i,t)=>{Yr()(i,t);})}var jg={string:()=>Pt(),number:()=>Pt(),boolean:()=>Pt(),date:()=>Pt(),object:()=>Pt(),any:()=>Pt()};function Fg(i,t){let{properties:e,hooks:r}=t;class n extends xt{}n._collection=i;for(let[o,s]of Object.entries(e))s._apply(n.prototype,o);return r&&(r.beforeFetch&&(n.beforeFetch=r.beforeFetch),r.afterFetch&&(n.afterFetch=r.afterFetch),r.beforeInsert&&(n.beforeInsert=r.beforeInsert),r.beforeUpdate&&(n.beforeUpdate=r.beforeUpdate),r.beforeDelete&&(n.beforeDelete=r.beforeDelete)),n}me();function Ug(i){switch(i){case "postgres":case "cockroachdb":return {supportsJSON:true,supportsDates:true,supportsBooleans:true,supportsArrays:true,supportsNumericIds:true};case "mysql":case "mariadb":return {supportsJSON:true,supportsDates:true,supportsBooleans:false,supportsArrays:false,supportsNumericIds:true};case "mssql":return {supportsJSON:false,supportsDates:true,supportsBooleans:false,supportsArrays:false,supportsNumericIds:true};default:return {supportsJSON:false,supportsDates:false,supportsBooleans:false,supportsArrays:false,supportsNumericIds:true}}}function xf(i,t,e){let{field:r,value:n,mode:o}=t,s=o==="insensitive",a=e?"orWhere":"andWhere",l=e?"orWhereNull":"andWhereNull",u=e?"orWhereNotNull":"andWhereNotNull",d=e?"orWhereIn":"andWhereIn",m=e?"orWhereNotIn":"andWhereNotIn",c=s?e?"orWhereILike":"andWhereILike":e?"orWhereLike":"andWhereLike";switch(t.operator){case "eq":if(n===null){i[l](r);return}i[a](r,"=",n);return;case "ne":if(n===null){i[u](r);return}i[a](r,"!=",n);return;case "lt":i[a](r,"<",n);return;case "lte":i[a](r,"<=",n);return;case "gt":i[a](r,">",n);return;case "gte":i[a](r,">=",n);return;case "in":i[d](r,n);return;case "not_in":i[m](r,n);return;case "contains":i[c](r,`%${n}%`);return;case "starts_with":i[c](r,`${n}%`);return;case "ends_with":i[c](r,`%${n}`);return;default:throw new Error(`Unsupported where operator: ${t.operator}`)}}function we(i,t=[]){let e=t.filter(n=>n.connector!=="OR"),r=t.filter(n=>n.connector==="OR");for(let n of e)xf(i,n,false);return r.length&&i.where(n=>{for(let o of r)xf(n,o,true);}),i}function Af(i){let t=i.filter(e=>e.field==="id"&&e.connector!=="OR");return t.length?t:i}var Vg=new Set(["postgres","cockroachdb","mssql"]);function Jg(i,t,e){return {create:async({model:r,data:n})=>{if(n.id===void 0||n.id===null){if(!Vg.has(e))throw new f("betterAuthAdapter::create",`BETTER_AUTH_MISSING_ID_${r}`);return i.from(r).insert(n,["*"])}return await i.from(r).insert(n),n},findOne:async({model:r,where:n,select:o})=>{let s=we(i.from(r),n);return o?.length&&s.select(...o),s.one()},findMany:async({model:r,where:n,limit:o,offset:s,sortBy:a,select:l})=>{let u=we(i.from(r),n).limit(o);return s&&u.offset(s),a&&u.orderBy(t({model:r,field:a.field}),a.direction),l?.length&&u.select(...l),u.many()},count:async({model:r,where:n})=>we(i.from(r),n).getCount(),update:async({model:r,where:n,update:o})=>await we(i.from(r),n).update(o)?we(i.from(r),Af(n)).one():null,updateMany:async({model:r,where:n,update:o})=>we(i.from(r),n).update(o),incrementOne:async({model:r,where:n,increment:o,set:s})=>{let a={...s??{}};for(let[u,d]of Object.entries(o)){if(!Number.isFinite(d))throw new f("betterAuthAdapter::incrementOne",`BETTER_AUTH_INVALID_INCREMENT_${u}`);a[u]=new M(`${u} + (${d})`);}return await we(i.from(r),n).update(a)?we(i.from(r),Af(n)).one():null},consumeOne:async({model:r,where:n})=>{let o=await we(i.from(r),n).one();return o&&await we(i.from(r),n).delete()?o:null},delete:async({model:r,where:n})=>{await we(i.from(r),n).delete();},deleteMany:async({model:r,where:n})=>we(i.from(r),n).delete()}}function Df(i,t,e,r,n=t,o=false){let s=t.getDbType();return i({config:{adapterId:"hysteria",adapterName:"Hysteria ORM",...Ug(s),...e,transaction:o?false:(l=>t.transaction(u=>l(Df(i,t,e,r,u.sql,true))))},adapter:({getFieldName:l})=>Jg(n,l,s)})(r)}function Hg(i,t={}){return e=>{let r,n=()=>r??(r=import('better-auth/adapters').catch(()=>{throw new K("better-auth")}).then(({createAdapterFactory:o})=>Df(o,i,t,e)));return {id:"hysteria",create:async o=>(await n()).create(o),findOne:async o=>(await n()).findOne(o),findMany:async o=>(await n()).findMany(o),count:async o=>(await n()).count(o),update:async o=>(await n()).update(o),updateMany:async o=>(await n()).updateMany(o),delete:async o=>(await n()).delete(o),deleteMany:async o=>(await n()).deleteMany(o),consumeOne:async o=>(await n()).consumeOne(o),incrementOne:async o=>(await n()).incrementOne(o),transaction:async o=>(await n()).transaction(o)}}}export{cu as BaseSeeder,xt as Collection,f as HysteriaError,Ur as InMemoryAdapter,De as InsertWriteOperation,iu as Migration,Ve as ModelQueryBuilder,Ul as MongoDataSource,Tt as ObserverChain,Cf as ObserverChainWrapper,at as PlatformUnsupportedError,M as RawNode,Gy as RedisCacheAdapter,le as Schema,Xt as SchemaBuilder,Be as SqlDataSource,$ as SqlFuncNode,Bt as ValidationError,ie as WriteOperation,vt as atomic,Hg as betterAuthAdapter,fh as col,bh as createSchema,Fg as defineCollection,Wg as defineMigrator,hh as defineModel,Yh as defineModelFactory,gh as defineRelations,Th as defineView,Uy as deriveOperationFromQuery,nV as email,sV as enumValidator,rW as generateOpenApiModel,nW as generateOpenApiModelSchema,rf as generateOpenApiModelWithMetadata,ne as loadPlatform,C as logger,tV as max,XU as maxLength,eV as min,ZU as minLength,rV as pattern,jg as prop,Vl as redis,Te as registerDriverAdapter,Eh as registerSqlFuncRenderer,YU as required,vh as sqlFunc,oV as url};//# sourceMappingURL=index.js.map
|
|
280
280
|
//# sourceMappingURL=index.js.map
|