hysteria-orm 12.0.1 → 12.0.2

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/index.cjs CHANGED
@@ -1,7 +1,7 @@
1
- 'use strict';var stream=require('stream'),qn=require('fs'),Mt=require('path'),xe=require('crypto'),sqlFormatter=require('sql-formatter'),sqlHighlight=require('sql-highlight'),async_hooks=require('async_hooks'),url=require('url'),module$1=require('module');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var qn__default=/*#__PURE__*/_interopDefault(qn);var Mt__default=/*#__PURE__*/_interopDefault(Mt);var xe__default=/*#__PURE__*/_interopDefault(xe);var kl=Object.defineProperty;var Kl=i=>{throw TypeError(i)};var ne=(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 Ae=(i,t)=>()=>(i&&(t=i(i=0)),t);var Ql=(i,t)=>{for(var e in t)kl(i,e,{get:t[e],enumerable:true});};var Ll=(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&&kl(t,e,n),n};var Wy=(i,t,e)=>t.has(i)||Kl("Cannot "+e);var Wl=(i,t,e)=>t.has(i)?Kl("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);var Fl=(i,t,e)=>(Wy(i,t,"access private method"),e);var Q,de=Ae(()=>{Q=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};});var by;exports.registerDriverAdapter=void 0;var gh,Ty,Ct=Ae(()=>{de();by=[],exports.registerDriverAdapter=i=>{by.push(i);},gh=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})},Ty=async(i,t,e,r)=>{if(e&&typeof e!="string")return gh(i,e,t,r);let n=by.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 Q(e??i)};});var Rt,qh,Sy,Vt=Ae(()=>{Rt=async(i,t={},e)=>{let r=new stream.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},qh=i=>{if(i.writableNeedDrain)return new Promise(t=>i.once("drain",()=>t()))},Sy=async(i,t={},e)=>{let r=new stream.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 qh(r);r.end();}catch(n){r.destroy(n);}return r};});var Ny,bn,qy=Ae(()=>{Vt();Ny=i=>{if(!i||typeof i!="object")return i;let t=i,e=t.errno,r=typeof e=="string"&&/^[0-9A-Z]{5}$/.test(e),n=typeof t.code=="string"&&t.code.startsWith("ERR_");return !r||!n||(t.cause===void 0&&(t.cause=i),t.code=e),i},bn=class{constructor(t,e,r){this.jsEnvironment="bun";this.dialect=t;let n={hostname:e.host,port:e.port,username:e.username,password:e.password,database:e.database,...e.driverOptions};(t==="mysql"||t==="mariadb")&&(n.adapter="mysql",n.allowPublicKeyRetrieval=true),this.sql=new r(n),this.pool=this.sql;}createPool(){}async closePool(){this.sql.close();}async reserveConnection(){return this.sql.reserve()}releaseConnection(t){t?.release();}async beginTransaction(t,e){(this.dialect==="mysql"||this.dialect==="mariadb")&&e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await e.rawQuery(this.dialect==="mysql"||this.dialect==="mariadb"?"START TRANSACTION":"BEGIN TRANSACTION"),(this.dialect==="postgres"||this.dialect==="cockroachdb")&&e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.sql,o;try{o=await n.unsafe(t,e);}catch(a){throw Ny(a)}if(this.dialect==="mysql"||this.dialect==="mariadb"){let a=/^\s*(select|show|desc(ribe)?|explain)\b/i.test(t);if(Array.isArray(o)&&(a||o.length>0))return [o,void 0];let l=o;return [{affectedRows:Number(l.affectedRows),insertId:Number(l.lastInsertRowid)},void 0]}let s=o;return Array.isArray(o)&&!((s.command==="INSERT"||s.command==="UPDATE"||s.command==="DELETE")&&o.length===0)?{rows:o,rowCount:o.length}:{rows:[],rowCount:s.count??s.affectedRows??0}}extract(t,e){if(e==="raw")return t;if(this.dialect==="mysql"||this.dialect==="mariadb"){let n=t;return e==="affectedRows"?n[0]?.affectedRows??0:n[0]}let r=t;return e==="affectedRows"?r.rowCount:r.rows}async stream(t,e,r,n){let o=r.connection??this.sql,s;try{s=await o.unsafe(t,e);}catch(l){throw Ny(l)}let a=Array.isArray(s)?s:[];return Rt(a,r,n)}};});var Tn,Cy=Ae(()=>{Vt();Tn=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 Sy(o.query(t).iterate(...e),r,n)}};});var Ry={};Ql(Ry,{registerBunDrivers:()=>Ch});var Ch,_y=Ae(()=>{Ct();qy();Cy();Ch=async()=>{let{SQL:i}=await import('bun'),{Database:t}=await import('bun:sqlite');exports.registerDriverAdapter({name:"bun-sql",dialects:["postgres","cockroachdb","mysql","mariadb"],environments:["bun"],create:async({dialect:e,input:r})=>new bn(e,r,i)}),exports.registerDriverAdapter({name:"bun-sqlite",dialects:["sqlite"],environments:["bun"],create:async({dialect:e,input:r})=>new Tn(e,r,t)});};});var Rh,wn,_l,Ml=Ae(()=>{Vt();Rh=async i=>(await(await import('@sqlite.org/sqlite-wasm')).default(i)).oo1,wn=class{constructor(t,e,r=Rh,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 _l(t)?a(t):s==="fetch"?n.selectObjects(t,e):o?.typeofModel&&(s==="insertOne"||s==="insertMany")?n.selectObjects(`${t} returning *`,e):a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.requireDb();return Rt(o.selectObjects(t,e),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-wasm: pool not created, await createPool() before querying");return this.db}},_l=i=>["begin","begin transaction","commit","rollback"].includes(i.trim().toLowerCase());});var Ol,Sn,My=Ae(()=>{Vt();Ml();Ol=i=>Array.isArray(i)?i:i?._array??[],Sn=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(_l(t))return a(t);if(s==="fetch"){let u=await n.execute(t,e);return Ol(u.rows)}if(!o?.typeofModel)return a(t);if(s==="insertOne"||s==="insertMany"){let u=await n.execute(`${t} returning *`,e);return Ol(u.rows)}return a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let s=await(r.connection??this.requireDb()).execute(t,e);return Rt(Ol(s.rows),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-rn: pool not created, await createPool() before querying");return this.db}};});var Al={};Ql(Al,{registerReactNativeDrivers:()=>Mh,registerWebDrivers:()=>_h});var Oy,Ay,_h,xy,Mh,xl=Ae(()=>{Ct();My();Ml();Oy=false,_h=i=>{Oy||(Oy=true,Ay=i,exports.registerDriverAdapter({name:"sqlite-wasm",dialects:["sqlite"],environments:["web"],create:({dialect:t,input:e})=>new wn(t,e,void 0,Ay)}));},xy=false,Mh=async()=>{if(xy)return;xy=true;let i=await import('@op-engineering/op-sqlite');exports.registerDriverAdapter({name:"sqlite-rn",dialects:["sqlite"],environments:["react-native"],create:({dialect:t,input:e})=>new Sn(t,e,i)});};});var g=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}},xt=class extends g{constructor(t){super("ValidationError","VALIDATION_ERROR"),this.errors=t;}};function Gt(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 Fy=i=>{i[6]=i[6]&15|64,i[8]=i[8]&63|128;let t=Pe(i);return [t.slice(0,8),t.slice(8,12),t.slice(12,16),t.slice(16,20),t.slice(20)].join("-")},jl=i=>{let t=globalThis.crypto;if(!t||typeof t.getRandomValues!="function")throw new tt("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 tt(`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")}},Mn=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}`}},$e=class{constructor(){this.name="web";this.crypto={randomUUID:()=>{let t=globalThis.crypto;return typeof t?.randomUUID=="function"?t.randomUUID():Fy(jl(new Uint8Array(16)))},randomBytes:t=>jl(new Uint8Array(t))};this.timing={now:()=>globalThis.performance.now()};this.fs=new _n;this.path=new Mn;}readEnv(t){}};var rt=class extends $e{constructor(){super(...arguments);this.name="node";this.fs={exists:e=>qn__default.default.existsSync(e),readFileSync:e=>qn__default.default.existsSync(e)?new Uint8Array(qn__default.default.readFileSync(e)):null,readFile:async e=>qn.promises.readFile(e,"utf8"),readdir:e=>qn.promises.readdir(e),mkdir:async(e,r)=>{await qn.promises.mkdir(e,{recursive:r?.recursive});},writeFile:async(e,r)=>{await qn.promises.writeFile(e,r);},rm:async(e,r)=>{await qn.promises.rm(e,{recursive:r?.recursive,force:r?.force});}};this.path=Mt__default.default;}readEnv(e){return typeof process>"u"?void 0:process.env[e]}};var An=()=>import('bun'),Yt=class extends rt{constructor(){super();this.name="bun";let e=this.fs;this.fs={...e,readFile:async r=>(await An()).file(r).text(),readdir:async r=>{let n=await An(),o=[];for await(let s of new n.Glob("*").scan({cwd:r}))o.push(s);return o},writeFile:async(r,n)=>{await(await An()).write(r,n);}};}};var Zt=class extends $e{constructor(){super(...arguments);this.name="react-native";}};var tt=class extends Error{constructor(t){super(`Platform does not support: ${t}`),this.name="PlatformUnsupportedError";}},Pe=i=>{let t="";for(let e of i)t+=e.toString(16).padStart(2,"0");return t},Ul=new Map,Uy=i=>{switch(i){case "bun":return new Yt;case "node":return new rt;case "react-native":return new Zt;default:return new $e}};function te(i){let t=Gt(i),e=Ul.get(t);return e||(e=Uy(t),Ul.set(t,e)),e}function Vy(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 Vl(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function Jy(i){if(typeof i!="string"||!i)return i;let t=Vl(i);return t.charAt(0).toUpperCase()+t.slice(1)}function U(i,t){return t==="preserve"?i:t==="snake"?Vy(i):t==="camel"?Vl(i):t==="pascal"?Jy(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}function Ce(i){return String(i).padStart(2,"0")}function Hy(i,t){let e=i.getFullYear(),r=Ce(i.getMonth()+1),n=Ce(i.getDate()),o=Ce(i.getHours()),s=Ce(i.getMinutes()),a=Ce(i.getSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${s}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${s}:${a}`;case "TIMESTAMP":return Math.floor(i.getTime()/1e3).toString()}}function Jl(i,t){let e=i.getUTCFullYear(),r=Ce(i.getUTCMonth()+1),n=Ce(i.getUTCDate()),o=Ce(i.getUTCHours()),s=Ce(i.getUTCMinutes()),a=Ce(i.getUTCSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${s}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${s}:${a}`;case "TIMESTAMP":return Math.floor(i.getTime()/1e3).toString()}}var ie=(i,t="ISO",e="UTC")=>{if(!(i instanceof Date)||isNaN(i.getTime()))throw new Error("Invalid date provided");return e==="LOCAL"?Hy(i,t):Jl(i,t)};var nt=(i=new Date)=>Jl(i,"ISO");var Hl=(i,t)=>{try{let e=xe__default.default.createHash("sha256").update(i).digest(),r=xe__default.default.randomBytes(16),n=xe__default.default.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 g("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},zl=(i,t)=>{try{let e=xe__default.default.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=xe__default.default.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 g("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Gl=(i,t)=>{try{let e=xe__default.default.randomBytes(32),r=xe__default.default.randomBytes(16),n=xe__default.default.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");o+=n.final("hex");let s=xe.publicEncrypt(i,e);return `${r.toString("hex")}:${s.toString("hex")}:${o}`}catch(e){throw new g("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},Yl=(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=xe.privateDecrypt(i,Buffer.from(n,"hex")),a=xe__default.default.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 g("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 Dn="0123456789ABCDEFGHJKMNPQRSTVWXYZ",xn=Dn.length,Yy=10,Zy=16,Xy=(i,t)=>{let e="";for(let r=0;r<t;r++){let n=i%xn;e=Dn.charAt(n)+e,i=(i-n)/xn;}return e},ef=i=>{let t=te().crypto.randomBytes(i),e="";for(let r=0;r<i;r++){let n=t[r];e+=Dn.charAt(n%xn);}return e},Zl=()=>{let i=Math.floor(Date.now()/1e3),t=Xy(i,Yy),e=ef(Zy);return t+e};function In(i){return i.replace(/^[`"]|[`"]$/g,"")}function En(i,t,e){if(!i.includes(".")){let o=In(i);return `${t}.${o}`}let[r,n]=i.split(".");return r=In(r),n=In(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 Re=class{constructor(t,e){this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var Xt=class extends Re{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var er=class extends Re{constructor(e,r,n){super(e,r);this.type="hasMany";this.foreignKey=n,this.type="hasMany";}};var tr=class extends Re{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var rr=class extends Re{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 tf(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 nr=Symbol("columns"),ot=Symbol("primaryKey"),be=Symbol("relations"),or=Symbol("indexes"),sr=Symbol("uniques"),ir=Symbol("checks"),Be=i=>`${tf(i)}_id`,ar=(i,t)=>`idx_${i}_${t}`,me=(i,t)=>`uq_${i}_${t}`,z=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,Te=(i,t)=>`pk_${i}_${t}`,Xl=(i,t)=>{let e=t.replace(/[^a-zA-Z0-9]+/g,"_").replace(/^_|_$/g,"").toLowerCase();return `chk_${i}_${e}`.substring(0,63)};function vn(i,t){return e=>{let r=Array.isArray(i)?i:[i],n=K.getMetadata(or,e.prototype)||[];n.push({columns:r,name:t??ar(e.table,r.join("_"))}),K.defineMetadata(or,n,e.prototype);}}function $n(i,t){return e=>{let r=Array.isArray(i)?i:[i],n=K.getMetadata(sr,e.prototype)||[];n.push({columns:r,name:t??me(e.table,r.join("_"))}),K.defineMetadata(sr,n,e.prototype);}}function Pn(i,t){return e=>{let r=K.getMetadata(ir,e.prototype)||[];r.push({expression:i,name:t??Xl(e.table,i)}),K.defineMetadata(ir,r,e.prototype);}}var eu=Symbol("viewStatement");function R(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let n=e.constructor;if(t){if(K.getMetadata(ot,e))throw new g("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");K.defineMetadata(ot,r,e),K.defineMetadata(ot,r,e.constructor);}let o=i.databaseName??U(r,n.databaseCaseConvention),s={columnName:r,serialize:i.serialize,prepare:i.prepare,isPrimary:t,primaryKeyConstraintName:i.primaryKeyConstraintName??Te(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(nr,e)||[];a.push(s),K.defineMetadata(nr,a,e);}}R.primary=rf;R.date=Tf;R.datetime=wf;R.timestamp=Sf;R.time=Nf;R.boolean=bf;R.json=qf;R.uuid=lf;R.ulid=uf;R.integer=of;R.bigInteger=cf;R.float=nf;R.decimal=pf;R.increment=sf;R.bigIncrement=af;R.string=df;R.text=mf;R.binary=yf;R.enum=ff;R.encryption={symmetric:hf,asymmetric:gf};R.computed=Cf;function rf(i={}){return R({...i,primaryKey:true})}function nf(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 of(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 sf(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 af(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 lf(i={}){return R({type:"uuid",...i,prepare:t=>t||te().crypto.randomUUID(),openApi:{type:"string",format:"uuid",description:"uuid (Universally Unique Identifier)",...i.openApi||{}}})}function uf(i={}){return R({type:"ulid",...i,prepare:t=>t||Zl(),openApi:{type:"string",format:"ulid",description:"ulid (Universally Unique Lexicographically Sortable Identifier)",...i.openApi||{}}})}function df(i={}){return R({type:"string",...i,openApi:{type:"string",description:"A string value",...i.openApi||{}}})}function mf(i={}){return R({type:"longtext",...i,openApi:{type:"string",description:"A text value",...i.openApi||{}}})}function cf(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 pf(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 yf(i={}){return R({type:"binary",...i,openApi:{type:"string",format:"binary",description:"Binary data",...i.openApi||{}}})}function ff(i,t={}){return R({type:i,...t,openApi:{type:"string",enum:i,description:"An enum value",...t.openApi||{}}})}function hf(i){return R({...i,prepare:t=>t&&Hl(i.key,t),serialize:t=>t&&zl(i.key,t)})}function gf(i){return R({...i,prepare:t=>t&&Gl(i.publicKey,t),serialize:t=>t&&Yl(i.privateKey,t)})}function bf(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 Tf(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=i,s=!!n,a=!!r,l=typeof n=="function"?"js":s?true:void 0,u=()=>new Date,d=()=>ie(new Date,"DATE_ONLY",e),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?ie(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 wf(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=()=>ie(new Date,"ISO",a),h=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?N=>N?d?y():N:u?h():null:N=>N?d?y():N:u?h():null,serialize:t?N=>{if(N!==void 0)return N===null?null:N instanceof Date?ie(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 Sf(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=()=>ie(new Date,"TIMESTAMP",a),h=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?N=>N?d?y():N:u?h():null:N=>N?d?y():N:u?h():null,serialize:t?N=>{if(N!==void 0)return N===null?null:N instanceof Date?ie(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 Nf(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=i,s=!!n,a=!!r,l=typeof n=="function"?"js":s?true:void 0,u=()=>new Date,d=()=>ie(new Date,"TIME_ONLY",e),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?ie(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 qf(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 Cf(i,t={}){return R({...t,expression:i})}function tu(i){try{return K.getMetadata(nr,i.prototype)||[]}catch{return []}}function ru(i,t,e){return((r,n)=>{let o=()=>Be(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(be,r)||[];l.push(a),K.defineMetadata(be,l,r);})}function nu(i,t){return((e,r)=>{let n=()=>Be(e.constructor.table),o={type:"hasOne",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):n},s=K.getMetadata(be,e)||[];s.push(o),K.defineMetadata(be,s,e);})}function ou(i,t){return((e,r)=>{let n=()=>Be(e.constructor.table),o={type:"hasMany",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):n},s=K.getMetadata(be,e)||[];s.push(o),K.defineMetadata(be,s,e);})}function su(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=()=>Be(d),m=()=>Be(i().table),p=()=>z(q(u),s?String(s):c()),h={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(be,n)||[];y.push(h),K.defineMetadata(be,y,n);})}function iu(i){return K.getMetadata(be,i.prototype)||[]}function au(i){return (K.getMetadata(be,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 Xt(l,o,a);case "hasOne":return new tr(l,o,a);case "hasMany":return new er(l,o,a);case "manyToMany":if(!e.manyToManyOptions)throw new g("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let u=n();return new rr(u,o,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:q(e.manyToManyOptions.throughModel),leftForeignKey:q(e.manyToManyOptions.leftForeignKey),rightForeignKey:q(e.manyToManyOptions.rightForeignKey)});default:throw new g("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function lu(i){return K.getMetadata(ot,i)||K.getMetadata(ot,i.prototype)}function uu(i){return K.getMetadata(or,i.prototype)||[]}function du(i){return K.getMetadata(sr,i.prototype)||[]}function mu(i){return K.getMetadata(ir,i.prototype)||[]}var ke=class{};ke.modelCaseConvention="camel",ke.databaseCaseConvention="snake";var ce=class{};ce.columns=new WeakMap,ce.byName=new WeakMap,ce.byDatabaseName=new WeakMap;var ae=class extends ke{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 lu(this)}constructor(t){if(super(),t)for(let e in t)Object.assign(this,{[e]:t[e]});}static getColumns(){let t=ce.columns.get(this);return t||(t=tu(this),ce.columns.set(this,t)),t}static getColumnsByName(){let t=ce.byName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.columnName,e])),ce.byName.set(this,t)),t}static getColumnsByDatabaseName(){let t=ce.byDatabaseName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.databaseName,e])),ce.byDatabaseName.set(this,t)),t}static getRelations(){return iu(this)}static getIndexes(){return uu(this)}static getUniques(){return du(this)}static getChecks(){return mu(this)}static async validate(t){var s,a;let e=this.getColumns(),r={},n=this.primaryKey,o=n&&t?.[n]!==void 0?"update":"insert";for(let l of e){if(l.expression)continue;let u=l.validate;if(!u)continue;let d=t?t[l.columnName]:void 0,c=Array.isArray(u)?u:[u];for(let m of c)try{let p=await m(d,{model:this,column:l.columnName,operation:o,data:t});if(!(p&&p.valid)){let h=p&&p.message||"Validation failed";(r[s=l.columnName]||(r[s]=[])).push(h);}}catch{(r[a=l.columnName]||(r[a]=[])).push("Validation error");}}if(Object.keys(r).length>0)throw new xt(r);return {valid:true}}};ae.zodEngine=null,ae.softDeleteColumn="deletedAt",ae.softDeleteValue=nt();var cu=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 pu(i){return W((t,e)=>{R.date(i??{},false)(t,e);})}pu.string=function(t){return W((e,r)=>{R.date(t??{},true)(e,r);})};j.date=pu;function yu(i){return W((t,e)=>{R.datetime(i??{},false)(t,e);})}yu.string=function(t){return W((e,r)=>{R.datetime(t??{},true)(e,r);})};j.datetime=yu;function fu(i){return W((t,e)=>{R.timestamp(i??{},false)(t,e);})}fu.string=function(t){return W((e,r)=>{R.timestamp(t??{},true)(e,r);})};j.timestamp=fu;function hu(i){return W((t,e)=>{R.time(i??{},false)(t,e);})}hu.string=function(t){return W((e,r)=>{R.time(t??{},true)(e,r);})};j.time=hu;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 Rf=j;function _f(i,t){let{columns:e,indexes:r,uniques:n,checks:o,hooks:s,options:a}=t;class l extends ae{}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),cu.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)xf(l,u);if(n)for(let u of n)Df(l,u);if(o)for(let u of o)If(l,u);return s&&s.beforeFetch&&(l.beforeFetch=s.beforeFetch),gu(l),l}function Mf(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 Of(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":nu(()=>l,u)(n.prototype,s);break;case "hasMany":ou(()=>l,u)(n.prototype,s);break;case "belongsTo":ru(()=>l,u,a._constraintOptions)(n.prototype,s);break;case "manyToMany":{let d=a._throughModel,c=a._throughModelKeys;su(()=>l,d,c,a._constraintOptions)(n.prototype,s);break}}}}return i}function Af(i,t){let{columns:e,statement:r,hooks:n,options:o}=t;class s extends ae{}s.table=i,s[eu]=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),cu.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),gu(s),s}function gu(i){i.toZodSchema=function(){let t=this.zodEngine||ae.zodEngine;if(!t)throw new g("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 xf(i,t){Array.isArray(t)?vn(t)(i):vn(t.columns,t.name)(i);}function Df(i,t){Array.isArray(t)?$n(t)(i):$n(t.columns,t.name)(i);}function If(i,t){typeof t=="string"?Pn(t)(i):Pn(t.expression,t.name)(i);}var w=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var M=class extends w{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 Me=class extends w{constructor(e,r="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`;}};var le=class extends M{constructor(e,r,n=false,o,s,a=false){super(e,r,n,"=",s,a);this.file="where_json";this.jsonOperator=o,this.value=s;}};var we=class extends w{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 re=class extends w{constructor(e,r,n,o){super("select");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="select";this.file="select";this.column=e,this.alias=r,this.sqlFunction=n,this.isRawValue=o??false;}};var Bn=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:[]}}},bu=new Bn;var kn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Tu=new kn;var Kn=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`[${n}]`).join(", ")})`,bindings:[]}}},wu=new Kn;var Qn=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:[]}}},Su=new Qn;var st=class extends w{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};var Ln=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 st){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}}},Nu=new Ln;var Wn=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},qu=new Wn;var Fn=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},Cu=new Fn;var jn=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},Ru=new jn;var It=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"}},Un=i=>{if(i==null)return "NULL";if(i instanceof Date)return `'${i.toISOString()}'`;let t=typeof i;return t==="boolean"?i?"TRUE":"FALSE":t==="number"&&Number.isFinite(i)||t==="bigint"?String(i):t==="string"?`'${i.replace(/'/g,"''")}'`:Array.isArray(i)||t==="object"&&Object.keys(i).length>0?`'${JSON.stringify(i).replace(/'/g,"''")}'`:String(i)},it=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,Un(t[r]));for(let r=0;r<t.length;r++){let n=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(n,Un(t[r]));}for(let r=0;r<t.length;r++){let n=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(n,Un(t[r]));}return e},at=(i,t)=>t?i==="mysql"||i==="mariadb"?t.code==="ER_NO_SUCH_TABLE"||t.errno===1146:i==="postgres"||i==="cockroachdb"?t.code==="42P01":i==="sqlite"?/no such table/i.test(String(t.message||"")):i==="mssql"?t.number===208:false:false,lt=(i,t)=>{let e=i.getDbType(),r;try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions,language:It(e)});}catch{try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var Mu={info:0,warn:1,error:2};function ur(i){return i?i===true?{level:"info",logQueries:true}:{level:i.level??"info",logQueries:i.logQueries??true,customLogger:i.customLogger}:null}function $f(i,t="info"){let e=ur(i);if(!e)return false;let r=e.level??"info";return Mu[t]>=Mu[r]}function Pf(i){let t=ur(i);return t?t.logQueries??true:false}var Ke={info:"32",warn:"33",error:"31",query:"35",dim:"2",cyan:"36"},Bf=typeof process<"u"&&!!process.stdout?.isTTY&&!process.env.NO_COLOR,ut=(i,t)=>Bf?`\x1B[${i}m${t}\x1B[0m`:t;function Du(){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 Vn(i,t){let e=ut(Ke.dim,`[${Du()}]`),r=ut(Ke[i],i.toUpperCase().padEnd(5));return `${e} ${r} ${t}`}var kf=60,Kf=10,Ou=400;function lr(i,t=kf){return i.length<=t?i:`${i.slice(0,t)}\u2026`}function Qf(i){if(i==null)return "null";if(typeof i=="string")return `'${lr(i)}'`;if(typeof i=="number"||typeof i=="bigint")return String(i);if(typeof i=="boolean")return i?"true":"false";if(i instanceof Date)return `'${lr(i.toISOString())}'`;if(typeof i=="object"){let t;try{t=JSON.stringify(i);}catch{t=String(i);}return `'${lr(t)}'`}return lr(String(i))}function Lf(i){if(!i||i.length===0)return "[]";let t=i.slice(0,Kf).map(Qf),e=i.length-t.length;e>0&&t.push(`\u2026 (${e} more)`);let r=`[${t.join(", ")}]`;return r.length>Ou&&(r=`${r.slice(0,Ou)}\u2026`),r}var Au=(i,t)=>{let e=" ".repeat(t);return i.split(`
1
+ 'use strict';var stream=require('stream'),qn=require('fs'),Mt=require('path'),xe=require('crypto'),sqlFormatter=require('sql-formatter'),sqlHighlight=require('sql-highlight'),async_hooks=require('async_hooks'),url=require('url'),module$1=require('module');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var qn__default=/*#__PURE__*/_interopDefault(qn);var Mt__default=/*#__PURE__*/_interopDefault(Mt);var xe__default=/*#__PURE__*/_interopDefault(xe);var kl=Object.defineProperty;var Kl=i=>{throw TypeError(i)};var ne=(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 Ae=(i,t)=>()=>(i&&(t=i(i=0)),t);var Ql=(i,t)=>{for(var e in t)kl(i,e,{get:t[e],enumerable:true});};var Ll=(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&&kl(t,e,n),n};var Wy=(i,t,e)=>t.has(i)||Kl("Cannot "+e);var Wl=(i,t,e)=>t.has(i)?Kl("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);var Fl=(i,t,e)=>(Wy(i,t,"access private method"),e);var Q,de=Ae(()=>{Q=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};});var by;exports.registerDriverAdapter=void 0;var gh,Ty,Ct=Ae(()=>{de();by=[],exports.registerDriverAdapter=i=>{by.push(i);},gh=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})},Ty=async(i,t,e,r)=>{if(e&&typeof e!="string")return gh(i,e,t,r);let n=by.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 Q(e??i)};});var Rt,qh,Sy,Vt=Ae(()=>{Rt=async(i,t={},e)=>{let r=new stream.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},qh=i=>{if(i.writableNeedDrain)return new Promise(t=>i.once("drain",()=>t()))},Sy=async(i,t={},e)=>{let r=new stream.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 qh(r);r.end();}catch(n){r.destroy(n);}return r};});var Ny,bn,qy=Ae(()=>{Vt();Ny=i=>{if(!i||typeof i!="object")return i;let t=i,e=t.errno,r=typeof e=="string"&&/^[0-9A-Z]{5}$/.test(e),n=typeof t.code=="string"&&t.code.startsWith("ERR_");return !r||!n||(t.cause===void 0&&(t.cause=i),t.code=e),i},bn=class{constructor(t,e,r){this.jsEnvironment="bun";this.dialect=t;let n={hostname:e.host,port:e.port,username:e.username,password:e.password,database:e.database,...e.driverOptions};(t==="mysql"||t==="mariadb")&&(n.adapter="mysql",n.allowPublicKeyRetrieval=true),this.sql=new r(n),this.pool=this.sql;}createPool(){}async closePool(){this.sql.close();}async reserveConnection(){return this.sql.reserve()}releaseConnection(t){t?.release();}async beginTransaction(t,e){(this.dialect==="mysql"||this.dialect==="mariadb")&&e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await e.rawQuery(this.dialect==="mysql"||this.dialect==="mariadb"?"START TRANSACTION":"BEGIN TRANSACTION"),(this.dialect==="postgres"||this.dialect==="cockroachdb")&&e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.sql,o;try{o=await n.unsafe(t,e);}catch(a){throw Ny(a)}if(this.dialect==="mysql"||this.dialect==="mariadb"){let a=/^\s*(select|show|desc(ribe)?|explain)\b/i.test(t);if(Array.isArray(o)&&(a||o.length>0))return [o,void 0];let l=o;return [{affectedRows:Number(l.affectedRows),insertId:Number(l.lastInsertRowid)},void 0]}let s=o;return Array.isArray(o)&&!((s.command==="INSERT"||s.command==="UPDATE"||s.command==="DELETE")&&o.length===0)?{rows:o,rowCount:o.length}:{rows:[],rowCount:s.count??s.affectedRows??0}}extract(t,e){if(e==="raw")return t;if(this.dialect==="mysql"||this.dialect==="mariadb"){let n=t;return e==="affectedRows"?n[0]?.affectedRows??0:n[0]}let r=t;return e==="affectedRows"?r.rowCount:r.rows}async stream(t,e,r,n){let o=r.connection??this.sql,s;try{s=await o.unsafe(t,e);}catch(l){throw Ny(l)}let a=Array.isArray(s)?s:[];return Rt(a,r,n)}};});var Tn,Cy=Ae(()=>{Vt();Tn=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 Sy(o.query(t).iterate(...e),r,n)}};});var Ry={};Ql(Ry,{registerBunDrivers:()=>Ch});var Ch,_y=Ae(()=>{Ct();qy();Cy();Ch=async()=>{let{SQL:i}=await import('bun'),{Database:t}=await import('bun:sqlite');exports.registerDriverAdapter({name:"bun-sql",dialects:["postgres","cockroachdb","mysql","mariadb"],environments:["bun"],create:async({dialect:e,input:r})=>new bn(e,r,i)}),exports.registerDriverAdapter({name:"bun-sqlite",dialects:["sqlite"],environments:["bun"],create:async({dialect:e,input:r})=>new Tn(e,r,t)});};});var Rh,wn,_l,Ml=Ae(()=>{Vt();Rh=async i=>(await(await import('@sqlite.org/sqlite-wasm')).default(i)).oo1,wn=class{constructor(t,e,r=Rh,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 _l(t)?a(t):s==="fetch"?n.selectObjects(t,e):o?.typeofModel&&(s==="insertOne"||s==="insertMany")?n.selectObjects(`${t} returning *`,e):a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.requireDb();return Rt(o.selectObjects(t,e),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-wasm: pool not created, await createPool() before querying");return this.db}},_l=i=>["begin","begin transaction","commit","rollback"].includes(i.trim().toLowerCase());});var Ol,Sn,My=Ae(()=>{Vt();Ml();Ol=i=>Array.isArray(i)?i:i?._array??[],Sn=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(_l(t))return a(t);if(s==="fetch"){let u=await n.execute(t,e);return Ol(u.rows)}if(!o?.typeofModel)return a(t);if(s==="insertOne"||s==="insertMany"){let u=await n.execute(`${t} returning *`,e);return Ol(u.rows)}return a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let s=await(r.connection??this.requireDb()).execute(t,e);return Rt(Ol(s.rows),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-rn: pool not created, await createPool() before querying");return this.db}};});var Al={};Ql(Al,{registerReactNativeDrivers:()=>Mh,registerWebDrivers:()=>_h});var Oy,Ay,_h,xy,Mh,xl=Ae(()=>{Ct();My();Ml();Oy=false,_h=i=>{Oy||(Oy=true,Ay=i,exports.registerDriverAdapter({name:"sqlite-wasm",dialects:["sqlite"],environments:["web"],create:({dialect:t,input:e})=>new wn(t,e,void 0,Ay)}));},xy=false,Mh=async()=>{if(xy)return;xy=true;let i=await import('@op-engineering/op-sqlite');exports.registerDriverAdapter({name:"sqlite-rn",dialects:["sqlite"],environments:["react-native"],create:({dialect:t,input:e})=>new Sn(t,e,i)});};});var g=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}},xt=class extends g{constructor(t){super("ValidationError","VALIDATION_ERROR"),this.errors=t;}};function Gt(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 Fy=i=>{i[6]=i[6]&15|64,i[8]=i[8]&63|128;let t=Pe(i);return [t.slice(0,8),t.slice(8,12),t.slice(12,16),t.slice(16,20),t.slice(20)].join("-")},jl=i=>{let t=globalThis.crypto;if(!t||typeof t.getRandomValues!="function")throw new tt("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 tt(`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")}},Mn=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}`}},$e=class{constructor(){this.name="web";this.crypto={randomUUID:()=>{let t=globalThis.crypto;return typeof t?.randomUUID=="function"?t.randomUUID():Fy(jl(new Uint8Array(16)))},randomBytes:t=>jl(new Uint8Array(t))};this.timing={now:()=>globalThis.performance.now()};this.fs=new _n;this.path=new Mn;}readEnv(t){}};var rt=class extends $e{constructor(){super(...arguments);this.name="node";this.fs={exists:e=>qn__default.default.existsSync(e),readFileSync:e=>qn__default.default.existsSync(e)?new Uint8Array(qn__default.default.readFileSync(e)):null,readFile:async e=>qn.promises.readFile(e,"utf8"),readdir:e=>qn.promises.readdir(e),mkdir:async(e,r)=>{await qn.promises.mkdir(e,{recursive:r?.recursive});},writeFile:async(e,r)=>{await qn.promises.writeFile(e,r);},rm:async(e,r)=>{await qn.promises.rm(e,{recursive:r?.recursive,force:r?.force});}};this.path=Mt__default.default;}readEnv(e){return typeof process>"u"?void 0:process.env[e]}};var An=()=>import('bun'),Yt=class extends rt{constructor(){super();this.name="bun";let e=this.fs;this.fs={...e,readFile:async r=>(await An()).file(r).text(),readdir:async r=>{let n=await An(),o=[];for await(let s of new n.Glob("*").scan({cwd:r}))o.push(s);return o},writeFile:async(r,n)=>{await(await An()).write(r,n);}};}};var Zt=class extends $e{constructor(){super(...arguments);this.name="react-native";}};var tt=class extends Error{constructor(t){super(`Platform does not support: ${t}`),this.name="PlatformUnsupportedError";}},Pe=i=>{let t="";for(let e of i)t+=e.toString(16).padStart(2,"0");return t},Ul=new Map,Uy=i=>{switch(i){case "bun":return new Yt;case "node":return new rt;case "react-native":return new Zt;default:return new $e}};function te(i){let t=Gt(i),e=Ul.get(t);return e||(e=Uy(t),Ul.set(t,e)),e}function Vy(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 Vl(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function Jy(i){if(typeof i!="string"||!i)return i;let t=Vl(i);return t.charAt(0).toUpperCase()+t.slice(1)}function U(i,t){return t==="preserve"?i:t==="snake"?Vy(i):t==="camel"?Vl(i):t==="pascal"?Jy(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}function Ce(i){return String(i).padStart(2,"0")}function Hy(i,t){let e=i.getFullYear(),r=Ce(i.getMonth()+1),n=Ce(i.getDate()),o=Ce(i.getHours()),s=Ce(i.getMinutes()),a=Ce(i.getSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${s}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${s}:${a}`;case "TIMESTAMP":return Math.floor(i.getTime()/1e3).toString()}}function Jl(i,t){let e=i.getUTCFullYear(),r=Ce(i.getUTCMonth()+1),n=Ce(i.getUTCDate()),o=Ce(i.getUTCHours()),s=Ce(i.getUTCMinutes()),a=Ce(i.getUTCSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${s}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${s}:${a}`;case "TIMESTAMP":return Math.floor(i.getTime()/1e3).toString()}}var ie=(i,t="ISO",e="UTC")=>{if(!(i instanceof Date)||isNaN(i.getTime()))throw new Error("Invalid date provided");return e==="LOCAL"?Hy(i,t):Jl(i,t)};var nt=(i=new Date)=>Jl(i,"ISO");var Hl=(i,t)=>{try{let e=xe__default.default.createHash("sha256").update(i).digest(),r=xe__default.default.randomBytes(16),n=xe__default.default.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 g("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},zl=(i,t)=>{try{let e=xe__default.default.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=xe__default.default.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 g("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Gl=(i,t)=>{try{let e=xe__default.default.randomBytes(32),r=xe__default.default.randomBytes(16),n=xe__default.default.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");o+=n.final("hex");let s=xe.publicEncrypt(i,e);return `${r.toString("hex")}:${s.toString("hex")}:${o}`}catch(e){throw new g("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},Yl=(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=xe.privateDecrypt(i,Buffer.from(n,"hex")),a=xe__default.default.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 g("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 Dn="0123456789ABCDEFGHJKMNPQRSTVWXYZ",xn=Dn.length,Yy=10,Zy=16,Xy=(i,t)=>{let e="";for(let r=0;r<t;r++){let n=i%xn;e=Dn.charAt(n)+e,i=(i-n)/xn;}return e},ef=i=>{let t=te().crypto.randomBytes(i),e="";for(let r=0;r<i;r++){let n=t[r];e+=Dn.charAt(n%xn);}return e},Zl=()=>{let i=Math.floor(Date.now()/1e3),t=Xy(i,Yy),e=ef(Zy);return t+e};function In(i){return i.replace(/^[`"]|[`"]$/g,"")}function En(i,t,e){if(!i.includes(".")){let o=In(i);return `${t}.${o}`}let[r,n]=i.split(".");return r=In(r),n=In(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 Re=class{constructor(t,e){this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var Xt=class extends Re{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var er=class extends Re{constructor(e,r,n){super(e,r);this.type="hasMany";this.foreignKey=n,this.type="hasMany";}};var tr=class extends Re{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var rr=class extends Re{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 tf(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 nr=Symbol("columns"),ot=Symbol("primaryKey"),be=Symbol("relations"),or=Symbol("indexes"),sr=Symbol("uniques"),ir=Symbol("checks"),Be=i=>`${tf(i)}_id`,ar=(i,t)=>`idx_${i}_${t}`,me=(i,t)=>`uq_${i}_${t}`,z=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,Te=(i,t)=>`pk_${i}_${t}`,Xl=(i,t)=>{let e=t.replace(/[^a-zA-Z0-9]+/g,"_").replace(/^_|_$/g,"").toLowerCase();return `chk_${i}_${e}`.substring(0,63)};function vn(i,t){return e=>{let r=Array.isArray(i)?i:[i],n=K.getMetadata(or,e.prototype)||[];n.push({columns:r,name:t??ar(e.table,r.join("_"))}),K.defineMetadata(or,n,e.prototype);}}function $n(i,t){return e=>{let r=Array.isArray(i)?i:[i],n=K.getMetadata(sr,e.prototype)||[];n.push({columns:r,name:t??me(e.table,r.join("_"))}),K.defineMetadata(sr,n,e.prototype);}}function Pn(i,t){return e=>{let r=K.getMetadata(ir,e.prototype)||[];r.push({expression:i,name:t??Xl(e.table,i)}),K.defineMetadata(ir,r,e.prototype);}}var eu=Symbol("viewStatement");function R(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let n=e.constructor;if(t){if(K.getMetadata(ot,e))throw new g("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");K.defineMetadata(ot,r,e),K.defineMetadata(ot,r,e.constructor);}let o=i.databaseName??U(r,n.databaseCaseConvention),s={columnName:r,serialize:i.serialize,prepare:i.prepare,isPrimary:t,primaryKeyConstraintName:i.primaryKeyConstraintName??Te(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(nr,e)||[];a.push(s),K.defineMetadata(nr,a,e);}}R.primary=rf;R.date=Tf;R.datetime=wf;R.timestamp=Sf;R.time=Nf;R.boolean=bf;R.json=qf;R.uuid=lf;R.ulid=uf;R.integer=of;R.bigInteger=cf;R.float=nf;R.decimal=pf;R.increment=sf;R.bigIncrement=af;R.string=df;R.text=mf;R.binary=yf;R.enum=ff;R.encryption={symmetric:hf,asymmetric:gf};R.computed=Cf;function rf(i={}){return R({...i,primaryKey:true})}function nf(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 of(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 sf(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 af(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 lf(i={}){return R({type:"uuid",...i,prepare:t=>t||te().crypto.randomUUID(),openApi:{type:"string",format:"uuid",description:"uuid (Universally Unique Identifier)",...i.openApi||{}}})}function uf(i={}){return R({type:"ulid",...i,prepare:t=>t||Zl(),openApi:{type:"string",format:"ulid",description:"ulid (Universally Unique Lexicographically Sortable Identifier)",...i.openApi||{}}})}function df(i={}){return R({type:"string",...i,openApi:{type:"string",description:"A string value",...i.openApi||{}}})}function mf(i={}){return R({type:"longtext",...i,openApi:{type:"string",description:"A text value",...i.openApi||{}}})}function cf(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 pf(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 yf(i={}){return R({type:"binary",...i,openApi:{type:"string",format:"binary",description:"Binary data",...i.openApi||{}}})}function ff(i,t={}){return R({type:i,...t,openApi:{type:"string",enum:i,description:"An enum value",...t.openApi||{}}})}function hf(i){return R({...i,prepare:t=>t&&Hl(i.key,t),serialize:t=>t&&zl(i.key,t)})}function gf(i){return R({...i,prepare:t=>t&&Gl(i.publicKey,t),serialize:t=>t&&Yl(i.privateKey,t)})}function bf(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 Tf(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=i,s=!!n,a=!!r,l=typeof n=="function"?"js":s?true:void 0,u=()=>new Date,d=()=>ie(new Date,"DATE_ONLY",e),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?ie(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 wf(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=()=>ie(new Date,"ISO",a),h=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?N=>N?d?y():N:u?h():null:N=>N?d?y():N:u?h():null,serialize:t?N=>{if(N!==void 0)return N===null?null:N instanceof Date?ie(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 Sf(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=()=>ie(new Date,"TIMESTAMP",a),h=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?N=>N?d?y():N:u?h():null:N=>N?d?y():N:u?h():null,serialize:t?N=>{if(N!==void 0)return N===null?null:N instanceof Date?ie(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 Nf(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=i,s=!!n,a=!!r,l=typeof n=="function"?"js":s?true:void 0,u=()=>new Date,d=()=>ie(new Date,"TIME_ONLY",e),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?ie(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 qf(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 Cf(i,t={}){return R({...t,expression:i})}function tu(i){try{return K.getMetadata(nr,i.prototype)||[]}catch{return []}}function ru(i,t,e){return((r,n)=>{let o=()=>Be(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(be,r)||[];l.push(a),K.defineMetadata(be,l,r);})}function nu(i,t){return((e,r)=>{let n=()=>Be(e.constructor.table),o={type:"hasOne",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):n},s=K.getMetadata(be,e)||[];s.push(o),K.defineMetadata(be,s,e);})}function ou(i,t){return((e,r)=>{let n=()=>Be(e.constructor.table),o={type:"hasMany",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):n},s=K.getMetadata(be,e)||[];s.push(o),K.defineMetadata(be,s,e);})}function su(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=()=>Be(d),m=()=>Be(i().table),p=()=>z(q(u),s?String(s):c()),h={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(be,n)||[];y.push(h),K.defineMetadata(be,y,n);})}function iu(i){return K.getMetadata(be,i.prototype)||[]}function au(i){return (K.getMetadata(be,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 Xt(l,o,a);case "hasOne":return new tr(l,o,a);case "hasMany":return new er(l,o,a);case "manyToMany":if(!e.manyToManyOptions)throw new g("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let u=n();return new rr(u,o,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:q(e.manyToManyOptions.throughModel),leftForeignKey:q(e.manyToManyOptions.leftForeignKey),rightForeignKey:q(e.manyToManyOptions.rightForeignKey)});default:throw new g("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function lu(i){return K.getMetadata(ot,i)||K.getMetadata(ot,i.prototype)}function uu(i){return K.getMetadata(or,i.prototype)||[]}function du(i){return K.getMetadata(sr,i.prototype)||[]}function mu(i){return K.getMetadata(ir,i.prototype)||[]}var ke=class{};ke.modelCaseConvention="camel",ke.databaseCaseConvention="snake";var ce=class{};ce.columns=new WeakMap,ce.byName=new WeakMap,ce.byDatabaseName=new WeakMap;var ae=class extends ke{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 lu(this)}constructor(t){if(super(),t)for(let e in t)Object.assign(this,{[e]:t[e]});}static getColumns(){let t=ce.columns.get(this);return t||(t=tu(this),ce.columns.set(this,t)),t}static getColumnsByName(){let t=ce.byName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.columnName,e])),ce.byName.set(this,t)),t}static getColumnsByDatabaseName(){let t=ce.byDatabaseName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.databaseName,e])),ce.byDatabaseName.set(this,t)),t}static getRelations(){return iu(this)}static getIndexes(){return uu(this)}static getUniques(){return du(this)}static getChecks(){return mu(this)}static async validate(t){var s,a;let e=this.getColumns(),r={},n=this.primaryKey,o=n&&t?.[n]!==void 0?"update":"insert";for(let l of e){if(l.expression)continue;let u=l.validate;if(!u)continue;let d=t?t[l.columnName]:void 0,c=Array.isArray(u)?u:[u];for(let m of c)try{let p=await m(d,{model:this,column:l.columnName,operation:o,data:t});if(!(p&&p.valid)){let h=p&&p.message||"Validation failed";(r[s=l.columnName]||(r[s]=[])).push(h);}}catch{(r[a=l.columnName]||(r[a]=[])).push("Validation error");}}if(Object.keys(r).length>0)throw new xt(r);return {valid:true}}};ae.zodEngine=null,ae.softDeleteColumn="deletedAt",ae.softDeleteValue=nt();var cu=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 pu(i){return W((t,e)=>{R.date(i??{},false)(t,e);})}pu.string=function(t){return W((e,r)=>{R.date(t??{},true)(e,r);})};j.date=pu;function yu(i){return W((t,e)=>{R.datetime(i??{},false)(t,e);})}yu.string=function(t){return W((e,r)=>{R.datetime(t??{},true)(e,r);})};j.datetime=yu;function fu(i){return W((t,e)=>{R.timestamp(i??{},false)(t,e);})}fu.string=function(t){return W((e,r)=>{R.timestamp(t??{},true)(e,r);})};j.timestamp=fu;function hu(i){return W((t,e)=>{R.time(i??{},false)(t,e);})}hu.string=function(t){return W((e,r)=>{R.time(t??{},true)(e,r);})};j.time=hu;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 Rf=j;function _f(i,t){let{columns:e,indexes:r,uniques:n,checks:o,hooks:s,options:a}=t;class l extends ae{}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),cu.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)xf(l,u);if(n)for(let u of n)Df(l,u);if(o)for(let u of o)If(l,u);return s&&s.beforeFetch&&(l.beforeFetch=s.beforeFetch),gu(l),l}function Mf(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 Of(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":nu(()=>l,u)(n.prototype,s);break;case "hasMany":ou(()=>l,u)(n.prototype,s);break;case "belongsTo":ru(()=>l,u,a._constraintOptions)(n.prototype,s);break;case "manyToMany":{let d=a._throughModel,c=a._throughModelKeys;su(()=>l,d,c,a._constraintOptions)(n.prototype,s);break}}}}return i}function Af(i,t){let{columns:e,statement:r,hooks:n,options:o}=t;class s extends ae{}s.table=i,s[eu]=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),cu.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),gu(s),s}function gu(i){i.toZodSchema=function(){let t=this.zodEngine||ae.zodEngine;if(!t)throw new g("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 xf(i,t){Array.isArray(t)?vn(t)(i):vn(t.columns,t.name)(i);}function Df(i,t){Array.isArray(t)?$n(t)(i):$n(t.columns,t.name)(i);}function If(i,t){typeof t=="string"?Pn(t)(i):Pn(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 M=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 Me=class extends S{constructor(e,r="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`;}};var le=class extends M{constructor(e,r,n=false,o,s,a=false){super(e,r,n,"=",s,a);this.file="where_json";this.jsonOperator=o,this.value=s;}};var we=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 re=class extends S{constructor(e,r,n,o){super("select");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="select";this.file="select";this.column=e,this.alias=r,this.sqlFunction=n,this.isRawValue=o??false;}};var Bn=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:[]}}},bu=new Bn;var kn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Tu=new kn;var Kn=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`[${n}]`).join(", ")})`,bindings:[]}}},wu=new Kn;var Qn=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:[]}}},Su=new Qn;var st=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 Ln=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 st){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}}},Nu=new Ln;var Wn=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},qu=new Wn;var Fn=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},Cu=new Fn;var jn=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},Ru=new jn;var It=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"}},Un=i=>{if(i==null)return "NULL";if(i instanceof Date)return `'${i.toISOString()}'`;let t=typeof i;return t==="boolean"?i?"TRUE":"FALSE":t==="number"&&Number.isFinite(i)||t==="bigint"?String(i):t==="string"?`'${i.replace(/'/g,"''")}'`:Array.isArray(i)||t==="object"&&Object.keys(i).length>0?`'${JSON.stringify(i).replace(/'/g,"''")}'`:String(i)},it=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,Un(t[r]));for(let r=0;r<t.length;r++){let n=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(n,Un(t[r]));}for(let r=0;r<t.length;r++){let n=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(n,Un(t[r]));}return e},at=(i,t)=>t?i==="mysql"||i==="mariadb"?t.code==="ER_NO_SUCH_TABLE"||t.errno===1146:i==="postgres"||i==="cockroachdb"?t.code==="42P01":i==="sqlite"?/no such table/i.test(String(t.message||"")):i==="mssql"?t.number===208:false:false,lt=(i,t)=>{let e=i.getDbType(),r;try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions,language:It(e)});}catch{try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var Mu={info:0,warn:1,error:2};function ur(i){return i?i===true?{level:"info",logQueries:true}:{level:i.level??"info",logQueries:i.logQueries??true,customLogger:i.customLogger}:null}function $f(i,t="info"){let e=ur(i);if(!e)return false;let r=e.level??"info";return Mu[t]>=Mu[r]}function Pf(i){let t=ur(i);return t?t.logQueries??true:false}var Ke={info:"32",warn:"33",error:"31",query:"35",dim:"2",cyan:"36"},Bf=typeof process<"u"&&!!process.stdout?.isTTY&&!process.env.NO_COLOR,ut=(i,t)=>Bf?`\x1B[${i}m${t}\x1B[0m`:t;function Du(){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 Vn(i,t){let e=ut(Ke.dim,`[${Du()}]`),r=ut(Ke[i],i.toUpperCase().padEnd(5));return `${e} ${r} ${t}`}var kf=60,Kf=10,Ou=400;function lr(i,t=kf){return i.length<=t?i:`${i.slice(0,t)}\u2026`}function Qf(i){if(i==null)return "null";if(typeof i=="string")return `'${lr(i)}'`;if(typeof i=="number"||typeof i=="bigint")return String(i);if(typeof i=="boolean")return i?"true":"false";if(i instanceof Date)return `'${lr(i.toISOString())}'`;if(typeof i=="object"){let t;try{t=JSON.stringify(i);}catch{t=String(i);}return `'${lr(t)}'`}return lr(String(i))}function Lf(i){if(!i||i.length===0)return "[]";let t=i.slice(0,Kf).map(Qf),e=i.length-t.length;e>0&&t.push(`\u2026 (${e} more)`);let r=`[${t.join(", ")}]`;return r.length>Ou&&(r=`${r.slice(0,Ou)}\u2026`),r}var Au=(i,t)=>{let e=" ".repeat(t);return i.split(`
2
2
  `).map(r=>`${e}${r}`).join(`
3
3
  `)};function Wf(i){let t=i<10?Ke.info:i<100?Ke.warn:Ke.error;return ut(t,`(${i}ms)`)}function Ff(i,t,e){let r=ut(Ke.dim,`[${Du()}]`),n=ut(Ke.query,"QUERY"),s=[e===void 0?`${r} ${n}`:`${r} ${n} ${Wf(e)}`,Au(i,2)];return t&&t.length>0&&s.push(Au(`parameters: ${ut(Ke.cyan,Lf(t))}`,4)),s.join(`
4
- `)}var xu={info(i){console.log(Vn("info",i));},error(i){console.error(Vn("error",i));},warn(i){console.warn(Vn("warn",i));}},dt=class{static setCustomLogger(t){this.loggerInstance=t;}static info(t){this.loggerInstance.info(t);}static error(t){this.loggerInstance.error(t instanceof Error?String(t):t);}static warn(t){this.loggerInstance.warn(t);}static query(t){if(this.loggerInstance===xu){console.log(t);return}this.loggerInstance.info(t);}};dt.loggerInstance=xu;function mt(i,t,e,r,n,o){if(!Pf(t))return;let s=i;if(r||n)try{s=sqlFormatter.format(i,{...r,language:r?.language??(n?It(n):void 0)});}catch{s=i;}let a=sqlHighlight.highlight(s,{colors:{keyword:"\x1B[34m",string:"\x1B[32m",number:"\x1B[33m",bracket:"\x1B[36m",clear:"\x1B[0m",comment:"\x1B[90m",function:"\x1B[35m",identifier:"\x1B[37m",special:"\x1B[31m"}});dt.query(Ff(a,e,o));}function Iu(i,t,e=false){$f(e,t)&&dt.loggerInstance[t](i);}var _=dt;var Jn=class{toSql(t){let e=t;return _.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] null`,bindings:[]}}},Eu=new Jn;var Hn=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},vu=new Hn;var zn=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},$u=new zn;var Gn=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},Pu=new Gn;var x=class extends w{constructor(e){super("raw",true);this.canKeywordBeSeenMultipleTimes=true;this.chainsWith=" ";this.currParamIndex=0;this.isRawValue=true;this.folder="raw";this.file="raw";this.rawValue=e;}};var D=class extends w{constructor(e,r=[]){super("sqlfunc");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="sqlfunc";this.file="sqlfunc";this.fn=e,this.args=r;}},jf={uuid:()=>new D("$uuid"),now:()=>new D("$now"),currentTimestamp:()=>new D("$currentTimestamp")},Yn=new Map;function Uf(i,t){Yn.set(i,t);}function Qe(i,t){let e=i===void 0?void 0:Yn.get(i),r=Yn.get("*");return e?.(t)??r?.(t)}var Zn=class{toSql(t){let e=t,r;return e.defaultValue instanceof x?r=e.defaultValue.rawValue:e.defaultValue instanceof D?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:[]}}},Bu=new Zn;var Xn=class{toSql(t){let e=t;return _.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] not null`,bindings:[]}}},ku=new Xn;var eo=class{toSql(t){return {sql:"",bindings:[]}}},Ku=new eo;var to=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new f(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:[]}}},Qu=new to;var ro=class{toSql(t){return {sql:"",bindings:[]}}},Lu=new ro;var no=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 x?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof D?{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:[]}}},Wu=new no;var oo=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mssql"),s=[],a=[];for(let h of e.children){let{sql:y,bindings:T}=o.parse([h]);if(h.folder==="constraint"){let S=s.pop()??"",N=y;if(/not null/i.test(N)||/null/i.test(N)||/default/i.test(N)){let C=`${S} ${N}`.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(N),a.push(...T);continue}s.push(y),a.push(...T);}for(let h of e.namedConstraints){let{sql:y,bindings:T}=o.parse([h]);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}]`:"",c=e.textImageOn?` TEXTIMAGE_ON [${e.textImageOn}]`:"",m=u.length>0?` WITH (${u.join(", ")})`:"";return {sql:`${n} (${l})${m}${d}${c}`,bindings:a}}},Fu=new oo;var so=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:[]}}},ju=new so;var io=class{toSql(t){return {sql:"",bindings:[]}}},Uu=new io;var ao=class{toSql(t){return _.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},Vu=new ao;var lo=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Ju=new lo;var uo=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Hu=new uo;var mo=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mssql",e.table)} as [${e.alias}]`,bindings:[]}:{sql:a.formatStringTable("mssql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"mssql").parse(r),s=e.alias&&e.alias.length?` as [${e.alias}]`:"";return {sql:`(${o.sql})${s}`,bindings:o.bindings}}},zu=new mo;var co=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},Gu=new co;var po=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(e.value instanceof D){let s=new b(this.model,"mssql").parse([e.value],1,true).sql;n=`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${s}`,o=[];}else !(e.value instanceof w)&&!Array.isArray(e.value)&&(n=`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} @${r}`,o=[e.value]);if(Array.isArray(e.value)){let s=e.value.map((a,l)=>`@${r+l}`).join(", ");n=`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} (${s})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},Yu=new po;var yo=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:[]}}},Zu=new yo;var fo=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},Xu=new fo;var ho=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);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],s=Object.keys(o).filter(m=>o[m]!==void 0);if(!s.length)return {sql:n,bindings:[]};let a=s.map(m=>r.formatStringColumn("mssql",m)).join(", "),l=[],u=[],d=e.currParamIndex;for(let m of e.records){let p=s.map(y=>m[y]),h=[];for(let y of p)y instanceof x?h.push(y.rawValue):(l.push(y),h.push(`@${d++}`));u.push(`(${h.join(", ")})`);}let c=`${n} (${a}) values ${u.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(p=>`inserted.${r.formatStringColumn("mssql",p)}${r.resolveColumnAlias("mssql",p)}`).join(", ");c=c.replace(") values",`) output ${m} values`);}else {let m=this.getOutputColumns(s,r);c=c.replace(") values",`) output ${m} values`);}return {sql:c,bindings:l}}getOutputColumns(t,e){let r=[...t],n=this.model.primaryKey;return n&&!t.includes(n)&&r.push(n),r.map(o=>`inserted.${e.formatStringColumn("mssql",o)}${e.resolveColumnAlias("mssql",o)}`).join(", ")}},ed=new ho;var go=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let s=r.formatStringColumn("mssql",n),a=r.formatStringColumn("mssql",o),u=`${r.formatStringTable("mssql",e.table)} on ${s} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"mssql");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},td=new go;var bo=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},rd=new bo;var To=class{toSql(t){return {sql:"",bindings:[]}}},nd=new To;var wo=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},od=new wo;var So=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:[]})}},sd=new So;var No=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:[]}}},id=new No;var qo=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},ad=new qo;var Co=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:[]}}},ld=new Co;var Ro=class{toSql(t){return {sql:`SELECT
4
+ `)}var xu={info(i){console.log(Vn("info",i));},error(i){console.error(Vn("error",i));},warn(i){console.warn(Vn("warn",i));}},dt=class{static setCustomLogger(t){this.loggerInstance=t;}static info(t){this.loggerInstance.info(t);}static error(t){this.loggerInstance.error(t instanceof Error?String(t):t);}static warn(t){this.loggerInstance.warn(t);}static query(t){if(this.loggerInstance===xu){console.log(t);return}this.loggerInstance.info(t);}};dt.loggerInstance=xu;function mt(i,t,e,r,n,o){if(!Pf(t))return;let s=i;if(r||n)try{s=sqlFormatter.format(i,{...r,language:r?.language??(n?It(n):void 0)});}catch{s=i;}let a=sqlHighlight.highlight(s,{colors:{keyword:"\x1B[34m",string:"\x1B[32m",number:"\x1B[33m",bracket:"\x1B[36m",clear:"\x1B[0m",comment:"\x1B[90m",function:"\x1B[35m",identifier:"\x1B[37m",special:"\x1B[31m"}});dt.query(Ff(a,e,o));}function Iu(i,t,e=false){$f(e,t)&&dt.loggerInstance[t](i);}var _=dt;var Jn=class{toSql(t){let e=t;return _.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] null`,bindings:[]}}},Eu=new Jn;var Hn=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},vu=new Hn;var zn=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},$u=new zn;var Gn=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},Pu=new Gn;var x=class extends S{constructor(e){super("raw",true);this.canKeywordBeSeenMultipleTimes=true;this.chainsWith=" ";this.currParamIndex=0;this.isRawValue=true;this.folder="raw";this.file="raw";this.rawValue=e;}};var D=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;}},jf={uuid:()=>new D("$uuid"),now:()=>new D("$now"),currentTimestamp:()=>new D("$currentTimestamp")},Yn=new Map;function Uf(i,t){Yn.set(i,t);}function Qe(i,t){let e=i===void 0?void 0:Yn.get(i),r=Yn.get("*");return e?.(t)??r?.(t)}var Zn=class{toSql(t){let e=t,r;return e.defaultValue instanceof x?r=e.defaultValue.rawValue:e.defaultValue instanceof D?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:[]}}},Bu=new Zn;var Xn=class{toSql(t){let e=t;return _.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] not null`,bindings:[]}}},ku=new Xn;var eo=class{toSql(t){return {sql:"",bindings:[]}}},Ku=new eo;var to=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new f(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:[]}}},Qu=new to;var ro=class{toSql(t){return {sql:"",bindings:[]}}},Lu=new ro;var no=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 x?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof D?{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:[]}}},Wu=new no;var oo=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mssql"),s=[],a=[];for(let h of e.children){let{sql:y,bindings:T}=o.parse([h]);if(h.folder==="constraint"){let w=s.pop()??"",N=y;if(/not null/i.test(N)||/null/i.test(N)||/default/i.test(N)){let C=`${w} ${N}`.trim();C=C.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(C),a.push(...T);continue}s.push(w),s.push(N),a.push(...T);continue}s.push(y),a.push(...T);}for(let h of e.namedConstraints){let{sql:y,bindings:T}=o.parse([h]);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}]`:"",c=e.textImageOn?` TEXTIMAGE_ON [${e.textImageOn}]`:"",m=u.length>0?` WITH (${u.join(", ")})`:"";return {sql:`${n} (${l})${m}${d}${c}`,bindings:a}}},Fu=new oo;var so=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:[]}}},ju=new so;var io=class{toSql(t){return {sql:"",bindings:[]}}},Uu=new io;var ao=class{toSql(t){return _.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},Vu=new ao;var lo=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Ju=new lo;var uo=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Hu=new uo;var mo=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mssql",e.table)} as [${e.alias}]`,bindings:[]}:{sql:a.formatStringTable("mssql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"mssql").parse(r),s=e.alias&&e.alias.length?` as [${e.alias}]`:"";return {sql:`(${o.sql})${s}`,bindings:o.bindings}}},zu=new mo;var co=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},Gu=new co;var po=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(e.value instanceof D){let s=new b(this.model,"mssql").parse([e.value],1,true).sql;n=`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${s}`,o=[];}else !(e.value instanceof S)&&!Array.isArray(e.value)&&(n=`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} @${r}`,o=[e.value]);if(Array.isArray(e.value)){let s=e.value.map((a,l)=>`@${r+l}`).join(", ");n=`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} (${s})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},Yu=new po;var yo=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:[]}}},Zu=new yo;var fo=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},Xu=new fo;var ho=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);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],s=Object.keys(o).filter(m=>o[m]!==void 0);if(!s.length)return {sql:n,bindings:[]};let a=s.map(m=>r.formatStringColumn("mssql",m)).join(", "),l=[],u=[],d=e.currParamIndex;for(let m of e.records){let p=s.map(y=>m[y]),h=[];for(let y of p)y instanceof x?h.push(y.rawValue):(l.push(y),h.push(`@${d++}`));u.push(`(${h.join(", ")})`);}let c=`${n} (${a}) values ${u.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(p=>`inserted.${r.formatStringColumn("mssql",p)}${r.resolveColumnAlias("mssql",p)}`).join(", ");c=c.replace(") values",`) output ${m} values`);}else {let m=this.getOutputColumns(s,r);c=c.replace(") values",`) output ${m} values`);}return {sql:c,bindings:l}}getOutputColumns(t,e){let r=[...t],n=this.model.primaryKey;return n&&!t.includes(n)&&r.push(n),r.map(o=>`inserted.${e.formatStringColumn("mssql",o)}${e.resolveColumnAlias("mssql",o)}`).join(", ")}},ed=new ho;var go=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let s=r.formatStringColumn("mssql",n),a=r.formatStringColumn("mssql",o),u=`${r.formatStringTable("mssql",e.table)} on ${s} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"mssql");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},td=new go;var bo=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},rd=new bo;var To=class{toSql(t){return {sql:"",bindings:[]}}},nd=new To;var wo=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},od=new wo;var So=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:[]})}},sd=new So;var No=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:[]}}},id=new No;var qo=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},ad=new qo;var Co=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:[]}}},ld=new Co;var Ro=class{toSql(t){return {sql:`SELECT
5
5
  cc.name AS name,
6
6
  cc.definition AS expression
7
7
  FROM sys.check_constraints cc
@@ -45,7 +45,7 @@ ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},Td=new $o;var Po=class{toSql(t){re
45
45
  c.NUMERIC_SCALE as numeric_scale
46
46
  FROM INFORMATION_SCHEMA.COLUMNS c
47
47
  WHERE c.TABLE_NAME = '${t.table}'
48
- ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},wd=new Po;var Bo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new f(this.model).formatStringColumn("mssql",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"mssql").parse(t),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"mssql").parse([t]),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new f(this.model).formatStringColumn("mssql",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"mssql").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},Sd=new Bo;var Oe=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 ko=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=Oe.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}},Nd=new ko;var Ko=class{toSql(t){let e=t,r=Qe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof x?s.rawValue:s instanceof D?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}}},qd=new Ko;var Qo=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:`table ${new f(this.model).getFromForWriteOperations("mssql",e.fromNode)}`,bindings:[]}}},Cd=new Qo;var Lo=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Rd=new Lo;var Wo=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=0,s=[],a=e.columns.map((u,d)=>{let c=e.currParamIndex+d-o,m=e.values[d];if(m instanceof x)return o++,`${r.formatStringColumn("mssql",u)} = ${m.rawValue}`;if(m instanceof D){o++;let p=new b(this.model,"mssql").parse([m],1,true).sql;return `${r.formatStringColumn("mssql",u)} = ${p}`}return s.push(m),`${r.formatStringColumn("mssql",u)} = @${c}`}).join(", ");return {sql:`${n} set ${a}`,bindings:s}}},_d=new Wo;var Fo=class{toSql(t){let e=t;if(e.isRawValue){let a=e.value??[];if(a.length===0)return {sql:e.column,bindings:[]};let l=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`@${l++}`),bindings:a}}let r=e.value,n=e.currParamIndex;if(this.isRawNode(r)){let a=this.formatRawIdentifierIfPossible(r.rawValue);return {sql:`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`.trim(),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 D){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}},Md=new Fo;var jo=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}}},Od=new jo;var Uo=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 "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`NOT (${n})`),{sql:n.trim(),bindings:o}}},Ad=new Uo;var Vo=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}}},xd=new Vo;var Jo=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex);return e.clause==="materialized"&&_.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored."),{sql:`[${e.alias}] as (${o.sql})`,bindings:o.bindings}}},Dd=new Jo;var Ho=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:[]}}},Id=new Ho;var zo=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Ed=new zo;var Go=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`\`${n}\``).join(", ")})`,bindings:[]}}},vd=new Go;var Yo=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:[]}}},$d=new Yo;var Zo=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:h}=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]??"",T=/^\s*add\s+column\b/i.test(y),S=/^\s*add\s+constraint\b/i.test(p);if(T&&!S){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 m.file==="set_default"||m.file==="drop_default"||m.file==="set_not_null"||m.file,s.push(p);a.push(...h);}let l=s.join(", "),u=e.ifExists?"if exists ":"";return {sql:/^\s*drop\s+index\b/i.test(l)?l:`${u}${n} ${l}`,bindings:a}}},Pd=new Zo;var Xo=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},Bd=new Xo;var es=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},kd=new es;var ts=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},Kd=new ts;var rs=class{toSql(t){return {sql:"",bindings:[]}}},Qd=new rs;var ns=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Ld=new ns;var os=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},Wd=new os;var ss=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},Fd=new ss;var is=class{toSql(t){let e=t,r;return e.defaultValue instanceof x?r=e.defaultValue.rawValue:e.defaultValue instanceof D?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:[]}}},jd=new is;var as=class{toSql(t){return {sql:"",bindings:[]}}},Ud=new as;var ls=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:[]}}},Vd=new ls;var us=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:[]}}},Jd=new us;var ds=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Hd=new ds;var ms=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 x?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof D?{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:[]}}},zd=new ms;var cs=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mysql"),s=[],a=[];for(let p of e.children){let{sql:h,bindings:y}=o.parse([p]);if(p.folder==="constraint"){let T=s.pop()??"",S=h;if(/not null/i.test(S)||/null/i.test(S)||/default/i.test(S)){let N=`${T} ${S}`.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(S),a.push(...y);continue}s.push(h),a.push(...y);}for(let p of e.namedConstraints){let{sql:h,bindings:y}=o.parse([p]);s.push(h),a.push(...y);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.engine&&d.push(`ENGINE=${e.engine}`),e.charset&&d.push(`CHARSET=${e.charset}`),e.collate&&d.push(`COLLATE=${e.collate}`);let c=d.length>0?` ${d.join(" ")}`:"";return {sql:`${u}${n} (${l})${c}`,bindings:a}}},Gd=new cs;var ps=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},Yd=new ps;var ys=class{toSql(t){return {sql:"distinct",bindings:[]}}},Zd=new ys;var fs=class{toSql(t){return _.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},Xd=new fs;var hs=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},em=new hs;var gs=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},tm=new gs;var bs=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mysql",e.table)} as \`${e.alias}\``,bindings:[]}:{sql:a.formatStringTable("mysql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"mysql").parse(r),s=e.alias&&e.alias.length?` as \`${e.alias}\``:"";return {sql:`(${o.sql})${s}`,bindings:o.bindings}}},rm=new bs;var Ts=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},nm=new Ts;var ws=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(e.value instanceof D){let s=new b(this.model,"mysql").parse([e.value],1,true).sql;n=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${s}`,o=[];}else !(e.value instanceof w)&&!Array.isArray(e.value)&&(n=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} $${r}`,o=[e.value]);if(Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${s})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},om=new ws;var Ss=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:[]}}},sm=new Ss;var Ns=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:[]}}},im=new Ns;var qs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),n=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],s=Object.keys(o);if(!s.length)return {sql:n,bindings:[]};let a=s.map(c=>r.formatStringColumn("mysql",c)).join(", "),l=[],u=[];for(let c of e.records){let m=s.map(h=>c[h]),p=[];for(let h of m)h instanceof x?p.push(h.rawValue):(l.push(h),p.push("?"));u.push(`(${p.join(", ")})`);}let d=`${n} (${a}) VALUES ${u.join(", ")}`;if(this.dbType==="mariadb"&&!e.disableReturning){if(e.returning&&e.returning.length){let c=e.returning.map(m=>r.formatStringColumn("mariadb",m)).join(", ");return {sql:`${d} returning ${c}`,bindings:l}}return {sql:`${d} returning *`,bindings:l}}return {sql:d,bindings:l}}},am=new qs;var Cs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let s=r.formatStringColumn("mysql",n),a=r.formatStringColumn("mysql",o),u=`${r.formatStringTable("mysql",e.table)} on ${s} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"mysql");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},lm=new Cs;var Rs=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},um=new Rs;var Vf={for_update:"for update",for_share:"lock in share mode"},_s=class{toSql(t){let e=t,r=Vf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},dm=new _s;var Ms=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},mm=new Ms;var Os=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:[]}}},cm=new Os;var As=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:[]}}},pm=new As;var xs=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},ym=new xs;var Ds=class{toSql(t){return {sql:"",bindings:[]}}},fm=new Ds;var Is=class{toSql(t){return {sql:`SELECT
48
+ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},wd=new Po;var Bo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new f(this.model).formatStringColumn("mssql",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"mssql").parse(t),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"mssql").parse([t]),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new f(this.model).formatStringColumn("mssql",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"mssql").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},Sd=new Bo;var Oe=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 ko=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=Oe.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}},Nd=new ko;var Ko=class{toSql(t){let e=t,r=Qe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof x?s.rawValue:s instanceof D?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}}},qd=new Ko;var Qo=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:`table ${new f(this.model).getFromForWriteOperations("mssql",e.fromNode)}`,bindings:[]}}},Cd=new Qo;var Lo=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Rd=new Lo;var Wo=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=0,s=[],a=e.columns.map((u,d)=>{let c=e.currParamIndex+d-o,m=e.values[d];if(m instanceof x)return o++,`${r.formatStringColumn("mssql",u)} = ${m.rawValue}`;if(m instanceof D){o++;let p=new b(this.model,"mssql").parse([m],1,true).sql;return `${r.formatStringColumn("mssql",u)} = ${p}`}return s.push(m),`${r.formatStringColumn("mssql",u)} = @${c}`}).join(", ");return {sql:`${n} set ${a}`,bindings:s}}},_d=new Wo;var Fo=class{toSql(t){let e=t;if(e.isRawValue){let a=e.value??[];if(a.length===0)return {sql:e.column,bindings:[]};let l=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`@${l++}`),bindings:a}}let r=e.value,n=e.currParamIndex;if(this.isRawNode(r)){let a=this.formatRawIdentifierIfPossible(r.rawValue);return {sql:`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`.trim(),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 D){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}},Md=new Fo;var jo=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}}},Od=new jo;var Uo=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 "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`NOT (${n})`),{sql:n.trim(),bindings:o}}},Ad=new Uo;var Vo=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}}},xd=new Vo;var Jo=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex);return e.clause==="materialized"&&_.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored."),{sql:`[${e.alias}] as (${o.sql})`,bindings:o.bindings}}},Dd=new Jo;var Ho=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:[]}}},Id=new Ho;var zo=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Ed=new zo;var Go=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`\`${n}\``).join(", ")})`,bindings:[]}}},vd=new Go;var Yo=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:[]}}},$d=new Yo;var Zo=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:h}=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]??"",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 m.file==="set_default"||m.file==="drop_default"||m.file==="set_not_null"||m.file,s.push(p);a.push(...h);}let l=s.join(", "),u=e.ifExists?"if exists ":"";return {sql:/^\s*drop\s+index\b/i.test(l)?l:`${u}${n} ${l}`,bindings:a}}},Pd=new Zo;var Xo=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},Bd=new Xo;var es=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},kd=new es;var ts=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},Kd=new ts;var rs=class{toSql(t){return {sql:"",bindings:[]}}},Qd=new rs;var ns=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Ld=new ns;var os=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},Wd=new os;var ss=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},Fd=new ss;var is=class{toSql(t){let e=t,r;return e.defaultValue instanceof x?r=e.defaultValue.rawValue:e.defaultValue instanceof D?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:[]}}},jd=new is;var as=class{toSql(t){return {sql:"",bindings:[]}}},Ud=new as;var ls=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:[]}}},Vd=new ls;var us=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:[]}}},Jd=new us;var ds=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Hd=new ds;var ms=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 x?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof D?{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:[]}}},zd=new ms;var cs=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mysql"),s=[],a=[];for(let p of e.children){let{sql:h,bindings:y}=o.parse([p]);if(p.folder==="constraint"){let T=s.pop()??"",w=h;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(h),a.push(...y);}for(let p of e.namedConstraints){let{sql:h,bindings:y}=o.parse([p]);s.push(h),a.push(...y);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.engine&&d.push(`ENGINE=${e.engine}`),e.charset&&d.push(`CHARSET=${e.charset}`),e.collate&&d.push(`COLLATE=${e.collate}`);let c=d.length>0?` ${d.join(" ")}`:"";return {sql:`${u}${n} (${l})${c}`,bindings:a}}},Gd=new cs;var ps=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},Yd=new ps;var ys=class{toSql(t){return {sql:"distinct",bindings:[]}}},Zd=new ys;var fs=class{toSql(t){return _.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},Xd=new fs;var hs=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},em=new hs;var gs=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},tm=new gs;var bs=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mysql",e.table)} as \`${e.alias}\``,bindings:[]}:{sql:a.formatStringTable("mysql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"mysql").parse(r),s=e.alias&&e.alias.length?` as \`${e.alias}\``:"";return {sql:`(${o.sql})${s}`,bindings:o.bindings}}},rm=new bs;var Ts=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},nm=new Ts;var ws=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(e.value instanceof D){let s=new b(this.model,"mysql").parse([e.value],1,true).sql;n=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${s}`,o=[];}else !(e.value instanceof S)&&!Array.isArray(e.value)&&(n=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} $${r}`,o=[e.value]);if(Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${s})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},om=new ws;var Ss=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:[]}}},sm=new Ss;var Ns=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:[]}}},im=new Ns;var qs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),n=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],s=Object.keys(o);if(!s.length)return {sql:n,bindings:[]};let a=s.map(c=>r.formatStringColumn("mysql",c)).join(", "),l=[],u=[];for(let c of e.records){let m=s.map(h=>c[h]),p=[];for(let h of m)h instanceof x?p.push(h.rawValue):(l.push(h),p.push("?"));u.push(`(${p.join(", ")})`);}let d=`${n} (${a}) VALUES ${u.join(", ")}`;if(this.dbType==="mariadb"&&!e.disableReturning){if(e.returning&&e.returning.length){let c=e.returning.map(m=>r.formatStringColumn("mariadb",m)).join(", ");return {sql:`${d} returning ${c}`,bindings:l}}return {sql:`${d} returning *`,bindings:l}}return {sql:d,bindings:l}}},am=new qs;var Cs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let s=r.formatStringColumn("mysql",n),a=r.formatStringColumn("mysql",o),u=`${r.formatStringTable("mysql",e.table)} on ${s} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"mysql");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},lm=new Cs;var Rs=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},um=new Rs;var Vf={for_update:"for update",for_share:"lock in share mode"},_s=class{toSql(t){let e=t,r=Vf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},dm=new _s;var Ms=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},mm=new Ms;var Os=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:[]}}},cm=new Os;var As=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:[]}}},pm=new As;var xs=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},ym=new xs;var Ds=class{toSql(t){return {sql:"",bindings:[]}}},fm=new Ds;var Is=class{toSql(t){return {sql:`SELECT
49
49
  cc.CONSTRAINT_NAME AS name,
50
50
  cc.CHECK_CLAUSE AS expression
51
51
  FROM information_schema.CHECK_CONSTRAINTS cc
@@ -70,7 +70,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},wd=new Po;var Bo=class{toSql(t){let
70
70
  COLUMN_NAME AS column_name
71
71
  FROM information_schema.KEY_COLUMN_USAGE k
72
72
  WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.CONSTRAINT_NAME = 'PRIMARY'
73
- ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},_m=new Ws;var Fs=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:[]}}},Mm=new Fs;var js=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new f(this.model).formatStringColumn("mysql",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"mysql").parse(t),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"mysql").parse([t]),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new f(this.model).formatStringColumn("mysql",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"mysql").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},Om=new js;var Us=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=Oe.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}},Am=new Us;var Vs=class{toSql(t){let e=t,r=Qe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof x?s.rawValue:s instanceof D?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}}},xm=new Vs;var Js=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},Dm=new Js;var Hs=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Im=new Hs;var zs=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.columns.map((l,u)=>{let d=e.values[u];if(d instanceof x)return `${r.formatStringColumn("mysql",l)} = ${d.rawValue}`;if(d instanceof D){let c=new b(this.model,"mysql").parse([d],1,true).sql;return `${r.formatStringColumn("mysql",l)} = ${c}`}return o.push(d),`${r.formatStringColumn("mysql",l)} = ?`}).join(", ");return {sql:`${n} set ${s}`,bindings:o}}},Em=new zs;var Gs=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 D){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}},vm=new Gs;var Ys=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}}},$m=new Ys;var Zs=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=`${o} = CAST(? AS JSON)`,n=[JSON.stringify(e.value)];break;case "contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},Pm=new Zs;var Xs=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}}},Bm=new Xs;var ei=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex);return {sql:`${e.alias} as (${o.sql})`,bindings:o.bindings}}},km=new ei;var ti=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:[]}}},Km=new ti;var ri=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Qm=new ri;var ni=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`"${n}"`).join(", ")})`,bindings:[]}}},Lm=new ni;var oi=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),s=o.join(" ");s=s.replace(/\s*check\s*\(.*\)\s*$/i,"").trim(),e.newType.dataType==="uuid"&&(s=s.replace(/\s+default\s+.+$/i,"").trim());let a=`alter column "${e.column}" type ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?`alter column "${e.column}" drop not null`:`alter column "${e.column}" set not null`;a+=`, ${l}`;}if(e.options.dropDefault)a+=`, alter column "${e.column}" drop default`;else if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=`, alter column "${e.column}" set default ${l}`;}return e.options.unique!==void 0&&(e.options.unique?a+=`, add constraint "unique_${e.column}" unique ("${e.column}")`:a+=`, drop constraint "unique_${e.column}"`),{sql:a,bindings:[]}}},Wm=new oi;var si=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}}},Fm=new si;var ii=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},jm=new ii;var ai=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},Um=new ai;var li=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Vm=new li;var ui=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Jm=new ui;var di=class{toSql(t){return {sql:"",bindings:[]}}},Hm=new di;var mi=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},zm=new mi;var ci=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Gm=new ci;var pi=class{toSql(t){let e=t,r;return e.defaultValue instanceof x?r=e.defaultValue.rawValue:e.defaultValue instanceof D?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:[]}}},Ym=new pi;var yi=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Zm=new yi;var fi=class{toSql(t){return {sql:"",bindings:[]}}},Xm=new fi;var hi=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 hi;var gi=class{toSql(t){return {sql:"",bindings:[]}}},tc=new gi;var bi=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 x?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof D?{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:[]}}},rc=new bi;var Ti=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"postgres"),s=[],a=[];for(let S of e.children){let{sql:N,bindings:C}=o.parse([S]);if(S.folder==="constraint"){let A=s.pop()??"",B=N;if(/not null/i.test(B)||/null/i.test(B)||/default/i.test(B)){let O=`${A} ${B}`.trim();O=O.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(O),a.push(...C);continue}s.push(A),s.push(B),a.push(...C);continue}s.push(N),a.push(...C);}for(let S of e.namedConstraints){let{sql:N,bindings:C}=o.parse([S]);s.push(N),a.push(...C);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.temporary&&d.push("TEMPORARY"),e.unlogged&&d.push("UNLOGGED");let c=[];if(e.postgresWith){let S=Object.entries(e.postgresWith).map(([N,C])=>`${N}=${C}`).join(", ");S&&c.push(`WITH (${S})`);}let m=e.tablespace?`TABLESPACE ${e.tablespace}`:"",p=d.length>0?`${d.join(" ")} `:"",h=c.length>0?` ${c.join(" ")}`:"",y=m?` ${m}`:"";return {sql:`${u}${p}${n} (${l})${h}${y}`,bindings:a}}},nc=new Ti;var wi=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:[]}}},oc=new wi;var Si=class{toSql(t){return {sql:"",bindings:[]}}},sc=new Si;var Ni=class{toSql(t){return {sql:`(${t.columns.map(n=>new f(this.model).formatStringColumn("postgres",n)).join(", ")})`,bindings:[]}}},ic=new Ni;var qi=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},ac=new qi;var Ci=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},lc=new Ci;var Ri=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("postgres",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("postgres",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"postgres").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${o.sql})${s}`,bindings:o.bindings}}},uc=new Ri;var _i=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},dc=new _i;var Mi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(e.value instanceof D){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 !(e.value instanceof w)&&!Array.isArray(e.value)&&(n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,o=[e.value]);if(Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},mc=new Mi;var Oi=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:[]}}},cc=new Oi;var Ai=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},pc=new Ai;var xi=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);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],s=Object.keys(o);if(!s.length)return {sql:n,bindings:[]};let a=s.map(m=>r.formatStringColumn("postgres",m)).join(", "),l=[],u=[],d=e.currParamIndex;for(let m of e.records){let p=s.map(y=>m[y]),h=[];for(let y=0;y<s.length;y++){let T=p[y];T instanceof x?h.push(T.rawValue):(l.push(T),h.push(`$${d++}${this.formatTypeCast(T)}`));}u.push(`(${h.join(", ")})`);}let c=`${n} (${a}) values ${u.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let m=e.returning.map(p=>r.formatStringColumn("postgres",p)).join(", ");c+=` returning ${m}`;}else c+=" returning *";return {sql:c,bindings:l}}formatTypeCast(t){let e="";return Buffer.isBuffer(t)?e="::bytea":Array.isArray(t)?e="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?e="::jsonb":typeof t=="boolean"?e="::boolean":typeof t=="bigint"&&(e="::bigint"),e}},yc=new xi;var Di=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let s=r.formatStringColumn("postgres",n),a=r.formatStringColumn("postgres",o),u=`${r.formatStringTable("postgres",e.table)} on ${s} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"postgres");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},fc=new Di;var Ii=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},hc=new Ii;var Jf={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},Ei=class{toSql(t){let e=t,r=Jf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},gc=new Ei;var vi=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},bc=new vi;var $i=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("postgres",a)).join(", ");if(e.mode==="ignore"){let a=`on conflict (${n}) do nothing`;if(e.returning&&e.returning.length){let l=e.returning.map(u=>r.formatStringColumn("postgres",u)).join(", ");a+=` returning ${l}`;}return {sql:a,bindings:[]}}let o=e.columnsToUpdate.map(a=>`${r.formatStringColumnBare("postgres",a)} = excluded.${r.formatStringColumnBare("postgres",a)}`).join(", "),s=`on conflict (${n}) do update set ${o}`;if(e.returning&&e.returning.length){let a=e.returning.map(l=>r.formatStringColumn("postgres",l)).join(", ");s+=` returning ${a}`;}return {sql:s,bindings:[]}}},Tc=new $i;var Pi=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:[]}}},wc=new Pi;var Bi=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Sc=new Bi;var ki=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:[]}}},Nc=new ki;var Ki=class{toSql(t){return {sql:`SELECT
73
+ ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},_m=new Ws;var Fs=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:[]}}},Mm=new Fs;var js=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new f(this.model).formatStringColumn("mysql",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"mysql").parse(t),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"mysql").parse([t]),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new f(this.model).formatStringColumn("mysql",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"mysql").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},Om=new js;var Us=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=Oe.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}},Am=new Us;var Vs=class{toSql(t){let e=t,r=Qe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof x?s.rawValue:s instanceof D?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}}},xm=new Vs;var Js=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},Dm=new Js;var Hs=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Im=new Hs;var zs=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.columns.map((l,u)=>{let d=e.values[u];if(d instanceof x)return `${r.formatStringColumn("mysql",l)} = ${d.rawValue}`;if(d instanceof D){let c=new b(this.model,"mysql").parse([d],1,true).sql;return `${r.formatStringColumn("mysql",l)} = ${c}`}return o.push(d),`${r.formatStringColumn("mysql",l)} = ?`}).join(", ");return {sql:`${n} set ${s}`,bindings:o}}},Em=new zs;var Gs=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 D){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}},vm=new Gs;var Ys=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}}},$m=new Ys;var Zs=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=`${o} = CAST(? AS JSON)`,n=[JSON.stringify(e.value)];break;case "contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},Pm=new Zs;var Xs=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}}},Bm=new Xs;var ei=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex);return {sql:`${e.alias} as (${o.sql})`,bindings:o.bindings}}},km=new ei;var ti=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:[]}}},Km=new ti;var ri=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Qm=new ri;var ni=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`"${n}"`).join(", ")})`,bindings:[]}}},Lm=new ni;var oi=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),s=o.join(" ");s=s.replace(/\s*check\s*\(.*\)\s*$/i,"").trim(),e.newType.dataType==="uuid"&&(s=s.replace(/\s+default\s+.+$/i,"").trim());let a=`alter column "${e.column}" type ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?`alter column "${e.column}" drop not null`:`alter column "${e.column}" set not null`;a+=`, ${l}`;}if(e.options.dropDefault)a+=`, alter column "${e.column}" drop default`;else if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=`, alter column "${e.column}" set default ${l}`;}return e.options.unique!==void 0&&(e.options.unique?a+=`, add constraint "unique_${e.column}" unique ("${e.column}")`:a+=`, drop constraint "unique_${e.column}"`),{sql:a,bindings:[]}}},Wm=new oi;var si=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}}},Fm=new si;var ii=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},jm=new ii;var ai=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},Um=new ai;var li=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Vm=new li;var ui=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Jm=new ui;var di=class{toSql(t){return {sql:"",bindings:[]}}},Hm=new di;var mi=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},zm=new mi;var ci=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Gm=new ci;var pi=class{toSql(t){let e=t,r;return e.defaultValue instanceof x?r=e.defaultValue.rawValue:e.defaultValue instanceof D?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:[]}}},Ym=new pi;var yi=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Zm=new yi;var fi=class{toSql(t){return {sql:"",bindings:[]}}},Xm=new fi;var hi=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 hi;var gi=class{toSql(t){return {sql:"",bindings:[]}}},tc=new gi;var bi=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 x?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof D?{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:[]}}},rc=new bi;var Ti=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 w of e.children){let{sql:N,bindings:C}=o.parse([w]);if(w.folder==="constraint"){let A=s.pop()??"",B=N;if(/not null/i.test(B)||/null/i.test(B)||/default/i.test(B)){let O=`${A} ${B}`.trim();O=O.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(O),a.push(...C);continue}s.push(A),s.push(B),a.push(...C);continue}s.push(N),a.push(...C);}for(let w of e.namedConstraints){let{sql:N,bindings:C}=o.parse([w]);s.push(N),a.push(...C);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.temporary&&d.push("TEMPORARY"),e.unlogged&&d.push("UNLOGGED");let c=[];if(e.postgresWith){let w=Object.entries(e.postgresWith).map(([N,C])=>`${N}=${C}`).join(", ");w&&c.push(`WITH (${w})`);}let m=e.tablespace?`TABLESPACE ${e.tablespace}`:"",p=d.length>0?`${d.join(" ")} `:"",h=c.length>0?` ${c.join(" ")}`:"",y=m?` ${m}`:"";return {sql:`${u}${p}${n} (${l})${h}${y}`,bindings:a}}},nc=new Ti;var wi=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:[]}}},oc=new wi;var Si=class{toSql(t){return {sql:"",bindings:[]}}},sc=new Si;var Ni=class{toSql(t){return {sql:`(${t.columns.map(n=>new f(this.model).formatStringColumn("postgres",n)).join(", ")})`,bindings:[]}}},ic=new Ni;var qi=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},ac=new qi;var Ci=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},lc=new Ci;var Ri=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("postgres",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("postgres",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"postgres").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${o.sql})${s}`,bindings:o.bindings}}},uc=new Ri;var _i=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},dc=new _i;var Mi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(e.value instanceof D){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 !(e.value instanceof S)&&!Array.isArray(e.value)&&(n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,o=[e.value]);if(Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},mc=new Mi;var Oi=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:[]}}},cc=new Oi;var Ai=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},pc=new Ai;var xi=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);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],s=Object.keys(o);if(!s.length)return {sql:n,bindings:[]};let a=s.map(p=>r.formatStringColumn("postgres",p)).join(", "),l=[],u=[],d=typeof this.model?.getColumnsByName=="function"?this.model.getColumnsByName():new Map,c=e.currParamIndex;for(let p of e.records){let h=s.map(T=>p[T]),y=[];for(let T=0;T<s.length;T++){let w=h[T];w instanceof x?y.push(w.rawValue):(l.push(w),y.push(`$${c++}${this.formatTypeCast(w,d.get(s[T])?.type)}`));}u.push(`(${y.join(", ")})`);}let m=`${n} (${a}) values ${u.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let p=e.returning.map(h=>r.formatStringColumn("postgres",h)).join(", ");m+=` returning ${p}`;}else m+=" returning *";return {sql:m,bindings:l}}formatTypeCast(t,e){if(typeof t=="string"&&(e==="jsonb"||e==="json"))return "::text::jsonb";let r="";return Buffer.isBuffer(t)?r="::bytea":Array.isArray(t)?r="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?r="::jsonb":typeof t=="boolean"?r="::boolean":typeof t=="bigint"&&(r="::bigint"),r}},yc=new xi;var Di=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let s=r.formatStringColumn("postgres",n),a=r.formatStringColumn("postgres",o),u=`${r.formatStringTable("postgres",e.table)} on ${s} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"postgres");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},fc=new Di;var Ii=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},hc=new Ii;var Jf={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},Ei=class{toSql(t){let e=t,r=Jf[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},gc=new Ei;var vi=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},bc=new vi;var $i=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("postgres",a)).join(", ");if(e.mode==="ignore"){let a=`on conflict (${n}) do nothing`;if(e.returning&&e.returning.length){let l=e.returning.map(u=>r.formatStringColumn("postgres",u)).join(", ");a+=` returning ${l}`;}return {sql:a,bindings:[]}}let o=e.columnsToUpdate.map(a=>`${r.formatStringColumnBare("postgres",a)} = excluded.${r.formatStringColumnBare("postgres",a)}`).join(", "),s=`on conflict (${n}) do update set ${o}`;if(e.returning&&e.returning.length){let a=e.returning.map(l=>r.formatStringColumn("postgres",l)).join(", ");s+=` returning ${a}`;}return {sql:s,bindings:[]}}},Tc=new $i;var Pi=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:[]}}},wc=new Pi;var Bi=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Sc=new Bi;var ki=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:[]}}},Nc=new ki;var Ki=class{toSql(t){return {sql:`SELECT
74
74
  con.conname AS name,
75
75
  pg_get_constraintdef(con.oid) AS expression
76
76
  FROM pg_constraint con
@@ -129,15 +129,15 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},wd=new Po;var Bo=class{toSql(t){let
129
129
  FROM information_schema.columns
130
130
  WHERE table_schema = current_schema()
131
131
  AND table_name = '${t.table}'
132
- ORDER BY ordinal_position`,bindings:[]}}},vc=new Gi;var Yi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new f(this.model).formatStringColumn("postgres",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"postgres").parse(t),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"postgres").parse([t]),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new f(this.model).formatStringColumn("postgres",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"postgres").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},$c=new Yi;var Zi=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=Oe.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}},Pc=new Zi;var Xi=class{toSql(t){let e=t,r=Qe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof x?s.rawValue:s instanceof D?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}}},Bc=new Xi;var ea=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},kc=new ea;var ta=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Kc=new ta;var ra=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=0,s=[],a=e.columns.map((u,d)=>{let c=e.currParamIndex+d-o,m=e.values[d];if(m instanceof x)return o++,`${r.formatStringColumn("postgres",u)} = ${m.rawValue}`;if(m instanceof D){o++;let p=new b(this.model,"postgres").parse([m],1,true).sql;return `${r.formatStringColumn("postgres",u)} = ${p}`}return s.push(m),`${r.formatStringColumn("postgres",u)} = $${c}${this.formatTypeCast(m)}`}).join(", ");return {sql:`${n} set ${a}`,bindings:s}}formatTypeCast(t){let e="";return Buffer.isBuffer(t)?e="::bytea":Array.isArray(t)?e="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?e="::jsonb":typeof t=="boolean"?e="::boolean":typeof t=="bigint"&&(e="::bigint"),e}},Qc=new ra;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 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 D){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}},Lc=new na;var oa=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}}},Wc=new oa;var sa=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 "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`NOT (${n})`),{sql:n.trim(),bindings:o}}},Fc=new sa;var ia=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},jc=new ia;var aa=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" materialized":"";return {sql:`${e.alias} as${s} (${o.sql})`,bindings:o.bindings}}},Uc=new aa;var la=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:[]}}},Vc=new la;var ua=class{toSql(t){return {sql:"",bindings:[]}}},Jc=new ua;var da=class{toSql(t){return {sql:"",bindings:[]}}},Hc=new da;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:h}=o.parse([m]);if(!(!p||!p.trim())){if(m.file==="add_column")s.push(p),l=true;else if(m.file==="add_constraint"&&l){let y=s.pop()??"",T=p.replace(/^\s*add\s+/i,"").trimStart();s.push(`${y} ${T}`);}else {if(m.file==="set_not_null"||m.file==="drop_not_null")continue;if(m.file==="set_default"||m.file==="drop_default")continue;s.push(p),l=false;}a.push(...h);}}let u=s.join(", "),d=e.ifExists?"if exists ":"";return u.trim()?{sql:`${d}${n} ${u}`,bindings:a}:{sql:"",bindings:[]}}},zc=new ma;var ca=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Gc=new ca;var pa=class{toSql(t){return {sql:"",bindings:[]}}},Yc=new pa;var ya=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Zc=new ya;var fa=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Xc=new fa;var ha=class{toSql(t){return {sql:"",bindings:[]}}},ep=new ha;var ga=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},tp=new ga;var ba=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},rp=new ba;var Ta=class{toSql(t){let e=t,r;return e.defaultValue instanceof x?r=e.defaultValue.rawValue:e.defaultValue instanceof D?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:[]}}},np=new Ta;var wa=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},op=new wa;var Sa=class{toSql(t){return {sql:"",bindings:[]}}},sp=new Sa;var Na=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:[]}}},ip=new Na;var qa=class{toSql(t){return {sql:"",bindings:[]}}},ap=new qa;var Ca=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 x?{sql:`default ${o.rawValue}`,bindings:[]}:o instanceof D?{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:[]}}},lp=new Ca;var Ra=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:T,bindings:S}=o.parse([y]);if(y.folder==="constraint"){let N=s.pop()??"",C=T;if(/not null/i.test(C)||/null/i.test(C)||/default/i.test(C)||/primary key/i.test(C)){let A=`${N} ${C}`.trim();A=A.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(A),a.push(...S);continue}s.push(N),s.push(C),a.push(...S);continue}s.push(T),a.push(...S);}for(let y of e.namedConstraints){let{sql:T,bindings:S}=o.parse([y]);s.push(T),a.push(...S);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.sqliteTemporary&&d.push("TEMPORARY");let c=d.length>0?`${d.join(" ")} `:"",m=e.withoutRowId?" WITHOUT ROWID":"",p=e.strict?" STRICT":"";return {sql:`${u}${c}${n} (${l})${m}${p}`,bindings:a}}},up=new Ra;var _a=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:[]}}},dp=new _a;var Ma=class{toSql(t){return {sql:"distinct",bindings:[]}}},mp=new Ma;var Oa=class{toSql(t){return _.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},cp=new Oa;var Aa=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},pp=new Aa;var xa=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},yp=new xa;var Da=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("sqlite",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("sqlite",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"sqlite").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${o.sql})${s}`,bindings:o.bindings}}},fp=new Da;var Ia=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},hp=new Ia;var Ea=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(e.value instanceof D){let s=new b(this.model,"sqlite").parse([e.value],1,true).sql;n=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${s}`,o=[];}else !(e.value instanceof w)&&!Array.isArray(e.value)&&(n=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} $${r}`,o=[e.value]);if(Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${s})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},gp=new Ea;var va=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:[]}}},bp=new va;var $a=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},Tp=new $a;var Pa=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);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],s=Object.keys(o);if(!s.length)return {sql:n,bindings:[]};let a=s.map(c=>r.formatStringColumn("sqlite",c)).join(", "),l=[],u=[];for(let c of e.records){let m=s.map(h=>c[h]),p=[];for(let h of m)h instanceof x?p.push(h.rawValue):(l.push(h),p.push("?"));u.push(`(${p.join(", ")})`);}return {sql:`${n} (${a}) VALUES ${u.join(", ")}`,bindings:l}}},wp=new Pa;var Ba=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let s=r.formatStringColumn("sqlite",n),a=r.formatStringColumn("sqlite",o),u=`${r.formatStringTable("sqlite",e.table)} on ${s} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"sqlite");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},Sp=new Ba;var ka=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Np=new ka;var Ka=class{toSql(t){return {sql:"",bindings:[]}}},qp=new Ka;var Qa=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Cp=new Qa;var La=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=e.conflictColumns.map(s=>r.formatStringColumnBare("sqlite",s)).join(", ");if(e.mode==="ignore")return {sql:`ON CONFLICT (${n}) DO NOTHING`,bindings:[]};let o=e.columnsToUpdate.map(s=>`${r.formatStringColumnBare("sqlite",s)} = EXCLUDED.${r.formatStringColumnBare("sqlite",s)}`).join(", ");return {sql:`ON CONFLICT (${n}) DO UPDATE SET ${o}`,bindings:[]}}},Rp=new La;var Wa=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:[]}}},_p=new Wa;var Fa=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Mp=new Fa;var ja=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:[]}}},Op=new ja;var Ua=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},Ap=new Ua;var Va=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},xp=new Va;var Ja=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Dp=new Ja;var Ha=class{toSql(t){return {sql:"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name",bindings:[]}}},Ip=new Ha;var za=class{toSql(t){return {sql:`SELECT sql FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},Ep=new za;var Ga=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},vp=new Ga;var Ya=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:[]}}},$p=new Ya;var Za=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Pp=new Za;var Xa=class{toSql(t){return {sql:`SELECT name FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},Bp=new Xa;var el=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},kp=new el;var tl=class{toSql(t){return {sql:`SELECT
132
+ ORDER BY ordinal_position`,bindings:[]}}},vc=new Gi;var Yi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new f(this.model).formatStringColumn("postgres",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"postgres").parse(t),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"postgres").parse([t]),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new f(this.model).formatStringColumn("postgres",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"postgres").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},$c=new Yi;var Zi=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=Oe.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}},Pc=new Zi;var Xi=class{toSql(t){let e=t,r=Qe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof x?s.rawValue:s instanceof D?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}}},Bc=new Xi;var ea=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},kc=new ea;var ta=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Kc=new ta;var ra=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=0,s=[],a=typeof this.model?.getColumnsByName=="function"?this.model.getColumnsByName():new Map,l=e.columns.map((d,c)=>{let m=e.currParamIndex+c-o,p=e.values[c];if(p instanceof x)return o++,`${r.formatStringColumn("postgres",d)} = ${p.rawValue}`;if(p instanceof D){o++;let h=new b(this.model,"postgres").parse([p],1,true).sql;return `${r.formatStringColumn("postgres",d)} = ${h}`}return s.push(p),`${r.formatStringColumn("postgres",d)} = $${m}${this.formatTypeCast(p,a.get(d)?.type)}`}).join(", ");return {sql:`${n} set ${l}`,bindings:s}}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}},Qc=new ra;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 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 D){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}},Lc=new na;var oa=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}}},Wc=new oa;var sa=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 "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`NOT (${n})`),{sql:n.trim(),bindings:o}}},Fc=new sa;var ia=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},jc=new ia;var aa=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" materialized":"";return {sql:`${e.alias} as${s} (${o.sql})`,bindings:o.bindings}}},Uc=new aa;var la=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:[]}}},Vc=new la;var ua=class{toSql(t){return {sql:"",bindings:[]}}},Jc=new ua;var da=class{toSql(t){return {sql:"",bindings:[]}}},Hc=new da;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:h}=o.parse([m]);if(!(!p||!p.trim())){if(m.file==="add_column")s.push(p),l=true;else if(m.file==="add_constraint"&&l){let y=s.pop()??"",T=p.replace(/^\s*add\s+/i,"").trimStart();s.push(`${y} ${T}`);}else {if(m.file==="set_not_null"||m.file==="drop_not_null")continue;if(m.file==="set_default"||m.file==="drop_default")continue;s.push(p),l=false;}a.push(...h);}}let u=s.join(", "),d=e.ifExists?"if exists ":"";return u.trim()?{sql:`${d}${n} ${u}`,bindings:a}:{sql:"",bindings:[]}}},zc=new ma;var ca=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Gc=new ca;var pa=class{toSql(t){return {sql:"",bindings:[]}}},Yc=new pa;var ya=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Zc=new ya;var fa=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Xc=new fa;var ha=class{toSql(t){return {sql:"",bindings:[]}}},ep=new ha;var ga=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},tp=new ga;var ba=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},rp=new ba;var Ta=class{toSql(t){let e=t,r;return e.defaultValue instanceof x?r=e.defaultValue.rawValue:e.defaultValue instanceof D?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:[]}}},np=new Ta;var wa=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},op=new wa;var Sa=class{toSql(t){return {sql:"",bindings:[]}}},sp=new Sa;var Na=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:[]}}},ip=new Na;var qa=class{toSql(t){return {sql:"",bindings:[]}}},ap=new qa;var Ca=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 x?{sql:`default ${o.rawValue}`,bindings:[]}:o instanceof D?{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:[]}}},lp=new Ca;var Ra=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:T,bindings:w}=o.parse([y]);if(y.folder==="constraint"){let N=s.pop()??"",C=T;if(/not null/i.test(C)||/null/i.test(C)||/default/i.test(C)||/primary key/i.test(C)){let A=`${N} ${C}`.trim();A=A.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(A),a.push(...w);continue}s.push(N),s.push(C),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 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}}},up=new Ra;var _a=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:[]}}},dp=new _a;var Ma=class{toSql(t){return {sql:"distinct",bindings:[]}}},mp=new Ma;var Oa=class{toSql(t){return _.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},cp=new Oa;var Aa=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},pp=new Aa;var xa=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},yp=new xa;var Da=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("sqlite",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("sqlite",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],o=new b(this.model,"sqlite").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${o.sql})${s}`,bindings:o.bindings}}},fp=new Da;var Ia=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},hp=new Ia;var Ea=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,n="",o=[];if(e.value instanceof D){let s=new b(this.model,"sqlite").parse([e.value],1,true).sql;n=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${s}`,o=[];}else !(e.value instanceof S)&&!Array.isArray(e.value)&&(n=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} $${r}`,o=[e.value]);if(Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${s})`,o=e.value;}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},gp=new Ea;var va=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:[]}}},bp=new va;var $a=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},Tp=new $a;var Pa=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);if(!e.records.length)return {sql:n,bindings:[]};let o=e.records[0],s=Object.keys(o);if(!s.length)return {sql:n,bindings:[]};let a=s.map(c=>r.formatStringColumn("sqlite",c)).join(", "),l=[],u=[];for(let c of e.records){let m=s.map(h=>c[h]),p=[];for(let h of m)h instanceof x?p.push(h.rawValue):(l.push(h),p.push("?"));u.push(`(${p.join(", ")})`);}return {sql:`${n} (${a}) VALUES ${u.join(", ")}`,bindings:l}}},wp=new Pa;var Ba=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=e.left;n.includes(".")||(n=`${e.table}.${n}`);let o=e.right;o.includes(".")||(o=`${this.model.table}.${o}`);let s=r.formatStringColumn("sqlite",n),a=r.formatStringColumn("sqlite",o),u=`${r.formatStringTable("sqlite",e.table)} on ${s} ${e.on?.operator} ${a}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"sqlite");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},Sp=new Ba;var ka=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Np=new ka;var Ka=class{toSql(t){return {sql:"",bindings:[]}}},qp=new Ka;var Qa=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Cp=new Qa;var La=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=e.conflictColumns.map(s=>r.formatStringColumnBare("sqlite",s)).join(", ");if(e.mode==="ignore")return {sql:`ON CONFLICT (${n}) DO NOTHING`,bindings:[]};let o=e.columnsToUpdate.map(s=>`${r.formatStringColumnBare("sqlite",s)} = EXCLUDED.${r.formatStringColumnBare("sqlite",s)}`).join(", ");return {sql:`ON CONFLICT (${n}) DO UPDATE SET ${o}`,bindings:[]}}},Rp=new La;var Wa=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:[]}}},_p=new Wa;var Fa=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Mp=new Fa;var ja=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:[]}}},Op=new ja;var Ua=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},Ap=new Ua;var Va=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},xp=new Va;var Ja=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Dp=new Ja;var Ha=class{toSql(t){return {sql:"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name",bindings:[]}}},Ip=new Ha;var za=class{toSql(t){return {sql:`SELECT sql FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},Ep=new za;var Ga=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},vp=new Ga;var Ya=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:[]}}},$p=new Ya;var Za=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Pp=new Za;var Xa=class{toSql(t){return {sql:`SELECT name FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},Bp=new Xa;var el=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},kp=new el;var tl=class{toSql(t){return {sql:`SELECT
133
133
  'PRIMARY' as name,
134
134
  name as column_name
135
135
  FROM pragma_table_info('${t.table}')
136
136
  WHERE pk > 0
137
- ORDER BY pk`,bindings:[]}}},Kp=new tl;var rl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Qp=new rl;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),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new f(this.model).formatStringColumn("sqlite",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"sqlite").parse(t),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"sqlite").parse([t]),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new f(this.model).formatStringColumn("sqlite",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"sqlite").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},Lp=new nl;var ol=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=Oe.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}},Wp=new ol;var sl=class{toSql(t){let e=t,r=Qe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof x?s.rawValue:s instanceof D?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}}},Fp=new sl;var il=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return e.keyword="",{sql:e.fromNode,bindings:[]};let r=new f(this.model).getFromForWriteOperations("sqlite",e.fromNode);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},jp=new il;var al=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Up=new al;var ll=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.columns.map((a,l)=>{let u=e.values[l];if(u instanceof x)return `${r.formatStringColumn("sqlite",a)} = ${u.rawValue}`;if(u instanceof D){let d=new b(this.model,"sqlite").parse([u],1,true).sql;return `${r.formatStringColumn("sqlite",a)} = ${d}`}return o.push(u),`${r.formatStringColumn("sqlite",a)} = ?`}).join(", ");return {sql:`${n} set ${s}`,bindings:o}}},Vp=new ll;var ul=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 D){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}},Jp=new ul;var dl=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}}},Hp=new dl;var ml=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 "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},zp=new ml;var cl=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}}},Gp=new cl;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);return {sql:`${e.alias} as (${o.sql})`,bindings:o.bindings}}},Yp=new pl;var Zp={mssql:{alter_table:{add_column:bu,add_constraint:Tu,add_primary_key:wu,alter_column_type:Su,alter_table:Nu,drop_column:qu,drop_constraint:Cu,drop_default:Ru,drop_not_null:Eu,drop_primary_key:vu,rename_column:$u,rename_table:Pu,set_default:Bu,set_not_null:ku,set_table_options:Ku},column:{column_type:Qu},constraint:{after:Lu,constraint:Wu},create_table:{create_table:Fu},delete:{delete:ju},distinct:{distinct:Uu,distinct_on:Vu},drop_table:{drop_table:Ju},extension:{create_extension:Hu},from:{from:zu},group_by:{group_by:Gu},having:{having:Yu},index_op:{create_index:Zu,drop_index:Xu},insert:{insert:ed},join:{join:td},limit:{limit:rd},lock:{lock:nd},offset:{offset:od},on_duplicate:{on_duplicate:sd},order_by:{order_by:id},raw:{raw:ad},returning:{returning:ld},schema:{check_constraint_info:ud,foreign_key_info:dd,get_column_listing:md,get_tables:cd,has_check_constraint:pd,has_column:yd,has_index:fd,has_primary_key:hd,has_table:gd,index_info:bd,primary_key_info:Td,table_info:wd},select:{select:Sd,select_json:Nd},sqlfunc:{sqlfunc:qd},truncate:{truncate:Cd},union:{union:Rd},update:{update:_d},where:{where:Md,where_group:Od,where_json:Ad,where_subquery:xd},with:{with:Dd}},mysql:{alter_table:{add_column:Id,add_constraint:Ed,add_primary_key:vd,alter_column_type:$d,alter_table:Pd,drop_column:Bd,drop_constraint:kd,drop_default:Kd,drop_not_null:Qd,drop_primary_key:Ld,rename_column:Wd,rename_table:Fd,set_default:jd,set_not_null:Ud,set_table_options:Vd},column:{column_type:Jd},constraint:{after:Hd,constraint:zd},create_table:{create_table:Gd},delete:{delete:Yd},distinct:{distinct:Zd,distinct_on:Xd},drop_table:{drop_table:em},extension:{create_extension:tm},from:{from:rm},group_by:{group_by:nm},having:{having:om},index_op:{create_index:sm,drop_index:im},insert:{insert:am},join:{join:lm},limit:{limit:um},lock:{lock:dm},offset:{offset:mm},on_duplicate:{on_duplicate:cm},order_by:{order_by:pm},raw:{raw:ym},returning:{returning:fm},schema:{check_constraint_info:hm,foreign_key_info:gm,get_column_listing:bm,get_tables:Tm,has_check_constraint:wm,has_column:Sm,has_index:Nm,has_primary_key:qm,has_table:Cm,index_info:Rm,primary_key_info:_m,table_info:Mm},select:{select:Om,select_json:Am},sqlfunc:{sqlfunc:xm},truncate:{truncate:Dm},union:{union:Im},update:{update:Em},where:{where:vm,where_group:$m,where_json:Pm,where_subquery:Bm},with:{with:km}},postgres:{alter_table:{add_column:Km,add_constraint:Qm,add_primary_key:Lm,alter_column_type:Wm,alter_table:Fm,drop_column:jm,drop_constraint:Um,drop_default:Vm,drop_not_null:Jm,drop_primary_key:Hm,rename_column:zm,rename_table:Gm,set_default:Ym,set_not_null:Zm,set_table_options:Xm},column:{column_type:ec},constraint:{after:tc,constraint:rc},create_table:{create_table:nc},delete:{delete:oc},distinct:{distinct:sc,distinct_on:ic},drop_table:{drop_table:ac},extension:{create_extension:lc},from:{from:uc},group_by:{group_by:dc},having:{having:mc},index_op:{create_index:cc,drop_index:pc},insert:{insert:yc},join:{join:fc},limit:{limit:hc},lock:{lock:gc},offset:{offset:bc},on_duplicate:{on_duplicate:Tc},order_by:{order_by:wc},raw:{raw:Sc},returning:{returning:Nc},schema:{check_constraint_info:qc,foreign_key_info:Cc,get_column_listing:Rc,get_tables:_c,has_check_constraint:Mc,has_column:Oc,has_index:Ac,has_primary_key:xc,has_table:Dc,index_info:Ic,primary_key_info:Ec,table_info:vc},select:{select:$c,select_json:Pc},sqlfunc:{sqlfunc:Bc},truncate:{truncate:kc},union:{union:Kc},update:{update:Qc},where:{where:Lc,where_group:Wc,where_json:Fc,where_subquery:jc},with:{with:Uc}},sqlite:{alter_table:{add_column:Vc,add_constraint:Jc,alter_column_type:Hc,alter_table:zc,drop_column:Gc,drop_constraint:Yc,drop_default:Zc,drop_not_null:Xc,drop_primary_key:ep,rename_column:tp,rename_table:rp,set_default:np,set_not_null:op,set_table_options:sp},column:{column_type:ip},constraint:{after:ap,constraint:lp},create_table:{create_table:up},delete:{delete:dp},distinct:{distinct:mp,distinct_on:cp},drop_table:{drop_table:pp},extension:{create_extension:yp},from:{from:fp},group_by:{group_by:hp},having:{having:gp},index_op:{create_index:bp,drop_index:Tp},insert:{insert:wp},join:{join:Sp},limit:{limit:Np},lock:{lock:qp},offset:{offset:Cp},on_duplicate:{on_duplicate:Rp},order_by:{order_by:_p},raw:{raw:Mp},returning:{returning:Op},schema:{check_constraint_info:Ap,foreign_key_info:xp,get_column_listing:Dp,get_tables:Ip,has_check_constraint:Ep,has_column:vp,has_index:$p,has_primary_key:Pp,has_table:Bp,index_info:kp,primary_key_info:Kp,table_info:Qp},select:{select:Lp,select_json:Wp},sqlfunc:{sqlfunc:Fp},truncate:{truncate:jp},union:{union:Up},update:{update:Vp},where:{where:Jp,where_group:Hp,where_json:zp,where_subquery:Gp},with:{with:Yp}}};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=this.dbType==="mssql"?t.find(C=>!!C&&C.folder==="lock")??null:null,a=s?this.getMssqlTableHints(s):"",l=t.filter(C=>C!==null&&C.folder!=="distinct"&&C.folder!=="distinctOn"),u=l.some(C=>C.folder==="offset"),d=l.some(C=>C.folder==="order_by"),c=l.find(C=>C.folder==="limit"),m=l.find(C=>C.folder==="offset"),p=this.dbType==="mssql"&&c&&!u&&!d,h=this.dbType==="mssql"&&!p&&(c||m),y=[],T=[],S=null;p&&c&&T.push(c.limit);for(let C=0;C<l.length;C++){let A=l[C];if(p&&A.folder==="limit"||h&&(A.folder==="limit"||A.folder==="offset"))continue;A.currParamIndex=e+T.length;let B=Zp[this.mapCommonDbType(this.dbType)][A.folder][A.file];if(!B)throw new Error(`Interpreter not found for ${this.dbType} ${A.keyword}`);B.model=this.model,B.dbType=this.dbType;let O=B.toSql(A);if(!O.sql||!O.sql.trim().length)continue;let I=l[C+1],H=!I||I.keyword!==A.keyword?"":I.chainsWith;if(A.folder==="lock"||A.folder==="on_duplicate"||A.folder==="returning"||A.folder==="schema"){y.push(`${O.sql}${H}`),T.push(...O.bindings),S=A.keyword;continue}if(S!==A.keyword||A.canKeywordBeSeenMultipleTimes){if(r)y.push(`${O.sql}${H}`);else {let v=A.keyword;if(A.folder==="with"&&this.dbType!=="mssql"){let Z=C,ve=false;for(;Z<l.length&&l[Z].keyword===A.keyword;){let zt=l[Z];if(zt.folder==="with"&&zt.clause==="recursive"){ve=true;break}Z++;}ve&&(v=`${v} recursive`);}if(v==="select"){let Z=p?`top (@${e}) `:"";if(n){let ve=Array.isArray(n.columns)?n.columns.join(", "):"";y.push(`select ${Z}distinct on (${ve}) ${O.sql}${H}`);}else o?y.push(`select ${Z}distinct ${O.sql}${H}`):y.push(`select ${Z}${O.sql}${H}`);}else v==="from"&&a?y.push(`${v} ${O.sql}${a}${H}`):y.push(`${v} ${O.sql}${H}`);}S=A.keyword;}else y.push(`${O.sql}${H}`);T.push(...O.bindings);}if(h){d||y.push("order by (select null)");let C=m?.offset??0;T.push(C);let B=`offset @${e+T.length-1} rows`;if(c){T.push(c.limit);let O=e+T.length-1;B+=` fetch next @${O} rows only`;}y.push(B);}return {sql:y.join(" "),bindings:T}}mapCommonDbType(t){switch(t){case "mariadb":return "mysql";case "cockroachdb":return "postgres";default:return t}}getMssqlTableHints(t){let e=[];switch(t.lockType){case "UPDATE":e.push("UPDLOCK");break;case "SHARE":e.push("HOLDLOCK");break;case "NO_KEY_UPDATE":e.push("UPDLOCK");break;case "KEY_SHARE":e.push("HOLDLOCK");break}return t.skipLocked&&e.push("READPAST"),t.noWait&&e.push("NOWAIT"),e.length>0?` with (${e.join(", ")})`:""}};var Hf=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},yl=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??U(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??U(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${o}"`;case "mssql":return `[${o}]`;default:throw new Error(`Unsupported database type: ${t}`)}}resolveComputedExpression(t){let e=t.includes(".")?t.split(".").pop():t;return this.modelColumnsMap.get(e)?.expression}isComputedColumn(t){return !!this.modelColumnsMap.get(t)?.expression}filterComputedColumns(t){return this.modelColumnsMap.size===0?t:t.filter(e=>!this.isComputedColumn(e))}stripComputedFromData(t){if(this.modelColumnsMap.size===0)return t;let e={};for(let r of Object.keys(t))this.isComputedColumn(r)||(e[r]=t[r]);return e}formatStringColumnBare(t,e){let r=e.includes(".")?e.split(".")[1]:e;return this.formatStringColumn(t,r)}dialectEmitsReturning(t){switch(t){case "postgres":case "cockroachdb":case "sqlite":case "mssql":return true;default:return false}}shouldFetchNatively(t,e){if(!this.dialectEmitsReturning(t)||t==="mssql")return false;if(t==="sqlite"&&e==="update"){for(let r of this.modelColumnsMap.values())if(r.autoUpdate)return false}return true}hasComputedColumn(t){return t.some(e=>this.isComputedColumn(e))}resolveColumnAlias(t,e){let r=this.modelColumnsMap.get(e);if(!r||r.columnName===r.databaseName)return "";switch(t){case "mssql":return ` as [${r.columnName}]`;case "mysql":case "mariadb":return ` as \`${r.columnName}\``;case "postgres":case "cockroachdb":case "sqlite":return ` as "${r.columnName}"`;default:return ""}}formatStringTable(t,e){e=e.replace(/\s+/g," ").trim();let r="";switch(e.toLowerCase().includes(" as ")&&([e,r]=e.split(" as ")),t){case "mysql":case "mariadb":return `\`${e}\`${r?` as \`${r}\``:""}`;case "postgres":case "cockroachdb":case "sqlite":return `"${e}"${r?` as "${r}"`:""}`;case "mssql":return `[${e}]${r?` as [${r}]`:""}`;default:return `${e}${r?` as ${r}`:""}`}}prepareColumns(t,e,r="insert",n="postgres"){if(!t.length)return {columns:t,values:e};let o=[],s=[];for(let l=0;l<t.length;l++){let u=t[l],d=e[l];u!=="*"&&(o.push(u),s.push(d));}let a=n==="mysql"||n==="mariadb";for(let l=0;l<o.length;l++){let u=o[l],d=s[l],c=this.modelColumnsMap.get(u);if(c?.expression){o.splice(l,1),s.splice(l,1),l--;continue}if(!c){Hf(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&&yl(c)&&(s[l]=ie(s[l],"ISO","UTC"));}if(r==="insert"){let l=new Set(t);for(let u of this.jsInsertColumns)l.has(u.columnName)||this.generateJsInsertColumn(u,o,s,n);if(a){let u=this.model.primaryKey;if(u){let d=this.modelColumnsMap.get(u);d&&d.type==="uuid"&&d.isPrimary&&!l.has(u)&&this.generateJsInsertColumn(d,o,s,n);}}}else {let l=new Set(t);for(let u of this.autoUpdateColumns){if(l.has(u.columnName))continue;let d=u.prepare?.(new Date);if(d!=null){if(typeof d?.then=="function")throw new Error(`hysteria-orm: prepare on column "${u.columnName}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);o.push(u.columnName),s.push(n==="sqlite"&&d instanceof Date&&yl(u)?ie(d,"ISO","UTC"):d);}}}return {columns:o,values:s}}generateJsInsertColumn(t,e,r,n){let o=t.prepare?.(void 0);if(o!==null&&typeof o?.then=="function")throw new Error(`hysteria-orm: prepare on column "${t.columnName}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);e.push(t.columnName),r.push(n==="sqlite"&&o instanceof Date&&yl(t)?ie(o,"ISO","UTC"):o??void 0);}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new b(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}};var ct=class extends w{constructor(e,r=false){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.fromNode=e;}};var V=class extends w{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var X=class extends w{constructor(e,r=[],n,o=false,s=false){super("insert into",s);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="insert";this.file="insert";this.fromNode=e,this.records=r,this.returning=n,this.disableReturning=o;}};var Se=class extends w{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 pt=class extends w{constructor(e=[],r="inserted"){super("returning");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="returning";this.file="returning";this.columns=e,this.prefix=r;}};var De=class extends w{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 Xp;Xp=Symbol.toStringTag;var Y=class{constructor(t,e,r,n){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=n;this[Xp]="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 zf=(i,t,e,r,n,o=false)=>{let s=Object.create(t.prototype);for(let a of Object.keys(i)){let l=i[a],u=e.get(a),d=a;u||(u=r.get(a),u&&(d=u.columnName));let c=u!==void 0,m=o?true:n?n.has(d):true;if(c){if(!m)continue;if(l===null){s[d]=null;continue}if(u?.serialize){let p=u.serialize(l);if(p!==null&&typeof p?.then=="function")throw new Error(`hysteria-orm: column "${d}" on model "${t.name}" has an async serialize function, but serializers must be synchronous. Move async work to prepare or a getter.`);s[d]=p;continue}s[d]=l;continue}(!o||n&&n.has(d))&&(s[d]=l);}if(n)for(let a of n)a in s||(s[a]=null);return s},pe=(i,t,e=[])=>{if(!i.length)return null;let r=t.getColumnsByName(),n=t.getColumnsByDatabaseName(),o=e.some(u=>u.includes("*")),s=[];for(let u of e){if(u.toLowerCase().includes(" as ")){let p=u.match(/\s+as\s+(.+)$/i);p&&s.push(p[1].trim());continue}let c=u;if(c.includes(".")&&(c=c.split(".").pop()),c==="*")continue;let m=r.get(c)?.columnName??c;s.push(m);}let a=s.length?new Set(s):null,l=i.map(u=>zf(u,t,r,n,a,o));return l.length===1?l[0]:l};var yt=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);}},ey=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 dr=te();function fl(i){let t=dr.timing.now()-i;return Math.round(t*100)/100}var G=async(i,t,e,r,n="rows",o)=>{await e.ensureConnected();let s={id:dr.crypto.randomUUID(),sql:i,params:t,model:void 0,operation:ey(i),timestamp:dr.timing.now()};try{let u=e.observerChain;u&&typeof u.notifyBefore=="function"&&await u.notifyBefore(s);}catch{}let a=dr.timing.now(),l=u=>{o?.shouldNotLog||mt(i,e.logs,t,e.inputDetails.queryFormatOptions,r,u);};try{let u=e.driverAdapter;if(!u)throw new g("ExecSql","CONNECTION_NOT_ESTABLISHED");let d=await Gf(()=>u.execute(i,t,{returning:n,sqlLiteOptions:o?.sqlLiteOptions,connection:e.sqlConnection}),e.inputDetails.connectionPolicies?.retry,e.logs);try{let c=fl(a),m=e.observerChain;if(m&&typeof m.notifyAfter=="function"){let p={...s,duration:c,result:d};await m.notifyAfter(p);}}catch{}return l(fl(a)),u.extract(d,n)}catch(u){throw l(fl(a)),u}},mr=async(i,t,e,r={},n)=>{let o=e.driverAdapter;if(!o)throw new g("ExecSqlStreaming","CONNECTION_NOT_ESTABLISHED");return await o.stream(i,t,{...r,connection:e.sqlConnection??void 0},{onData:n.onData})};async function Gf(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++,Iu(`Retrying sql in ${o}ms (attempt ${r}/${n})`,"info",e),await new Promise(l=>setTimeout(l,o)),s();throw a}}return s()}function ty(){return {}}var ze=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=ty(),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 g(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new g(this.model.name+"::findOneByPrimaryKey","MODEL_HAS_NO_PRIMARY_KEY");return this.query().select(...e||[]).where(this.model.primaryKey,t).one()}insert(t,e={}){let r=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(t).map(u=>[u,t[u]]))),n=!e.returning||e.returning.length===0,o=new X(new V(this.model.table),[r],e.returning,n),s=()=>{let u=this.astParser.parse([o]);return {sql:u.sql,bindings:u.bindings}},a=()=>{let u=this.astParser.parse([o]);return {sql:lt(this.sqlDataSource,u.sql),bindings:u.bindings}},l=()=>{let{sql:u,bindings:d}=a();return it(u,d)};return new Y(s,a,l,async()=>{try{await this.model.validate?.(t);}catch(N){throw N}let{columns:u,values:d}=this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert",this.sqlType),c={};u.forEach((N,C)=>{let A=d[C];c[N]=A,t[N]??(t[N]=A);});let m=!e.returning||e.returning.length===0,{sql:p,bindings:h}=this.astParser.parse([new X(new V(this.model.table),[c],e.returning,m)]),y=await G(p,h,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(m)return;if(this.sqlType==="mysql")return this.handleMysqlInsert(y,[t],"one",e.returning);let T=y[0];return T?pe([T],this.model,e.returning):t})}insertMany(t,e={}){let r=t.map(u=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(u).map(d=>[d,u[d]])))),n=!e.returning||e.returning.length===0,o=new X(new V(this.model.table),r,e.returning,n),s=()=>{let u=this.astParser.parse([o]);return {sql:u.sql,bindings:u.bindings}},a=()=>{let u=this.astParser.parse([o]);return {sql:lt(this.sqlDataSource,u.sql),bindings:u.bindings}},l=()=>{let{sql:u,bindings:d}=a();return it(u,d)};return new Y(s,a,l,async()=>{try{await this.model.validate?.(t);}catch(T){throw T}let u=t.map(T=>{let{columns:S,values:N}=this.interpreterUtils.prepareColumns(Object.keys(T),Object.values(T),"insert",this.sqlType),C={};return S.forEach((A,B)=>{let O=N[B];C[A]=O,T[A]??(T[A]=O);}),C}),d=!e.returning||e.returning.length===0,{sql:c,bindings:m}=this.astParser.parse([new X(new V(this.model.table),u,e.returning,d)]),p=await G(c,m,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(d)return [];if(this.sqlType==="mysql")return await this.handleMysqlInsert(p,t,"many",e.returning)||[];let h=p;return h.length?pe(h,this.model,e.returning)||[]:[]})}upsertMany(t,e,r,n={updateOnConflict:true}){let o=this.interpreterUtils.filterComputedColumns(e),s=r.map(p=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(p).map(h=>[h,p[h]])))),a=new X(new V(this.model.table),s,void 0,true),l=n.returning?.length&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?n.returning:void 0;new Se(this.model.table,t,o,n.updateOnConflict??true?"update":"ignore",l);let d=()=>{let p=this.astParser.parse([a]);return {sql:p.sql,bindings:p.bindings}},c=()=>{let p=this.astParser.parse([a]);return {sql:lt(this.sqlDataSource,p.sql),bindings:p.bindings}},m=()=>{let{sql:p,bindings:h}=c();return it(p,h)};return new Y(d,c,m,async()=>{let p=r.map(O=>{let{columns:I,values:L}=this.interpreterUtils.prepareColumns(Object.keys(O),Object.values(O),"insert",this.sqlType);return Object.fromEntries(I.map((H,v)=>[H,L[v]]))});if(this.sqlType==="mssql")return this.executeMssqlMerge(p,t,o,n,r);let h=!n.returning||n.returning.length===0,y=!h&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?n.returning:void 0,{sql:T,bindings:S}=this.astParser.parse([new X(new V(this.model.table),p,void 0,true),new Se(this.model.table,t,o,n.updateOnConflict??true?"update":"ignore",y)]),N=await G(T,S,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:r}});if(h)return [];if(this.sqlType==="postgres"||this.sqlType==="cockroachdb"){if(N.length<r.length&&!(n.updateOnConflict??true)){let L=t[0],H=r.map(Z=>Z[L]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(L,H).many()}return pe(N,this.model,n.returning)||[]}let C=t[0],A=r.map(O=>O[C]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(C,A).many()})}async executeMssqlMerge(t,e,r,n,o){if(!t.length)return [];let s=Object.keys(t[0]),a=this.interpreterUtils.formatStringColumn("mssql",this.model.table),l=O=>this.interpreterUtils.formatStringColumn("mssql",O),u=[],d=t.map(O=>`select ${s.map(L=>(u.push(O[L]),`@${u.length}`)).join(", ")}`),c=s.map(l).join(", "),m=d.join(" union all "),p=e.map(O=>`target.${l(O)} = source.${l(O)}`).join(" and "),h=r.filter(O=>!e.includes(O)).map(O=>`target.${l(O)} = source.${l(O)}`).join(", "),y=s.map(l).join(", "),T=s.map(O=>`source.${l(O)}`).join(", "),S=n.returning&&n.returning.length?n.returning.map(O=>`inserted.${l(O)}${this.interpreterUtils.resolveColumnAlias("mssql",O)}`).join(", "):s.map(O=>`inserted.${l(O)}${this.interpreterUtils.resolveColumnAlias("mssql",O)}`).join(", "),C=(n.updateOnConflict??true)&&h?`when matched then update set ${h}`:"",A=`merge into ${a} as target using (${m}) as source (${c}) on ${p} ${C} when not matched then insert (${y}) values (${T}) output ${S};`,B=await G(A,u,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});if(B.length===0&&!(n.updateOnConflict??true)){let O=e[0],I=o.map(H=>H[O]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(O,I).many()}return B}async updateRecord(t,e,r){let n=new Set(this.model.getColumns().map(S=>S.columnName)),o=Object.keys(e).filter(S=>n.has(S)),s=o.map(S=>e[S]),{columns:a,values:l}=this.interpreterUtils.prepareColumns(o,s,"update",this.sqlType),{primaryKey:u}=this.model;if(!u)throw new g(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let d=a.indexOf(u);d!==-1&&(a.splice(d,1),l.splice(d,1));let c=r?.returning??[],m=c.length>0&&!this.interpreterUtils.hasComputedColumn(c)&&this.interpreterUtils.shouldFetchNatively(this.sqlType,"update"),{sql:p,bindings:h}=this.astParser.parse([new De(new V(this.model.table),a,l),new M(u,"and",false,"=",t),...m?[new pt(c)]:[]]),y=await G(p,h,this.sqlDataSource,this.sqlType,m?"rows":"affectedRows",m?{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}:void 0);if(!c.length)return;if(m){if(!y.length)throw new g(this.model.name+"::updateRecord","ROW_NOT_FOUND");return pe([y[0]],this.model,c)}let T=await this.findOneByPrimaryKey(t,r?.returning);if(!T)throw new g(this.model.name+"::updateRecord","ROW_NOT_FOUND");return T}async deleteRecord(t){if(!this.model.primaryKey)throw new g(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 ct(new V(this.model.table)),e]);await G(r,n,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new Le(this.model,this.sqlDataSource);return this.replicationMode&&t.setReplicationMode(this.replicationMode),t}async handleMysqlInsert(t,e,r,n){if(!this.model.primaryKey){if(r==="one"){let a=e.length?e[0]:null;return a?pe([a],this.model):null}return pe(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(d=>d[this.model.primaryKey]),l=a.map(d=>`'${d}'`).join(","),u=await this.query().select(...n??["*"]).whereIn(this.model.primaryKey,a).orderByRaw(`FIELD(${this.model.primaryKey}, ${l})`).many();return r==="one"?u.length?u[0]:null:u}let o=Array.from({length:t.affectedRows},(a,l)=>l+t.insertId),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 Et=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=au(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 g("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function cr(i,t,e){return {total:e,perPage:t,currentPage:i,firstPage:1,isEmpty:e===0,lastPage:Math.max(1,Math.ceil(e/t)),hasMorePages:i<Math.max(1,Math.ceil(e/t)),hasPages:e>t}}var ft=i=>typeof i=="number"?i:parseFloat(i);var pr=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var Ne=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var ht=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var yr=class extends w{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 ye=class extends w{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 fr=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var qe=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var vt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var hr=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var gt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var gr=class extends w{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var br=class extends w{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_default";this.column=e,this.defaultValue=r;}};var Tr=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var bt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="set_table_options";this.engine=e.engine,this.charset=e.charset,this.collate=e.collate;}};var P=class extends w{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 J=class extends w{constructor(e,r={},n=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="constraint";this.constraintType=e,this.columns=r.columns,this.references=r.references,this.constraintName=r.constraintName,this.onDelete=r.onDelete,this.onUpdate=r.onUpdate,this.defaultValue=r.defaultValue,this.checkExpression=r.checkExpression,this.isRawValue=n;}};var wr=class extends w{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 Sr=class extends w{constructor(e,r=false){super("drop table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="drop_table";this.file="drop_table";this.table=e,this.ifExists=r;}};var Nr=class extends w{constructor(e,r=true){super("create extension");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="extension";this.file="create_extension";this.extensionName=e,this.ifNotExists=r;}};var qr=class extends w{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 Cr=class extends w{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 $t=class extends w{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 Ge=class extends w{constructor(e,r=false){super(r?"union all":"union");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="union";this.file="union";this.query=e,this.isAll=r;}};var Tt=class extends w{constructor(e,r,n){e==="normal"&&(e="");super("with");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="with";this.file="with";this.alias=r,this.body=n,this.clause=e;}};var wt=class extends w{constructor(e,r=false){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e;}};var Ye=class extends w{constructor(e,r,n=false,o,s,a=false){super("having",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="having";this.file="having";this.column=e,this.chainsWith=`${r} `,this.isNegated=n,this.operator=o,this.value=s;}};var Rr=class extends w{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var _r=class extends w{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var We=class extends w{constructor(e,r,n,o="extract",s=false){super("select");this.folder="select";this.file="select_json";this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.column=e,this.jsonPath=r,this.alias=n,this.jsonOperator=o,this.isRawValue=s;}};var ue=class extends w{constructor(e,r,n,o="inner",s,a=false,l){super(`${o} join`,a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="join";this.file="join";this.type="inner";this.table=e,this.left=r,this.right=n,this.on=s,this.additionalConditions=l;}};var Pt=class extends w{constructor(e,r=false){super("group by",r);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="group_by";this.file="group_by";this.column=e;}};var Mr=class extends w{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var Or=class extends w{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var Bt=class extends w{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 xr=class xr{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=xr.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 Pt(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Pt(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new Bt(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new Bt(t,"asc",true)),this}limit(t){return typeof t!="number"&&_.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new Mr(t),this}offset(t){return typeof t!="number"&&_.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new Or(t),this}};xr.EMPTY_MAP=new Map;var Ar=xr;var Ze=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 Me(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 Me(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 Dr=class extends Ar{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new ue(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new ue(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new ue(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new ue(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new ue(t,"","","cross",{operator:"="},true)),this}naturalJoinRaw(t){return this.joinNodes.push(new ue(t,"","","natural",{operator:"="},true)),this}innerJoin(t,e,r,n,o){let s=r,a=n,l=typeof n=="function"?n:o;if(!s){if(!this.model.primaryKey)throw new g("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}return this.join(typeof t=="string"?t:t.table,e,s,a,l),this}join(t,e,r,n,o){let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new g("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ue(typeof t=="string"?t:t.table,e,s,"inner",{operator:a||"="},false,u)),this}leftJoin(t,e,r,n,o){let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new g("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ue(typeof t=="string"?t:t.table,e,s,"left",{operator:a||"="},false,u)),this}rightJoin(t,e,r,n,o){let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new g("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ue(typeof t=="string"?t:t.table,e,s,"right",{operator:a||"="},false,u)),this}fullJoin(t,e,r,n,o){let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new g("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ue(typeof t=="string"?t:t.table,e,s,"full",{operator:a||"="},false,u)),this}};var Ir=class extends Dr{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.dbType=r.getDbType(),this.fromNode=new V(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return e.forEach(r=>{if(Array.isArray(r)){let[a,l]=r;this.modelSelectedColumns.push(l);let u=this.resolveComputedColumn(a);if(u){this.selectNodes.push(new re(`(${u.expression}) as ${l}`,void 0,void 0,true));return}let d=U(a,this.model.databaseCaseConvention);this.selectNodes.push(new re(d,l));return}let n=r;this.modelSelectedColumns.push(n);let o=this.resolveComputedColumn(n);if(o){this.selectNodes.push(new re(`(${o.expression}) as ${o.alias}`,void 0,void 0,true));return}let s=U(n,this.model.databaseCaseConvention);this.selectNodes.push(new re(s));}),this}selectRaw(e){return this.selectNodes.push(new re(e,void 0,void 0,true)),this}selectFunc(e,r,n){return this.selectNodes.push(new re(r,n,e)),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}resolveComputedColumn(e){let r=this.model.getColumnsByName?.();if(!r||r.size===0)return;let n=e.includes(".")?e.split(".").pop():e,o=r.get(n);if(o?.expression)return {expression:o.expression,alias:o.databaseName||n}}clearFrom(){return this.fromNode=new V(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new V(e),this}distinct(){return this.distinctNode=new Rr,this}distinctOn(...e){return this.distinctOnNode=new _r(e),this}selectJson(e,r,n){return this.selectNodes.push(new We(e,r,n,"extract")),this}selectJsonText(e,r,n){return this.selectNodes.push(new We(e,r,n,"extract_text")),this}selectJsonArrayLength(e,r,n){return this.selectNodes.push(new We(e,r,n,"array_length")),this}selectJsonKeys(e,r,n){return this.selectNodes.push(new We(e,r,n,"object_keys")),this}selectJsonRaw(e,r){return this.selectNodes.push(new We(e,"",r,"raw",true)),this}};var Er=class extends Ir{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 k&&n===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof k||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 k&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof k||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof k)&&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 k&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof k||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof k)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new M(e,"or",false,o,s)),this}whereColumn(e,r,n){return this.andWhereColumn(e,r,n)}andWhereColumn(e,r,n){let o="=",s;return n!==void 0?(o=r,s=n):s=r,this.whereNodes.push(new M(e,"and",false,o,new x(s))),this}orWhereColumn(e,r,n){let o="=",s;return n!==void 0?(o=r,s=n):s=r,this.whereNodes.push(new M(e,"or",false,o,new x(s))),this}whereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof k&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof k||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof k)&&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 k&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof k||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof k)&&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 k&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof k||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof k)&&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 k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new we("","exists",r.extractQueryNodes(),"and")),this}orWhereExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new we("","exists",r.extractQueryNodes(),"or")),this}whereNotExists(e){return this.andWhereNotExists(e)}andWhereNotExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new we("","not exists",r.extractQueryNodes(),"and")),this}orWhereNotExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new we("","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 Ye(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 Ye(e,"or",false,o,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Ye(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Ye(e,"or",false,"=",[],true)),this}buildSubQuery(e){if(e instanceof k)return e;let r=new k(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 we(e,r,o.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new we(e,r,o.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new k(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new Me(r.whereNodes,"and");return this.whereNodes.push(n),this}orWhereGroup(e){let r=new k(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new Me(r.whereNodes,"or");return this.whereNodes.push(n),this}};var vr=class extends Er{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new le(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new le(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new le(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new le(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new le(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new le(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new le(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new le(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new le(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new le(t,"or",false,"raw",e)),this}};var k=class i extends vr{constructor(e,r){super(e,r);this.isNestedCondition=false;this._interpreterUtils=null;this.insertNode=null;this.onDuplicateNode=null;this.updateNode=null;this.deleteNode=null;this.returningNode=null;this.truncateNode=null;this.replicationMode=null;this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.astParser=new b(this.model,this.dbType);}get interpreterUtils(){return this._interpreterUtils||(this._interpreterUtils=new 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 re(a.extractQueryNodes(),n)),this}return this.selectNodes.push(new re(r.extractQueryNodes(),n)),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}clearSelect(){return super.clearSelect(),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}async exists(){return !!await this.one()}async many(){let{sql:e,bindings:r}=this.unWrap();return this.execSqlWithSlaveHandling("read",n=>G(e,r,n,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}))}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async pluck(e){return (await this.many()).map(n=>n[e])}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async oneOrFail(){let e=await this.one();if(!e)throw new g("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 mr(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 g(this.model.name+"::paginateWithCursor","ORDER_BY_REQUIRED");let n=this.orderByNodes;if(n.some(m=>m.isRawValue))throw new g(this.model.name+"::paginateWithCursor","ORDER_BY_RAW_NOT_SUPPORTED");let o=n.map(m=>m.column),s=n[0].direction==="desc"?"<":">";if(r){let m=Array.isArray(r.value)?r.value:[r.value];this.andWhere(p=>{for(let h=0;h<o.length;h++){let y=h;p.orWhere(T=>{for(let S=0;S<y;S++)T.where(o[S],"=",m[S]);T.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 $t("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new $t("for_share",e.skipLocked,e.noWait)),this}union(e){if(typeof e=="string")return this.unionNodes.push(new Ge(e)),this;let n=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Ge(n)),this}unionAll(e){if(typeof e=="string")return this.unionNodes.push(new Ge(e,true)),this;let n=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Ge(n,true)),this}increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?ft(r.total):0}needsDerivedTableCount(){return this.groupByNodes.length>0||this.havingNodes.length>0||this.distinctNode!==null||this.distinctOnNode!==null}buildCountQuery(e="*"){if(!this.needsDerivedTableCount()){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);return}this.clearOrderBy(),this.clearLimit(),this.clearOffset();let r=this.extractQueryNodes();this.withNodes=[],this.distinctNode=null,this.distinctOnNode=null,this.clearSelect(),this.fromNode=new V(r,"g"),this.joinNodes=[],this.whereNodes=[],this.groupByNodes=[],this.havingNodes=[],this.lockQueryNodes=[],this.unionNodes=[],this.selectRaw(`count(${e}) as total`);}async getMax(e){this.clearForFunctions(),this.selectFunc("max",e,"total");let r=await this.one();return r?ft(r.total):0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?ft(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?ft(r.total):0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?ft(r.total):0}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:cr(e,r,a),data:s}}table(e,r){if(typeof e=="function"){if(!r)throw new g("QueryBuilder::table","MISSING_ALIAS_FOR_SUBQUERY");let n=new i(this.model,this.sqlDataSource),o=e(n),a=(o!=null&&"extractQueryNodes"in o?o:n).extractQueryNodes();return this.fromNode=new V(a,r),this}return this.fromNode=new V(e,r),this}with(e,r){let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new Tt("normal",e,s.extractQueryNodes())),this}withRecursive(e,r){let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new Tt("recursive",e,s.extractQueryNodes())),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new g("QueryBuilder::withMaterialized","MATERIALIZED_CTE_NOT_SUPPORTED",new Error("MATERIALIZED CTE is only supported by postgres"));let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new Tt("materialized",e,s.extractQueryNodes())),this}insert(e,r){let n=Object.fromEntries(Object.keys(e).map(s=>[s,e[s]])),o=!r||r.length===0;return this.insertNode=new X(this.fromNode,[this.interpreterUtils.stripComputedFromData(n)],r,o),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:s,values:a}=this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert",this.dbType),l=Object.fromEntries(s.map((p,h)=>[p,a[h]]));this.insertNode=new X(this.fromNode,[l],r,o);let{sql:u,bindings:d}=this.astParser.parse([this.insertNode]),c=await this.getSqlDataSource("write"),m=await G(u,d,c,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[e]}});if(!o)return Array.isArray(m)&&m.length?m[0]:m})}insertMany(e,r){let n=e.map(s=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(s).map(a=>[a,s[a]])))),o=!r||r.length===0;return this.insertNode=new X(this.fromNode,n,r,o),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{if(!e.length)return o?void 0:[];let s=await Promise.all(e.map(async c=>{let{columns:m,values:p}=this.interpreterUtils.prepareColumns(Object.keys(c),Object.values(c),"insert",this.dbType);return Object.fromEntries(m.map((h,y)=>[h,p[y]]))}));this.insertNode=new X(this.fromNode,s,r,o);let{sql:a,bindings:l}=this.astParser.parse([this.insertNode]),u=await this.getSqlDataSource("write"),d=await G(a,l,u,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:s}});if(!o)return d})}upsert(e,r,n={updateOnConflict:true}){let o=this.interpreterUtils.filterComputedColumns(Object.keys(e)),s=Object.keys(r),a=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(e).map(l=>[l,e[l]])));return this.insertNode=new X(new V(this.model.table),[a],void 0,true),this.onDuplicateNode=new Se(this.model.table,s,o,n.updateOnConflict??true?"update":"ignore",n.returning),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:u}=this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert",this.dbType),d=Object.fromEntries(l.map((y,T)=>[y,u[T]]));if(this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw([d],s,o,n,[e]);let{sql:c,bindings:m}=this.astParser.parse([new X(new V(this.model.table),[d],void 0,true),new Se(this.model.table,s,o,n.updateOnConflict??true?"update":"ignore",n.returning)]),p=await this.getSqlDataSource("write"),h=await G(c,m,p,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:[e]}});return Array.isArray(h)?h:[h]})}upsertMany(e,r,n,o={updateOnConflict:true}){let s=this.interpreterUtils.filterComputedColumns(r),a=n.map(l=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(l).map(u=>[u,l[u]]))));return this.insertNode=new X(new V(this.model.table),a,void 0,true),this.onDuplicateNode=new Se(this.model.table,e,s,o.updateOnConflict??true?"update":"ignore",o.returning),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let l=[];if(await Promise.all(n.map(async p=>{let{columns:h,values:y}=this.interpreterUtils.prepareColumns(Object.keys(p),Object.values(p),"insert",this.dbType),T=Object.fromEntries(h.map((S,N)=>[S,y[N]]));l.push(T);})),this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw(l,e,s,o,n);let{sql:u,bindings:d}=this.astParser.parse([new X(new V(this.model.table),l,void 0,true),new Se(this.model.table,e,s,o.updateOnConflict??true?"update":"ignore",o.returning)]),c=await this.getSqlDataSource("write"),m=await G(u,d,c,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:n}});return Array.isArray(m)?m:[m]})}async executeMssqlMergeRaw(e,r,n,o,s){if(!e.length)return [];let a=Object.keys(e[0]),l=this.interpreterUtils.formatStringColumn("mssql",this.model.table),u=L=>this.interpreterUtils.formatStringColumn("mssql",L),d=[],c=e.map(L=>`select ${a.map(v=>(d.push(L[v]),`@${d.length}`)).join(", ")}`),m=a.map(u).join(", "),p=c.join(" union all "),h=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(", "),T=a.map(u).join(", "),S=a.map(L=>`source.${u(L)}`).join(", "),N=o.returning&&o.returning.length?o.returning.map(L=>`inserted.${u(L)}`).join(", "):a.map(L=>`inserted.${u(L)}`).join(", "),A=(o.updateOnConflict??true)&&y?`when matched then update set ${y}`:"",B=`merge into ${l} as target using (${p}) as source (${m}) on ${h} ${A} when not matched then insert (${T}) values (${S}) output ${N};`,O=await this.getSqlDataSource("write"),I=await G(B,d,O,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(I)?I:[I]}update(e,r){let n=this.interpreterUtils.stripComputedFromData(e),o=Object.keys(n),s=Object.values(n);this.updateNode=new De(this.fromNode,o,s),this.returningNode=this.buildReturningNode("update",r);let a=this.returningNode!==null;return new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:u}=this.interpreterUtils.prepareColumns(o,s,"update",this.dbType);this.updateNode=new De(this.fromNode,l,u);let{sql:d,bindings:c}=this.astParser.parse(this.withReturningNode([this.updateNode,...this.whereNodes,...this.joinNodes])),m=await this.getSqlDataSource("write");return G(d,c,m,this.dbType,a?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:a?"fetch":"affectedRows"}})})}buildReturningNode(e,r){return !r?.length||!this.interpreterUtils.dialectEmitsReturning(this.dbType)?null:new pt(r,e==="delete"?"deleted":"inserted")}withReturningNode(e){if(!this.returningNode)return e;if(this.dbType==="mssql"){let[r,...n]=e;return [r,this.returningNode,...n]}return [...e,this.returningNode]}truncate(){return this.truncateNode=new wt(this.fromNode),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:e,bindings:r}=this.astParser.parse([this.truncateNode]),n=await this.getSqlDataSource("write");await G(e,r,n,this.dbType,"rows");})}delete(e){this.deleteNode=new ct(this.fromNode),this.returningNode=this.buildReturningNode("delete",e);let r=this.returningNode!==null;return new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:n,bindings:o}=this.astParser.parse(this.withReturningNode([this.deleteNode,...this.whereNodes,...this.joinNodes])),s=await this.getSqlDataSource("write");return G(n,o,s,this.dbType,r?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:r?"fetch":"affectedRows"}})})}softDelete(e={}){let{column:r="deletedAt",value:n=nt()}=e||{};return this.updateNode=new De(this.fromNode,[r],[n]),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:o,values:s}=this.interpreterUtils.prepareColumns([r],[n],"update",this.dbType);this.updateNode=new De(this.fromNode,o,s);let{sql:a,bindings:l}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),u=await this.getSqlDataSource("write");return G(a,l,u,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return it(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),n=lt(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${n}`:n,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new re("*")]);let{sql:e,bindings:r}=this.astParser.parse(this.extractQueryNodes());return {sql:this.withQuery?`${this.withQuery} ${e}`:e,bindings:[...r||[]]}}clone(){let e=new i(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=F(this.modelSelectedColumns),e.distinctNode=F(this.distinctNode),e.distinctOnNode=F(this.distinctOnNode),e.selectNodes=F(this.selectNodes),e.withQuery=F(this.withQuery),e.joinNodes=F(this.joinNodes),e.whereNodes=F(this.whereNodes),e.groupByNodes=F(this.groupByNodes),e.havingNodes=F(this.havingNodes),e.orderByNodes=F(this.orderByNodes),e.lockQueryNodes=F(this.lockQueryNodes),e.unionNodes=F(this.unionNodes),e.withNodes=F(this.withNodes),e.fromNode=F(this.fromNode),e.limitNode=F(this.limitNode),e.offsetNode=F(this.offsetNode),e.returningNode=F(this.returningNode),e.isNestedCondition=this.isNestedCondition,e}clear(){let e=new i(this.model,this.sqlDataSource);return this.fromNode.alias&&e.table(e.model.table,this.fromNode.alias),e}clearLockQuery(){return this.lockQueryNodes=[],this}clearUnionQuery(){return this.unionNodes=[],this}clearWithQuery(){return this.withNodes=[],this}extractQueryNodes(){return this.selectNodes.length||(this.selectNodes=[new re("*")]),this.insertNode?[this.insertNode,this.onDuplicateNode].filter(Boolean):this.updateNode?this.withReturningNode([this.updateNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode]).filter(Boolean):this.deleteNode?this.withReturningNode([this.deleteNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode]).filter(Boolean):this.truncateNode?[this.truncateNode]:[...this.withNodes,this.distinctNode,this.distinctOnNode,...this.selectNodes,this.fromNode,...this.joinNodes,...this.whereNodes,...this.groupByNodes,...this.havingNodes,...this.orderByNodes,this.limitNode,this.offsetNode,...this.lockQueryNodes,...this.unionNodes].filter(Boolean)}clearForFunctions(){return this.clearSelect(),this.clearGroupBy(),this.clearOrderBy(),this.clearLimit(),this.clearOffset(),this}isMssqlTransaction(){return this.sqlDataSource.type==="mssql"&&!!this.sqlDataSource.sqlConnection}async executePaginateQueries(e,r){if(this.isMssqlTransaction()){let n=await e(),o=await r();return [n,o]}return Promise.all([e(),r()])}async getSqlDataSource(e){return this.replicationMode?this.replicationMode==="master"?this.sqlDataSource:e==="write"?this.sqlDataSource:this.sqlDataSource.getSlave()||this.sqlDataSource:e==="read"?this.sqlDataSource.getSlave()||this.sqlDataSource:this.sqlDataSource}async execSqlWithSlaveHandling(e,r){let n=await this.getSqlDataSource(e);if(!(n!==this.sqlDataSource))return r(n);try{return await r(n)}catch(s){let a=s instanceof Error?s:new Error(String(s)),l=this.sqlDataSource.getOnSlaveServerFailure();if(l)return await l(a,{host:n.host,port:n.port,username:n.username,password:n.password,database:n.database,type:n.getDbType()}),await r(this.sqlDataSource);throw a}}};function ry(i,t){return t.strategy&&t.strategy!=="auto"?t.strategy:Yf(i)}function Yf(i){let{parentCount:t,relationType:e,hasLimitOffset:r}=i;return r&&(e==="hasMany"||e==="manyToMany")?"batched":t===1?"join":e==="manyToMany"?typeof t=="number"&&t<=10?"join":"batched":typeof t=="number"&&t<10?"join":"batched"}var hl=te(),Le=class i extends k{constructor(e,r){super(e,r);this.loadOptions={strategy:"auto"};this.sqlModelManagerUtils=new Et(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 re(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 g(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return r}async many(){await this.model.beforeFetch?.(this),this.expandModelSelectColumns();let r=await super.many();if(!r.length)return [];let n=pe(r,this.model,this.modelSelectedColumns);if(!n)return [];let o=Array.isArray(n)?n:[n];return this.relationQueryBuilders.length&&await this.processRelationsWithStrategy(o),o}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async*chunk(e){let r=0;for(;;){let n=await this.limit(e).offset(r).many();if(!n.length)break;yield n,r+=n.length;}}async stream(e={}){await this.model.beforeFetch?.(this),this.expandModelSelectColumns();let{sql:r,bindings:n}=this.unWrap(),o=await this.getSqlDataSource("read");return await mr(r,n,o,e,{onData:async(a,l)=>{let u=pe([l],this.model,this.modelSelectedColumns);u&&(this.relationQueryBuilders.length&&await this.processRelationsRecursively([u]),a.write(u));}})}async paginateWithCursor(e,r){return super.paginateWithCursor(e,r)}insert(e,r={}){return this.getModelManager(r.trx).insert(e,{returning:r.returning})}insertMany(e,r={}){return this.getModelManager(r.trx).insertMany(e,{returning:r.returning})}upsert(e,r,n={updateOnConflict:true}){let o=this.getModelManager(n.trx),s=Object.keys(e),a=Object.keys(r),l={...e,...r};return o.upsertMany(s,a,[l],{updateOnConflict:n.updateOnConflict??true,returning:n.returning}).then(u=>Array.isArray(u)?u[0]:u)}upsertMany(e,r,n={updateOnConflict:true}){let o=this.getModelManager(n.trx),s=r.length>0?Object.keys(r[0]):[];return o.upsertMany(e,s,r,{updateOnConflict:n.updateOnConflict??true,returning:n.returning})}getModelManager(e){let r=e?e.sql:this.sqlDataSource.getTransactionBoundSqlDataSource()??this.sqlDataSource;return new ze(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 g(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 g(`${this.model.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let l=U(a.leftForeignKey,s.caseConvention||this.model.databaseCaseConvention),u=U(a.rightForeignKey,s.caseConvention||this.model.databaseCaseConvention),d=n.map((p,h)=>({[l]:r[this.model.primaryKey],[u]:p[a.model.primaryKey],...o?o(p,h):{}}));class c extends ae{static get table(){return a.throughModel}}c.databaseCaseConvention="preserve",c.modelCaseConvention="preserve",await new ze(c,s.trx?s.trx.sql:this.sqlDataSource).insertMany(d);}truncate(){return super.truncate()}update(e,r={}){let n=r.returning,o=super.update(e,n);return new Y(()=>o.unWrap(),()=>o.toSql(),()=>o.toQuery(),async()=>{if(!n||!this.returningNode)return o;let s=await o;return pe(s,this.model,n)})}softDelete(e={}){let r=super.softDelete(e);return new Y(()=>r.unWrap(),()=>r.toSql(),()=>r.toQuery(),async()=>r)}delete(e={}){let r=e.returning,n=super.delete(r);return new Y(()=>n.unWrap(),()=>n.toSql(),()=>n.toQuery(),async()=>{if(!r||!this.returningNode)return n;let o=await n;return pe(o,this.model,r)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?+r.total:0}async getMax(e){this.clearForFunctions(),this.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:cr(e,r,a),data:s}}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof k)&&typeof e[1]=="string"){let[r,n]=e;return super.select(r,n),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}load(e,r,n){let o,s={strategy:"auto"};typeof r=="function"?(o=r,n&&(s=n)):r&&typeof r=="object"&&(s=r);let a=this.sqlModelManagerUtils.getRelationFromModel(e),l=new i(a.model,this.sqlDataSource);return l.relation=a,l.loadOptions=s,o?.(l),this.relationQueryBuilders.push(l),this}clearRelations(){return this.relationQueryBuilders=[],this}havingRelated(e,r,n){return this.andHavingRelated(e,r,n)}andHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.whereExists(d),this}orHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.orWhereExists(d),this}notHavingRelated(e,r,n){return this.andNotHavingRelated(e,r,n)}andNotHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.whereNotExists(d),this}orNotHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.orWhereNotExists(d),this}clone(){let e=super.clone();return e.relationQueryBuilders=F(this.relationQueryBuilders),e}async processRelationsRecursively(e){await Promise.all(this.relationQueryBuilders.filter(r=>r.isRelationQueryBuilder).map(async r=>{let n=await this.getRelatedModelsForRelation(r,r.relation,e);this.mapRelatedModelsToModels(r.relation,e,n);}));}async processRelationsWithStrategy(e){let r=e.length,n=this.relationQueryBuilders.filter(s=>s.isRelationQueryBuilder),o=async s=>{let a=ry({parentCount:r,relationType:s.relation.type,hasLimitOffset:!!s.limitNode||!!s.offsetNode,hasOrderBy:s.orderByNodes.length>0},s.loadOptions),l=s.relationQueryBuilders.length>0;a==="join"&&!l?await this.loadRelationViaJoin(s,e):await this.loadRelationViaBatch(s,e);};if(this.dbType==="mssql"){for(let s of n)await o(s);return}await Promise.all(n.map(o));}async loadRelationViaJoin(e,r){let n=e.relation,o=e.loadOptions.joinSeparator||"__",a=await this.buildJoinQuery(e,n,o).many();this.mapJoinedResultsToModels(a,r,n,o);}buildJoinQuery(e,r,n){let o=new i(this.model,this.sqlDataSource);if(this.modelSelectedColumns.length>0)for(let s of this.selectNodes)o.selectNodes.push(F(s));else for(let[s,a]of this.model.getColumnsByDatabaseName())a.expression||o.selectRaw(`${this.model.table}.${s}`);for(let s of this.whereNodes){let a=F(s);this.qualifyWhereNodeColumns(a,this.model.table),o.whereNodes.push(a);}for(let s of this.groupByNodes)o.groupByNodes.push(F(s));for(let s of this.orderByNodes)o.orderByNodes.push(F(s));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(o.limitNode=F(this.limitNode)),this.offsetNode&&(o.offsetNode=F(this.offsetNode))),r.type){case "hasOne":case "hasMany":o.leftJoin(r.model.table,`${this.model.table}.${this.model.primaryKey}`,`${r.model.table}.${r.foreignKey}`);break;case "belongsTo":o.leftJoin(r.model.table,`${this.model.table}.${r.foreignKey}`,`${r.model.table}.${r.model.primaryKey}`);break;case "manyToMany":{let s=r;o.leftJoin(s.throughModel,`${this.model.table}.${this.model.primaryKey}`,`${s.throughModel}.${s.leftForeignKey}`),o.leftJoin(s.model.table,`${s.throughModel}.${s.rightForeignKey}`,`${s.model.table}.${s.model.primaryKey}`);break}}this.selectRelationColumnsWithAlias(o,r,e,n);for(let s of e.whereNodes)o.whereNodes.push(F(s));for(let s of e.orderByNodes)o.orderByNodes.push(F(s));return o}selectRelationColumnsWithAlias(e,r,n,o){let s=r.columnName,a=r.model,l=a.getColumnsByName(),u=a.getColumnsByDatabaseName(),d=n.selectNodes.filter(m=>typeof m.column=="string"),c=d.some(m=>m.column==="*"||m.column.endsWith(".*"));if(d.length===0||c)for(let[m,p]of u)e.selectRaw(`${a.table}.${m} as ${s}${o}${p.columnName}`);else for(let m of d){let p=m.column,h=p.includes(".")?p.split(".").pop():p,y=u.get(h)||l.get(h),T=y?.databaseName??h,S=m.alias??y?.columnName??h;e.selectRaw(`${a.table}.${T} as ${s}${o}${S}`);}}mapJoinedResultsToModels(e,r,n,o){let{columnName:s,type:a}=n,l=n.model.getColumnsByName();if(a==="hasMany"||a==="manyToMany"){let u=new Map;e.forEach(d=>{let c=d[this.model.primaryKey];u.has(c)||u.set(c,[]);let m=this.extractRelationDataFromRow(d,s,o);m&&(this.serializeRelationData(m,l),u.get(c).push(m));}),r.forEach(d=>{let c=d[this.model.primaryKey];d[s]=u.get(c)||[];});}else {let u=new Map;e.forEach(d=>{let c=d[this.model.primaryKey];if(!u.has(c)){let m=this.extractRelationDataFromRow(d,s,o);m&&(this.serializeRelationData(m,l),u.set(c,m));}}),r.forEach(d=>{let c=d[this.model.primaryKey];d[s]=u.get(c)||null;});}}extractRelationDataFromRow(e,r,n){let o=`${r}${n}`,s={},a=false,l=false;for(let u of Object.keys(e))if(u.startsWith(o)){let d=u.substring(o.length);s[d]=e[u],a=true,e[u]!==null&&e[u]!==void 0&&(l=true);}return a&&l?s:null}qualifyWhereNodeColumns(e,r){if(e instanceof M)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof we)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof Me)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 g(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let o=new Map;n.forEach(m=>{let p=m[e.foreignKey];p&&o.set(String(p),m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=null;return}let h=o.get(String(p));m[e.columnName]=h||null;});break;case "belongsTo":let s=new Map;n.forEach(m=>{if(!e.model.primaryKey)throw new g(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let p=m[e.model.primaryKey];p&&s.set(String(p),m);}),r.forEach(m=>{let p=m[e.foreignKey];if(!p){m[e.columnName]=null;return}let h=s.get(String(p));m[e.columnName]=h||null;});break;case "hasMany":if(!this.model.primaryKey)throw new g(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;n.forEach(m=>{let p=m[e.foreignKey];if(!p)return;let h=String(p);a.has(h)||a.set(h,[]),a.get(h).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let h=a.get(String(p))||[];m[e.columnName]=h;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new g(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)||U(d,this.model.modelCaseConvention);n.forEach(m=>{let p=m[c];if(p==null)return;let h=String(p);u.has(h)||u.set(h,[]),delete m[c],u.get(h).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let h=u.get(String(p))||[];m[e.columnName]=h;});break;default:throw new g(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=Pe(hl.crypto.randomBytes(6)),u=`${r.model.table}_cte_${l}`,d=e.orderByNodes.map(I=>I.isRawValue?I.column:`${this.interpreterUtils.formatStringColumn(this.dbType,I.column)} ${I.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let c=e.with(u,I=>I.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(I=>En(I,u,e.model.table));return c.select(...m).table(u);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new g(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!n.length)return e;let h=e.limitNode?.limit,y=e.offsetNode?.offset,T=e.modelSelectedColumns.length?e.modelSelectedColumns.map(I=>I.includes(".")?I:`${r.model.table}.${I}`):[`${r.model.table}.*`];if(!h&&!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 S=Pe(hl.crypto.randomBytes(6)),N=`${r.model.table}_cte_${S}`,C=e.orderByNodes.map(I=>{if(I.isRawValue)return I.column;let L=I.column.includes(".")?I.column:`${r.model.table}.${I.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,L)} ${I.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let A=`${Pe(hl.crypto.randomBytes(6))}_left_foreign_key`,B=e.with(N,I=>I.select(...T).select([`${p.throughModel}.${p.leftForeignKey}`,A]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${C}) as rn_${S}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o));h&&B.whereRaw(`rn_${S} <= ${h+(y||0)}`),y&&B.whereRaw(`rn_${S} > ${y}`);let O=T.map(I=>En(I,N,e.model.table));return B.select(...O).select([`${N}.${A}`,p.leftForeignKey]).table(N);default:throw new g(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new g(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 g(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);default:throw new g(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 g(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 g(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 g(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 g(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}};var gl=class{constructor(t,e,r){this.sqlDataSource=t,this.typeofModel=e,this.modelData=r;}merge(t){this.modelData={...this.modelData,...t};}getQueryBuilder(){return new Le(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:["*"]})}},Zf=(i,t,e)=>new gl(i,t,e);var St=new Map,Fe=new Map,$r=class{async get(t){return St.get(t)}async set(t,e,r){let n=Fe.get(t);if(n&&(clearTimeout(n),Fe.delete(t)),St.set(t,e),r){let o=setTimeout(()=>{St.delete(t),Fe.delete(t);},r);Fe.set(t,o);}}async invalidate(t){let e=Fe.get(t);e&&(clearTimeout(e),Fe.delete(t)),St.delete(t);}async invalidateAll(t){let e=St.keys();for(let r of e)if(r.startsWith(t)){let n=Fe.get(r);n&&(clearTimeout(n),Fe.delete(r)),St.delete(r);}}};de();var ny=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 Q("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=te(),$={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},Xf=()=>{try{if(!ee.fs.exists(".env"))return $;let i=ee.fs.readFileSync(".env");if(!i)return $;new TextDecoder().decode(i).split(`
137
+ ORDER BY pk`,bindings:[]}}},Kp=new tl;var rl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Qp=new rl;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),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let n=new f(this.model).formatStringColumn("sqlite",t),o=n;return e&&(o=`${e.toLowerCase()}(${n})`),{sql:o,bindings:[]}}if(Array.isArray(t)&&t.length>0){let o=new b(this.model,"sqlite").parse(t),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}if(!Array.isArray(t)){let o=new b(this.model,"sqlite").parse([t]),s=`(${o.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:o.bindings}}return {sql:t.map(n=>{if(typeof n=="string"){let l=new f(this.model).formatStringColumn("sqlite",n);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"sqlite").parse([n]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},Lp=new nl;var ol=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=Oe.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}},Wp=new ol;var sl=class{toSql(t){let e=t,r=Qe(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof x?s.rawValue:s instanceof D?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}}},Fp=new sl;var il=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return e.keyword="",{sql:e.fromNode,bindings:[]};let r=new f(this.model).getFromForWriteOperations("sqlite",e.fromNode);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},jp=new il;var al=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Up=new al;var ll=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.columns.map((a,l)=>{let u=e.values[l];if(u instanceof x)return `${r.formatStringColumn("sqlite",a)} = ${u.rawValue}`;if(u instanceof D){let d=new b(this.model,"sqlite").parse([u],1,true).sql;return `${r.formatStringColumn("sqlite",a)} = ${d}`}return o.push(u),`${r.formatStringColumn("sqlite",a)} = ?`}).join(", ");return {sql:`${n} set ${s}`,bindings:o}}},Vp=new ll;var ul=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 D){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}},Jp=new ul;var dl=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}}},Hp=new dl;var ml=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 "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},zp=new ml;var cl=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}}},Gp=new cl;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);return {sql:`${e.alias} as (${o.sql})`,bindings:o.bindings}}},Yp=new pl;var Zp={mssql:{alter_table:{add_column:bu,add_constraint:Tu,add_primary_key:wu,alter_column_type:Su,alter_table:Nu,drop_column:qu,drop_constraint:Cu,drop_default:Ru,drop_not_null:Eu,drop_primary_key:vu,rename_column:$u,rename_table:Pu,set_default:Bu,set_not_null:ku,set_table_options:Ku},column:{column_type:Qu},constraint:{after:Lu,constraint:Wu},create_table:{create_table:Fu},delete:{delete:ju},distinct:{distinct:Uu,distinct_on:Vu},drop_table:{drop_table:Ju},extension:{create_extension:Hu},from:{from:zu},group_by:{group_by:Gu},having:{having:Yu},index_op:{create_index:Zu,drop_index:Xu},insert:{insert:ed},join:{join:td},limit:{limit:rd},lock:{lock:nd},offset:{offset:od},on_duplicate:{on_duplicate:sd},order_by:{order_by:id},raw:{raw:ad},returning:{returning:ld},schema:{check_constraint_info:ud,foreign_key_info:dd,get_column_listing:md,get_tables:cd,has_check_constraint:pd,has_column:yd,has_index:fd,has_primary_key:hd,has_table:gd,index_info:bd,primary_key_info:Td,table_info:wd},select:{select:Sd,select_json:Nd},sqlfunc:{sqlfunc:qd},truncate:{truncate:Cd},union:{union:Rd},update:{update:_d},where:{where:Md,where_group:Od,where_json:Ad,where_subquery:xd},with:{with:Dd}},mysql:{alter_table:{add_column:Id,add_constraint:Ed,add_primary_key:vd,alter_column_type:$d,alter_table:Pd,drop_column:Bd,drop_constraint:kd,drop_default:Kd,drop_not_null:Qd,drop_primary_key:Ld,rename_column:Wd,rename_table:Fd,set_default:jd,set_not_null:Ud,set_table_options:Vd},column:{column_type:Jd},constraint:{after:Hd,constraint:zd},create_table:{create_table:Gd},delete:{delete:Yd},distinct:{distinct:Zd,distinct_on:Xd},drop_table:{drop_table:em},extension:{create_extension:tm},from:{from:rm},group_by:{group_by:nm},having:{having:om},index_op:{create_index:sm,drop_index:im},insert:{insert:am},join:{join:lm},limit:{limit:um},lock:{lock:dm},offset:{offset:mm},on_duplicate:{on_duplicate:cm},order_by:{order_by:pm},raw:{raw:ym},returning:{returning:fm},schema:{check_constraint_info:hm,foreign_key_info:gm,get_column_listing:bm,get_tables:Tm,has_check_constraint:wm,has_column:Sm,has_index:Nm,has_primary_key:qm,has_table:Cm,index_info:Rm,primary_key_info:_m,table_info:Mm},select:{select:Om,select_json:Am},sqlfunc:{sqlfunc:xm},truncate:{truncate:Dm},union:{union:Im},update:{update:Em},where:{where:vm,where_group:$m,where_json:Pm,where_subquery:Bm},with:{with:km}},postgres:{alter_table:{add_column:Km,add_constraint:Qm,add_primary_key:Lm,alter_column_type:Wm,alter_table:Fm,drop_column:jm,drop_constraint:Um,drop_default:Vm,drop_not_null:Jm,drop_primary_key:Hm,rename_column:zm,rename_table:Gm,set_default:Ym,set_not_null:Zm,set_table_options:Xm},column:{column_type:ec},constraint:{after:tc,constraint:rc},create_table:{create_table:nc},delete:{delete:oc},distinct:{distinct:sc,distinct_on:ic},drop_table:{drop_table:ac},extension:{create_extension:lc},from:{from:uc},group_by:{group_by:dc},having:{having:mc},index_op:{create_index:cc,drop_index:pc},insert:{insert:yc},join:{join:fc},limit:{limit:hc},lock:{lock:gc},offset:{offset:bc},on_duplicate:{on_duplicate:Tc},order_by:{order_by:wc},raw:{raw:Sc},returning:{returning:Nc},schema:{check_constraint_info:qc,foreign_key_info:Cc,get_column_listing:Rc,get_tables:_c,has_check_constraint:Mc,has_column:Oc,has_index:Ac,has_primary_key:xc,has_table:Dc,index_info:Ic,primary_key_info:Ec,table_info:vc},select:{select:$c,select_json:Pc},sqlfunc:{sqlfunc:Bc},truncate:{truncate:kc},union:{union:Kc},update:{update:Qc},where:{where:Lc,where_group:Wc,where_json:Fc,where_subquery:jc},with:{with:Uc}},sqlite:{alter_table:{add_column:Vc,add_constraint:Jc,alter_column_type:Hc,alter_table:zc,drop_column:Gc,drop_constraint:Yc,drop_default:Zc,drop_not_null:Xc,drop_primary_key:ep,rename_column:tp,rename_table:rp,set_default:np,set_not_null:op,set_table_options:sp},column:{column_type:ip},constraint:{after:ap,constraint:lp},create_table:{create_table:up},delete:{delete:dp},distinct:{distinct:mp,distinct_on:cp},drop_table:{drop_table:pp},extension:{create_extension:yp},from:{from:fp},group_by:{group_by:hp},having:{having:gp},index_op:{create_index:bp,drop_index:Tp},insert:{insert:wp},join:{join:Sp},limit:{limit:Np},lock:{lock:qp},offset:{offset:Cp},on_duplicate:{on_duplicate:Rp},order_by:{order_by:_p},raw:{raw:Mp},returning:{returning:Op},schema:{check_constraint_info:Ap,foreign_key_info:xp,get_column_listing:Dp,get_tables:Ip,has_check_constraint:Ep,has_column:vp,has_index:$p,has_primary_key:Pp,has_table:Bp,index_info:kp,primary_key_info:Kp,table_info:Qp},select:{select:Lp,select_json:Wp},sqlfunc:{sqlfunc:Fp},truncate:{truncate:jp},union:{union:Up},update:{update:Vp},where:{where:Jp,where_group:Hp,where_json:zp,where_subquery:Gp},with:{with:Yp}}};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=this.dbType==="mssql"?t.find(C=>!!C&&C.folder==="lock")??null:null,a=s?this.getMssqlTableHints(s):"",l=t.filter(C=>C!==null&&C.folder!=="distinct"&&C.folder!=="distinctOn"),u=l.some(C=>C.folder==="offset"),d=l.some(C=>C.folder==="order_by"),c=l.find(C=>C.folder==="limit"),m=l.find(C=>C.folder==="offset"),p=this.dbType==="mssql"&&c&&!u&&!d,h=this.dbType==="mssql"&&!p&&(c||m),y=[],T=[],w=null;p&&c&&T.push(c.limit);for(let C=0;C<l.length;C++){let A=l[C];if(p&&A.folder==="limit"||h&&(A.folder==="limit"||A.folder==="offset"))continue;A.currParamIndex=e+T.length;let B=Zp[this.mapCommonDbType(this.dbType)][A.folder][A.file];if(!B)throw new Error(`Interpreter not found for ${this.dbType} ${A.keyword}`);B.model=this.model,B.dbType=this.dbType;let O=B.toSql(A);if(!O.sql||!O.sql.trim().length)continue;let I=l[C+1],H=!I||I.keyword!==A.keyword?"":I.chainsWith;if(A.folder==="lock"||A.folder==="on_duplicate"||A.folder==="returning"||A.folder==="schema"){y.push(`${O.sql}${H}`),T.push(...O.bindings),w=A.keyword;continue}if(w!==A.keyword||A.canKeywordBeSeenMultipleTimes){if(r)y.push(`${O.sql}${H}`);else {let v=A.keyword;if(A.folder==="with"&&this.dbType!=="mssql"){let Z=C,ve=false;for(;Z<l.length&&l[Z].keyword===A.keyword;){let zt=l[Z];if(zt.folder==="with"&&zt.clause==="recursive"){ve=true;break}Z++;}ve&&(v=`${v} recursive`);}if(v==="select"){let Z=p?`top (@${e}) `:"";if(n){let ve=Array.isArray(n.columns)?n.columns.join(", "):"";y.push(`select ${Z}distinct on (${ve}) ${O.sql}${H}`);}else o?y.push(`select ${Z}distinct ${O.sql}${H}`):y.push(`select ${Z}${O.sql}${H}`);}else v==="from"&&a?y.push(`${v} ${O.sql}${a}${H}`):y.push(`${v} ${O.sql}${H}`);}w=A.keyword;}else y.push(`${O.sql}${H}`);T.push(...O.bindings);}if(h){d||y.push("order by (select null)");let C=m?.offset??0;T.push(C);let B=`offset @${e+T.length-1} rows`;if(c){T.push(c.limit);let O=e+T.length-1;B+=` fetch next @${O} rows only`;}y.push(B);}return {sql:y.join(" "),bindings:T}}mapCommonDbType(t){switch(t){case "mariadb":return "mysql";case "cockroachdb":return "postgres";default:return t}}getMssqlTableHints(t){let e=[];switch(t.lockType){case "UPDATE":e.push("UPDLOCK");break;case "SHARE":e.push("HOLDLOCK");break;case "NO_KEY_UPDATE":e.push("UPDLOCK");break;case "KEY_SHARE":e.push("HOLDLOCK");break}return t.skipLocked&&e.push("READPAST"),t.noWait&&e.push("NOWAIT"),e.length>0?` with (${e.join(", ")})`:""}};var Hf=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},yl=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??U(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??U(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${o}"`;case "mssql":return `[${o}]`;default:throw new Error(`Unsupported database type: ${t}`)}}resolveComputedExpression(t){let e=t.includes(".")?t.split(".").pop():t;return this.modelColumnsMap.get(e)?.expression}isComputedColumn(t){return !!this.modelColumnsMap.get(t)?.expression}filterComputedColumns(t){return this.modelColumnsMap.size===0?t:t.filter(e=>!this.isComputedColumn(e))}stripComputedFromData(t){if(this.modelColumnsMap.size===0)return t;let e={};for(let r of Object.keys(t))this.isComputedColumn(r)||(e[r]=t[r]);return e}formatStringColumnBare(t,e){let r=e.includes(".")?e.split(".")[1]:e;return this.formatStringColumn(t,r)}dialectEmitsReturning(t){switch(t){case "postgres":case "cockroachdb":case "sqlite":case "mssql":return true;default:return false}}shouldFetchNatively(t,e){if(!this.dialectEmitsReturning(t)||t==="mssql")return false;if(t==="sqlite"&&e==="update"){for(let r of this.modelColumnsMap.values())if(r.autoUpdate)return false}return true}hasComputedColumn(t){return t.some(e=>this.isComputedColumn(e))}resolveColumnAlias(t,e){let r=this.modelColumnsMap.get(e);if(!r||r.columnName===r.databaseName)return "";switch(t){case "mssql":return ` as [${r.columnName}]`;case "mysql":case "mariadb":return ` as \`${r.columnName}\``;case "postgres":case "cockroachdb":case "sqlite":return ` as "${r.columnName}"`;default:return ""}}formatStringTable(t,e){e=e.replace(/\s+/g," ").trim();let r="";switch(e.toLowerCase().includes(" as ")&&([e,r]=e.split(" as ")),t){case "mysql":case "mariadb":return `\`${e}\`${r?` as \`${r}\``:""}`;case "postgres":case "cockroachdb":case "sqlite":return `"${e}"${r?` as "${r}"`:""}`;case "mssql":return `[${e}]${r?` as [${r}]`:""}`;default:return `${e}${r?` as ${r}`:""}`}}prepareColumns(t,e,r="insert",n="postgres"){if(!t.length)return {columns:t,values:e};let o=[],s=[];for(let l=0;l<t.length;l++){let u=t[l],d=e[l];u!=="*"&&(o.push(u),s.push(d));}let a=n==="mysql"||n==="mariadb";for(let l=0;l<o.length;l++){let u=o[l],d=s[l],c=this.modelColumnsMap.get(u);if(c?.expression){o.splice(l,1),s.splice(l,1),l--;continue}if(!c){Hf(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&&yl(c)&&(s[l]=ie(s[l],"ISO","UTC"));}if(r==="insert"){let l=new Set(t);for(let u of this.jsInsertColumns)l.has(u.columnName)||this.generateJsInsertColumn(u,o,s,n);if(a){let u=this.model.primaryKey;if(u){let d=this.modelColumnsMap.get(u);d&&d.type==="uuid"&&d.isPrimary&&!l.has(u)&&this.generateJsInsertColumn(d,o,s,n);}}}else {let l=new Set(t);for(let u of this.autoUpdateColumns){if(l.has(u.columnName))continue;let d=u.prepare?.(new Date);if(d!=null){if(typeof d?.then=="function")throw new Error(`hysteria-orm: prepare on column "${u.columnName}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);o.push(u.columnName),s.push(n==="sqlite"&&d instanceof Date&&yl(u)?ie(d,"ISO","UTC"):d);}}}return {columns:o,values:s}}generateJsInsertColumn(t,e,r,n){let o=t.prepare?.(void 0);if(o!==null&&typeof o?.then=="function")throw new Error(`hysteria-orm: prepare on column "${t.columnName}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);e.push(t.columnName),r.push(n==="sqlite"&&o instanceof Date&&yl(t)?ie(o,"ISO","UTC"):o??void 0);}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new b(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}};var ct=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 V=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 X=class extends S{constructor(e,r=[],n,o=false,s=false){super("insert into",s);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="insert";this.file="insert";this.fromNode=e,this.records=r,this.returning=n,this.disableReturning=o;}};var Se=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 pt=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 De=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 Xp;Xp=Symbol.toStringTag;var Y=class{constructor(t,e,r,n){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=n;this[Xp]="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 zf=(i,t,e,r,n,o=false)=>{let s=Object.create(t.prototype);for(let a of Object.keys(i)){let l=i[a],u=e.get(a),d=a;u||(u=r.get(a),u&&(d=u.columnName));let c=u!==void 0,m=o?true:n?n.has(d):true;if(c){if(!m)continue;if(l===null){s[d]=null;continue}if(u?.serialize){let p=u.serialize(l);if(p!==null&&typeof p?.then=="function")throw new Error(`hysteria-orm: column "${d}" on model "${t.name}" has an async serialize function, but serializers must be synchronous. Move async work to prepare or a getter.`);s[d]=p;continue}s[d]=l;continue}(!o||n&&n.has(d))&&(s[d]=l);}if(n)for(let a of n)a in s||(s[a]=null);return s},pe=(i,t,e=[])=>{if(!i.length)return null;let r=t.getColumnsByName(),n=t.getColumnsByDatabaseName(),o=e.some(u=>u.includes("*")),s=[];for(let u of e){if(u.toLowerCase().includes(" as ")){let p=u.match(/\s+as\s+(.+)$/i);p&&s.push(p[1].trim());continue}let c=u;if(c.includes(".")&&(c=c.split(".").pop()),c==="*")continue;let m=r.get(c)?.columnName??c;s.push(m);}let a=s.length?new Set(s):null,l=i.map(u=>zf(u,t,r,n,a,o));return l.length===1?l[0]:l};var yt=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);}},ey=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 dr=te();function fl(i){let t=dr.timing.now()-i;return Math.round(t*100)/100}var G=async(i,t,e,r,n="rows",o)=>{await e.ensureConnected();let s={id:dr.crypto.randomUUID(),sql:i,params:t,model:void 0,operation:ey(i),timestamp:dr.timing.now()};try{let u=e.observerChain;u&&typeof u.notifyBefore=="function"&&await u.notifyBefore(s);}catch{}let a=dr.timing.now(),l=u=>{o?.shouldNotLog||mt(i,e.logs,t,e.inputDetails.queryFormatOptions,r,u);};try{let u=e.driverAdapter;if(!u)throw new g("ExecSql","CONNECTION_NOT_ESTABLISHED");let d=await Gf(()=>u.execute(i,t,{returning:n,sqlLiteOptions:o?.sqlLiteOptions,connection:e.sqlConnection}),e.inputDetails.connectionPolicies?.retry,e.logs);try{let c=fl(a),m=e.observerChain;if(m&&typeof m.notifyAfter=="function"){let p={...s,duration:c,result:d};await m.notifyAfter(p);}}catch{}return l(fl(a)),u.extract(d,n)}catch(u){throw l(fl(a)),u}},mr=async(i,t,e,r={},n)=>{let o=e.driverAdapter;if(!o)throw new g("ExecSqlStreaming","CONNECTION_NOT_ESTABLISHED");return await o.stream(i,t,{...r,connection:e.sqlConnection??void 0},{onData:n.onData})};async function Gf(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++,Iu(`Retrying sql in ${o}ms (attempt ${r}/${n})`,"info",e),await new Promise(l=>setTimeout(l,o)),s();throw a}}return s()}function ty(){return {}}var ze=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=ty(),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 g(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new g(this.model.name+"::findOneByPrimaryKey","MODEL_HAS_NO_PRIMARY_KEY");return this.query().select(...e||[]).where(this.model.primaryKey,t).one()}insert(t,e={}){let r=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(t).map(u=>[u,t[u]]))),n=!e.returning||e.returning.length===0,o=new X(new V(this.model.table),[r],e.returning,n),s=()=>{let u=this.astParser.parse([o]);return {sql:u.sql,bindings:u.bindings}},a=()=>{let u=this.astParser.parse([o]);return {sql:lt(this.sqlDataSource,u.sql),bindings:u.bindings}},l=()=>{let{sql:u,bindings:d}=a();return it(u,d)};return new Y(s,a,l,async()=>{try{await this.model.validate?.(t);}catch(N){throw N}let{columns:u,values:d}=this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert",this.sqlType),c={};u.forEach((N,C)=>{let A=d[C];c[N]=A,t[N]??(t[N]=A);});let m=!e.returning||e.returning.length===0,{sql:p,bindings:h}=this.astParser.parse([new X(new V(this.model.table),[c],e.returning,m)]),y=await G(p,h,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(m)return;if(this.sqlType==="mysql")return this.handleMysqlInsert(y,[t],"one",e.returning);let T=y[0];return T?pe([T],this.model,e.returning):t})}insertMany(t,e={}){let r=t.map(u=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(u).map(d=>[d,u[d]])))),n=!e.returning||e.returning.length===0,o=new X(new V(this.model.table),r,e.returning,n),s=()=>{let u=this.astParser.parse([o]);return {sql:u.sql,bindings:u.bindings}},a=()=>{let u=this.astParser.parse([o]);return {sql:lt(this.sqlDataSource,u.sql),bindings:u.bindings}},l=()=>{let{sql:u,bindings:d}=a();return it(u,d)};return new Y(s,a,l,async()=>{try{await this.model.validate?.(t);}catch(T){throw T}let u=t.map(T=>{let{columns:w,values:N}=this.interpreterUtils.prepareColumns(Object.keys(T),Object.values(T),"insert",this.sqlType),C={};return w.forEach((A,B)=>{let O=N[B];C[A]=O,T[A]??(T[A]=O);}),C}),d=!e.returning||e.returning.length===0,{sql:c,bindings:m}=this.astParser.parse([new X(new V(this.model.table),u,e.returning,d)]),p=await G(c,m,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(d)return [];if(this.sqlType==="mysql")return await this.handleMysqlInsert(p,t,"many",e.returning)||[];let h=p;return h.length?pe(h,this.model,e.returning)||[]:[]})}upsertMany(t,e,r,n={updateOnConflict:true}){let o=this.interpreterUtils.filterComputedColumns(e),s=r.map(p=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(p).map(h=>[h,p[h]])))),a=new X(new V(this.model.table),s,void 0,true),l=n.returning?.length&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?n.returning:void 0;new Se(this.model.table,t,o,n.updateOnConflict??true?"update":"ignore",l);let d=()=>{let p=this.astParser.parse([a]);return {sql:p.sql,bindings:p.bindings}},c=()=>{let p=this.astParser.parse([a]);return {sql:lt(this.sqlDataSource,p.sql),bindings:p.bindings}},m=()=>{let{sql:p,bindings:h}=c();return it(p,h)};return new Y(d,c,m,async()=>{let p=r.map(O=>{let{columns:I,values:L}=this.interpreterUtils.prepareColumns(Object.keys(O),Object.values(O),"insert",this.sqlType);return Object.fromEntries(I.map((H,v)=>[H,L[v]]))});if(this.sqlType==="mssql")return this.executeMssqlMerge(p,t,o,n,r);let h=!n.returning||n.returning.length===0,y=!h&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?n.returning:void 0,{sql:T,bindings:w}=this.astParser.parse([new X(new V(this.model.table),p,void 0,true),new Se(this.model.table,t,o,n.updateOnConflict??true?"update":"ignore",y)]),N=await G(T,w,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:r}});if(h)return [];if(this.sqlType==="postgres"||this.sqlType==="cockroachdb"){if(N.length<r.length&&!(n.updateOnConflict??true)){let L=t[0],H=r.map(Z=>Z[L]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(L,H).many()}return pe(N,this.model,n.returning)||[]}let C=t[0],A=r.map(O=>O[C]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(C,A).many()})}async executeMssqlMerge(t,e,r,n,o){if(!t.length)return [];let s=Object.keys(t[0]),a=this.interpreterUtils.formatStringColumn("mssql",this.model.table),l=O=>this.interpreterUtils.formatStringColumn("mssql",O),u=[],d=t.map(O=>`select ${s.map(L=>(u.push(O[L]),`@${u.length}`)).join(", ")}`),c=s.map(l).join(", "),m=d.join(" union all "),p=e.map(O=>`target.${l(O)} = source.${l(O)}`).join(" and "),h=r.filter(O=>!e.includes(O)).map(O=>`target.${l(O)} = source.${l(O)}`).join(", "),y=s.map(l).join(", "),T=s.map(O=>`source.${l(O)}`).join(", "),w=n.returning&&n.returning.length?n.returning.map(O=>`inserted.${l(O)}${this.interpreterUtils.resolveColumnAlias("mssql",O)}`).join(", "):s.map(O=>`inserted.${l(O)}${this.interpreterUtils.resolveColumnAlias("mssql",O)}`).join(", "),C=(n.updateOnConflict??true)&&h?`when matched then update set ${h}`:"",A=`merge into ${a} as target using (${m}) as source (${c}) on ${p} ${C} when not matched then insert (${y}) values (${T}) output ${w};`,B=await G(A,u,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});if(B.length===0&&!(n.updateOnConflict??true)){let O=e[0],I=o.map(H=>H[O]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(O,I).many()}return B}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 g(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let d=a.indexOf(u);d!==-1&&(a.splice(d,1),l.splice(d,1));let c=r?.returning??[],m=c.length>0&&!this.interpreterUtils.hasComputedColumn(c)&&this.interpreterUtils.shouldFetchNatively(this.sqlType,"update"),{sql:p,bindings:h}=this.astParser.parse([new De(new V(this.model.table),a,l),new M(u,"and",false,"=",t),...m?[new pt(c)]:[]]),y=await G(p,h,this.sqlDataSource,this.sqlType,m?"rows":"affectedRows",m?{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}:void 0);if(!c.length)return;if(m){if(!y.length)throw new g(this.model.name+"::updateRecord","ROW_NOT_FOUND");return pe([y[0]],this.model,c)}let T=await this.findOneByPrimaryKey(t,r?.returning);if(!T)throw new g(this.model.name+"::updateRecord","ROW_NOT_FOUND");return T}async deleteRecord(t){if(!this.model.primaryKey)throw new g(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 ct(new V(this.model.table)),e]);await G(r,n,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new Le(this.model,this.sqlDataSource);return this.replicationMode&&t.setReplicationMode(this.replicationMode),t}async handleMysqlInsert(t,e,r,n){if(!this.model.primaryKey){if(r==="one"){let a=e.length?e[0]:null;return a?pe([a],this.model):null}return pe(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(d=>d[this.model.primaryKey]),l=a.map(d=>`'${d}'`).join(","),u=await this.query().select(...n??["*"]).whereIn(this.model.primaryKey,a).orderByRaw(`FIELD(${this.model.primaryKey}, ${l})`).many();return r==="one"?u.length?u[0]:null:u}let o=Array.from({length:t.affectedRows},(a,l)=>l+t.insertId),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 Et=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=au(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 g("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function cr(i,t,e){return {total:e,perPage:t,currentPage:i,firstPage:1,isEmpty:e===0,lastPage:Math.max(1,Math.ceil(e/t)),hasMorePages:i<Math.max(1,Math.ceil(e/t)),hasPages:e>t}}var ft=i=>typeof i=="number"?i:parseFloat(i);var pr=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var Ne=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var ht=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var yr=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 ye=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 fr=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var qe=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var vt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var hr=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var gt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var gr=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 br=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 Tr=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var bt=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 P=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 J=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 wr=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 Sr=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 Nr=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 qr=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 Cr=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 $t=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 Ge=class extends S{constructor(e,r=false){super(r?"union all":"union");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="union";this.file="union";this.query=e,this.isAll=r;}};var Tt=class extends S{constructor(e,r,n){e==="normal"&&(e="");super("with");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="with";this.file="with";this.alias=r,this.body=n,this.clause=e;}};var wt=class extends S{constructor(e,r=false){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e;}};var Ye=class extends S{constructor(e,r,n=false,o,s,a=false){super("having",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="having";this.file="having";this.column=e,this.chainsWith=`${r} `,this.isNegated=n,this.operator=o,this.value=s;}};var Rr=class extends S{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var _r=class extends S{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var We=class extends S{constructor(e,r,n,o="extract",s=false){super("select");this.folder="select";this.file="select_json";this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.column=e,this.jsonPath=r,this.alias=n,this.jsonOperator=o,this.isRawValue=s;}};var ue=class extends S{constructor(e,r,n,o="inner",s,a=false,l){super(`${o} join`,a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="join";this.file="join";this.type="inner";this.table=e,this.left=r,this.right=n,this.on=s,this.additionalConditions=l;}};var Pt=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 Mr=class extends S{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var Or=class extends S{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var Bt=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 xr=class xr{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=xr.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 Pt(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Pt(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new Bt(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new Bt(t,"asc",true)),this}limit(t){return typeof t!="number"&&_.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new Mr(t),this}offset(t){return typeof t!="number"&&_.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new Or(t),this}};xr.EMPTY_MAP=new Map;var Ar=xr;var Ze=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 Me(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 Me(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 Dr=class extends Ar{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new ue(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new ue(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new ue(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new ue(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new ue(t,"","","cross",{operator:"="},true)),this}naturalJoinRaw(t){return this.joinNodes.push(new ue(t,"","","natural",{operator:"="},true)),this}innerJoin(t,e,r,n,o){let s=r,a=n,l=typeof n=="function"?n:o;if(!s){if(!this.model.primaryKey)throw new g("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}return this.join(typeof t=="string"?t:t.table,e,s,a,l),this}join(t,e,r,n,o){let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new g("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ue(typeof t=="string"?t:t.table,e,s,"inner",{operator:a||"="},false,u)),this}leftJoin(t,e,r,n,o){let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new g("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ue(typeof t=="string"?t:t.table,e,s,"left",{operator:a||"="},false,u)),this}rightJoin(t,e,r,n,o){let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new g("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ue(typeof t=="string"?t:t.table,e,s,"right",{operator:a||"="},false,u)),this}fullJoin(t,e,r,n,o){let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new g("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new Ze(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new ue(typeof t=="string"?t:t.table,e,s,"full",{operator:a||"="},false,u)),this}};var Ir=class extends Dr{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.dbType=r.getDbType(),this.fromNode=new V(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return e.forEach(r=>{if(Array.isArray(r)){let[a,l]=r;this.modelSelectedColumns.push(l);let u=this.resolveComputedColumn(a);if(u){this.selectNodes.push(new re(`(${u.expression}) as ${l}`,void 0,void 0,true));return}let d=U(a,this.model.databaseCaseConvention);this.selectNodes.push(new re(d,l));return}let n=r;this.modelSelectedColumns.push(n);let o=this.resolveComputedColumn(n);if(o){this.selectNodes.push(new re(`(${o.expression}) as ${o.alias}`,void 0,void 0,true));return}let s=U(n,this.model.databaseCaseConvention);this.selectNodes.push(new re(s));}),this}selectRaw(e){return this.selectNodes.push(new re(e,void 0,void 0,true)),this}selectFunc(e,r,n){return this.selectNodes.push(new re(r,n,e)),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}resolveComputedColumn(e){let r=this.model.getColumnsByName?.();if(!r||r.size===0)return;let n=e.includes(".")?e.split(".").pop():e,o=r.get(n);if(o?.expression)return {expression:o.expression,alias:o.databaseName||n}}clearFrom(){return this.fromNode=new V(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new V(e),this}distinct(){return this.distinctNode=new Rr,this}distinctOn(...e){return this.distinctOnNode=new _r(e),this}selectJson(e,r,n){return this.selectNodes.push(new We(e,r,n,"extract")),this}selectJsonText(e,r,n){return this.selectNodes.push(new We(e,r,n,"extract_text")),this}selectJsonArrayLength(e,r,n){return this.selectNodes.push(new We(e,r,n,"array_length")),this}selectJsonKeys(e,r,n){return this.selectNodes.push(new We(e,r,n,"object_keys")),this}selectJsonRaw(e,r){return this.selectNodes.push(new We(e,"",r,"raw",true)),this}};var Er=class extends Ir{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 k&&n===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof k||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 k&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof k||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof k)&&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 k&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof k||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof k)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new M(e,"or",false,o,s)),this}whereColumn(e,r,n){return this.andWhereColumn(e,r,n)}andWhereColumn(e,r,n){let o="=",s;return n!==void 0?(o=r,s=n):s=r,this.whereNodes.push(new M(e,"and",false,o,new x(s))),this}orWhereColumn(e,r,n){let o="=",s;return n!==void 0?(o=r,s=n):s=r,this.whereNodes.push(new M(e,"or",false,o,new x(s))),this}whereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof k&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof k||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof k)&&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 k&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof k||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof k)&&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 k&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof k||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof k)&&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 k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new we("","exists",r.extractQueryNodes(),"and")),this}orWhereExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new we("","exists",r.extractQueryNodes(),"or")),this}whereNotExists(e){return this.andWhereNotExists(e)}andWhereNotExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new we("","not exists",r.extractQueryNodes(),"and")),this}orWhereNotExists(e){let r=e instanceof k?e:new k(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new we("","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 Ye(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 Ye(e,"or",false,o,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Ye(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Ye(e,"or",false,"=",[],true)),this}buildSubQuery(e){if(e instanceof k)return e;let r=new k(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 we(e,r,o.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new we(e,r,o.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new k(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new Me(r.whereNodes,"and");return this.whereNodes.push(n),this}orWhereGroup(e){let r=new k(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new Me(r.whereNodes,"or");return this.whereNodes.push(n),this}};var vr=class extends Er{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new le(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new le(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new le(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new le(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new le(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new le(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new le(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new le(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new le(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new le(t,"or",false,"raw",e)),this}};var k=class i extends vr{constructor(e,r){super(e,r);this.isNestedCondition=false;this._interpreterUtils=null;this.insertNode=null;this.onDuplicateNode=null;this.updateNode=null;this.deleteNode=null;this.returningNode=null;this.truncateNode=null;this.replicationMode=null;this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.astParser=new b(this.model,this.dbType);}get interpreterUtils(){return this._interpreterUtils||(this._interpreterUtils=new 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 re(a.extractQueryNodes(),n)),this}return this.selectNodes.push(new re(r.extractQueryNodes(),n)),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}clearSelect(){return super.clearSelect(),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}async exists(){return !!await this.one()}async many(){let{sql:e,bindings:r}=this.unWrap();return this.execSqlWithSlaveHandling("read",n=>G(e,r,n,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}))}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async pluck(e){return (await this.many()).map(n=>n[e])}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async oneOrFail(){let e=await this.one();if(!e)throw new g("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 mr(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 g(this.model.name+"::paginateWithCursor","ORDER_BY_REQUIRED");let n=this.orderByNodes;if(n.some(m=>m.isRawValue))throw new g(this.model.name+"::paginateWithCursor","ORDER_BY_RAW_NOT_SUPPORTED");let o=n.map(m=>m.column),s=n[0].direction==="desc"?"<":">";if(r){let m=Array.isArray(r.value)?r.value:[r.value];this.andWhere(p=>{for(let h=0;h<o.length;h++){let y=h;p.orWhere(T=>{for(let w=0;w<y;w++)T.where(o[w],"=",m[w]);T.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 $t("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new $t("for_share",e.skipLocked,e.noWait)),this}union(e){if(typeof e=="string")return this.unionNodes.push(new Ge(e)),this;let n=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Ge(n)),this}unionAll(e){if(typeof e=="string")return this.unionNodes.push(new Ge(e,true)),this;let n=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Ge(n,true)),this}increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?ft(r.total):0}needsDerivedTableCount(){return this.groupByNodes.length>0||this.havingNodes.length>0||this.distinctNode!==null||this.distinctOnNode!==null}buildCountQuery(e="*"){if(!this.needsDerivedTableCount()){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);return}this.clearOrderBy(),this.clearLimit(),this.clearOffset();let r=this.extractQueryNodes();this.withNodes=[],this.distinctNode=null,this.distinctOnNode=null,this.clearSelect(),this.fromNode=new V(r,"g"),this.joinNodes=[],this.whereNodes=[],this.groupByNodes=[],this.havingNodes=[],this.lockQueryNodes=[],this.unionNodes=[],this.selectRaw(`count(${e}) as total`);}async getMax(e){this.clearForFunctions(),this.selectFunc("max",e,"total");let r=await this.one();return r?ft(r.total):0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?ft(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?ft(r.total):0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?ft(r.total):0}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:cr(e,r,a),data:s}}table(e,r){if(typeof e=="function"){if(!r)throw new g("QueryBuilder::table","MISSING_ALIAS_FOR_SUBQUERY");let n=new i(this.model,this.sqlDataSource),o=e(n),a=(o!=null&&"extractQueryNodes"in o?o:n).extractQueryNodes();return this.fromNode=new V(a,r),this}return this.fromNode=new V(e,r),this}with(e,r){let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new Tt("normal",e,s.extractQueryNodes())),this}withRecursive(e,r){let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new Tt("recursive",e,s.extractQueryNodes())),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new g("QueryBuilder::withMaterialized","MATERIALIZED_CTE_NOT_SUPPORTED",new Error("MATERIALIZED CTE is only supported by postgres"));let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new Tt("materialized",e,s.extractQueryNodes())),this}insert(e,r){let n=Object.fromEntries(Object.keys(e).map(s=>[s,e[s]])),o=!r||r.length===0;return this.insertNode=new X(this.fromNode,[this.interpreterUtils.stripComputedFromData(n)],r,o),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:s,values:a}=this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert",this.dbType),l=Object.fromEntries(s.map((p,h)=>[p,a[h]]));this.insertNode=new X(this.fromNode,[l],r,o);let{sql:u,bindings:d}=this.astParser.parse([this.insertNode]),c=await this.getSqlDataSource("write"),m=await G(u,d,c,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[e]}});if(!o)return Array.isArray(m)&&m.length?m[0]:m})}insertMany(e,r){let n=e.map(s=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(s).map(a=>[a,s[a]])))),o=!r||r.length===0;return this.insertNode=new X(this.fromNode,n,r,o),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{if(!e.length)return o?void 0:[];let s=await Promise.all(e.map(async c=>{let{columns:m,values:p}=this.interpreterUtils.prepareColumns(Object.keys(c),Object.values(c),"insert",this.dbType);return Object.fromEntries(m.map((h,y)=>[h,p[y]]))}));this.insertNode=new X(this.fromNode,s,r,o);let{sql:a,bindings:l}=this.astParser.parse([this.insertNode]),u=await this.getSqlDataSource("write"),d=await G(a,l,u,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:s}});if(!o)return d})}upsert(e,r,n={updateOnConflict:true}){let o=this.interpreterUtils.filterComputedColumns(Object.keys(e)),s=Object.keys(r),a=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(e).map(l=>[l,e[l]])));return this.insertNode=new X(new V(this.model.table),[a],void 0,true),this.onDuplicateNode=new Se(this.model.table,s,o,n.updateOnConflict??true?"update":"ignore",n.returning),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:u}=this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert",this.dbType),d=Object.fromEntries(l.map((y,T)=>[y,u[T]]));if(this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw([d],s,o,n,[e]);let{sql:c,bindings:m}=this.astParser.parse([new X(new V(this.model.table),[d],void 0,true),new Se(this.model.table,s,o,n.updateOnConflict??true?"update":"ignore",n.returning)]),p=await this.getSqlDataSource("write"),h=await G(c,m,p,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:[e]}});return Array.isArray(h)?h:[h]})}upsertMany(e,r,n,o={updateOnConflict:true}){let s=this.interpreterUtils.filterComputedColumns(r),a=n.map(l=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(l).map(u=>[u,l[u]]))));return this.insertNode=new X(new V(this.model.table),a,void 0,true),this.onDuplicateNode=new Se(this.model.table,e,s,o.updateOnConflict??true?"update":"ignore",o.returning),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let l=[];if(await Promise.all(n.map(async p=>{let{columns:h,values:y}=this.interpreterUtils.prepareColumns(Object.keys(p),Object.values(p),"insert",this.dbType),T=Object.fromEntries(h.map((w,N)=>[w,y[N]]));l.push(T);})),this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw(l,e,s,o,n);let{sql:u,bindings:d}=this.astParser.parse([new X(new V(this.model.table),l,void 0,true),new Se(this.model.table,e,s,o.updateOnConflict??true?"update":"ignore",o.returning)]),c=await this.getSqlDataSource("write"),m=await G(u,d,c,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:n}});return Array.isArray(m)?m:[m]})}async executeMssqlMergeRaw(e,r,n,o,s){if(!e.length)return [];let a=Object.keys(e[0]),l=this.interpreterUtils.formatStringColumn("mssql",this.model.table),u=L=>this.interpreterUtils.formatStringColumn("mssql",L),d=[],c=e.map(L=>`select ${a.map(v=>(d.push(L[v]),`@${d.length}`)).join(", ")}`),m=a.map(u).join(", "),p=c.join(" union all "),h=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(", "),T=a.map(u).join(", "),w=a.map(L=>`source.${u(L)}`).join(", "),N=o.returning&&o.returning.length?o.returning.map(L=>`inserted.${u(L)}`).join(", "):a.map(L=>`inserted.${u(L)}`).join(", "),A=(o.updateOnConflict??true)&&y?`when matched then update set ${y}`:"",B=`merge into ${l} as target using (${p}) as source (${m}) on ${h} ${A} when not matched then insert (${T}) values (${w}) output ${N};`,O=await this.getSqlDataSource("write"),I=await G(B,d,O,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(I)?I:[I]}update(e,r){let n=this.interpreterUtils.stripComputedFromData(e),o=Object.keys(n),s=Object.values(n);this.updateNode=new De(this.fromNode,o,s),this.returningNode=this.buildReturningNode("update",r);let a=this.returningNode!==null;return new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:u}=this.interpreterUtils.prepareColumns(o,s,"update",this.dbType);this.updateNode=new De(this.fromNode,l,u);let{sql:d,bindings:c}=this.astParser.parse(this.withReturningNode([this.updateNode,...this.whereNodes,...this.joinNodes])),m=await this.getSqlDataSource("write");return G(d,c,m,this.dbType,a?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:a?"fetch":"affectedRows"}})})}buildReturningNode(e,r){return !r?.length||!this.interpreterUtils.dialectEmitsReturning(this.dbType)?null:new pt(r,e==="delete"?"deleted":"inserted")}withReturningNode(e){if(!this.returningNode)return e;if(this.dbType==="mssql"){let[r,...n]=e;return [r,this.returningNode,...n]}return [...e,this.returningNode]}truncate(){return this.truncateNode=new wt(this.fromNode),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:e,bindings:r}=this.astParser.parse([this.truncateNode]),n=await this.getSqlDataSource("write");await G(e,r,n,this.dbType,"rows");})}delete(e){this.deleteNode=new ct(this.fromNode),this.returningNode=this.buildReturningNode("delete",e);let r=this.returningNode!==null;return new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:n,bindings:o}=this.astParser.parse(this.withReturningNode([this.deleteNode,...this.whereNodes,...this.joinNodes])),s=await this.getSqlDataSource("write");return G(n,o,s,this.dbType,r?"rows":"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:r?"fetch":"affectedRows"}})})}softDelete(e={}){let{column:r="deletedAt",value:n=nt()}=e||{};return this.updateNode=new De(this.fromNode,[r],[n]),new Y(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:o,values:s}=this.interpreterUtils.prepareColumns([r],[n],"update",this.dbType);this.updateNode=new De(this.fromNode,o,s);let{sql:a,bindings:l}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),u=await this.getSqlDataSource("write");return G(a,l,u,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return it(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),n=lt(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${n}`:n,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new re("*")]);let{sql:e,bindings:r}=this.astParser.parse(this.extractQueryNodes());return {sql:this.withQuery?`${this.withQuery} ${e}`:e,bindings:[...r||[]]}}clone(){let e=new i(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=F(this.modelSelectedColumns),e.distinctNode=F(this.distinctNode),e.distinctOnNode=F(this.distinctOnNode),e.selectNodes=F(this.selectNodes),e.withQuery=F(this.withQuery),e.joinNodes=F(this.joinNodes),e.whereNodes=F(this.whereNodes),e.groupByNodes=F(this.groupByNodes),e.havingNodes=F(this.havingNodes),e.orderByNodes=F(this.orderByNodes),e.lockQueryNodes=F(this.lockQueryNodes),e.unionNodes=F(this.unionNodes),e.withNodes=F(this.withNodes),e.fromNode=F(this.fromNode),e.limitNode=F(this.limitNode),e.offsetNode=F(this.offsetNode),e.returningNode=F(this.returningNode),e.isNestedCondition=this.isNestedCondition,e}clear(){let e=new i(this.model,this.sqlDataSource);return this.fromNode.alias&&e.table(e.model.table,this.fromNode.alias),e}clearLockQuery(){return this.lockQueryNodes=[],this}clearUnionQuery(){return this.unionNodes=[],this}clearWithQuery(){return this.withNodes=[],this}extractQueryNodes(){return this.selectNodes.length||(this.selectNodes=[new re("*")]),this.insertNode?[this.insertNode,this.onDuplicateNode].filter(Boolean):this.updateNode?this.withReturningNode([this.updateNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode]).filter(Boolean):this.deleteNode?this.withReturningNode([this.deleteNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode]).filter(Boolean):this.truncateNode?[this.truncateNode]:[...this.withNodes,this.distinctNode,this.distinctOnNode,...this.selectNodes,this.fromNode,...this.joinNodes,...this.whereNodes,...this.groupByNodes,...this.havingNodes,...this.orderByNodes,this.limitNode,this.offsetNode,...this.lockQueryNodes,...this.unionNodes].filter(Boolean)}clearForFunctions(){return this.clearSelect(),this.clearGroupBy(),this.clearOrderBy(),this.clearLimit(),this.clearOffset(),this}isMssqlTransaction(){return this.sqlDataSource.type==="mssql"&&!!this.sqlDataSource.sqlConnection}async executePaginateQueries(e,r){if(this.isMssqlTransaction()){let n=await e(),o=await r();return [n,o]}return Promise.all([e(),r()])}async getSqlDataSource(e){return this.replicationMode?this.replicationMode==="master"?this.sqlDataSource:e==="write"?this.sqlDataSource:this.sqlDataSource.getSlave()||this.sqlDataSource:e==="read"?this.sqlDataSource.getSlave()||this.sqlDataSource:this.sqlDataSource}async execSqlWithSlaveHandling(e,r){let n=await this.getSqlDataSource(e);if(!(n!==this.sqlDataSource))return r(n);try{return await r(n)}catch(s){let a=s instanceof Error?s:new Error(String(s)),l=this.sqlDataSource.getOnSlaveServerFailure();if(l)return await l(a,{host:n.host,port:n.port,username:n.username,password:n.password,database:n.database,type:n.getDbType()}),await r(this.sqlDataSource);throw a}}};function ry(i,t){return t.strategy&&t.strategy!=="auto"?t.strategy:Yf(i)}function Yf(i){let{parentCount:t,relationType:e,hasLimitOffset:r}=i;return r&&(e==="hasMany"||e==="manyToMany")?"batched":t===1?"join":e==="manyToMany"?typeof t=="number"&&t<=10?"join":"batched":typeof t=="number"&&t<10?"join":"batched"}var hl=te(),Le=class i extends k{constructor(e,r){super(e,r);this.loadOptions={strategy:"auto"};this.sqlModelManagerUtils=new Et(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 re(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 g(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return r}async many(){await this.model.beforeFetch?.(this),this.expandModelSelectColumns();let r=await super.many();if(!r.length)return [];let n=pe(r,this.model,this.modelSelectedColumns);if(!n)return [];let o=Array.isArray(n)?n:[n];return this.relationQueryBuilders.length&&await this.processRelationsWithStrategy(o),o}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async*chunk(e){let r=0;for(;;){let n=await this.limit(e).offset(r).many();if(!n.length)break;yield n,r+=n.length;}}async stream(e={}){await this.model.beforeFetch?.(this),this.expandModelSelectColumns();let{sql:r,bindings:n}=this.unWrap(),o=await this.getSqlDataSource("read");return await mr(r,n,o,e,{onData:async(a,l)=>{let u=pe([l],this.model,this.modelSelectedColumns);u&&(this.relationQueryBuilders.length&&await this.processRelationsRecursively([u]),a.write(u));}})}async paginateWithCursor(e,r){return super.paginateWithCursor(e,r)}insert(e,r={}){return this.getModelManager(r.trx).insert(e,{returning:r.returning})}insertMany(e,r={}){return this.getModelManager(r.trx).insertMany(e,{returning:r.returning})}upsert(e,r,n={updateOnConflict:true}){let o=this.getModelManager(n.trx),s=Object.keys(e),a=Object.keys(r),l={...e,...r};return o.upsertMany(s,a,[l],{updateOnConflict:n.updateOnConflict??true,returning:n.returning}).then(u=>Array.isArray(u)?u[0]:u)}upsertMany(e,r,n={updateOnConflict:true}){let o=this.getModelManager(n.trx),s=r.length>0?Object.keys(r[0]):[];return o.upsertMany(e,s,r,{updateOnConflict:n.updateOnConflict??true,returning:n.returning})}getModelManager(e){let r=e?e.sql:this.sqlDataSource.getTransactionBoundSqlDataSource()??this.sqlDataSource;return new ze(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 g(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 g(`${this.model.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let l=U(a.leftForeignKey,s.caseConvention||this.model.databaseCaseConvention),u=U(a.rightForeignKey,s.caseConvention||this.model.databaseCaseConvention),d=n.map((p,h)=>({[l]:r[this.model.primaryKey],[u]:p[a.model.primaryKey],...o?o(p,h):{}}));class c extends ae{static get table(){return a.throughModel}}c.databaseCaseConvention="preserve",c.modelCaseConvention="preserve",await new ze(c,s.trx?s.trx.sql:this.sqlDataSource).insertMany(d);}truncate(){return super.truncate()}update(e,r={}){let n=r.returning,o=super.update(e,n);return new Y(()=>o.unWrap(),()=>o.toSql(),()=>o.toQuery(),async()=>{if(!n||!this.returningNode)return o;let s=await o;return pe(s,this.model,n)})}softDelete(e={}){let r=super.softDelete(e);return new Y(()=>r.unWrap(),()=>r.toSql(),()=>r.toQuery(),async()=>r)}delete(e={}){let r=e.returning,n=super.delete(r);return new Y(()=>n.unWrap(),()=>n.toSql(),()=>n.toQuery(),async()=>{if(!r||!this.returningNode)return n;let o=await n;return pe(o,this.model,r)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?+r.total:0}async getMax(e){this.clearForFunctions(),this.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:cr(e,r,a),data:s}}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof k)&&typeof e[1]=="string"){let[r,n]=e;return super.select(r,n),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}load(e,r,n){let o,s={strategy:"auto"};typeof r=="function"?(o=r,n&&(s=n)):r&&typeof r=="object"&&(s=r);let a=this.sqlModelManagerUtils.getRelationFromModel(e),l=new i(a.model,this.sqlDataSource);return l.relation=a,l.loadOptions=s,o?.(l),this.relationQueryBuilders.push(l),this}clearRelations(){return this.relationQueryBuilders=[],this}havingRelated(e,r,n){return this.andHavingRelated(e,r,n)}andHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.whereExists(d),this}orHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.orWhereExists(d),this}notHavingRelated(e,r,n){return this.andNotHavingRelated(e,r,n)}andNotHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.whereNotExists(d),this}orNotHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.orWhereNotExists(d),this}clone(){let e=super.clone();return e.relationQueryBuilders=F(this.relationQueryBuilders),e}async processRelationsRecursively(e){await Promise.all(this.relationQueryBuilders.filter(r=>r.isRelationQueryBuilder).map(async r=>{let n=await this.getRelatedModelsForRelation(r,r.relation,e);this.mapRelatedModelsToModels(r.relation,e,n);}));}async processRelationsWithStrategy(e){let r=e.length,n=this.relationQueryBuilders.filter(s=>s.isRelationQueryBuilder),o=async s=>{let a=ry({parentCount:r,relationType:s.relation.type,hasLimitOffset:!!s.limitNode||!!s.offsetNode,hasOrderBy:s.orderByNodes.length>0},s.loadOptions),l=s.relationQueryBuilders.length>0;a==="join"&&!l?await this.loadRelationViaJoin(s,e):await this.loadRelationViaBatch(s,e);};if(this.dbType==="mssql"){for(let s of n)await o(s);return}await Promise.all(n.map(o));}async loadRelationViaJoin(e,r){let n=e.relation,o=e.loadOptions.joinSeparator||"__",a=await this.buildJoinQuery(e,n,o).many();this.mapJoinedResultsToModels(a,r,n,o);}buildJoinQuery(e,r,n){let o=new i(this.model,this.sqlDataSource);if(this.modelSelectedColumns.length>0)for(let s of this.selectNodes)o.selectNodes.push(F(s));else for(let[s,a]of this.model.getColumnsByDatabaseName())a.expression||o.selectRaw(`${this.model.table}.${s}`);for(let s of this.whereNodes){let a=F(s);this.qualifyWhereNodeColumns(a,this.model.table),o.whereNodes.push(a);}for(let s of this.groupByNodes)o.groupByNodes.push(F(s));for(let s of this.orderByNodes)o.orderByNodes.push(F(s));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(o.limitNode=F(this.limitNode)),this.offsetNode&&(o.offsetNode=F(this.offsetNode))),r.type){case "hasOne":case "hasMany":o.leftJoin(r.model.table,`${this.model.table}.${this.model.primaryKey}`,`${r.model.table}.${r.foreignKey}`);break;case "belongsTo":o.leftJoin(r.model.table,`${this.model.table}.${r.foreignKey}`,`${r.model.table}.${r.model.primaryKey}`);break;case "manyToMany":{let s=r;o.leftJoin(s.throughModel,`${this.model.table}.${this.model.primaryKey}`,`${s.throughModel}.${s.leftForeignKey}`),o.leftJoin(s.model.table,`${s.throughModel}.${s.rightForeignKey}`,`${s.model.table}.${s.model.primaryKey}`);break}}this.selectRelationColumnsWithAlias(o,r,e,n);for(let s of e.whereNodes)o.whereNodes.push(F(s));for(let s of e.orderByNodes)o.orderByNodes.push(F(s));return o}selectRelationColumnsWithAlias(e,r,n,o){let s=r.columnName,a=r.model,l=a.getColumnsByName(),u=a.getColumnsByDatabaseName(),d=n.selectNodes.filter(m=>typeof m.column=="string"),c=d.some(m=>m.column==="*"||m.column.endsWith(".*"));if(d.length===0||c)for(let[m,p]of u)e.selectRaw(`${a.table}.${m} as ${s}${o}${p.columnName}`);else for(let m of d){let p=m.column,h=p.includes(".")?p.split(".").pop():p,y=u.get(h)||l.get(h),T=y?.databaseName??h,w=m.alias??y?.columnName??h;e.selectRaw(`${a.table}.${T} as ${s}${o}${w}`);}}mapJoinedResultsToModels(e,r,n,o){let{columnName:s,type:a}=n,l=n.model.getColumnsByName();if(a==="hasMany"||a==="manyToMany"){let u=new Map;e.forEach(d=>{let c=d[this.model.primaryKey];u.has(c)||u.set(c,[]);let m=this.extractRelationDataFromRow(d,s,o);m&&(this.serializeRelationData(m,l),u.get(c).push(m));}),r.forEach(d=>{let c=d[this.model.primaryKey];d[s]=u.get(c)||[];});}else {let u=new Map;e.forEach(d=>{let c=d[this.model.primaryKey];if(!u.has(c)){let m=this.extractRelationDataFromRow(d,s,o);m&&(this.serializeRelationData(m,l),u.set(c,m));}}),r.forEach(d=>{let c=d[this.model.primaryKey];d[s]=u.get(c)||null;});}}extractRelationDataFromRow(e,r,n){let o=`${r}${n}`,s={},a=false,l=false;for(let u of Object.keys(e))if(u.startsWith(o)){let d=u.substring(o.length);s[d]=e[u],a=true,e[u]!==null&&e[u]!==void 0&&(l=true);}return a&&l?s:null}qualifyWhereNodeColumns(e,r){if(e instanceof M)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof we)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof Me)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 g(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let o=new Map;n.forEach(m=>{let p=m[e.foreignKey];p&&o.set(String(p),m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=null;return}let h=o.get(String(p));m[e.columnName]=h||null;});break;case "belongsTo":let s=new Map;n.forEach(m=>{if(!e.model.primaryKey)throw new g(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let p=m[e.model.primaryKey];p&&s.set(String(p),m);}),r.forEach(m=>{let p=m[e.foreignKey];if(!p){m[e.columnName]=null;return}let h=s.get(String(p));m[e.columnName]=h||null;});break;case "hasMany":if(!this.model.primaryKey)throw new g(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;n.forEach(m=>{let p=m[e.foreignKey];if(!p)return;let h=String(p);a.has(h)||a.set(h,[]),a.get(h).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let h=a.get(String(p))||[];m[e.columnName]=h;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new g(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)||U(d,this.model.modelCaseConvention);n.forEach(m=>{let p=m[c];if(p==null)return;let h=String(p);u.has(h)||u.set(h,[]),delete m[c],u.get(h).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let h=u.get(String(p))||[];m[e.columnName]=h;});break;default:throw new g(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=Pe(hl.crypto.randomBytes(6)),u=`${r.model.table}_cte_${l}`,d=e.orderByNodes.map(I=>I.isRawValue?I.column:`${this.interpreterUtils.formatStringColumn(this.dbType,I.column)} ${I.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let c=e.with(u,I=>I.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(I=>En(I,u,e.model.table));return c.select(...m).table(u);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new g(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!n.length)return e;let h=e.limitNode?.limit,y=e.offsetNode?.offset,T=e.modelSelectedColumns.length?e.modelSelectedColumns.map(I=>I.includes(".")?I:`${r.model.table}.${I}`):[`${r.model.table}.*`];if(!h&&!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=Pe(hl.crypto.randomBytes(6)),N=`${r.model.table}_cte_${w}`,C=e.orderByNodes.map(I=>{if(I.isRawValue)return I.column;let L=I.column.includes(".")?I.column:`${r.model.table}.${I.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,L)} ${I.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let A=`${Pe(hl.crypto.randomBytes(6))}_left_foreign_key`,B=e.with(N,I=>I.select(...T).select([`${p.throughModel}.${p.leftForeignKey}`,A]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${C}) as rn_${w}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o));h&&B.whereRaw(`rn_${w} <= ${h+(y||0)}`),y&&B.whereRaw(`rn_${w} > ${y}`);let O=T.map(I=>En(I,N,e.model.table));return B.select(...O).select([`${N}.${A}`,p.leftForeignKey]).table(N);default:throw new g(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new g(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 g(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);default:throw new g(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 g(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 g(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 g(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 g(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}};var gl=class{constructor(t,e,r){this.sqlDataSource=t,this.typeofModel=e,this.modelData=r;}merge(t){this.modelData={...this.modelData,...t};}getQueryBuilder(){return new Le(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:["*"]})}},Zf=(i,t,e)=>new gl(i,t,e);var St=new Map,Fe=new Map,$r=class{async get(t){return St.get(t)}async set(t,e,r){let n=Fe.get(t);if(n&&(clearTimeout(n),Fe.delete(t)),St.set(t,e),r){let o=setTimeout(()=>{St.delete(t),Fe.delete(t);},r);Fe.set(t,o);}}async invalidate(t){let e=Fe.get(t);e&&(clearTimeout(e),Fe.delete(t)),St.delete(t);}async invalidateAll(t){let e=St.keys();for(let r of e)if(r.startsWith(t)){let n=Fe.get(r);n&&(clearTimeout(n),Fe.delete(r)),St.delete(r);}}};de();var ny=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 Q("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=te(),$={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},Xf=()=>{try{if(!ee.fs.exists(".env"))return $;let i=ee.fs.readFileSync(".env");if(!i)return $;new TextDecoder().decode(i).split(`
138
138
  `).forEach(r=>{let[n,o]=r.split("="),s=n.trim(),a=o.trim();switch(s){case "DB_TYPE":$.DB_TYPE||($.DB_TYPE=a);break;case "DB_HOST":$.DB_HOST||($.DB_HOST=a);break;case "DB_PORT":$.DB_PORT||($.DB_PORT=a);break;case "DB_USER":$.DB_USER||($.DB_USER=a);break;case "DB_PASSWORD":$.DB_PASSWORD||($.DB_PASSWORD=a);break;case "DB_DATABASE":$.DB_DATABASE||($.DB_DATABASE=a);break;case "MIGRATION_PATH":$.MIGRATION_PATH||($.MIGRATION_PATH=a||"database/migrations");break;case "REDIS_HOST":$.REDIS_HOST||($.REDIS_HOST=a);break;case "REDIS_PORT":$.REDIS_PORT||($.REDIS_PORT=a);break;case "REDIS_USERNAME":$.REDIS_USERNAME||($.REDIS_USERNAME=a);break;case "REDIS_PASSWORD":$.REDIS_PASSWORD||($.REDIS_PASSWORD=a);break;case "REDIS_DATABASE":$.REDIS_DATABASE||($.REDIS_DATABASE=a);break;case "MONGO_URL":$.MONGO_URL||($.MONGO_URL=a);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":$.MSSQL_TRUST_SERVER_CERTIFICATE||($.MSSQL_TRUST_SERVER_CERTIFICATE=a==="true");break}});}catch{}finally{return $}},E=Xf();var Nt=class{constructor(t){switch(this.type=t?.type||E.DB_TYPE,this.type){case "mongo":this.handleMongoSource(t);break;case "cockroachdb":this.handleCockroachdbSource(t);break;case "postgres":this.handlePostgresSource(t);break;case "mariadb":case "mysql":this.handleMysqlSource(t);break;case "sqlite":this.handleSqliteSource(t);break;case "mssql":this.handleMssqlSource(t);break;default:throw new g(`Invalid database type: ${this.type}, please provide a valid database type in your input or in the .env file with the key DB_TYPE
139
- Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}let e=ur(this.logs);e?.customLogger&&_.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||E.DB_DATABASE||":memory:",this.logs=t?.logs||E.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||E.MONGO_URL,this.logs=t?.logs||E.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=1433);}};var fe=class{constructor(t){this.options=t;}static async createDriver(t){throw new g("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};de();var kt=class kt extends fe{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new kt(this.mongoClient);let e=await import('mongodb').catch(()=>{throw new Q("mongodb")});if(this.mongoClient=e.default??e,!this.mongoClient)throw new Q("mongodb");return new kt(this.mongoClient)}};kt.mongoClient=null;var Pr=kt;de();var Kt=class Kt extends fe{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new Kt(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new Q("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new Q("mssql");return new Kt(this.mssqlClient)}};Kt.mssqlClient=null;var Br=Kt;de();var Qt=class Qt extends fe{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new Qt(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new Q("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new Q("mysql2");return new Qt(this.mysqlClient)}};Qt.mysqlClient=null;var kr=Qt;de();var Lt=class Lt extends fe{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new Lt(this.pgClient);let e=await import('pg').catch(()=>{throw new Q("pg")});if("default"in e&&(e.default,this.pgClient=e.default??e),!this.pgClient)throw new Q("pg");return new Lt(this.pgClient)}};Lt.pgClient=null;var Kr=Lt;de();var Wt=class Wt extends fe{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new Wt(this.sqlite3Client);let e=await import('sqlite3').catch(()=>{throw new Q("sqlite3")});if(this.sqlite3Client=e.default??e,!this.sqlite3Client)throw new Q("sqlite3");return new Wt(this.sqlite3Client)}};Wt.sqlite3Client=null;var Qr=Wt;var oe=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await kr.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await Kr.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await Qr.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await Pr.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await Br.createDriver(),this.mssqlDriver;default:throw new g(`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}}};oe.mysqlDriver=null,oe.pgDriver=null,oe.sqliteDriver=null,oe.mssqlDriver=null,oe.mongodbDriver=null;var bl=Symbol("mongoProperties");function Lr(){return (i,t)=>{let e=K.getMetadata(bl,i)||[];e.push(t),K.defineMetadata(bl,e,i);}}function oy(i){return K.getMetadata(bl,i.prototype)||[]}function sy(){return {$annotations:{}}}var qt=class extends ke{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}};Ll([Lr()],qt.prototype,"id");function eh(i){return typeof i!="function"||!i.prototype}function th(i){let t={id:i._id?.toString()};for(let e of Object.keys(i))e!=="_id"&&(t[e]=i[e]);return t}async function je(i,t,e){if(!t)return null;if(eh(i))return th(t);let r=sy(),n=oy(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=U(o,i.modelCaseConvention);r.$annotations[a]=t[o];return}let s=U(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=U(o,i.modelCaseConvention);r[s]=null;}})),r}async function Wr(i,t,e){return (await Promise.all(t.map(async n=>await je(i,n,e)))).filter(n=>n!==null)}var Fr=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 je(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 g("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 Wr(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 je(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 Wr(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 Wr(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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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 jr=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 g("CollectionManager::findOneOrFail No record found","ROW_NOT_FOUND");return r}query(){return new Fr(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 je(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 je(this.collection,s)))}async updateRecord(t){await this.ensureInitialized();let e=t.id;if(!e)throw new g("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 g("CollectionManager::updateRecord","ROW_NOT_FOUND");let o=await this.collectionInstance.findOne({_id:new r.ObjectId(e)},{session:this.session});return await je(this.collection,o)}async deleteRecord(t){await this.ensureInitialized();let e=t.id;if(!e)throw new g("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 Tl=class extends Nt{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=E.MONGO_URL);}async connect(){if(!this.url)throw new g("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 oe.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 g("MongoDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.connect().finally(()=>{this.connecting=null;})),await this.connecting;}}getCurrentConnection(){if(!this.mongoClient)throw new g("MongoDataSource::getCurrentConnection mongo database connection not established","CONNECTION_NOT_ESTABLISHED");return this.mongoClient}startSession(){if(!this.mongoClient)throw new g("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 g("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 jr(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}}};de();var wl=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 g("RedisDataSource::ioredis connection not established","CONNECTION_NOT_ESTABLISHED");return this.ioRedisConnection}async connect(){if(this.isConnected)return;let t=this.inputOptions.port||+E.REDIS_PORT||6379,e=await import('ioredis').catch(()=>{throw new Q("ioredis")});this.ioRedisConnection=new e.default({host:this.inputOptions.host||E.REDIS_HOST,username:this.inputOptions.username||E.REDIS_USERNAME,port:t,password:this.inputOptions.password||E.REDIS_PASSWORD,...this.inputOptions});try{await this.ioRedisConnection.ping(),this.isConnected=!0;}catch{throw new g("RedisDataSource::connect","CONNECTION_NOT_ESTABLISHED")}}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new g("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 g("RedisDataSource::set","SET_FAILED")}}async get(t){try{let e=await this.ioredis.get(t);return i.getValue(e)}catch{throw new g("RedisDataSource::get","GET_FAILED")}}async getBuffer(t){await this.ensureConnected();try{return await this.ioredis.getBuffer(t)}catch{throw new g("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 g("RedisDataSource::consume","GET_FAILED")}}async delete(t){await this.ensureConnected();try{await this.ioredis.del(t);}catch{throw new g("RedisDataSource::delete","DELETE_FAILED")}}async flushAll(){await this.ensureConnected();try{await this.ioredis.flushall();}catch{throw new g("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 g("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 g("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 g("RedisDataSource::rpush","RPUSH_FAILED")}}async lpop(t){try{let e=await this.ioredis.lpop(t);return i.getValue(e)}catch{throw new g("RedisDataSource::lpop","LPOP_FAILED")}}async rpop(t){try{let e=await this.ioredis.rpop(t);return i.getValue(e)}catch{throw new g("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 g("RedisDataSource::lrange","LRANGE_FAILED")}}async llen(t){await this.ensureConnected();try{return await this.ioredis.llen(t)}catch{throw new g("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 g("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 g("RedisDataSource::hmset","HMSET_FAILED")}}async hget(t,e){try{let r=await this.ioredis.hget(t,e);return i.getValue(r)}catch{throw new g("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 g("RedisDataSource::hgetall","HGETALL_FAILED")}}async hmget(t,...e){try{return (await this.ioredis.hmget(t,...e)).map(n=>i.getValue(n))}catch{throw new g("RedisDataSource::hmget","HMGET_FAILED")}}async hdel(t,...e){await this.ensureConnected();try{return await this.ioredis.hdel(t,...e)}catch{throw new g("RedisDataSource::hdel","HDEL_FAILED")}}async hexists(t,e){await this.ensureConnected();try{return await this.ioredis.hexists(t,e)}catch{throw new g("RedisDataSource::hexists","HEXISTS_FAILED")}}async hkeys(t){await this.ensureConnected();try{return await this.ioredis.hkeys(t)}catch{throw new g("RedisDataSource::hkeys","HKEYS_FAILED")}}async hlen(t){await this.ensureConnected();try{return await this.ioredis.hlen(t)}catch{throw new g("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 g("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 g("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 g("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 g("RedisDataSource::sismember","SISMEMBER_FAILED")}}async scard(t){await this.ensureConnected();try{return await this.ioredis.scard(t)}catch{throw new g("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 g("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 g("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 g("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 g("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 g("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 g("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 g("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 g("RedisDataSource::zscore","ZSCORE_FAILED")}}async zcard(t){await this.ensureConnected();try{return await this.ioredis.zcard(t)}catch{throw new g("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 g("RedisDataSource::subscribe","SUBSCRIBE_FAILED")}}async unsubscribe(...t){await this.ensureConnected();try{await this.ioredis.unsubscribe(...t);}catch{throw new g("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 g("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 g("RedisDataSource::psubscribe","PSUBSCRIBE_FAILED")}}async punsubscribe(...t){await this.ensureConnected();try{await this.ioredis.punsubscribe(...t);}catch{throw new g("RedisDataSource::punsubscribe","PUNSUBSCRIBE_FAILED")}}async exists(t){await this.ensureConnected();try{return await this.ioredis.exists(t)}catch{throw new g("RedisDataSource::exists","EXISTS_FAILED")}}async expire(t,e){await this.ensureConnected();try{return await this.ioredis.expire(t,e)}catch{throw new g("RedisDataSource::expire","EXPIRE_FAILED")}}async expireat(t,e){await this.ensureConnected();try{return await this.ioredis.expireat(t,e)}catch{throw new g("RedisDataSource::expireat","EXPIREAT_FAILED")}}async pexpire(t,e){await this.ensureConnected();try{return await this.ioredis.pexpire(t,e)}catch{throw new g("RedisDataSource::pexpire","PEXPIRE_FAILED")}}async ttl(t){await this.ensureConnected();try{return await this.ioredis.ttl(t)}catch{throw new g("RedisDataSource::ttl","TTL_FAILED")}}async pttl(t){await this.ensureConnected();try{return await this.ioredis.pttl(t)}catch{throw new g("RedisDataSource::pttl","PTTL_FAILED")}}async persist(t){await this.ensureConnected();try{return await this.ioredis.persist(t)}catch{throw new g("RedisDataSource::persist","PERSIST_FAILED")}}async keys(t){await this.ensureConnected();try{return await this.ioredis.keys(t)}catch{throw new g("RedisDataSource::keys","KEYS_FAILED")}}async rename(t,e){await this.ensureConnected();try{return await this.ioredis.rename(t,e)}catch{throw new g("RedisDataSource::rename","RENAME_FAILED")}}async type(t){await this.ensureConnected();try{return await this.ioredis.type(t)}catch{throw new g("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)}};de();var Ur={string:"string",varchar:"string",char:"string",text:"textarea",longtext:"textarea",mediumtext:"textarea",tinytext:"textarea",integer:"number",int:"number",smallint:"number",bigint:"number",tinyint:"number",mediumint:"number",float:"float",double:"float",decimal:"float",numeric:"float",real:"float",boolean:"boolean",bool:"boolean",date:"date",datetime:"datetime",timestamp:"datetime",time:"string",year:"number",json:"mixed",jsonb:"mixed",uuid:"string",ulid:"string",binary:"string",blob:"string",enum:"string"};var ay=null;function Xe(i,t){return t.getModelManager(i)}function iy(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=Ur[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 Ft(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 rh(){let i=await import('adminjs').catch(()=>{throw new Q("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(o){super(o),this._model=o,this._db=ay;}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=Ur[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=Ur[l]||"string";return new r({path:a.columnName,type:u,isId:a.isPrimary,isSortable:true})}async count(o){let a=Xe(this._model,this._db).query();return iy(a,o,this._model),a.getCount()}async find(o,s={}){let l=Xe(this._model,this._db).query();return iy(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(Ft(d,this._model),this))}async findOne(o){if(!this._model.primaryKey)return null;let l=await Xe(this._model,this._db).findOneByPrimaryKey(o);return l?new e(Ft(l,this._model),this):null}async findMany(o){let s=this._model.primaryKey;return s?(await Xe(this._model,this._db).query().whereIn(s,o).many()).map(u=>new e(Ft(u,this._model),this)):[]}async create(o){let a=await Xe(this._model,this._db).insert(o,{returning:["*"]});return Ft(a,this._model)}async update(o,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=Xe(this._model,this._db);if(!await l.findOneByPrimaryKey(o))throw new Error("Record not found");let d=await l.updateRecord(o,s,{returning:["*"]});return Ft(d,this._model)}async delete(o){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=Xe(this._model,this._db);await a.findOneByPrimaryKey(o)&&await a.deleteRecord(o);}}}async function nh(){let i=await import('adminjs').catch(()=>{throw new Q("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function oh(){let i=await import('adminjs').catch(()=>{throw new Q("adminjs")}),t=await rh(),e=await nh();i.default.registerAdapter({Database:e,Resource:t});}async function Sl(i,t){ay=i;let e=await import('adminjs').catch(()=>{throw new Q("adminjs")});await oh();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 ly(i,t){let{admin:e}=await Sl(i,t),r;try{r=await import('@adminjs/express');}catch{throw new Q("@adminjs/express")}let n=r.buildRouter(e);return {admin:e,router:n}}var sh=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},ih=i=>i.openApi?.required??false,ah=i=>{let t=i.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=sh(r));return e},lh=i=>{let t=i.getColumns(),e=[];for(let r of t)ih(r)&&e.push(r.columnName);return e||[]},Nl=i=>{let t=ah(i),e=lh(i);return {type:"object",properties:t,required:e.length?e:[]}},ok=i=>i.map(t=>Nl(t)),sk=i=>Nl(i),uy=i=>i.map(t=>({...Nl(t),modelName:t.table,$id:t.table}));var ql=(i,t)=>{let e=xe__default.default.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var Vr=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var Jr=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var Hr=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var zr=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var Gr=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var Yr=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_table";this.table=e;}};var Zr=class extends w{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_column";this.table=e,this.column=r;}};var Xr=class extends w{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_index";this.table=e,this.index=r;}};var en=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_primary_key";this.table=e;}};var tn=class extends w{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 rn=class extends w{constructor(){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_tables";}};var nn=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_column_listing";this.table=e;}};var Ue=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var on=class extends w{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var sn=class extends Ue{constructor(t,e,r,n,o=[],s="create_table"){super(e),this.columnNode=r,this.tableName=n,this.namedConstraints=o,this.context=s,this.sqlType=t;}primaryKey(t){let e=Te(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??z(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 x||t instanceof D?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??me(this.tableName??"",q(this.columnNode.column))})),this):(this.namedConstraints.push(new J("unique",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName||me(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 on(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 et=class extends Ue{constructor(e,r,n,o){super(r);this.context="create_table";this.tableName=n,this.namedConstraints=[],this.context=o??"create_table",this.sqlType=e;}mysqlOptions(e){return this._mysqlOptions=e,this}getMysqlOptions(){return this._mysqlOptions}build(e){return this.nodes.push(e),new sn(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new x(e)}char(e,r=1){let n=new P(e,"char",{length:r});return this.build(n)}varchar(e,r=255){let n=new P(e,"varchar",{length:r});return this.build(n)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let n=new P(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 P(e,"uuid");return this.build(r)}ulid(e){let r=new P(e,"ulid");return this.build(r)}integer(e,r=255){let n=new P(e,"integer",{length:r});return this.build(n)}tinyint(e,r=255){let n=new P(e,"tinyint",{length:r});return this.build(n)}smallint(e,r=255){let n=new P(e,"smallint",{length:r});return this.build(n)}mediumint(e,r=255){let n=new P(e,"mediumint",{length:r});return this.build(n)}biginteger(e,r=255){let n=new P(e,"bigint",{length:r});return this.build(n)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let n=new P(e,"float",{precision:r});return this.build(n)}double(e,r=10){let n=new P(e,"double",{precision:r});return this.build(n)}real(e,r=10){let n=new P(e,"real",{precision:r});return this.build(n)}decimal(e,r=10,n=2){let o=new P(e,"decimal",{precision:r,scale:n});return this.build(o)}numeric(e,r=10,n=2){let o=new P(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 P(e,"date",{precision:r});return this.build(n)}time(e,r){let n=new P(e,"time",{precision:r});return this.build(n)}year(e){let r=new P(e,"year");return this.build(r)}datetime(e,r){let n=new P(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 P(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}boolean(e){let r=new P(e,"boolean");return this.build(r)}binary(e){let r=new P(e,"binary");return this.build(r)}varbinary(e,r=255){let n=new P(e,"varbinary",{length:r});return this.build(n)}blob(e){let r=new P(e,"blob");return this.build(r)}tinyblob(e){let r=new P(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new P(e,"mediumblob");return this.build(r)}longblob(e){let r=new P(e,"longblob");return this.build(r)}json(e){let r=new P(e,"json");return this.build(r)}jsonb(e){let r=new P(e,"jsonb");return this.build(r)}enum(e,r){let n=new P(e,"enum",{enumValues:r});return this.build(n)}custom(e,r,n){let o=new P(e,r,{length:n});return this.build(o)}rawColumn(e){let r=new P(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new P(e,"geometry");return this.build(r)}point(e){let r=new P(e,"point");return this.build(r)}linestring(e){let r=new P(e,"linestring");return this.build(r)}polygon(e){let r=new P(e,"polygon");return this.build(r)}multiPoint(e){let r=new P(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var an=class extends Ue{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new x(t)}addColumn(t){let e=[],r=new et(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 pr(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 Ne(c));});}alterColumn(t){if(this.sqlType==="sqlite")throw new g("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new et(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 yr(q(a),s,m)),d&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(d.constraintType==="not_null"?this.nodes.push(new Tr(q(a))):d.constraintType==="null"&&this.nodes.push(new hr(q(a)))),c&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(c.defaultValue===void 0||c.defaultValue===null||c.defaultValue==="NULL"?this.nodes.push(new vt(q(a))):this.nodes.push(new br(q(a),c.defaultValue))),n.getNodes().forEach(p=>{let h=p;switch(h.constraintType){case "primary_key":this.addPrimaryKey(q(a));break;case "unique":this.unique(q(a),{constraintName:h.constraintName});break;case "foreign_key":this.foreignKey(q(a),h.references?.table??"",q(h.references?.columns?.[0]??""),{constraintName:h.constraintName,onDelete:h.onDelete,onUpdate:h.onUpdate});break}});}dropColumn(t){this.nodes.push(new fr(t));}renameColumn(t,e){this.nodes.push(new gr(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new g("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new vt(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new g("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ht([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new g("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Ne(new J(...t)));}foreignKey(t,e,r,n){if(this.sqlType==="sqlite")throw new g("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Ne(new J("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 g("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Ne(new J("unique",{columns:[t],constraintName:e?.constraintName??me(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new g("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 qe(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new g("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new g("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??me(this.table,t);this.nodes.push(new qe(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new g("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new qe(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new g("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new g("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new gt(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 bt(t)):r?this.nodes.push(new bt(t)):n&&this.nodes.push(new bt(t)),this)}};var se=class{constructor(t){if(this.sqlType=t||E.DB_TYPE,!this.sqlType)throw new g("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new x(t)}rawQuery(t){this.queryStatements.push(t);}async execute(){for(let t of this.queryStatements)this.rawQuery(t);}runFile(t){if(!qn__default.default.existsSync(t))throw new g("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=Mt__default.default.basename(t),r=Mt__default.default.extname(e);if(r!==".sql"&&r!==".txt")throw new g("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let o=qn__default.default.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 et(this.sqlType,[],t);e(n);let o=n.getNodes(),s=new b({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a={...r,...this.sqlType==="mysql"||this.sqlType==="mariadb"?n.getMysqlOptions()||{}:{}},l=new wr(t,o,n.getNamedConstraints(),r?.ifNotExists,a),u=s.parse([l]).sql,d=u.startsWith("create table")?u:`create table ${u}`;this.rawQuery(d),this.generateAutoUpdateTriggers(t,o);}alterTable(t,e){let r=[],n=new an(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 ye(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 Sr(t,e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}renameTable(t,e){let r=new ye(t,[new st(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}truncateTable(t){let e=new wt(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||ar(t,e.join("_")),o=new qr(t,e,n),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([o]).sql);}dropIndex(t,e){let r=new Cr(t,e),n=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addPrimaryKey(t,e){let r=new ye(t,[new ht(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??me(t,n.join("_")),s=new J("unique",{columns:n,constraintName:o}),a=new ye(t,[new Ne(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 qe(n),s=new ye(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)?me(t,e.join("_")):me(t,e),o=r?.constraintName??n,s=new qe(o),a=new ye(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new gt,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 ye(t,[new Ne(r)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}dropConstraint(t,e){let r=new qe(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 ye(t,[new Ne(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 qe(e),n=new ye(t,[r]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}createExtension(t,e=true){let r=new Nr(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 ln,cy,jt=class{constructor(t,e){Wl(this,ln);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new se(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=Fl(this,ln,cy).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(`;
140
- `)}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 se(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}};ln=new WeakSet,cy=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 un=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 yy=i=>String(i??"").replace(/::[a-z_ ]+$/i,"").replace(/[()\s]/g,"").toLowerCase(),dh=/^(current[ _]?timestamp\d*|now\d*|getdate\d*|localtimestamp\d*|localtime\d*)$/,mh={postgres:i=>i.includes("nextval"),cockroachdb:i=>i.includes("unique_rowid")};var fy=(i,t)=>!!i.autoCreate&&dh.test(yy(t)),hy=(i,t,e)=>{if(t.type!=="increment"&&t.type!=="bigIncrement")return false;let r=mh[i];return r?r(yy(e)):false};var dn=class dn{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new un(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 se(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||Te(n.table,n.columns[0]),l=this.sql.schema().alterTable(n.table,u=>{let d=a||Te(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 se(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 se(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"&&dn.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||Te(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!==""&&!fy(t.modelColumn,t.dbColumns.defaultValue)&&!hy(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 se(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(T=>T.columnName===p);if(y)o=y.databaseName;else {let T=m?.databaseCaseConvention||"preserve";o=U(p,T);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.model();if(typeof o=="string"&&o){let p=m.getColumns(),h=p.find(y=>y.columnName===o);if(h)o=h.databaseName;else {let y=m.primaryKey||"id",T=p.find(S=>S.columnName===y);if(T)o=T.databaseName;else {let S=m?.databaseCaseConvention||"preserve";o=U(o||y,S);}}}else {let p=m.primaryKey||"id",y=m.getColumns().find(T=>T.columnName===p);if(y)o=y.databaseName;else {let T=m?.databaseCaseConvention||"preserve";o=U(p,T);}}}let s=this.models.find(m=>m.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,u=a.find(m=>m.columnName===l);if(u)l=u.databaseName;else {let m=s?.databaseCaseConvention||"preserve";l=U(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=U(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.manyToManyOptions.leftForeignKey,p=q(m),h=a.find(y=>y.columnName===p);if(h)l=h.databaseName;else {let y=s?.databaseCaseConvention||"preserve";l=U(p,y);}}let d=t.relation.onDelete?.toLowerCase(),c=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,m=>{let p=n||z(t.table,l,e);m.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[o]},constraintName:p,onDelete:d,onUpdate:c});}).toQueries()}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>sqlFormatter.format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};dn.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 Ut=dn;var cn=class cn{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}generateCode(t){let e=[],r=[],n=null,o={STRUCTURE_CREATION:"Structure creation",CONSTRAINT_CREATION:"Constraints and indexes",DESTRUCTIVE_OPERATIONS:"Destructive operations"};for(let s of t){s.phase!==n&&(n=s.phase,e.length>0&&e.push(""),e.push(`// ${o[n]}`));let{up:a,down:l}=this.generateOperationCode(s);a&&e.push(...a),l&&r.push(...l);}return {up:e,down:r}}generateOperationCode(t){switch(t.type){case "CREATE_TABLE":return this.generateCreateTableCode(t);case "ADD_COLUMN":return this.generateAddColumnCode(t);case "MODIFY_COLUMN":return this.generateModifyColumnCode(t);case "DROP_COLUMN":return this.generateDropColumnCode(t);case "CREATE_INDEX":return this.generateCreateIndexCode(t);case "DROP_INDEX":return this.generateDropIndexCode(t);case "ADD_FOREIGN_KEY":return this.generateAddForeignKeyCode(t);case "DROP_FOREIGN_KEY":return this.generateDropForeignKeyCode(t);case "ADD_UNIQUE_CONSTRAINT":return this.generateAddUniqueCode(t);case "DROP_CONSTRAINT":return this.generateDropConstraintCode(t);case "ADD_CHECK_CONSTRAINT":return this.generateAddCheckCode(t);case "ADD_PRIMARY_KEY":return this.generateAddPrimaryKeyCode(t);case "DROP_TABLE":return this.generateDropTableCode(t);case "MODIFY_PRIMARY_KEY":return this.generateModifyPrimaryKeyCode(t);default:return {up:null,down:null}}}generateCreateTableCode(t){let e=t.data,r=[];r.push(`this.schema.createTable(${this.quote(e.table)}, (table) => {`);for(let o of e.columns){let s=this.generateColumnCode(e.table,o,true);r.push(` ${s}`);}r.push("});");let n=[`this.schema.dropTable(${this.quote(e.table)});`];return {up:r,down:n}}generateAddColumnCode(t){let{table:e,column:r}=t.data,n=this.generateColumnCode(e,r,false),o=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.addColumn((col) => ${n.replace(/^table\./,"col.")});`,"});"],s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r.databaseName)});`,"});"];return {up:o,down:s}}generateModifyColumnCode(t){let{table:e,modelColumn:r,dbColumns:n}=t.data,o=this.generateColumnCodeForModify(e,r,n),s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.alterColumn((col) => ${o.replace(/^table\./,"col.")});`,"});"],a=[`// TODO: reverse column modification for ${this.quote(n.name)} on ${this.quote(e)}`];return {up:s,down:a}}generateDropColumnCode(t){let{table:e,column:r}=t.data,n=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r)});`,"});"],o=[`// TODO: reverse column drop for ${this.quote(r)} on ${this.quote(e)}`];return {up:n,down:o}}generateCreateIndexCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=(r?.getIndexes().find(u=>u.name===e.index)?.columns||[]).map(u=>r?.getColumns().find(c=>c.columnName===u)?.databaseName||u),s=o.length===1?this.quote(o[0]):`[${o.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.createIndex(${this.quote(e.table)}, ${s}, { constraintName: ${this.quote(e.index)} });`],l=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`];return {up:a,down:l}}generateDropIndexCode(t){let e=t.data,r=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`],n=[`// TODO: reverse index drop for ${this.quote(e.index)} on ${this.quote(e.table)}`];return {up:r,down:n}}generateAddForeignKeyCode(t){let e=t.data,{sourceColumn:r,referencedTable:n,referencedColumn:o,constraintName:s}=this.resolveRelationDetails(e),a=e.relation.onDelete?.toLowerCase(),l=e.relation.onUpdate?.toLowerCase(),u=[];s&&u.push(`constraintName: ${this.quote(s)}`),a&&u.push(`onDelete: ${this.quote(a)}`),l&&u.push(`onUpdate: ${this.quote(l)}`);let d=u.length>0?`, { ${u.join(", ")} }`:"",c=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.foreignKey(${this.quote(r)}, ${this.quote(n)}, ${this.quote(o)}${d});`,"});"],m=s||z(e.table,r,n),p=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.dropConstraint(${this.quote(m)});`,"});"];return {up:c,down:p}}generateDropForeignKeyCode(t){let e=t.constraint||t.data?.relation?.name;if(!e)return {up:null,down:null};let r=t.table||t.data?.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(e)});`,"});"],o=[`// TODO: reverse FK drop for ${this.quote(e)} on ${this.quote(r)}`];return {up:n,down:o}}generateAddUniqueCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=`[${(e.columns||[]).map(u=>r?.getColumns().find(c=>c.columnName===u)?.databaseName||u).map(u=>this.quote(u)).join(", ")}]`,s=e.name||"mandatory",a=[`this.schema.addUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(s)} });`],l=[`this.schema.dropUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(s)} });`];return {up:a,down:l}}generateDropConstraintCode(t){let e=t.data,r=t.table||e.table,n=t.constraint||e.name;if(!n||!r)return {up:null,down:null};if(e.type==="primary_key"){let a=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});"],l=[`// TODO: reverse primary key drop on ${this.quote(r)}`];return {up:a,down:l}}if(e.type==="unique"){let a=e.column,l=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],u=[`// TODO: reverse unique constraint drop for ${this.quote(a)} on ${this.quote(r)}`];return {up:l,down:u}}if(e.expression!==void 0){let a=[`this.schema.dropCheck(${this.quote(r)}, ${this.quote(n)});`],l=[`// TODO: reverse check constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:a,down:l}}let o=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],s=[`// TODO: reverse constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:o,down:s}}generateAddCheckCode(t){let e=t.data,r=[`this.schema.addCheck(${this.quote(e.table)}, ${this.quote(e.expression)}, { constraintName: ${this.quote(e.name)} });`],n=[`this.schema.dropCheck(${this.quote(e.table)}, ${this.quote(e.name)});`];return {up:r,down:n}}generateAddPrimaryKeyCode(t){let e=t.data,o=this.models.find(u=>u.table===e.table)?.getColumns().find(u=>u.columnName===e.columns[0])?.primaryKeyConstraintName||Te(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||Te(t,e.columnName);n+=`.primaryKey({ constraintName: ${this.quote(o)} })`;}return e.unsigned&&(n+=".unsigned()"),e.zerofill&&(n+=".zerofill()"),e.constraints?.default!==void 0&&(n+=`.default(${this.formatDefaultValue(e.constraints.default)})`),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n+";"}generateColumnCodeForModify(t,e,r){let n=this.generateColumnTypeCode(e);return e.constraints?.default!==void 0?n+=`.default(${this.formatDefaultValue(e.constraints.default)})`:r.defaultValue!=null&&r.defaultValue!==""&&(n+=".default(null)"),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n}generateColumnTypeCode(t){let e=t.databaseName;if(Array.isArray(t.type)){let s=t.type.map(a=>this.quote(a)).join(", ");return `table.enum(${this.quote(e)}, [${s}])`}let r=t.type;if(new Set(["uuid","ulid","boolean","year","json","jsonb","binary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]).has(r))return `table.${r}(${this.quote(e)})`;if(r==="timestamp"||r==="datetime"){let s=[];return t.withTimezone&&s.push("withTimezone: true"),t.precision!=null&&s.push(`precision: ${t.precision}`),s.length>0?`table.${r}(${this.quote(e)}, { ${s.join(", ")} })`:`table.${r}(${this.quote(e)})`}return r==="date"||r==="time"?t.precision!=null?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="increment"||r==="bigIncrement"?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:r==="decimal"||r==="numeric"?t.precision!=null?t.scale!=null?`table.${r}(${this.quote(e)}, ${t.precision}, ${t.scale})`:`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="float"||r==="double"||r==="real"?t.precision!=null&&t.precision!==10?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="longtext"||r==="mediumtext"||r==="tinytext"?`table.${r}(${this.quote(e)})`:new Set(["varchar","char","string","integer","tinyint","smallint","mediumint","bigint","biginteger","varbinary"]).has(r)?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:cn.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))}};cn.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 mn=cn;function ph(i){return i.replace(/\s+/g," ").trim()}function yh(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function fh(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 hh(i,t){return t.length===0?i:`${i} ${t.join(" ")}`}function Ve(i,t){let e=ph(t.toLowerCase()),r=yh(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}=fh(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?hh(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 pn=class i{constructor(t){this.emptyStatements=[/^alter table [`'"]?[\w]+[`'"]?\s*$/i];this.sql=t,this.models=Object.values(this.sql._models),this.data={columnsToAdd:[],columnsToDrop:[],columnsToModify:[],indexesToAdd:[],indexesToDrop:[],uniquesToAdd:[],uniquesToDrop:[],checksToAdd:[],checksToDrop:[],tablesToAdd:[],relationsToAdd:[],relationsToDrop:[],relationsToModify:[],primaryKeysToAdd:[],primaryKeysToDrop:[],primaryKeysToModify:[]};}static async makeDiff(t){let e=new i(t);return await Promise.all(e.models.map(async r=>{let n=await e.sql.getTableSchema(r.table),o={columns:r.getColumns().filter(y=>y?.type!==void 0&&y?.type!==null),indexes:r.getIndexes(),relations:r.getRelations()};if(!n.columns.length){e.data.tablesToAdd.push({table:r.table,columns:o.columns});for(let S of o.indexes)n.indexes.map(N=>N.name).includes(S.name)||e.data.indexesToAdd.push({table:r.table,index:S.name});let y=r.getUniques?.()||[];for(let S of y)e.data.uniquesToAdd.push({table:r.table,name:S.name||"mandatory",columns:S.columns});let T=r.getChecks?.()||[];for(let S of T)e.data.checksToAdd.push({table:r.table,name:S.name,expression:S.expression});for(let S of o.relations){if(S.type!=="belongsTo")continue;let N=q(S.constraintName);n.foreignKeys.find(A=>A.name===N)||e.data.relationsToAdd.push({table:r.table,relation:S,onDelete:S.onDelete,onUpdate:S.onUpdate});}return}for(let y of o.columns)n.columns.some(S=>S.name===y.databaseName||S.name===y.columnName)||e.data.columnsToAdd.push({table:r.table,column:y});let s=r.getColumns();for(let y of n.columns)s.some(S=>S.databaseName===y.name||S.columnName===y.name)||e.data.columnsToDrop.push({table:r.table,column:y.name});for(let y of o.indexes)n.indexes.map(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(S=>S.name===y.name&&S.isUnique)||e.data.uniquesToAdd.push({table:r.table,name:y.name||"mandatory",columns:y.columns});let l=n.foreignKeys.map(y=>y.name);for(let y of n.indexes)y.isUnique||l.includes(y.name)||o.indexes.map(S=>S.name).includes(y.name)||e.data.indexesToDrop.push({table:r.table,index:y.name});for(let y of n.indexes){if(!y.isUnique||y.name==="PRIMARY")continue;(r.getUniques?.()||[]).map(S=>S.name).includes(y.name)||e.data.uniquesToDrop.push({table:r.table,name:y.name});}let u=r.getChecks?.()||[];for(let y of u)n.checkConstraints.some(S=>S.name===y.name)||e.data.checksToAdd.push({table:r.table,name:y.name,expression:y.expression});let d=new Set(u.map(y=>y.name)),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 T=[...m].find(S=>{let N=S.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),C=new RegExp(`[\\["\\[]?${N}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),A=new RegExp(`[\\("\\[]?${N}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return C.test(y.expression)||A.test(y.expression)});if(T){let S=c.find(C=>(C.databaseName||C.columnName)===T),N=n.columns.find(C=>C.name===T);if(S&&N?.enumValues&&Array.isArray(S.type)){let C=[...S.type].sort(),A=[...N.enumValues].sort();if(!(C.length===A.length&&C.every((O,I)=>O===A[I]))){e.data.checksToDrop.push({table:r.table,name:y.name});let O=e.sql.getDbType(),I=O==="mssql"?"[":'"',L=O==="mssql"?"]":'"',H=S.type.map(v=>`'${v.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:y.name,expression:`${I}${T}${L} IN (${H})`});}}}else e.data.checksToDrop.push({table:r.table,name:y.name});}for(let y of o.columns){let T=n.columns.find(C=>C.name===y.databaseName||C.name===y.columnName);if(!T)continue;let S=!e.areColumnsEqual(T,y,n.indexes),N=e.getDefaultChange({table:r.table,dbColumns:T,modelColumn:y});(S||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||Be(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(C=>C.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(S=>S.type!=="belongsTo"&&S.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,S,y))||e.data.relationsToDrop.push({table:r.table,relation:y});}for(let y of o.relations){if(y.type!=="belongsTo"&&y.type!=="manyToMany")continue;let T=n.foreignKeys.find(S=>e.relationMatchesDbRelation(r,y,S));T&&!e.areRelationsEqual(T,y)&&e.data.relationsToModify.push({table:r.table,dbRelation:T,modelRelation:y,onDelete:y.onDelete,onUpdate:y.onUpdate});}let h=r.primaryKey;if(h&&!n.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[h]}),n.primaryKey&&!h&&e.data.primaryKeysToDrop.push({table:r.table,columns:n.primaryKey.columns,name:n.primaryKey.name}),h&&n.primaryKey){let y=r.getColumns().find(T=>T.columnName===h);y&&!e.arePrimaryKeysEqual(n.primaryKey,y)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:n.primaryKey,modelPrimaryKey:h});}})),await e.processManyToMany(),await e.removeFkChurnByName(),e}getSqlStatements(){let t=this.getSqlStatementsByPhase();return Object.values(t).flat().filter(r=>{let n=r.trim();return n?!this.emptyStatements.some(o=>o.test(n)):false})}getCodeStatements(){let e=new Ut(this.sql).generateOperations(this.data);return new mn(this.sql).generateCode(e)}getSqlStatementsByPhase(){let t=new Ut(this.sql),e=t.generateOperations(this.data),r=t.formatSqlStatements(e),n={STRUCTURE_CREATION:[],CONSTRAINT_CREATION:[],DESTRUCTIVE_OPERATIONS:[]};for(let o of r)n[o.phase].push(...o.sqlStatements);return n}areColumnsEqual(t,e,r=[]){let n=t.name===e.databaseName,o=this.sql.getDbType(),s=Ve(o,t.dataType),a=typeof e.type=="string"?Ve(o,e.type):void 0,l=s.split(" ").filter(d=>d!=="unsigned"&&d!=="zerofill").join(" ");if(a&&n&&(n=l===a),Array.isArray(e.type)&&(o==="mysql"||o==="mariadb")){let d=[...e.type].sort(),c=t.enumValues?[...t.enumValues].sort():null;c&&n&&(n=d.length===c.length&&d.every((m,p)=>m===c[p]));}e.length!=null&&t.length!=null&&n&&(n=t.length===e.length);let u=a==="real"||a==="double"||a==="float";if(e.precision!=null&&t.precision!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.precision===e.precision)),e.scale!=null&&t.scale!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.scale===e.scale)),typeof e.type=="string"&&(a==="timestamp"||a==="time")&&(o==="postgres"||o==="cockroachdb")&&e.withTimezone!==void 0&&t.withTimezone!==void 0&&n&&(n=!!t.withTimezone==!!e.withTimezone),e.constraints?.nullable!==void 0){let d=e.constraints.nullable,c=t.isNullable;n=n&&d===c;}if(o==="mysql"||o==="mariadb"){if(e.unsigned!==void 0){let d=e.unsigned??false,c=t.unsigned??false;n&&(n=d===c);}if(e.zerofill!==void 0){let d=e.zerofill??false,c=t.zerofill??false;n&&(n=d===c);}}if(e.stringMode!==void 0){let d=e.stringMode??false,c=t.stringMode??false;n&&(n=d===c);}return n}areRelationsEqual(t,e){let r=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(h=>h.columnName===d),m=u.table,p=c?.databaseName||d;n=n&&t.referencedTable===m&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===p;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let u=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",h=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]===h}arePrimaryKeysEqual(t,e){if(t.columns.length!==1)return false;let n=t.columns[0]===e.databaseName,o=this.sql.getDbType();if(["mysql","mariadb"].includes(o))return n;let a=!t.name||!e.primaryKeyConstraintName||t.name===e.primaryKeyConstraintName;return n&&a}getDefaultChange(t){let e=this.sql.getDbType(),r=Ve(e,t.dbColumns.dataType),n=typeof t.modelColumn.type=="string"?Ve(e,t.modelColumn.type):void 0;if(n&&r!==n||t.modelColumn.length!=null&&t.dbColumns.length!=null&&t.dbColumns.length!==t.modelColumn.length||t.modelColumn.precision!=null&&t.dbColumns.precision!=null&&t.dbColumns.precision!==t.modelColumn.precision||t.modelColumn.scale!=null&&t.dbColumns.scale!=null&&t.dbColumns.scale!==t.modelColumn.scale||(this.sql.getDbType()==="postgres"||this.sql.getDbType()==="cockroachdb")&&typeof t.modelColumn.type=="string"&&(n==="timestamp"||n==="time")&&t.modelColumn.withTimezone!==void 0&&t.dbColumns.withTimezone!==void 0&&!!t.dbColumns.withTimezone!=!!t.modelColumn.withTimezone)return false;let s=t.modelColumn.constraints?.default!==void 0,a=t.dbColumns.defaultValue!==null&&t.dbColumns.defaultValue!==void 0,l=t.modelColumn.type==="bigIncrement"||t.modelColumn.type==="increment",u=typeof t.dbColumns.defaultValue=="string"&&t.dbColumns.defaultValue.includes("nextval(");if(s&&!a)return "set";if(!s&&a)return l&&u||t.modelColumn.type==="uuid"&&this.isImplicitUuidDefault(e,t.dbColumns.defaultValue)?false:"drop";if(s&&a){let d=String(t.dbColumns.defaultValue),c=String(t.modelColumn.constraints?.default),m=this.normalizeDefaultValue(e,r,d),p=this.normalizeDefaultValue(e,n||r,c);return m!==p?"set":false}return false}isImplicitUuidDefault(t,e){let r=String(e??"").replace(/[()\s]/g,"").toLowerCase();return ({postgres:["gen_random_uuid"],cockroachdb:["gen_random_uuid"],mysql:["uuid"],mariadb:["uuid"],mssql:["newid"],sqlite:["lower(hex(randomblob(16)))"]}[t]??[]).includes(r)}normalizeDefaultValue(t,e,r){let n=String(r).trim();if(!n)return n;if(t==="postgres"||t==="cockroachdb"){if(e==="json"||e==="jsonb")try{n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::(jsonb?|[a-zA-Z_ ]+[\[\]]*)/g,"");let s=n.match(/^'(.*)'$/s);if(s&&(n=s[1]),n==="{}"||n==="")return "{}";let a=JSON.parse(n);return JSON.stringify(a)}catch{}n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::[a-zA-Z_ ]+[\[\]]*/g,"");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),/^true$/i.test(n)?"true":/^false$/i.test(n)?"false":/^null$/i.test(n)?"null":(n)}if(t==="mysql"||t==="mariadb"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);if(o&&(n=o[1]),/^current_timestamp(?:\(\d+\))?$/i.test(n))return "current_timestamp";if(e==="boolean"){if(/^1$/.test(n))return "true";if(/^0$/.test(n))return "false"}return n}if(t==="sqlite"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),n.toLowerCase()}return n}async processManyToMany(){let t=new Set;for(let e of this.models){let r=e.getRelations();for(let n of r){if(n.type!=="manyToMany"||!n.manyToManyOptions||n.manyToManyOptions.wasModelProvided)continue;let o=q(n.manyToManyOptions.throughModel);if(t.has(o))continue;t.add(o);let s=this.models.find(v=>v.table===n?.manyToManyOptions?.primaryModel),a=n.model();if(!s||!a)continue;let l=s.primaryKey||"id",u=a.primaryKey||"id",d=s.getColumns().find(v=>v.columnName===l),c=a.getColumns().find(v=>v.columnName===u);if(!d||!c)continue;let m=q(n.manyToManyOptions.leftForeignKey)||l,p=q(n.manyToManyOptions.rightForeignKey)||u,h=await this.sql.getTableSchema(o);if(!h.columns.length){this.data.tablesToAdd.push({table:o,columns:[this.clonePkAsColumn(d,m),this.clonePkAsColumn(c,p)]}),this.pushM2mFkRelations({throughTable:o,leftModel:s,rightModel:a,leftFkName:m,rightFkName:p,onDelete:n.onDelete,onUpdate:n.onUpdate,constraintName:void 0});continue}let y=this.clonePkAsColumn(d,m),T=this.clonePkAsColumn(c,p),S=h.columns.find(v=>v.name===m),N=h.columns.find(v=>v.name===p),C=S?this.areColumnsEqual(S,y,h.indexes):false,A=N?this.areColumnsEqual(N,T,h.indexes):false;for(let v of h.foreignKeys){let Z=v.referencedTable===s.table,ve=v.referencedTable===a.table;if(!Z&&!ve)continue;let zt=Z?m:p,At=v.columns[0];At&&At!==zt&&(this.data.relationsToDrop.push({table:o,relation:v}),At!==m&&At!==p&&this.data.columnsToDrop.push({table:o,column:At}));}let B={};C||(B[y.databaseName]=y),A||(B[T.databaseName]=B[T.databaseName]||T);for(let v of Object.keys(B))this.data.columnsToAdd.push({table:o,column:B[v]});let O=this.buildBelongsToRelation(o,()=>s,m,l,void 0,n.onDelete,n.onUpdate),I=this.buildBelongsToRelation(o,n.model,p,u,void 0,n.onDelete,n.onUpdate),L=h.foreignKeys.find(v=>v.referencedTable===s.table&&v.columns.length===1&&v.columns[0]===m),H=h.foreignKeys.find(v=>v.referencedTable===a.table&&v.columns.length===1&&v.columns[0]===p);if(!L){let v=h.foreignKeys.find(Z=>Z.referencedTable===s.table);v&&this.data.relationsToDrop.push({table:o,relation:v}),this.data.relationsToAdd.push(O);}if(!H){let v=h.foreignKeys.find(Z=>Z.referencedTable===a.table);v&&this.data.relationsToDrop.push({table:o,relation:v}),this.data.relationsToAdd.push(I);}}}}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)||z(n.table,d,a.model().table);s.add(c);}r.set(n.table,s);}this.data.relationsToAdd=await Promise.all(this.data.relationsToAdd.map(async n=>{let o=await this.sql.getTableSchema(n.table),s=this.models.find(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 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 T=c.has(y.columns[0]),S=y.referencedTable===u,N=y.referencedColumns[0]===d;return T&&S&&N}),p=q(n.relation.constraintName)||z(n.table,l,u),h=e.get(n.table)||new Set;if(m||p&&h.has(p))return null;if(n.relation.type==="manyToMany"&&n.relation.manyToManyOptions){let y=q(n.relation.manyToManyOptions.throughModel),T=q(n.relation.manyToManyOptions.leftForeignKey),S=q(n.relation.manyToManyOptions.rightForeignKey),N=n.table===y&&n.relation.columnName===T&&n.relation.model().table===s?.table,C=n.table===y&&n.relation.columnName===S&&n.relation.model().table!==s?.table,A=await this.sql.getTableSchema(y),B=A.foreignKeys.some(I=>I.columns.length===1&&I.columns[0]===T&&I.referencedTable===(s?.table||"")),O=A.foreignKeys.some(I=>I.columns.length===1&&I.columns[0]===S&&I.referencedTable===n.relation.model().table);if(N&&B||C&&O)return null}return n})).then(n=>n.filter(Boolean)),this.data.relationsToDrop=await Promise.all(this.data.relationsToDrop.map(async n=>{let o=this.models.find(u=>u.table===n.table);if(!o)return n;let s=o.getRelations(),a=o.getColumns();return s.some(u=>{if(u.type!=="belongsTo")return false;let c=a.find(T=>T.columnName===u.foreignKey)?.databaseName||u.foreignKey,m=u.model(),p=m.primaryKey||"id",y=m.getColumns().find(T=>T.columnName===p)?.databaseName||p;return n.relation.columns.length===1&&n.relation.columns[0]===c&&n.relation.referencedTable===m.table&&n.relation.referencedColumns.length===1&&n.relation.referencedColumns[0]===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 gy=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??nt()});Ct();Ct();de();var yn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;let n=e.coerceNumericTypes&&!e.driverOptions?.types?{getTypeParser:(o,s)=>{let a=!s||s==="text";return a&&o===20?l=>BigInt(l):a&&o===1700?l=>Number.parseFloat(l):r.types.getTypeParser(o,s)}}:void 0;this.pool=new r.Pool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions,...n?{types:n}:{}});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.connect()}releaseConnection(t){t?.release();}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION"),e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=0,o=t.replace(/\?/g,()=>`$${++n}`);return (r.connection??this.pool).query(o,e)}extract(t,e){return e==="rows"?t.rows:e==="raw"?t:t.rowCount}async stream(t,e,r,n){let o=r.connection,s=!o,a=o??await this.pool.connect(),l=await import('pg-query-stream').catch(()=>{throw new Q("pg-query-stream")}),u=new stream.PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),d=0,c=t.replace(/\?/g,()=>`$${++d}`),m=new l.default(c,e,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),p=a.query(m),h=0,y=false,T=false,S=N=>{if(s)try{a.release(N);}catch{}};return p.on("data",N=>{if(n.onData){h++,Promise.resolve(n.onData(u,N)).then(()=>{h--,y&&h===0&&!T&&(S(),u.end());}).catch(C=>{T=true,S(C),u.destroy(C);});return}u.write(N);}),p.on("end",()=>{y=true,h===0&&!T&&(S(),u.end());}),p.on("error",N=>{T=true,S(N),u.destroy(N);}),u}};var fn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=r.createPool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.getConnection()}releaseConnection(t){t?.release();}async beginTransaction(t,e){e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await t.beginTransaction();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){return (r.connection??this.pool).query(t,e)}extract(t,e){let r=t;return e==="affectedRows"?r[0]?.affectedRows??0:e==="raw"?t:r[0]}async stream(t,e,r,n){let o=this.pool,s=r.connection??await o.getConnection(),a=new stream.PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),u=s.connection.query(t,e).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),d=0,c=false,m=false,p=()=>{try{s.release();}catch{}};return u.on("data",h=>{if(n.onData){d++,Promise.resolve(n.onData(a,h)).then(()=>{d--,c&&d===0&&!m&&(p(),a.end());}).catch(y=>{m=true,p(),a.destroy(y);});return}a.write(h);}),u.on("end",()=>{c=true,d===0&&!m&&(p(),a.end());}),u.on("error",h=>{m=true,p(),a.destroy(h);}),a.on("close",()=>{p();}),a}};var hn=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 g("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 Rl(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);});})}},Rl=class extends stream.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);});}};de();var gn=class{constructor(t,e,r){this.dialect="mssql";this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;let n=e.driverOptions,{options:o,...s}=n??{};this.pool=new r.ConnectionPool({server:e.host??"localhost",port:e.port,database:e.database,user:e.username,password:e.password,...s,options:{trustServerCertificate:E.MSSQL_TRUST_SERVER_CERTIFICATE??void 0,...o,abortTransactionOnError:false,enableImplicitTransactions:false}});}async createPool(){await this.pool.connect();}async closePool(){await this.pool.close();}async reserveConnection(){return this.pool.transaction()}releaseConnection(){}async beginTransaction(t,e){if(e.isolationLevel){let r=await this.getMssqlTransactionLevel(e.isolationLevel);await t.begin(r);return}await t.begin();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){let n=this.pool,o=r.connection?r.connection.request():n.request();e.forEach((l,u)=>{o.input(`p${u}`,l);});let s=0,a=t.replace(/\?|@(\d+)/g,()=>`@p${s++}`);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 stream.PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),a=o.request();a.stream=true,e.forEach((p,h)=>{a.input(`p${h}`,p);});let l=0,u=t.replace(/\?|@(\d+)/g,()=>`@p${l++}`),d=0,c=false,m=false;return a.on("row",p=>{if(!m){if(n.onData){d++,Promise.resolve(n.onData(s,p)).then(()=>{d--,c&&d===0&&!m&&s.end();}).catch(h=>{m=true,s.destroy(h);});return}s.write(p);}}),a.on("error",p=>{m=true,s.destroy(p);}),a.on("done",()=>{c=true,d===0&&!m&&s.end();}),a.query(u),s}async getMssqlTransactionLevel(t){let e=await import('mssql').then(r=>r.default.ISOLATION_LEVEL).catch(r=>{throw _.error(r),new Q("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 g("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${t}`)}}};var Nh=()=>{exports.registerDriverAdapter({name:"pg",dialects:["postgres","cockroachdb"],create:async({dialect:i,input:t})=>{let e=(await oe.getDriver(i)).client;return new yn(i,t,e)}}),exports.registerDriverAdapter({name:"mysql2",dialects:["mysql","mariadb"],create:async({dialect:i,input:t})=>{let e=(await oe.getDriver(i)).client;return new fn(i,t,e)}}),exports.registerDriverAdapter({name:"sqlite3",dialects:["sqlite"],create:async({dialect:i,input:t})=>{let e=(await oe.getDriver(i)).client;return new hn(i,t,e)}}),exports.registerDriverAdapter({name:"mssql",dialects:["mssql"],create:async({dialect:i,input:t})=>{let e=(await oe.getDriver(i)).client;return new gn(i,t,e)}});};Nh();var Oh=async i=>{if(i==="bun"){await(await Promise.resolve().then(()=>(_y(),Ry))).registerBunDrivers();return}if(i==="web"){(await Promise.resolve().then(()=>(xl(),Al))).registerWebDrivers();return}if(i==="react-native"){await(await Promise.resolve().then(()=>(xl(),Al))).registerReactNativeDrivers();return}},Nn=async(i,t)=>{let e=Gt(t?.jsEnvironment);await Oh(e);let r=await Ty(i,e,t?.driver,t);return await r.createPool(),r};var Jt=class Jt{constructor(){}static run(t,e){return Jt.storage.run(t,e)}static getTransaction(){return Jt.storage.getStore()}};Jt.storage=new async_hooks.AsyncLocalStorage;var Je=Jt;var Ht=class i{constructor(t,e,r=false,n=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=Pe(te().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 Je.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")&&mt("BEGIN TRANSACTION",this.sql.logs);let t=this.sql.driverAdapter,e=this.sql.sqlConnection;if(!t||!e)throw new g("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 g("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")&&mt("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 g("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 g("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")&&mt("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 g("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 g("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}};var Dl=Symbol.for("hysteria.orm.SqlDataSource"),Dy,Iy,Ie=class i extends(Iy=Nt,Dy=Dl,Iy){constructor(e){super(e);this[Dy]=true;this.globalTransaction=null;this.globalTransactionLock=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.driverAdapter=null;this.id=te().crypto.randomUUID();this.logicalSourceId=te().crypto.randomUUID();this.cacheAdapter=new $r;this.migrationConfig={path:E.MIGRATION_PATH||"database/migrations",lock:true,transactional:true,lockTimeout:3e4};this.seederConfig={path:"database/seeders"};this.zodEngine=null;this.lazyLoad=false;this.connecting=null;this.sqlType=e?.type||this.type;let r=e;this.inputDetails={...e,type:this.sqlType,host:r?.host??this.host,port:r?.port??this.port,username:r?.username??this.username,password:r?.password??this.password,database:r?.database??this.database,logs:r?.logs??this.logs},this.inputDetails.connectionPolicies=e?.connectionPolicies||{retry:{maxRetries:0,delay:0}},this.inputDetails.queryFormatOptions=e?.queryFormatOptions||{language:It(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&&Dl in e&&e[Dl]===true}get isClsEnabled(){return this.clsEnabled}getOnSlaveServerFailure(){return this.onSlaveServerFailure}addObserver(e){return this.observerChain||(this.observerChain=new yt([])),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 g("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");try{this.driverAdapter=await Nn(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 Nn(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 g("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=Je.getTransaction();if(e?.isActive&&e.sql.logicalSourceId===this.logicalSourceId)return e.sql}return null}async useCache(e,r,...n){if(!this.cacheAdapter)throw new g("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new g("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=ql(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 g("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new g("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=ql(JSON.stringify(r)),a=s?`${e}:${s}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new g("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 Nn(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 k(gy(e,r),n);return r?.alias&&o.table(e,r.alias),o}return new Le(e,n)}schema(){if(!this.isConnected&&!this.lazyLoad)throw new g("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new jt(this,this.getDbType())}async startGlobalTransaction(e){for(;this.globalTransactionLock;)await this.globalTransactionLock;if(this.globalTransaction?.isActive)throw new g("SqlDataSource::startGlobalTransaction","GLOBAL_TRANSACTION_ALREADY_STARTED");let r=()=>{};this.globalTransactionLock=new Promise(n=>{r=n;});try{let n=await this.clone();return n.sqlConnection=await n.getConnection(),this.globalTransaction=new Ht(n,e?.isolationLevel),await this.globalTransaction.transaction(),this.globalTransaction}finally{r(),this.globalTransactionLock=null;}}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new g("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?Je.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 Ht(s,n?.isolationLevel);if(await a.transaction(),typeof e=="function")try{let l=this.clsEnabled?await Je.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 g("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");let r=this.getTransactionBoundSqlDataSource()??this;return new ze(e,r)}getPool(){if(!this.sqlPool)throw this.lazyLoad?new g("SqlDataSource::getPool - call ensureConnected() or connect() first when using lazyLoad","CONNECTION_NOT_ESTABLISHED"):new g("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 g("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");}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=`
139
+ Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}let e=ur(this.logs);e?.customLogger&&_.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||E.DB_DATABASE||":memory:",this.logs=t?.logs||E.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||E.MONGO_URL,this.logs=t?.logs||E.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||E.DB_HOST,this.port=+t?.port||+E.DB_PORT,this.username=t?.username||E.DB_USER,this.password=t?.password||E.DB_PASSWORD,this.database=t?.database||E.DB_DATABASE,this.logs=t?.logs||E.DB_LOGS||false,this.port||(this.port=1433);}};var fe=class{constructor(t){this.options=t;}static async createDriver(t){throw new g("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};de();var kt=class kt extends fe{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new kt(this.mongoClient);let e=await import('mongodb').catch(()=>{throw new Q("mongodb")});if(this.mongoClient=e.default??e,!this.mongoClient)throw new Q("mongodb");return new kt(this.mongoClient)}};kt.mongoClient=null;var Pr=kt;de();var Kt=class Kt extends fe{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new Kt(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new Q("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new Q("mssql");return new Kt(this.mssqlClient)}};Kt.mssqlClient=null;var Br=Kt;de();var Qt=class Qt extends fe{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new Qt(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new Q("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new Q("mysql2");return new Qt(this.mysqlClient)}};Qt.mysqlClient=null;var kr=Qt;de();var Lt=class Lt extends fe{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new Lt(this.pgClient);let e=await import('pg').catch(()=>{throw new Q("pg")});if("default"in e&&(e.default,this.pgClient=e.default??e),!this.pgClient)throw new Q("pg");return new Lt(this.pgClient)}};Lt.pgClient=null;var Kr=Lt;de();var Wt=class Wt extends fe{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new Wt(this.sqlite3Client);let e=await import('sqlite3').catch(()=>{throw new Q("sqlite3")});if(this.sqlite3Client=e.default??e,!this.sqlite3Client)throw new Q("sqlite3");return new Wt(this.sqlite3Client)}};Wt.sqlite3Client=null;var Qr=Wt;var oe=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await kr.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await Kr.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await Qr.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await Pr.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await Br.createDriver(),this.mssqlDriver;default:throw new g(`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}}};oe.mysqlDriver=null,oe.pgDriver=null,oe.sqliteDriver=null,oe.mssqlDriver=null,oe.mongodbDriver=null;var bl=Symbol("mongoProperties");function Lr(){return (i,t)=>{let e=K.getMetadata(bl,i)||[];e.push(t),K.defineMetadata(bl,e,i);}}function oy(i){return K.getMetadata(bl,i.prototype)||[]}function sy(){return {$annotations:{}}}var qt=class extends ke{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}};Ll([Lr()],qt.prototype,"id");function eh(i){return typeof i!="function"||!i.prototype}function th(i){let t={id:i._id?.toString()};for(let e of Object.keys(i))e!=="_id"&&(t[e]=i[e]);return t}async function je(i,t,e){if(!t)return null;if(eh(i))return th(t);let r=sy(),n=oy(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=U(o,i.modelCaseConvention);r.$annotations[a]=t[o];return}let s=U(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=U(o,i.modelCaseConvention);r[s]=null;}})),r}async function Wr(i,t,e){return (await Promise.all(t.map(async n=>await je(i,n,e)))).filter(n=>n!==null)}var Fr=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 je(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 g("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 Wr(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 je(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 Wr(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 Wr(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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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=ne("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 jr=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 g("CollectionManager::findOneOrFail No record found","ROW_NOT_FOUND");return r}query(){return new Fr(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 je(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 je(this.collection,s)))}async updateRecord(t){await this.ensureInitialized();let e=t.id;if(!e)throw new g("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 g("CollectionManager::updateRecord","ROW_NOT_FOUND");let o=await this.collectionInstance.findOne({_id:new r.ObjectId(e)},{session:this.session});return await je(this.collection,o)}async deleteRecord(t){await this.ensureInitialized();let e=t.id;if(!e)throw new g("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 Tl=class extends Nt{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=E.MONGO_URL);}async connect(){if(!this.url)throw new g("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 oe.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 g("MongoDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.connect().finally(()=>{this.connecting=null;})),await this.connecting;}}getCurrentConnection(){if(!this.mongoClient)throw new g("MongoDataSource::getCurrentConnection mongo database connection not established","CONNECTION_NOT_ESTABLISHED");return this.mongoClient}startSession(){if(!this.mongoClient)throw new g("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 g("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 jr(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}}};de();var wl=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 g("RedisDataSource::ioredis connection not established","CONNECTION_NOT_ESTABLISHED");return this.ioRedisConnection}async connect(){if(this.isConnected)return;let t=this.inputOptions.port||+E.REDIS_PORT||6379,e=await import('ioredis').catch(()=>{throw new Q("ioredis")});this.ioRedisConnection=new e.default({host:this.inputOptions.host||E.REDIS_HOST,username:this.inputOptions.username||E.REDIS_USERNAME,port:t,password:this.inputOptions.password||E.REDIS_PASSWORD,...this.inputOptions});try{await this.ioRedisConnection.ping(),this.isConnected=!0;}catch{throw new g("RedisDataSource::connect","CONNECTION_NOT_ESTABLISHED")}}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new g("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 g("RedisDataSource::set","SET_FAILED")}}async get(t){try{let e=await this.ioredis.get(t);return i.getValue(e)}catch{throw new g("RedisDataSource::get","GET_FAILED")}}async getBuffer(t){await this.ensureConnected();try{return await this.ioredis.getBuffer(t)}catch{throw new g("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 g("RedisDataSource::consume","GET_FAILED")}}async delete(t){await this.ensureConnected();try{await this.ioredis.del(t);}catch{throw new g("RedisDataSource::delete","DELETE_FAILED")}}async flushAll(){await this.ensureConnected();try{await this.ioredis.flushall();}catch{throw new g("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 g("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 g("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 g("RedisDataSource::rpush","RPUSH_FAILED")}}async lpop(t){try{let e=await this.ioredis.lpop(t);return i.getValue(e)}catch{throw new g("RedisDataSource::lpop","LPOP_FAILED")}}async rpop(t){try{let e=await this.ioredis.rpop(t);return i.getValue(e)}catch{throw new g("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 g("RedisDataSource::lrange","LRANGE_FAILED")}}async llen(t){await this.ensureConnected();try{return await this.ioredis.llen(t)}catch{throw new g("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 g("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 g("RedisDataSource::hmset","HMSET_FAILED")}}async hget(t,e){try{let r=await this.ioredis.hget(t,e);return i.getValue(r)}catch{throw new g("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 g("RedisDataSource::hgetall","HGETALL_FAILED")}}async hmget(t,...e){try{return (await this.ioredis.hmget(t,...e)).map(n=>i.getValue(n))}catch{throw new g("RedisDataSource::hmget","HMGET_FAILED")}}async hdel(t,...e){await this.ensureConnected();try{return await this.ioredis.hdel(t,...e)}catch{throw new g("RedisDataSource::hdel","HDEL_FAILED")}}async hexists(t,e){await this.ensureConnected();try{return await this.ioredis.hexists(t,e)}catch{throw new g("RedisDataSource::hexists","HEXISTS_FAILED")}}async hkeys(t){await this.ensureConnected();try{return await this.ioredis.hkeys(t)}catch{throw new g("RedisDataSource::hkeys","HKEYS_FAILED")}}async hlen(t){await this.ensureConnected();try{return await this.ioredis.hlen(t)}catch{throw new g("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 g("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 g("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 g("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 g("RedisDataSource::sismember","SISMEMBER_FAILED")}}async scard(t){await this.ensureConnected();try{return await this.ioredis.scard(t)}catch{throw new g("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 g("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 g("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 g("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 g("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 g("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 g("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 g("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 g("RedisDataSource::zscore","ZSCORE_FAILED")}}async zcard(t){await this.ensureConnected();try{return await this.ioredis.zcard(t)}catch{throw new g("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 g("RedisDataSource::subscribe","SUBSCRIBE_FAILED")}}async unsubscribe(...t){await this.ensureConnected();try{await this.ioredis.unsubscribe(...t);}catch{throw new g("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 g("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 g("RedisDataSource::psubscribe","PSUBSCRIBE_FAILED")}}async punsubscribe(...t){await this.ensureConnected();try{await this.ioredis.punsubscribe(...t);}catch{throw new g("RedisDataSource::punsubscribe","PUNSUBSCRIBE_FAILED")}}async exists(t){await this.ensureConnected();try{return await this.ioredis.exists(t)}catch{throw new g("RedisDataSource::exists","EXISTS_FAILED")}}async expire(t,e){await this.ensureConnected();try{return await this.ioredis.expire(t,e)}catch{throw new g("RedisDataSource::expire","EXPIRE_FAILED")}}async expireat(t,e){await this.ensureConnected();try{return await this.ioredis.expireat(t,e)}catch{throw new g("RedisDataSource::expireat","EXPIREAT_FAILED")}}async pexpire(t,e){await this.ensureConnected();try{return await this.ioredis.pexpire(t,e)}catch{throw new g("RedisDataSource::pexpire","PEXPIRE_FAILED")}}async ttl(t){await this.ensureConnected();try{return await this.ioredis.ttl(t)}catch{throw new g("RedisDataSource::ttl","TTL_FAILED")}}async pttl(t){await this.ensureConnected();try{return await this.ioredis.pttl(t)}catch{throw new g("RedisDataSource::pttl","PTTL_FAILED")}}async persist(t){await this.ensureConnected();try{return await this.ioredis.persist(t)}catch{throw new g("RedisDataSource::persist","PERSIST_FAILED")}}async keys(t){await this.ensureConnected();try{return await this.ioredis.keys(t)}catch{throw new g("RedisDataSource::keys","KEYS_FAILED")}}async rename(t,e){await this.ensureConnected();try{return await this.ioredis.rename(t,e)}catch{throw new g("RedisDataSource::rename","RENAME_FAILED")}}async type(t){await this.ensureConnected();try{return await this.ioredis.type(t)}catch{throw new g("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)}};de();var Ur={string:"string",varchar:"string",char:"string",text:"textarea",longtext:"textarea",mediumtext:"textarea",tinytext:"textarea",integer:"number",int:"number",smallint:"number",bigint:"number",tinyint:"number",mediumint:"number",float:"float",double:"float",decimal:"float",numeric:"float",real:"float",boolean:"boolean",bool:"boolean",date:"date",datetime:"datetime",timestamp:"datetime",time:"string",year:"number",json:"mixed",jsonb:"mixed",uuid:"string",ulid:"string",binary:"string",blob:"string",enum:"string"};var ay=null;function Xe(i,t){return t.getModelManager(i)}function iy(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=Ur[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 Ft(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 rh(){let i=await import('adminjs').catch(()=>{throw new Q("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(o){super(o),this._model=o,this._db=ay;}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=Ur[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=Ur[l]||"string";return new r({path:a.columnName,type:u,isId:a.isPrimary,isSortable:true})}async count(o){let a=Xe(this._model,this._db).query();return iy(a,o,this._model),a.getCount()}async find(o,s={}){let l=Xe(this._model,this._db).query();return iy(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(Ft(d,this._model),this))}async findOne(o){if(!this._model.primaryKey)return null;let l=await Xe(this._model,this._db).findOneByPrimaryKey(o);return l?new e(Ft(l,this._model),this):null}async findMany(o){let s=this._model.primaryKey;return s?(await Xe(this._model,this._db).query().whereIn(s,o).many()).map(u=>new e(Ft(u,this._model),this)):[]}async create(o){let a=await Xe(this._model,this._db).insert(o,{returning:["*"]});return Ft(a,this._model)}async update(o,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=Xe(this._model,this._db);if(!await l.findOneByPrimaryKey(o))throw new Error("Record not found");let d=await l.updateRecord(o,s,{returning:["*"]});return Ft(d,this._model)}async delete(o){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=Xe(this._model,this._db);await a.findOneByPrimaryKey(o)&&await a.deleteRecord(o);}}}async function nh(){let i=await import('adminjs').catch(()=>{throw new Q("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function oh(){let i=await import('adminjs').catch(()=>{throw new Q("adminjs")}),t=await rh(),e=await nh();i.default.registerAdapter({Database:e,Resource:t});}async function Sl(i,t){ay=i;let e=await import('adminjs').catch(()=>{throw new Q("adminjs")});await oh();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 ly(i,t){let{admin:e}=await Sl(i,t),r;try{r=await import('@adminjs/express');}catch{throw new Q("@adminjs/express")}let n=r.buildRouter(e);return {admin:e,router:n}}var sh=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},ih=i=>i.openApi?.required??false,ah=i=>{let t=i.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=sh(r));return e},lh=i=>{let t=i.getColumns(),e=[];for(let r of t)ih(r)&&e.push(r.columnName);return e||[]},Nl=i=>{let t=ah(i),e=lh(i);return {type:"object",properties:t,required:e.length?e:[]}},ok=i=>i.map(t=>Nl(t)),sk=i=>Nl(i),uy=i=>i.map(t=>({...Nl(t),modelName:t.table,$id:t.table}));var ql=(i,t)=>{let e=xe__default.default.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var Vr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var Jr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var Hr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var zr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var Gr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var Yr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_table";this.table=e;}};var Zr=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 Xr=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 en=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_primary_key";this.table=e;}};var tn=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 rn=class extends S{constructor(){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_tables";}};var nn=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_column_listing";this.table=e;}};var Ue=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var on=class extends S{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var sn=class extends Ue{constructor(t,e,r,n,o=[],s="create_table"){super(e),this.columnNode=r,this.tableName=n,this.namedConstraints=o,this.context=s,this.sqlType=t;}primaryKey(t){let e=Te(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??z(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 x||t instanceof D?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??me(this.tableName??"",q(this.columnNode.column))})),this):(this.namedConstraints.push(new J("unique",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName||me(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 on(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 et=class extends Ue{constructor(e,r,n,o){super(r);this.context="create_table";this.tableName=n,this.namedConstraints=[],this.context=o??"create_table",this.sqlType=e;}mysqlOptions(e){return this._mysqlOptions=e,this}getMysqlOptions(){return this._mysqlOptions}build(e){return this.nodes.push(e),new sn(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new x(e)}char(e,r=1){let n=new P(e,"char",{length:r});return this.build(n)}varchar(e,r=255){let n=new P(e,"varchar",{length:r});return this.build(n)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let n=new P(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 P(e,"uuid");return this.build(r)}ulid(e){let r=new P(e,"ulid");return this.build(r)}integer(e,r=255){let n=new P(e,"integer",{length:r});return this.build(n)}tinyint(e,r=255){let n=new P(e,"tinyint",{length:r});return this.build(n)}smallint(e,r=255){let n=new P(e,"smallint",{length:r});return this.build(n)}mediumint(e,r=255){let n=new P(e,"mediumint",{length:r});return this.build(n)}biginteger(e,r=255){let n=new P(e,"bigint",{length:r});return this.build(n)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let n=new P(e,"float",{precision:r});return this.build(n)}double(e,r=10){let n=new P(e,"double",{precision:r});return this.build(n)}real(e,r=10){let n=new P(e,"real",{precision:r});return this.build(n)}decimal(e,r=10,n=2){let o=new P(e,"decimal",{precision:r,scale:n});return this.build(o)}numeric(e,r=10,n=2){let o=new P(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 P(e,"date",{precision:r});return this.build(n)}time(e,r){let n=new P(e,"time",{precision:r});return this.build(n)}year(e){let r=new P(e,"year");return this.build(r)}datetime(e,r){let n=new P(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 P(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}boolean(e){let r=new P(e,"boolean");return this.build(r)}binary(e){let r=new P(e,"binary");return this.build(r)}varbinary(e,r=255){let n=new P(e,"varbinary",{length:r});return this.build(n)}blob(e){let r=new P(e,"blob");return this.build(r)}tinyblob(e){let r=new P(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new P(e,"mediumblob");return this.build(r)}longblob(e){let r=new P(e,"longblob");return this.build(r)}json(e){let r=new P(e,"json");return this.build(r)}jsonb(e){let r=new P(e,"jsonb");return this.build(r)}enum(e,r){let n=new P(e,"enum",{enumValues:r});return this.build(n)}custom(e,r,n){let o=new P(e,r,{length:n});return this.build(o)}rawColumn(e){let r=new P(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new P(e,"geometry");return this.build(r)}point(e){let r=new P(e,"point");return this.build(r)}linestring(e){let r=new P(e,"linestring");return this.build(r)}polygon(e){let r=new P(e,"polygon");return this.build(r)}multiPoint(e){let r=new P(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var an=class extends Ue{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new x(t)}addColumn(t){let e=[],r=new et(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 pr(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 Ne(c));});}alterColumn(t){if(this.sqlType==="sqlite")throw new g("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new et(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 yr(q(a),s,m)),d&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(d.constraintType==="not_null"?this.nodes.push(new Tr(q(a))):d.constraintType==="null"&&this.nodes.push(new hr(q(a)))),c&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(c.defaultValue===void 0||c.defaultValue===null||c.defaultValue==="NULL"?this.nodes.push(new vt(q(a))):this.nodes.push(new br(q(a),c.defaultValue))),n.getNodes().forEach(p=>{let h=p;switch(h.constraintType){case "primary_key":this.addPrimaryKey(q(a));break;case "unique":this.unique(q(a),{constraintName:h.constraintName});break;case "foreign_key":this.foreignKey(q(a),h.references?.table??"",q(h.references?.columns?.[0]??""),{constraintName:h.constraintName,onDelete:h.onDelete,onUpdate:h.onUpdate});break}});}dropColumn(t){this.nodes.push(new fr(t));}renameColumn(t,e){this.nodes.push(new gr(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new g("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new vt(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new g("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ht([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new g("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Ne(new J(...t)));}foreignKey(t,e,r,n){if(this.sqlType==="sqlite")throw new g("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Ne(new J("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 g("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Ne(new J("unique",{columns:[t],constraintName:e?.constraintName??me(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new g("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 qe(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new g("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new g("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??me(this.table,t);this.nodes.push(new qe(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new g("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new qe(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new g("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new g("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new gt(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 bt(t)):r?this.nodes.push(new bt(t)):n&&this.nodes.push(new bt(t)),this)}};var se=class{constructor(t){if(this.sqlType=t||E.DB_TYPE,!this.sqlType)throw new g("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new x(t)}rawQuery(t){this.queryStatements.push(t);}async execute(){for(let t of this.queryStatements)this.rawQuery(t);}runFile(t){if(!qn__default.default.existsSync(t))throw new g("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=Mt__default.default.basename(t),r=Mt__default.default.extname(e);if(r!==".sql"&&r!==".txt")throw new g("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let o=qn__default.default.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 et(this.sqlType,[],t);e(n);let o=n.getNodes(),s=new b({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a={...r,...this.sqlType==="mysql"||this.sqlType==="mariadb"?n.getMysqlOptions()||{}:{}},l=new wr(t,o,n.getNamedConstraints(),r?.ifNotExists,a),u=s.parse([l]).sql,d=u.startsWith("create table")?u:`create table ${u}`;this.rawQuery(d),this.generateAutoUpdateTriggers(t,o);}alterTable(t,e){let r=[],n=new an(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 ye(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 Sr(t,e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}renameTable(t,e){let r=new ye(t,[new st(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}truncateTable(t){let e=new wt(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||ar(t,e.join("_")),o=new qr(t,e,n),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([o]).sql);}dropIndex(t,e){let r=new Cr(t,e),n=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addPrimaryKey(t,e){let r=new ye(t,[new ht(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??me(t,n.join("_")),s=new J("unique",{columns:n,constraintName:o}),a=new ye(t,[new Ne(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 qe(n),s=new ye(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)?me(t,e.join("_")):me(t,e),o=r?.constraintName??n,s=new qe(o),a=new ye(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new gt,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 ye(t,[new Ne(r)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}dropConstraint(t,e){let r=new qe(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 ye(t,[new Ne(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 qe(e),n=new ye(t,[r]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}createExtension(t,e=true){let r=new Nr(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 ln,cy,jt=class{constructor(t,e){Wl(this,ln);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new se(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=Fl(this,ln,cy).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(`;
140
+ `)}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 se(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}};ln=new WeakSet,cy=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 un=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 yy=i=>String(i??"").replace(/::[a-z_ ]+$/i,"").replace(/[()\s]/g,"").toLowerCase(),dh=/^(current[ _]?timestamp\d*|now\d*|getdate\d*|localtimestamp\d*|localtime\d*)$/,mh={postgres:i=>i.includes("nextval"),cockroachdb:i=>i.includes("unique_rowid")};var fy=(i,t)=>!!i.autoCreate&&dh.test(yy(t)),hy=(i,t,e)=>{if(t.type!=="increment"&&t.type!=="bigIncrement")return false;let r=mh[i];return r?r(yy(e)):false};var dn=class dn{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new un(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 se(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||Te(n.table,n.columns[0]),l=this.sql.schema().alterTable(n.table,u=>{let d=a||Te(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 se(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 se(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"&&dn.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||Te(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!==""&&!fy(t.modelColumn,t.dbColumns.defaultValue)&&!hy(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 se(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(T=>T.columnName===p);if(y)o=y.databaseName;else {let T=m?.databaseCaseConvention||"preserve";o=U(p,T);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.model();if(typeof o=="string"&&o){let p=m.getColumns(),h=p.find(y=>y.columnName===o);if(h)o=h.databaseName;else {let y=m.primaryKey||"id",T=p.find(w=>w.columnName===y);if(T)o=T.databaseName;else {let w=m?.databaseCaseConvention||"preserve";o=U(o||y,w);}}}else {let p=m.primaryKey||"id",y=m.getColumns().find(T=>T.columnName===p);if(y)o=y.databaseName;else {let T=m?.databaseCaseConvention||"preserve";o=U(p,T);}}}let s=this.models.find(m=>m.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,u=a.find(m=>m.columnName===l);if(u)l=u.databaseName;else {let m=s?.databaseCaseConvention||"preserve";l=U(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=U(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.manyToManyOptions.leftForeignKey,p=q(m),h=a.find(y=>y.columnName===p);if(h)l=h.databaseName;else {let y=s?.databaseCaseConvention||"preserve";l=U(p,y);}}let d=t.relation.onDelete?.toLowerCase(),c=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,m=>{let p=n||z(t.table,l,e);m.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[o]},constraintName:p,onDelete:d,onUpdate:c});}).toQueries()}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>sqlFormatter.format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};dn.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 Ut=dn;var cn=class cn{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}generateCode(t){let e=[],r=[],n=null,o={STRUCTURE_CREATION:"Structure creation",CONSTRAINT_CREATION:"Constraints and indexes",DESTRUCTIVE_OPERATIONS:"Destructive operations"};for(let s of t){s.phase!==n&&(n=s.phase,e.length>0&&e.push(""),e.push(`// ${o[n]}`));let{up:a,down:l}=this.generateOperationCode(s);a&&e.push(...a),l&&r.push(...l);}return {up:e,down:r}}generateOperationCode(t){switch(t.type){case "CREATE_TABLE":return this.generateCreateTableCode(t);case "ADD_COLUMN":return this.generateAddColumnCode(t);case "MODIFY_COLUMN":return this.generateModifyColumnCode(t);case "DROP_COLUMN":return this.generateDropColumnCode(t);case "CREATE_INDEX":return this.generateCreateIndexCode(t);case "DROP_INDEX":return this.generateDropIndexCode(t);case "ADD_FOREIGN_KEY":return this.generateAddForeignKeyCode(t);case "DROP_FOREIGN_KEY":return this.generateDropForeignKeyCode(t);case "ADD_UNIQUE_CONSTRAINT":return this.generateAddUniqueCode(t);case "DROP_CONSTRAINT":return this.generateDropConstraintCode(t);case "ADD_CHECK_CONSTRAINT":return this.generateAddCheckCode(t);case "ADD_PRIMARY_KEY":return this.generateAddPrimaryKeyCode(t);case "DROP_TABLE":return this.generateDropTableCode(t);case "MODIFY_PRIMARY_KEY":return this.generateModifyPrimaryKeyCode(t);default:return {up:null,down:null}}}generateCreateTableCode(t){let e=t.data,r=[];r.push(`this.schema.createTable(${this.quote(e.table)}, (table) => {`);for(let o of e.columns){let s=this.generateColumnCode(e.table,o,true);r.push(` ${s}`);}r.push("});");let n=[`this.schema.dropTable(${this.quote(e.table)});`];return {up:r,down:n}}generateAddColumnCode(t){let{table:e,column:r}=t.data,n=this.generateColumnCode(e,r,false),o=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.addColumn((col) => ${n.replace(/^table\./,"col.")});`,"});"],s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r.databaseName)});`,"});"];return {up:o,down:s}}generateModifyColumnCode(t){let{table:e,modelColumn:r,dbColumns:n}=t.data,o=this.generateColumnCodeForModify(e,r,n),s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.alterColumn((col) => ${o.replace(/^table\./,"col.")});`,"});"],a=[`// TODO: reverse column modification for ${this.quote(n.name)} on ${this.quote(e)}`];return {up:s,down:a}}generateDropColumnCode(t){let{table:e,column:r}=t.data,n=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r)});`,"});"],o=[`// TODO: reverse column drop for ${this.quote(r)} on ${this.quote(e)}`];return {up:n,down:o}}generateCreateIndexCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=(r?.getIndexes().find(u=>u.name===e.index)?.columns||[]).map(u=>r?.getColumns().find(c=>c.columnName===u)?.databaseName||u),s=o.length===1?this.quote(o[0]):`[${o.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.createIndex(${this.quote(e.table)}, ${s}, { constraintName: ${this.quote(e.index)} });`],l=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`];return {up:a,down:l}}generateDropIndexCode(t){let e=t.data,r=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`],n=[`// TODO: reverse index drop for ${this.quote(e.index)} on ${this.quote(e.table)}`];return {up:r,down:n}}generateAddForeignKeyCode(t){let e=t.data,{sourceColumn:r,referencedTable:n,referencedColumn:o,constraintName:s}=this.resolveRelationDetails(e),a=e.relation.onDelete?.toLowerCase(),l=e.relation.onUpdate?.toLowerCase(),u=[];s&&u.push(`constraintName: ${this.quote(s)}`),a&&u.push(`onDelete: ${this.quote(a)}`),l&&u.push(`onUpdate: ${this.quote(l)}`);let d=u.length>0?`, { ${u.join(", ")} }`:"",c=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.foreignKey(${this.quote(r)}, ${this.quote(n)}, ${this.quote(o)}${d});`,"});"],m=s||z(e.table,r,n),p=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.dropConstraint(${this.quote(m)});`,"});"];return {up:c,down:p}}generateDropForeignKeyCode(t){let e=t.constraint||t.data?.relation?.name;if(!e)return {up:null,down:null};let r=t.table||t.data?.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(e)});`,"});"],o=[`// TODO: reverse FK drop for ${this.quote(e)} on ${this.quote(r)}`];return {up:n,down:o}}generateAddUniqueCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=`[${(e.columns||[]).map(u=>r?.getColumns().find(c=>c.columnName===u)?.databaseName||u).map(u=>this.quote(u)).join(", ")}]`,s=e.name||"mandatory",a=[`this.schema.addUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(s)} });`],l=[`this.schema.dropUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(s)} });`];return {up:a,down:l}}generateDropConstraintCode(t){let e=t.data,r=t.table||e.table,n=t.constraint||e.name;if(!n||!r)return {up:null,down:null};if(e.type==="primary_key"){let a=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});"],l=[`// TODO: reverse primary key drop on ${this.quote(r)}`];return {up:a,down:l}}if(e.type==="unique"){let a=e.column,l=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],u=[`// TODO: reverse unique constraint drop for ${this.quote(a)} on ${this.quote(r)}`];return {up:l,down:u}}if(e.expression!==void 0){let a=[`this.schema.dropCheck(${this.quote(r)}, ${this.quote(n)});`],l=[`// TODO: reverse check constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:a,down:l}}let o=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],s=[`// TODO: reverse constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:o,down:s}}generateAddCheckCode(t){let e=t.data,r=[`this.schema.addCheck(${this.quote(e.table)}, ${this.quote(e.expression)}, { constraintName: ${this.quote(e.name)} });`],n=[`this.schema.dropCheck(${this.quote(e.table)}, ${this.quote(e.name)});`];return {up:r,down:n}}generateAddPrimaryKeyCode(t){let e=t.data,o=this.models.find(u=>u.table===e.table)?.getColumns().find(u=>u.columnName===e.columns[0])?.primaryKeyConstraintName||Te(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||Te(t,e.columnName);n+=`.primaryKey({ constraintName: ${this.quote(o)} })`;}return e.unsigned&&(n+=".unsigned()"),e.zerofill&&(n+=".zerofill()"),e.constraints?.default!==void 0&&(n+=`.default(${this.formatDefaultValue(e.constraints.default)})`),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n+";"}generateColumnCodeForModify(t,e,r){let n=this.generateColumnTypeCode(e);return e.constraints?.default!==void 0?n+=`.default(${this.formatDefaultValue(e.constraints.default)})`:r.defaultValue!=null&&r.defaultValue!==""&&(n+=".default(null)"),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n}generateColumnTypeCode(t){let e=t.databaseName;if(Array.isArray(t.type)){let s=t.type.map(a=>this.quote(a)).join(", ");return `table.enum(${this.quote(e)}, [${s}])`}let r=t.type;if(new Set(["uuid","ulid","boolean","year","json","jsonb","binary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]).has(r))return `table.${r}(${this.quote(e)})`;if(r==="timestamp"||r==="datetime"){let s=[];return t.withTimezone&&s.push("withTimezone: true"),t.precision!=null&&s.push(`precision: ${t.precision}`),s.length>0?`table.${r}(${this.quote(e)}, { ${s.join(", ")} })`:`table.${r}(${this.quote(e)})`}return r==="date"||r==="time"?t.precision!=null?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="increment"||r==="bigIncrement"?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:r==="decimal"||r==="numeric"?t.precision!=null?t.scale!=null?`table.${r}(${this.quote(e)}, ${t.precision}, ${t.scale})`:`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="float"||r==="double"||r==="real"?t.precision!=null&&t.precision!==10?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="longtext"||r==="mediumtext"||r==="tinytext"?`table.${r}(${this.quote(e)})`:new Set(["varchar","char","string","integer","tinyint","smallint","mediumint","bigint","biginteger","varbinary"]).has(r)?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:cn.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))}};cn.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 mn=cn;function ph(i){return i.replace(/\s+/g," ").trim()}function yh(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function fh(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 hh(i,t){return t.length===0?i:`${i} ${t.join(" ")}`}function Ve(i,t){let e=ph(t.toLowerCase()),r=yh(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}=fh(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?hh(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 pn=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(A=>A.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)),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 T=[...m].find(w=>{let N=w.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),C=new RegExp(`[\\["\\[]?${N}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),A=new RegExp(`[\\("\\[]?${N}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return C.test(y.expression)||A.test(y.expression)});if(T){let w=c.find(C=>(C.databaseName||C.columnName)===T),N=n.columns.find(C=>C.name===T);if(w&&N?.enumValues&&Array.isArray(w.type)){let C=[...w.type].sort(),A=[...N.enumValues].sort();if(!(C.length===A.length&&C.every((O,I)=>O===A[I]))){e.data.checksToDrop.push({table:r.table,name:y.name});let O=e.sql.getDbType(),I=O==="mssql"?"[":'"',L=O==="mssql"?"]":'"',H=w.type.map(v=>`'${v.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:y.name,expression:`${I}${T}${L} IN (${H})`});}}}else e.data.checksToDrop.push({table:r.table,name:y.name});}for(let y of o.columns){let T=n.columns.find(C=>C.name===y.databaseName||C.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||Be(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(C=>C.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 h=r.primaryKey;if(h&&!n.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[h]}),n.primaryKey&&!h&&e.data.primaryKeysToDrop.push({table:r.table,columns:n.primaryKey.columns,name:n.primaryKey.name}),h&&n.primaryKey){let y=r.getColumns().find(T=>T.columnName===h);y&&!e.arePrimaryKeysEqual(n.primaryKey,y)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:n.primaryKey,modelPrimaryKey:h});}})),await e.processManyToMany(),await e.removeFkChurnByName(),e}getSqlStatements(){let t=this.getSqlStatementsByPhase();return Object.values(t).flat().filter(r=>{let n=r.trim();return n?!this.emptyStatements.some(o=>o.test(n)):false})}getCodeStatements(){let e=new Ut(this.sql).generateOperations(this.data);return new mn(this.sql).generateCode(e)}getSqlStatementsByPhase(){let t=new Ut(this.sql),e=t.generateOperations(this.data),r=t.formatSqlStatements(e),n={STRUCTURE_CREATION:[],CONSTRAINT_CREATION:[],DESTRUCTIVE_OPERATIONS:[]};for(let o of r)n[o.phase].push(...o.sqlStatements);return n}areColumnsEqual(t,e,r=[]){let n=t.name===e.databaseName,o=this.sql.getDbType(),s=Ve(o,t.dataType),a=typeof e.type=="string"?Ve(o,e.type):void 0,l=s.split(" ").filter(d=>d!=="unsigned"&&d!=="zerofill").join(" ");if(a&&n&&(n=l===a),Array.isArray(e.type)&&(o==="mysql"||o==="mariadb")){let d=[...e.type].sort(),c=t.enumValues?[...t.enumValues].sort():null;c&&n&&(n=d.length===c.length&&d.every((m,p)=>m===c[p]));}e.length!=null&&t.length!=null&&n&&(n=t.length===e.length);let u=a==="real"||a==="double"||a==="float";if(e.precision!=null&&t.precision!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.precision===e.precision)),e.scale!=null&&t.scale!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.scale===e.scale)),typeof e.type=="string"&&(a==="timestamp"||a==="time")&&(o==="postgres"||o==="cockroachdb")&&e.withTimezone!==void 0&&t.withTimezone!==void 0&&n&&(n=!!t.withTimezone==!!e.withTimezone),e.constraints?.nullable!==void 0){let d=e.constraints.nullable,c=t.isNullable;n=n&&d===c;}if(o==="mysql"||o==="mariadb"){if(e.unsigned!==void 0){let d=e.unsigned??false,c=t.unsigned??false;n&&(n=d===c);}if(e.zerofill!==void 0){let d=e.zerofill??false,c=t.zerofill??false;n&&(n=d===c);}}if(e.stringMode!==void 0){let d=e.stringMode??false,c=t.stringMode??false;n&&(n=d===c);}return n}areRelationsEqual(t,e){let r=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(h=>h.columnName===d),m=u.table,p=c?.databaseName||d;n=n&&t.referencedTable===m&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===p;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let u=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",h=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]===h}arePrimaryKeysEqual(t,e){if(t.columns.length!==1)return false;let n=t.columns[0]===e.databaseName,o=this.sql.getDbType();if(["mysql","mariadb"].includes(o))return n;let a=!t.name||!e.primaryKeyConstraintName||t.name===e.primaryKeyConstraintName;return n&&a}getDefaultChange(t){let e=this.sql.getDbType(),r=Ve(e,t.dbColumns.dataType),n=typeof t.modelColumn.type=="string"?Ve(e,t.modelColumn.type):void 0;if(n&&r!==n||t.modelColumn.length!=null&&t.dbColumns.length!=null&&t.dbColumns.length!==t.modelColumn.length||t.modelColumn.precision!=null&&t.dbColumns.precision!=null&&t.dbColumns.precision!==t.modelColumn.precision||t.modelColumn.scale!=null&&t.dbColumns.scale!=null&&t.dbColumns.scale!==t.modelColumn.scale||(this.sql.getDbType()==="postgres"||this.sql.getDbType()==="cockroachdb")&&typeof t.modelColumn.type=="string"&&(n==="timestamp"||n==="time")&&t.modelColumn.withTimezone!==void 0&&t.dbColumns.withTimezone!==void 0&&!!t.dbColumns.withTimezone!=!!t.modelColumn.withTimezone)return false;let s=t.modelColumn.constraints?.default!==void 0,a=t.dbColumns.defaultValue!==null&&t.dbColumns.defaultValue!==void 0,l=t.modelColumn.type==="bigIncrement"||t.modelColumn.type==="increment",u=typeof t.dbColumns.defaultValue=="string"&&t.dbColumns.defaultValue.includes("nextval(");if(s&&!a)return "set";if(!s&&a)return l&&u||t.modelColumn.type==="uuid"&&this.isImplicitUuidDefault(e,t.dbColumns.defaultValue)?false:"drop";if(s&&a){let d=String(t.dbColumns.defaultValue),c=String(t.modelColumn.constraints?.default),m=this.normalizeDefaultValue(e,r,d),p=this.normalizeDefaultValue(e,n||r,c);return m!==p?"set":false}return false}isImplicitUuidDefault(t,e){let r=String(e??"").replace(/[()\s]/g,"").toLowerCase();return ({postgres:["gen_random_uuid"],cockroachdb:["gen_random_uuid"],mysql:["uuid"],mariadb:["uuid"],mssql:["newid"],sqlite:["lower(hex(randomblob(16)))"]}[t]??[]).includes(r)}normalizeDefaultValue(t,e,r){let n=String(r).trim();if(!n)return n;if(t==="postgres"||t==="cockroachdb"){if(e==="json"||e==="jsonb")try{n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::(jsonb?|[a-zA-Z_ ]+[\[\]]*)/g,"");let s=n.match(/^'(.*)'$/s);if(s&&(n=s[1]),n==="{}"||n==="")return "{}";let a=JSON.parse(n);return JSON.stringify(a)}catch{}n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::[a-zA-Z_ ]+[\[\]]*/g,"");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),/^true$/i.test(n)?"true":/^false$/i.test(n)?"false":/^null$/i.test(n)?"null":(n)}if(t==="mysql"||t==="mariadb"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);if(o&&(n=o[1]),/^current_timestamp(?:\(\d+\))?$/i.test(n))return "current_timestamp";if(e==="boolean"){if(/^1$/.test(n))return "true";if(/^0$/.test(n))return "false"}return n}if(t==="sqlite"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),n.toLowerCase()}return n}async processManyToMany(){let t=new Set;for(let e of this.models){let r=e.getRelations();for(let n of r){if(n.type!=="manyToMany"||!n.manyToManyOptions||n.manyToManyOptions.wasModelProvided)continue;let o=q(n.manyToManyOptions.throughModel);if(t.has(o))continue;t.add(o);let s=this.models.find(v=>v.table===n?.manyToManyOptions?.primaryModel),a=n.model();if(!s||!a)continue;let l=s.primaryKey||"id",u=a.primaryKey||"id",d=s.getColumns().find(v=>v.columnName===l),c=a.getColumns().find(v=>v.columnName===u);if(!d||!c)continue;let m=q(n.manyToManyOptions.leftForeignKey)||l,p=q(n.manyToManyOptions.rightForeignKey)||u,h=await this.sql.getTableSchema(o);if(!h.columns.length){this.data.tablesToAdd.push({table:o,columns:[this.clonePkAsColumn(d,m),this.clonePkAsColumn(c,p)]}),this.pushM2mFkRelations({throughTable:o,leftModel:s,rightModel:a,leftFkName:m,rightFkName:p,onDelete:n.onDelete,onUpdate:n.onUpdate,constraintName:void 0});continue}let y=this.clonePkAsColumn(d,m),T=this.clonePkAsColumn(c,p),w=h.columns.find(v=>v.name===m),N=h.columns.find(v=>v.name===p),C=w?this.areColumnsEqual(w,y,h.indexes):false,A=N?this.areColumnsEqual(N,T,h.indexes):false;for(let v of h.foreignKeys){let Z=v.referencedTable===s.table,ve=v.referencedTable===a.table;if(!Z&&!ve)continue;let zt=Z?m:p,At=v.columns[0];At&&At!==zt&&(this.data.relationsToDrop.push({table:o,relation:v}),At!==m&&At!==p&&this.data.columnsToDrop.push({table:o,column:At}));}let B={};C||(B[y.databaseName]=y),A||(B[T.databaseName]=B[T.databaseName]||T);for(let v of Object.keys(B))this.data.columnsToAdd.push({table:o,column:B[v]});let O=this.buildBelongsToRelation(o,()=>s,m,l,void 0,n.onDelete,n.onUpdate),I=this.buildBelongsToRelation(o,n.model,p,u,void 0,n.onDelete,n.onUpdate),L=h.foreignKeys.find(v=>v.referencedTable===s.table&&v.columns.length===1&&v.columns[0]===m),H=h.foreignKeys.find(v=>v.referencedTable===a.table&&v.columns.length===1&&v.columns[0]===p);if(!L){let v=h.foreignKeys.find(Z=>Z.referencedTable===s.table);v&&this.data.relationsToDrop.push({table:o,relation:v}),this.data.relationsToAdd.push(O);}if(!H){let v=h.foreignKeys.find(Z=>Z.referencedTable===a.table);v&&this.data.relationsToDrop.push({table:o,relation:v}),this.data.relationsToAdd.push(I);}}}}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)||z(n.table,d,a.model().table);s.add(c);}r.set(n.table,s);}this.data.relationsToAdd=await Promise.all(this.data.relationsToAdd.map(async n=>{let o=await this.sql.getTableSchema(n.table),s=this.models.find(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 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 T=c.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),h=e.get(n.table)||new Set;if(m||p&&h.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,C=n.table===y&&n.relation.columnName===w&&n.relation.model().table!==s?.table,A=await this.sql.getTableSchema(y),B=A.foreignKeys.some(I=>I.columns.length===1&&I.columns[0]===T&&I.referencedTable===(s?.table||"")),O=A.foreignKeys.some(I=>I.columns.length===1&&I.columns[0]===w&&I.referencedTable===n.relation.model().table);if(N&&B||C&&O)return null}return n})).then(n=>n.filter(Boolean)),this.data.relationsToDrop=await Promise.all(this.data.relationsToDrop.map(async n=>{let o=this.models.find(u=>u.table===n.table);if(!o)return n;let s=o.getRelations(),a=o.getColumns();return s.some(u=>{if(u.type!=="belongsTo")return false;let c=a.find(T=>T.columnName===u.foreignKey)?.databaseName||u.foreignKey,m=u.model(),p=m.primaryKey||"id",y=m.getColumns().find(T=>T.columnName===p)?.databaseName||p;return n.relation.columns.length===1&&n.relation.columns[0]===c&&n.relation.referencedTable===m.table&&n.relation.referencedColumns.length===1&&n.relation.referencedColumns[0]===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 gy=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??nt()});Ct();Ct();de();var yn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;let n=e.coerceNumericTypes&&!e.driverOptions?.types?{getTypeParser:(o,s)=>{let a=!s||s==="text";return a&&o===20?l=>BigInt(l):a&&o===1700?l=>Number.parseFloat(l):r.types.getTypeParser(o,s)}}:void 0;this.pool=new r.Pool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions,...n?{types:n}:{}});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.connect()}releaseConnection(t){t?.release();}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION"),e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=0,o=t.replace(/\?/g,()=>`$${++n}`);return (r.connection??this.pool).query(o,e)}extract(t,e){return e==="rows"?t.rows:e==="raw"?t:t.rowCount}async stream(t,e,r,n){let o=r.connection,s=!o,a=o??await this.pool.connect(),l=await import('pg-query-stream').catch(()=>{throw new Q("pg-query-stream")}),u=new stream.PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),d=0,c=t.replace(/\?/g,()=>`$${++d}`),m=new l.default(c,e,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),p=a.query(m),h=0,y=false,T=false,w=N=>{if(s)try{a.release(N);}catch{}};return p.on("data",N=>{if(n.onData){h++,Promise.resolve(n.onData(u,N)).then(()=>{h--,y&&h===0&&!T&&(w(),u.end());}).catch(C=>{T=true,w(C),u.destroy(C);});return}u.write(N);}),p.on("end",()=>{y=true,h===0&&!T&&(w(),u.end());}),p.on("error",N=>{T=true,w(N),u.destroy(N);}),u}};var fn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=r.createPool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.getConnection()}releaseConnection(t){t?.release();}async beginTransaction(t,e){e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await t.beginTransaction();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){return (r.connection??this.pool).query(t,e)}extract(t,e){let r=t;return e==="affectedRows"?r[0]?.affectedRows??0:e==="raw"?t:r[0]}async stream(t,e,r,n){let o=this.pool,s=r.connection??await o.getConnection(),a=new stream.PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),u=s.connection.query(t,e).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),d=0,c=false,m=false,p=()=>{try{s.release();}catch{}};return u.on("data",h=>{if(n.onData){d++,Promise.resolve(n.onData(a,h)).then(()=>{d--,c&&d===0&&!m&&(p(),a.end());}).catch(y=>{m=true,p(),a.destroy(y);});return}a.write(h);}),u.on("end",()=>{c=true,d===0&&!m&&(p(),a.end());}),u.on("error",h=>{m=true,p(),a.destroy(h);}),a.on("close",()=>{p();}),a}};var hn=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 g("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 Rl(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);});})}},Rl=class extends stream.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);});}};de();var gn=class{constructor(t,e,r){this.dialect="mssql";this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;let n=e.driverOptions,{options:o,...s}=n??{};this.pool=new r.ConnectionPool({server:e.host??"localhost",port:e.port,database:e.database,user:e.username,password:e.password,...s,options:{trustServerCertificate:E.MSSQL_TRUST_SERVER_CERTIFICATE??void 0,...o,abortTransactionOnError:false,enableImplicitTransactions:false}});}async createPool(){await this.pool.connect();}async closePool(){await this.pool.close();}async reserveConnection(){return this.pool.transaction()}releaseConnection(){}async beginTransaction(t,e){if(e.isolationLevel){let r=await this.getMssqlTransactionLevel(e.isolationLevel);await t.begin(r);return}await t.begin();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){let n=this.pool,o=r.connection?r.connection.request():n.request();e.forEach((l,u)=>{o.input(`p${u}`,l);});let s=0,a=t.replace(/\?|@(\d+)/g,()=>`@p${s++}`);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 stream.PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),a=o.request();a.stream=true,e.forEach((p,h)=>{a.input(`p${h}`,p);});let l=0,u=t.replace(/\?|@(\d+)/g,()=>`@p${l++}`),d=0,c=false,m=false;return a.on("row",p=>{if(!m){if(n.onData){d++,Promise.resolve(n.onData(s,p)).then(()=>{d--,c&&d===0&&!m&&s.end();}).catch(h=>{m=true,s.destroy(h);});return}s.write(p);}}),a.on("error",p=>{m=true,s.destroy(p);}),a.on("done",()=>{c=true,d===0&&!m&&s.end();}),a.query(u),s}async getMssqlTransactionLevel(t){let e=await import('mssql').then(r=>r.default.ISOLATION_LEVEL).catch(r=>{throw _.error(r),new Q("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 g("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${t}`)}}};var Nh=()=>{exports.registerDriverAdapter({name:"pg",dialects:["postgres","cockroachdb"],create:async({dialect:i,input:t})=>{let e=(await oe.getDriver(i)).client;return new yn(i,t,e)}}),exports.registerDriverAdapter({name:"mysql2",dialects:["mysql","mariadb"],create:async({dialect:i,input:t})=>{let e=(await oe.getDriver(i)).client;return new fn(i,t,e)}}),exports.registerDriverAdapter({name:"sqlite3",dialects:["sqlite"],create:async({dialect:i,input:t})=>{let e=(await oe.getDriver(i)).client;return new hn(i,t,e)}}),exports.registerDriverAdapter({name:"mssql",dialects:["mssql"],create:async({dialect:i,input:t})=>{let e=(await oe.getDriver(i)).client;return new gn(i,t,e)}});};Nh();var Oh=async i=>{if(i==="bun"){await(await Promise.resolve().then(()=>(_y(),Ry))).registerBunDrivers();return}if(i==="web"){(await Promise.resolve().then(()=>(xl(),Al))).registerWebDrivers();return}if(i==="react-native"){await(await Promise.resolve().then(()=>(xl(),Al))).registerReactNativeDrivers();return}},Nn=async(i,t)=>{let e=Gt(t?.jsEnvironment);await Oh(e);let r=await Ty(i,e,t?.driver,t);return await r.createPool(),r};var Jt=class Jt{constructor(){}static run(t,e){return Jt.storage.run(t,e)}static getTransaction(){return Jt.storage.getStore()}};Jt.storage=new async_hooks.AsyncLocalStorage;var Je=Jt;var Ht=class i{constructor(t,e,r=false,n=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=Pe(te().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 Je.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")&&mt("BEGIN TRANSACTION",this.sql.logs);let t=this.sql.driverAdapter,e=this.sql.sqlConnection;if(!t||!e)throw new g("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 g("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")&&mt("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 g("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 g("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")&&mt("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 g("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 g("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}};var Dl=Symbol.for("hysteria.orm.SqlDataSource"),Dy,Iy,Ie=class i extends(Iy=Nt,Dy=Dl,Iy){constructor(e){super(e);this[Dy]=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=te().crypto.randomUUID();this.logicalSourceId=te().crypto.randomUUID();this.cacheAdapter=new $r;this.migrationConfig={path:E.MIGRATION_PATH||"database/migrations",lock:true,transactional:true,lockTimeout:3e4};this.seederConfig={path:"database/seeders"};this.zodEngine=null;this.lazyLoad=false;this.connecting=null;this.sqlType=e?.type||this.type;let r=e;this.inputDetails={...e,type:this.sqlType,host:r?.host??this.host,port:r?.port??this.port,username:r?.username??this.username,password:r?.password??this.password,database:r?.database??this.database,logs:r?.logs??this.logs},this.inputDetails.connectionPolicies=e?.connectionPolicies||{retry:{maxRetries:0,delay:0}},this.inputDetails.queryFormatOptions=e?.queryFormatOptions||{language:It(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&&Dl in e&&e[Dl]===true}get isClsEnabled(){return this.clsEnabled}getOnSlaveServerFailure(){return this.onSlaveServerFailure}addObserver(e){return this.observerChain||(this.observerChain=new yt([])),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 g("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");try{this.driverAdapter=await Nn(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 Nn(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 g("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=Je.getTransaction();if(e?.isActive&&e.sql.logicalSourceId===this.logicalSourceId)return e.sql}return null}async useCache(e,r,...n){if(!this.cacheAdapter)throw new g("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new g("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=ql(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 g("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new g("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=ql(JSON.stringify(r)),a=s?`${e}:${s}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new g("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 Nn(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 k(gy(e,r),n);return r?.alias&&o.table(e,r.alias),o}return new Le(e,n)}schema(){if(!this.isConnected&&!this.lazyLoad)throw new g("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new jt(this,this.getDbType())}async startGlobalTransaction(e){for(;this.globalTransactionLock;)await this.globalTransactionLock;if(this.globalTransaction?.isActive)throw new g("SqlDataSource::startGlobalTransaction","GLOBAL_TRANSACTION_ALREADY_STARTED");let r=()=>{};this.globalTransactionLock=new Promise(n=>{r=n;});try{let n=await this.clone();return n.sqlConnection=await n.getConnection(),this.globalTransaction=new Ht(n,e?.isolationLevel),await this.globalTransaction.transaction(),this.globalTransaction}finally{r(),this.globalTransactionLock=null;}}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new g("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?Je.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 Ht(s,n?.isolationLevel);if(await a.transaction(),typeof e=="function")try{let l=this.clsEnabled?await Je.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 g("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");let r=this.getTransactionBoundSqlDataSource()??this;return new ze(e,r)}getPool(){if(!this.sqlPool)throw this.lazyLoad?new g("SqlDataSource::getPool - call ensureConnected() or connect() first when using lazyLoad","CONNECTION_NOT_ESTABLISHED"):new g("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 g("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
141
  SELECT table_schema AS schema_name, table_name
142
142
  FROM information_schema.tables
143
143
  WHERE table_type = 'BASE TABLE'
@@ -163,7 +163,7 @@ Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]
163
163
  WHERE table_type = 'BASE TABLE'
164
164
  AND table_schema NOT IN ('information_schema', 'pg_catalog', 'mysql', 'sys', 'performance_schema')
165
165
  ORDER BY table_schema, table_name;
166
- `;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 pn.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=>G(e,r,a,this.getDbType(),"raw"));let s=this.getTransactionBoundSqlDataSource()??this;return G(e,r,s,this.getDbType(),"raw")}rawStatement(e){return new x(e)}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 uy(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new g("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await Sl(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new g("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await ly(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}loadZodEngine(e){return this.zodEngine=e,ae.zodEngine=e,this}isAdminJsEnabled(){return !!this.adminJsOptions?.enabled}async getTableInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Gr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return [];throw l}let s=this.getDbType();if(s==="sqlite")return o.map(l=>{let u=String(l.type||"").toLowerCase(),d=Ve(s,u),c=new Set(["text","varchar","char"]);return {name:l.name,dataType:d,isNullable:l.notnull===0,defaultValue:l.dflt_value??null,withTimezone:null,stringMode:c.has(d)}});let a=o.map(l=>{let u=String(l.column_name||l.COLUMN_NAME||l.name||""),d=String(l.data_type||l.DATA_TYPE||l.type||"").toLowerCase(),c=Ve(s,d),m=l.is_nullable!==void 0?l.is_nullable:l.IS_NULLABLE!==void 0?l.IS_NULLABLE:void 0,p=typeof m=="string"?m.toLowerCase()!=="no":typeof m=="boolean"?m:l.notnull!==void 0?l.notnull===0:true,h=l.column_default??l.COLUMN_DEFAULT??l.defaultValue??l.dflt_value??null,y=s==="mariadb"&&h==="NULL"?null:h,T=l.char_length!=null?Number(l.char_length):null,S=l.numeric_precision!=null?Number(l.numeric_precision):null,N=l.numeric_scale!=null?Number(l.numeric_scale):null,C=l.timezone!=null?!!l.timezone:/with time zone/.test(String(l.column_type||l.udt_name||d||"").toLowerCase()),A=null,B=String(l.column_type||l.COLUMN_TYPE||""),O=B.match(/^enum\((.+)\)$/i);O&&(A=O[1].split(",").map(ve=>ve.trim().replace(/^'|'$/g,"")));let I=B.toLowerCase(),L=I.includes(" unsigned"),H=I.includes(" zerofill"),Z=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:T,precision:S,scale:N,withTimezone:C,enumValues:A,unsigned:L,zerofill:H,stringMode:Z}});if(s==="postgres"||s==="mssql"){let l=[];try{l=await this.getCheckConstraintInfo(e);}catch{}if(l.length>0)for(let u of a){let d=u.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c=l.find(m=>{let p=m.expression,h=new RegExp(`[\\["\\[]?${d}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),y=new RegExp(`[\\("\\[]?${d}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return h.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(h=>h.trim().replace(/^'|'$/g,""));else {let h=m.match(/ARRAY\[([^\]]+)\]/i);h&&(u.enumValues=h[1].split(",").map(y=>y.trim().replace(/::[a-z ]+$/i,"").replace(/^'|'$/g,"")));}}}}return a}async hasTable(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Yr(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 Zr(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 Xr(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"?a.length>0:false}async hasPrimaryKey(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new en(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 tn(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 rn]).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 nn(e)]).sql,o=[];try{let s=await this.rawQuery(n);o=this.extractRowsFromRawResult(s);}catch{return []}return o.map(s=>s.name??s.column_name)}async getIndexInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Hr(e)]).sql,o=this.getDbType(),s=[];try{let l=await this.rawQuery(n);s=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return [];throw l}if(o==="mysql"||o==="mariadb"){let l=new Map;for(let u of s){let d=u.Key_name,c=u.Non_unique===0,m=l.get(d)||{name:d,columns:[],isUnique:c};m.columns.push(u.Column_name),l.set(d,m);}return Array.from(l.values())}if(o==="postgres"||o==="cockroachdb"){let l=new Map;for(let u of s){let d=u.index_name,c=!!u.is_unique,m=l.get(d)||{name:d,columns:[],isUnique:c};m.columns.push(u.column_name),l.set(d,m);}return Array.from(l.values())}let a=[];for(let l of s){let u=l.name,d=!!l.unique,c=await this.rawQuery(`PRAGMA index_info(${u})`),p=this.extractRowsFromRawResult(c).map(h=>h.name);a.push({name:u,columns:p,isUnique:d});}return a}async getForeignKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Jr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let u of o){let d=Number(u.id),c=l.get(d)||{name:void 0,columns:[],referencedTable:String(u.table),referencedColumns:[],onDelete:u.on_delete??null,onUpdate:u.on_update??null};c.columns.push(String(u.from)),c.referencedColumns.push(String(u.to)),l.set(d,c);}return Array.from(l.values())}let a=new Map;for(let l of o){let u=String(l.name||""),d=u||`${l.referenced_table}_${l.column_name}`,c=a.get(d)||{name:u||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};c.columns.push(String(l.column_name)),c.referencedColumns.push(String(l.referenced_column)),a.set(d,c);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new zr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return;throw l}if(!o.length)return;let s=o.map(l=>String(l.column_name));return {name:o[0].name||void 0,columns:s}}async getCheckConstraintInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Vr(e)]).sql,o=[];try{let a=await this.rawQuery(n);o=this.extractRowsFromRawResult(a);}catch(a){if(at(this.getDbType(),a))return [];throw a}let s=a=>this.getDbType()==="mariadb"&&/^json_valid\(/i.test(a);return o.filter(a=>!s(String(a.expression))).map(a=>({name:String(a.name),expression:String(a.expression)}))}async acquireLock(e="hysteria_lock",r=3e4){let n=this.getDbType();try{switch(n){case "postgres":case "cockroachdb":{let o=this.hashStringToLockId(e),a=(await this.rawQuery("SELECT pg_try_advisory_lock($1) as pg_try_advisory_lock",[o])).rows?.[0]?.pg_try_advisory_lock;return a===!0||a==="t"}case "mysql":case "mariadb":{let o=Math.floor(r/1e3);return (await this.rawQuery("SELECT GET_LOCK(?, ?) as lock_result",[e,o]))[0]?.[0]?.lock_result===1}case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_getapplock @Resource = @p0, @LockMode = 'Exclusive', @LockOwner = 'Session', @LockTimeout = @p1; SELECT @result as lock_result",[e,r])).recordset?.[0]?.lock_result??-999)>=0;case "sqlite":return _.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.hashStringToLockId(e),s=(await this.rawQuery("SELECT pg_advisory_unlock($1) as pg_advisory_unlock",[n])).rows?.[0]?.pg_advisory_unlock;return s===!0||s==="t"}case "mysql":case "mariadb":return (await this.rawQuery("SELECT RELEASE_LOCK(?) as release_result",[e]))[0]?.[0]?.release_result===1;case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_releaseapplock @Resource = @p0, @LockOwner = 'Session'; SELECT @result as release_result",[e])).recordset?.[0]?.release_result??-999)>=0;case "sqlite":return !0;default:return _.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}}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 Ey=class{constructor(t){this.chain=new yt(t);}get chainInstance(){return this.chain}add(t){this.chain.add(t);}};Ct();function vy(i,t){if(t instanceof Ie)return t;let e=typeof t=="function"?t(i):i[t];if(!e||!(e instanceof Ie))throw new g("atomic::resolveSqlDataSource","ATOMIC_DATASOURCE_RESOLUTION_FAILED");return e}function _t(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 g("atomic::descriptor","ATOMIC_INVALID_METHOD");return o.value=async function(...a){let l;if(e.dataSource?l=vy(this,e.dataSource):_t.sqlDataSource?l=_t.sqlDataSource:l=vy(this,"sql"),!l.isClsEnabled)throw new g("atomic::descriptor","ATOMIC_CLS_DISABLED");return await l.transaction(async()=>await s.apply(this,a),{isolationLevel:e.isolationLevel})},o}}(t=>{})(_t||(_t={}));var Il=class{constructor(t){this.dbType=t,this.migrationName=Mt__default.default.basename(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)))),this.schema=new se(this.dbType);}};async function vh(i){try{return import(url.pathToFileURL(i).href)}catch{let e=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)))(i);return {default:e.default||e,...e}}}async function $h(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(url.pathToFileURL(r).href)}finally{await qn__default.default.promises.unlink(r).catch(()=>{});}}async function By(i,t){let e=Mt__default.default.isAbsolute(i)?i:Mt__default.default.resolve(process.cwd(),i);return e.endsWith(".ts")?$h(e):vh(e)}var El=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
166
+ `;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 pn.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=>G(e,r,a,this.getDbType(),"raw"));let s=this.getTransactionBoundSqlDataSource()??this;return G(e,r,s,this.getDbType(),"raw")}rawStatement(e){return new x(e)}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 uy(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new g("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await Sl(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new g("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await ly(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}loadZodEngine(e){return this.zodEngine=e,ae.zodEngine=e,this}isAdminJsEnabled(){return !!this.adminJsOptions?.enabled}async getTableInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Gr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return [];throw l}let s=this.getDbType();if(s==="sqlite")return o.map(l=>{let u=String(l.type||"").toLowerCase(),d=Ve(s,u),c=new Set(["text","varchar","char"]);return {name:l.name,dataType:d,isNullable:l.notnull===0,defaultValue:l.dflt_value??null,withTimezone:null,stringMode:c.has(d)}});let a=o.map(l=>{let u=String(l.column_name||l.COLUMN_NAME||l.name||""),d=String(l.data_type||l.DATA_TYPE||l.type||"").toLowerCase(),c=Ve(s,d),m=l.is_nullable!==void 0?l.is_nullable:l.IS_NULLABLE!==void 0?l.IS_NULLABLE:void 0,p=typeof m=="string"?m.toLowerCase()!=="no":typeof m=="boolean"?m:l.notnull!==void 0?l.notnull===0:true,h=l.column_default??l.COLUMN_DEFAULT??l.defaultValue??l.dflt_value??null,y=s==="mariadb"&&h==="NULL"?null:h,T=l.char_length!=null?Number(l.char_length):null,w=l.numeric_precision!=null?Number(l.numeric_precision):null,N=l.numeric_scale!=null?Number(l.numeric_scale):null,C=l.timezone!=null?!!l.timezone:/with time zone/.test(String(l.column_type||l.udt_name||d||"").toLowerCase()),A=null,B=String(l.column_type||l.COLUMN_TYPE||""),O=B.match(/^enum\((.+)\)$/i);O&&(A=O[1].split(",").map(ve=>ve.trim().replace(/^'|'$/g,"")));let I=B.toLowerCase(),L=I.includes(" unsigned"),H=I.includes(" zerofill"),Z=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:T,precision:w,scale:N,withTimezone:C,enumValues:A,unsigned:L,zerofill:H,stringMode:Z}});if(s==="postgres"||s==="mssql"){let l=[];try{l=await this.getCheckConstraintInfo(e);}catch{}if(l.length>0)for(let u of a){let d=u.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c=l.find(m=>{let p=m.expression,h=new RegExp(`[\\["\\[]?${d}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),y=new RegExp(`[\\("\\[]?${d}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return h.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(h=>h.trim().replace(/^'|'$/g,""));else {let h=m.match(/ARRAY\[([^\]]+)\]/i);h&&(u.enumValues=h[1].split(",").map(y=>y.trim().replace(/::[a-z ]+$/i,"").replace(/^'|'$/g,"")));}}}}return a}async hasTable(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Yr(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 Zr(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 Xr(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"?a.length>0:false}async hasPrimaryKey(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new en(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 tn(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 rn]).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 nn(e)]).sql,o=[];try{let s=await this.rawQuery(n);o=this.extractRowsFromRawResult(s);}catch{return []}return o.map(s=>s.name??s.column_name)}async getIndexInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Hr(e)]).sql,o=this.getDbType(),s=[];try{let l=await this.rawQuery(n);s=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return [];throw l}if(o==="mysql"||o==="mariadb"){let l=new Map;for(let u of s){let d=u.Key_name,c=u.Non_unique===0,m=l.get(d)||{name:d,columns:[],isUnique:c};m.columns.push(u.Column_name),l.set(d,m);}return Array.from(l.values())}if(o==="postgres"||o==="cockroachdb"){let l=new Map;for(let u of s){let d=u.index_name,c=!!u.is_unique,m=l.get(d)||{name:d,columns:[],isUnique:c};m.columns.push(u.column_name),l.set(d,m);}return Array.from(l.values())}let a=[];for(let l of s){let u=l.name,d=!!l.unique,c=await this.rawQuery(`PRAGMA index_info(${u})`),p=this.extractRowsFromRawResult(c).map(h=>h.name);a.push({name:u,columns:p,isUnique:d});}return a}async getForeignKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Jr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let u of o){let d=Number(u.id),c=l.get(d)||{name:void 0,columns:[],referencedTable:String(u.table),referencedColumns:[],onDelete:u.on_delete??null,onUpdate:u.on_update??null};c.columns.push(String(u.from)),c.referencedColumns.push(String(u.to)),l.set(d,c);}return Array.from(l.values())}let a=new Map;for(let l of o){let u=String(l.name||""),d=u||`${l.referenced_table}_${l.column_name}`,c=a.get(d)||{name:u||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};c.columns.push(String(l.column_name)),c.referencedColumns.push(String(l.referenced_column)),a.set(d,c);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new zr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(at(this.getDbType(),l))return;throw l}if(!o.length)return;let s=o.map(l=>String(l.column_name));return {name:o[0].name||void 0,columns:s}}async getCheckConstraintInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Vr(e)]).sql,o=[];try{let a=await this.rawQuery(n);o=this.extractRowsFromRawResult(a);}catch(a){if(at(this.getDbType(),a))return [];throw a}let s=a=>this.getDbType()==="mariadb"&&/^json_valid\(/i.test(a);return o.filter(a=>!s(String(a.expression))).map(a=>({name:String(a.name),expression:String(a.expression)}))}async acquireLock(e="hysteria_lock",r=3e4){let n=this.getDbType();try{switch(n){case "postgres":case "cockroachdb":{let o=this.hashStringToLockId(e),s=this.driverAdapter;if(!s)return !1;let a=await this.getLockConnection(),l=await s.execute("SELECT pg_try_advisory_lock($1) as pg_try_advisory_lock",[o],{returning:"rows",connection:a}),d=s.extract(l,"rows")?.[0]?.pg_try_advisory_lock;return d===!0||d==="t"?(this.lockKeyToId.set(e,o),!0):!1}case "mysql":case "mariadb":{let o=Math.floor(r/1e3);return (await this.rawQuery("SELECT GET_LOCK(?, ?) as lock_result",[e,o]))[0]?.[0]?.lock_result===1}case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_getapplock @Resource = @p0, @LockMode = 'Exclusive', @LockOwner = 'Session', @LockTimeout = @p1; SELECT @result as lock_result",[e,r])).recordset?.[0]?.lock_result??-999)>=0;case "sqlite":return _.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 g("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 Ey=class{constructor(t){this.chain=new yt(t);}get chainInstance(){return this.chain}add(t){this.chain.add(t);}};Ct();function vy(i,t){if(t instanceof Ie)return t;let e=typeof t=="function"?t(i):i[t];if(!e||!(e instanceof Ie))throw new g("atomic::resolveSqlDataSource","ATOMIC_DATASOURCE_RESOLUTION_FAILED");return e}function _t(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 g("atomic::descriptor","ATOMIC_INVALID_METHOD");return o.value=async function(...a){let l;if(e.dataSource?l=vy(this,e.dataSource):_t.sqlDataSource?l=_t.sqlDataSource:l=vy(this,"sql"),!l.isClsEnabled)throw new g("atomic::descriptor","ATOMIC_CLS_DISABLED");return await l.transaction(async()=>await s.apply(this,a),{isolationLevel:e.isolationLevel})},o}}(t=>{})(_t||(_t={}));var Il=class{constructor(t){this.dbType=t,this.migrationName=Mt__default.default.basename(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)))),this.schema=new se(this.dbType);}};async function vh(i){try{return import(url.pathToFileURL(i).href)}catch{let e=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)))(i);return {default:e.default||e,...e}}}async function $h(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(url.pathToFileURL(r).href)}finally{await qn__default.default.promises.unlink(r).catch(()=>{});}}async function By(i,t){let e=Mt__default.default.isAbsolute(i)?i:Mt__default.default.resolve(process.cwd(),i);return e.endsWith(".ts")?$h(e):vh(e)}var El=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
167
167
  FROM information_schema.tables
168
168
  WHERE table_catalog = '${e}'
169
169
  AND table_schema = 'public'