hysteria-orm 12.2.2 → 12.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.cjs CHANGED
@@ -1,13 +1,13 @@
1
- 'use strict';var stream=require('stream'),An=require('fs'),vt=require('path'),ve=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 An__default=/*#__PURE__*/_interopDefault(An);var vt__default=/*#__PURE__*/_interopDefault(vt);var ve__default=/*#__PURE__*/_interopDefault(ve);var iu=Object.defineProperty;var au=i=>{throw TypeError(i)};var ie=(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 $e=(i,t)=>()=>(i&&(t=i(i=0)),t);var lu=(i,t)=>{for(var e in t)iu(i,e,{get:t[e],enumerable:true});};var uu=(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&&iu(t,e,n),n};var _f=(i,t,e)=>t.has(i)||au("Cannot "+e);var du=(i,t,e)=>t.has(i)?au("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);var mu=(i,t,e)=>(_f(i,t,"access private method"),e);var L,ce=$e(()=>{L=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};});var tf;exports.registerDriverAdapter=void 0;var ag,rf,xt=$e(()=>{ce();tf=[],exports.registerDriverAdapter=i=>{tf.push(i);},ag=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})},rf=async(i,t,e,r)=>{if(e&&typeof e!="string")return ag(i,e,t,r);let n=tf.filter(l=>l.dialects.includes(i)),o=(l,u)=>(l.environments??["node"]).includes(u),s=(l,u)=>(e?l.name===e:true)&&o(l,u),a=n.find(l=>s(l,t));if(a)return a.create({dialect:i,jsEnvironment:t,input:r});if(t==="bun"){let l=n.find(u=>s(u,"node"));if(l)return l.create({dialect:i,jsEnvironment:t,input:r})}throw new L(e??i)};});var Dt,pg,of,Zt=$e(()=>{Dt=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},pg=i=>{if(i.writableNeedDrain)return new Promise(t=>i.once("drain",()=>t()))},of=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 pg(r);r.end();}catch(n){r.destroy(n);}return r};});var sf,Cn,af=$e(()=>{Zt();sf=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},Cn=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 sf(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 sf(l)}let a=Array.isArray(s)?s:[];return Dt(a,r,n)}};});var Rn,lf=$e(()=>{Zt();Rn=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 of(o.query(t).iterate(...e),r,n)}};});var uf={};lu(uf,{registerBunDrivers:()=>yg});var yg,df=$e(()=>{xt();af();lf();yg=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 Cn(e,r,i)}),exports.registerDriverAdapter({name:"bun-sqlite",dialects:["sqlite"],environments:["bun"],create:async({dialect:e,input:r})=>new Rn(e,r,t)});};});var fg,_n,Jl,Hl=$e(()=>{Zt();fg=async i=>(await(await import('@sqlite.org/sqlite-wasm')).default(i)).oo1,_n=class{constructor(t,e,r=fg,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 Jl(t)?a(t):s==="fetch"?n.selectObjects(t,e):o?.typeofModel&&(s==="insertOne"||s==="insertMany")?n.selectObjects(`${t} returning *`,e):a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.requireDb();return Dt(o.selectObjects(t,e),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-wasm: pool not created, await createPool() before querying");return this.db}},Jl=i=>["begin","begin transaction","commit","rollback"].includes(i.trim().toLowerCase());});var zl,Mn,mf=$e(()=>{Zt();Hl();zl=i=>Array.isArray(i)?i:i?._array??[],Mn=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(Jl(t))return a(t);if(s==="fetch"){let u=await n.execute(t,e);return zl(u.rows)}if(!o?.typeofModel)return a(t);if(s==="insertOne"||s==="insertMany"){let u=await n.execute(`${t} returning *`,e);return zl(u.rows)}return a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let s=await(r.connection??this.requireDb()).execute(t,e);return Dt(zl(s.rows),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-rn: pool not created, await createPool() before querying");return this.db}};});var Gl={};lu(Gl,{registerReactNativeDrivers:()=>gg,registerWebDrivers:()=>hg});var cf,pf,hg,yf,gg,Yl=$e(()=>{xt();mf();Hl();cf=false,hg=i=>{cf||(cf=true,pf=i,exports.registerDriverAdapter({name:"sqlite-wasm",dialects:["sqlite"],environments:["web"],create:({dialect:t,input:e})=>new _n(t,e,void 0,pf)}));},yf=false,gg=async()=>{if(yf)return;yf=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 Mn(t,e,i)});};});var g=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}},Et=class extends g{constructor(t){super("ValidationError","VALIDATION_ERROR"),this.errors=t;}};function tr(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 Mf=i=>{i[6]=i[6]&15|64,i[8]=i[8]&63|128;let t=Qe(i);return [t.slice(0,8),t.slice(8,12),t.slice(12,16),t.slice(16,20),t.slice(20)].join("-")},cu=i=>{let t=globalThis.crypto;if(!t||typeof t.getRandomValues!="function")throw new st("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 st(`fs.${t}`)}exists(){return this.unsupported("exists")}readFileSync(){return this.unsupported("readFileSync")}readFile(){return this.unsupported("readFile")}readdir(){return this.unsupported("readdir")}mkdir(){return this.unsupported("mkdir")}writeFile(){return this.unsupported("writeFile")}rm(){return this.unsupported("rm")}},vn=class{join(...t){return t.filter(Boolean).join("/").replace(/\/+/g,"/")}dirname(t){let e=t.lastIndexOf("/");return e<=0?".":t.slice(0,e)}basename(t,e){let r=t.slice(t.lastIndexOf("/")+1);return e&&r.endsWith(e)?r.slice(0,-e.length):r}resolve(...t){let e=t.filter(Boolean).join("/").replace(/\/+/g,"/");return e.startsWith("/")?e:`/${e}`}},Ke=class{constructor(){this.name="web";this.crypto={randomUUID:()=>{let t=globalThis.crypto;return typeof t?.randomUUID=="function"?t.randomUUID():Mf(cu(new Uint8Array(16)))},randomBytes:t=>cu(new Uint8Array(t))};this.timing={now:()=>globalThis.performance.now()};this.fs=new $n;this.path=new vn;}readEnv(t){}};var it=class extends Ke{constructor(){super(...arguments);this.name="node";this.fs={exists:e=>An__default.default.existsSync(e),readFileSync:e=>An__default.default.existsSync(e)?new Uint8Array(An__default.default.readFileSync(e)):null,readFile:async e=>An.promises.readFile(e,"utf8"),readdir:e=>An.promises.readdir(e),mkdir:async(e,r)=>{await An.promises.mkdir(e,{recursive:r?.recursive});},writeFile:async(e,r)=>{await An.promises.writeFile(e,r);},rm:async(e,r)=>{await An.promises.rm(e,{recursive:r?.recursive,force:r?.force});}};this.path=vt__default.default;}readEnv(e){return typeof process>"u"?void 0:process.env[e]}};var En=()=>import('bun'),rr=class extends it{constructor(){super();this.name="bun";let e=this.fs;this.fs={...e,readFile:async r=>(await En()).file(r).text(),readdir:async r=>{let n=await En(),o=[];for await(let s of new n.Glob("*").scan({cwd:r}))o.push(s);return o},writeFile:async(r,n)=>{await(await En()).write(r,n);}};}};var nr=class extends Ke{constructor(){super(...arguments);this.name="react-native";}};var st=class extends Error{constructor(t){super(`Platform does not support: ${t}`),this.name="PlatformUnsupportedError";}},Qe=i=>{let t="";for(let e of i)t+=e.toString(16).padStart(2,"0");return t},pu=new Map,Af=i=>{switch(i){case "bun":return new rr;case "node":return new it;case "react-native":return new nr;default:return new Ke}};function se(i){let t=tr(i),e=pu.get(t);return e||(e=Af(t),pu.set(t,e)),e}function xf(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 yu(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function Df(i){if(typeof i!="string"||!i)return i;let t=yu(i);return t.charAt(0).toUpperCase()+t.slice(1)}function J(i,t){return t==="preserve"?i:t==="snake"?xf(i):t==="camel"?yu(i):t==="pascal"?Df(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}function Oe(i){return String(i).padStart(2,"0")}function $f(i,t){let e=i.getFullYear(),r=Oe(i.getMonth()+1),n=Oe(i.getDate()),o=Oe(i.getHours()),s=Oe(i.getMinutes()),a=Oe(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 fu(i,t){let e=i.getUTCFullYear(),r=Oe(i.getUTCMonth()+1),n=Oe(i.getUTCDate()),o=Oe(i.getUTCHours()),s=Oe(i.getUTCMinutes()),a=Oe(i.getUTCSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${s}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${s}:${a}`;case "TIMESTAMP":return Math.floor(i.getTime()/1e3).toString()}}var de=(i,t="ISO",e="UTC")=>{if(!(i instanceof Date)||isNaN(i.getTime()))throw new Error("Invalid date provided");return e==="LOCAL"?$f(i,t):fu(i,t)};var at=(i=new Date)=>fu(i,"ISO");var hu=(i,t)=>{try{let e=ve__default.default.createHash("sha256").update(i).digest(),r=ve__default.default.randomBytes(16),n=ve__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)}},gu=(i,t)=>{try{let e=ve__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=ve__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)}},bu=(i,t)=>{try{let e=ve__default.default.randomBytes(32),r=ve__default.default.randomBytes(16),n=ve__default.default.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");o+=n.final("hex");let s=ve.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)}},Tu=(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=ve.privateDecrypt(i,Buffer.from(n,"hex")),a=ve__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 Bn="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Pn=Bn.length,Ef=10,Pf=16,Bf=(i,t)=>{let e="";for(let r=0;r<t;r++){let n=i%Pn;e=Bn.charAt(n)+e,i=(i-n)/Pn;}return e},Kf=i=>{let t=se().crypto.randomBytes(i),e="";for(let r=0;r<i;r++){let n=t[r];e+=Bn.charAt(n%Pn);}return e},wu=()=>{let i=Math.floor(Date.now()/1e3),t=Bf(i,Ef),e=Kf(Pf);return t+e};function Kn(i){return i.replace(/^[`"]|[`"]$/g,"")}function Qn(i,t,e){if(!i.includes(".")){let o=Kn(i);return `${t}.${o}`}let[r,n]=i.split(".");return r=Kn(r),n=Kn(n),r!==e?i:n==="*"?`${t}.*`:`${t}.${n}`}function q(i){return typeof i=="function"?i():i}var j=(i,t=new WeakMap)=>{if(i===null||typeof i!="object")return i;if(t.has(i))return t.get(i);if(Array.isArray(i)){let r=[];t.set(i,r);for(let n=0;n<i.length;n++)r[n]=j(i[n],t);return r}let e=Object.create(Object.getPrototypeOf(i)||{});t.set(i,e);for(let r of Object.getOwnPropertyNames(i)){let n=i[r];if(typeof n=="function"){e[r]=n;continue}e[r]=j(n,t);}return e};var Ae=class{constructor(t,e){this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var or=class extends Ae{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var sr=class extends Ae{constructor(e,r,n){super(e,r);this.type="hasMany";this.foreignKey=n,this.type="hasMany";}};var ir=class extends Ae{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var ar=class extends Ae{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 Qf(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 lr=Symbol("columns"),lt=Symbol("primaryKey"),we=Symbol("relations"),ur=Symbol("indexes"),dr=Symbol("uniques"),mr=Symbol("checks"),ke=i=>`${Qf(i)}_id`,cr=(i,t)=>`idx_${i}_${t}`,pe=(i,t)=>`uq_${i}_${t}`,z=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,Se=(i,t)=>`pk_${i}_${t}`,Su=(i,t)=>{let e=t.replace(/[^a-zA-Z0-9]+/g,"_").replace(/^_|_$/g,"").toLowerCase();return `chk_${i}_${e}`.substring(0,63)};function kn(i,t){return e=>{let r=Array.isArray(i)?i:[i],n=k.getMetadata(ur,e.prototype)||[];n.push({columns:r,name:t??cr(e.table,r.join("_"))}),k.defineMetadata(ur,n,e.prototype);}}function Ln(i,t){return e=>{let r=Array.isArray(i)?i:[i],n=k.getMetadata(dr,e.prototype)||[];n.push({columns:r,name:t??pe(e.table,r.join("_"))}),k.defineMetadata(dr,n,e.prototype);}}function Wn(i,t){return e=>{let r=k.getMetadata(mr,e.prototype)||[];r.push({expression:i,name:t??Su(e.table,i)}),k.defineMetadata(mr,r,e.prototype);}}var Nu=Symbol("viewStatement");function R(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let n=e.constructor;if(t){if(k.getMetadata(lt,e))throw new g("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");k.defineMetadata(lt,r,e),k.defineMetadata(lt,r,e.constructor);}let o=i.databaseName??J(r,n.databaseCaseConvention),s={columnName:r,serialize:i.serialize,prepare:i.prepare,isPrimary:t,primaryKeyConstraintName:i.primaryKeyConstraintName??Se(n.table,r),autoUpdate:i.autoUpdate,autoCreate:i.autoCreate,databaseName:o,openApi:i.openApi,type:i.type,length:i?.length,precision:i?.precision,scale:i?.scale,withTimezone:i?.withTimezone,unsigned:i.unsigned,zerofill:i.zerofill,stringMode:i.stringMode,expression:i.expression,constraints:{nullable:i.nullable,default:i.default}};s.validate=i.validate;let a=k.getMetadata(lr,e)||[];a.push(s),k.defineMetadata(lr,a,e);}}R.primary=kf;R.date=rh;R.datetime=nh;R.timestamp=oh;R.time=sh;R.boolean=th;R.json=ih;R.uuid=Uf;R.ulid=Vf;R.integer=Wf;R.bigInteger=zf;R.float=Lf;R.decimal=Gf;R.increment=jf;R.bigIncrement=Ff;R.string=Jf;R.text=Hf;R.binary=Yf;R.enum=Zf;R.encryption={symmetric:Xf,asymmetric:eh};R.computed=ah;function kf(i={}){return R({...i,primaryKey:true})}function Lf(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 Wf(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 jf(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 Ff(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 Uf(i={}){return R({type:"uuid",...i,prepare:t=>t||se().crypto.randomUUID(),openApi:{type:"string",format:"uuid",description:"uuid (Universally Unique Identifier)",...i.openApi||{}}})}function Vf(i={}){return R({type:"ulid",...i,prepare:t=>t||wu(),openApi:{type:"string",format:"ulid",description:"ulid (Universally Unique Lexicographically Sortable Identifier)",...i.openApi||{}}})}function Jf(i={}){return R({type:"string",...i,openApi:{type:"string",description:"A string value",...i.openApi||{}}})}function Hf(i={}){return R({type:"longtext",...i,openApi:{type:"string",description:"A text value",...i.openApi||{}}})}function zf(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 Gf(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 Zf(i,t={}){return R({type:i,...t,openApi:{type:"string",enum:i,description:"An enum value",...t.openApi||{}}})}function Xf(i){return R({...i,prepare:t=>t&&hu(i.key,t),serialize:t=>t&&gu(i.key,t)})}function eh(i){return R({...i,prepare:t=>t&&bu(i.publicKey,t),serialize:t=>t&&Tu(i.privateKey,t)})}function th(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 rh(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=i,s=!!n,a=!!r,l=typeof n=="function"?"js":s?true:void 0,u=()=>new Date,d=()=>de(new Date,"DATE_ONLY",e),c=t?typeof n=="function"?n:d:typeof n=="function"?n:u,m=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return 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?de(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 nh(i={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...s}=i,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,c=typeof o=="function"?"js":u?true:void 0,m=()=>new Date,p=()=>de(new Date,"ISO",a),h=t?typeof o=="function"?o:p:typeof o=="function"?o:m,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?de(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 oh(i={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...s}=i,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,c=typeof o=="function"?"js":u?true:void 0,m=()=>new Date,p=()=>de(new Date,"TIMESTAMP",a),h=t?typeof o=="function"?o:p:typeof o=="function"?o:m,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?de(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 sh(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=i,s=!!n,a=!!r,l=typeof n=="function"?"js":s?true:void 0,u=()=>new Date,d=()=>de(new Date,"TIME_ONLY",e),c=t?typeof n=="function"?n:d:typeof n=="function"?n:u,m=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return 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?de(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 ih(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 ah(i,t={}){return R({...t,expression:i})}function qu(i){try{return k.getMetadata(lr,i.prototype)||[]}catch{return []}}function Cu(i,t,e){return((r,n)=>{let o=()=>ke(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(we,r)||[];l.push(a),k.defineMetadata(we,l,r);})}function Ru(i,t){return((e,r)=>{let n=()=>ke(e.constructor.table),o={type:"hasOne",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):n},s=k.getMetadata(we,e)||[];s.push(o),k.defineMetadata(we,s,e);})}function _u(i,t){return((e,r)=>{let n=()=>ke(e.constructor.table),o={type:"hasMany",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):n},s=k.getMetadata(we,e)||[];s.push(o),k.defineMetadata(we,s,e);})}function Mu(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=()=>ke(d),m=()=>ke(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(we,n)||[];y.push(h),k.defineMetadata(we,y,n);})}function Ou(i){return k.getMetadata(we,i.prototype)||[]}function Au(i){return (k.getMetadata(we,i.prototype)||[]).map(e=>{let{type:r,model:n,columnName:o,foreignKey:s}=e,a=q(s),l=n();switch(r){case "belongsTo":return new or(l,o,a);case "hasOne":return new ir(l,o,a);case "hasMany":return new sr(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 ar(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 xu(i){return k.getMetadata(lt,i)||k.getMetadata(lt,i.prototype)}function Du(i){return k.getMetadata(ur,i.prototype)||[]}function $u(i){return k.getMetadata(dr,i.prototype)||[]}function vu(i){return k.getMetadata(mr,i.prototype)||[]}var Le=class{};Le.modelCaseConvention="camel",Le.databaseCaseConvention="snake";var ye=class{};ye.columns=new WeakMap,ye.byName=new WeakMap,ye.byDatabaseName=new WeakMap;var me=class extends Le{static get table(){let t=Object.getOwnPropertyDescriptor(this,"table");if(t&&"value"in t)return t.value;throw new Error(`Table name not set for model "${this.name}". Use defineModel() to create models.`)}static set table(t){Object.defineProperty(this,"table",{value:t,writable:true,enumerable:true,configurable:true});}static get primaryKey(){return xu(this)}constructor(t){if(super(),t)for(let e in t)Object.assign(this,{[e]:t[e]});}static getColumns(){let t=ye.columns.get(this);return t||(t=qu(this),ye.columns.set(this,t)),t}static getColumnsByName(){let t=ye.byName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.columnName,e])),ye.byName.set(this,t)),t}static getColumnsByDatabaseName(){let t=ye.byDatabaseName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.databaseName,e])),ye.byDatabaseName.set(this,t)),t}static getRelations(){return Ou(this)}static getIndexes(){return Du(this)}static getUniques(){return $u(this)}static getChecks(){return vu(this)}static async validate(t){var s,a;let e=this.getColumns(),r={},n=this.primaryKey,o=n&&t?.[n]!==void 0?"update":"insert";for(let l of e){if(l.expression)continue;let u=l.validate;if(!u)continue;let d=t?t[l.columnName]:void 0,c=Array.isArray(u)?u:[u];for(let m of c)try{let p=await m(d,{model:this,column:l.columnName,operation:o,data:t});if(!(p&&p.valid)){let h=p&&p.message||"Validation failed";(r[s=l.columnName]||(r[s]=[])).push(h);}}catch{(r[a=l.columnName]||(r[a]=[])).push("Validation error");}}if(Object.keys(r).length>0)throw new Et(r);return {valid:true}}};me.zodEngine=null,me.softDeleteColumn="deletedAt",me.softDeleteValue=at();var Iu=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 F(i={}){return W((t,e)=>{R(i)(t,e);})}F.primary=function(t={}){return W((e,r)=>{R.primary(t)(e,r);})};F.string=function(t){return W((e,r)=>{R.string(t??{})(e,r);})};F.text=function(t){return W((e,r)=>{R.text(t??{})(e,r);})};F.integer=function(t){return W((e,r)=>{R.integer(t??{})(e,r);})};F.bigInteger=function(t){return W((e,r)=>{R.bigInteger(t??{})(e,r);})};F.float=function(t){return W((e,r)=>{R.float(t??{})(e,r);})};F.decimal=function(t){return W((e,r)=>{R.decimal(t??{})(e,r);})};F.increment=function(t={}){return W((e,r)=>{R.increment(t)(e,r);})};F.bigIncrement=function(t={}){return W((e,r)=>{R.bigIncrement(t)(e,r);})};F.boolean=function(t){return W((e,r)=>{R.boolean(t??{})(e,r);})};function Eu(i){return W((t,e)=>{R.date(i??{},false)(t,e);})}Eu.string=function(t){return W((e,r)=>{R.date(t??{},true)(e,r);})};F.date=Eu;function Pu(i){return W((t,e)=>{R.datetime(i??{},false)(t,e);})}Pu.string=function(t){return W((e,r)=>{R.datetime(t??{},true)(e,r);})};F.datetime=Pu;function Bu(i){return W((t,e)=>{R.timestamp(i??{},false)(t,e);})}Bu.string=function(t){return W((e,r)=>{R.timestamp(t??{},true)(e,r);})};F.timestamp=Bu;function Ku(i){return W((t,e)=>{R.time(i??{},false)(t,e);})}Ku.string=function(t){return W((e,r)=>{R.time(t??{},true)(e,r);})};F.time=Ku;F.json=function(t){return W((e,r)=>{R.json({type:"json",...t??{}})(e,r);})};F.jsonb=function(t){return W((e,r)=>{R.json(t??{})(e,r);})};F.uuid=function(t){return W((e,r)=>{R.uuid(t??{})(e,r);})};F.ulid=function(t){return W((e,r)=>{R.ulid(t??{})(e,r);})};F.binary=function(t){return W((e,r)=>{R.binary(t??{})(e,r);})};F.enum=function(t,e){return W((r,n)=>{R.enum(t,e??{})(r,n);})};F.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);})};F.char=function(t){return W((e,r)=>{R.string({...t,type:"char"})(e,r);})};F.varbinary=function(t){return W((e,r)=>{R({type:"varbinary",...t})(e,r);})};F.tinyint=function(t){return W((e,r)=>{R.integer({...t,type:"tinyint"})(e,r);})};F.smallint=function(t){return W((e,r)=>{R.integer({...t,type:"smallint"})(e,r);})};F.mediumint=function(t){return W((e,r)=>{R.integer({...t,type:"mediumint"})(e,r);})};F.computed=function(t,e={}){return W((r,n)=>{R.computed(t,e)(r,n);})};F.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 lh=F;function uh(i,t){let{columns:e,indexes:r,uniques:n,checks:o,hooks:s,options:a}=t;class l extends me{}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),Iu.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)ph(l,u);if(n)for(let u of n)yh(l,u);if(o)for(let u of o)fh(l,u);return s&&s.beforeFetch&&(l.beforeFetch=s.beforeFetch),Qu(l),l}function dh(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 mh(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":Ru(()=>l,u)(n.prototype,s);break;case "hasMany":_u(()=>l,u)(n.prototype,s);break;case "belongsTo":Cu(()=>l,u,a._constraintOptions)(n.prototype,s);break;case "manyToMany":{let d=a._throughModel,c=a._throughModelKeys;Mu(()=>l,d,c,a._constraintOptions)(n.prototype,s);break}}}}return i}function ch(i,t){let{columns:e,statement:r,hooks:n,options:o}=t;class s extends me{}s.table=i,s[Nu]=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),Iu.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),Qu(s),s}function Qu(i){i.toZodSchema=function(){let t=this.zodEngine||me.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 ph(i,t){Array.isArray(t)?kn(t)(i):kn(t.columns,t.name)(i);}function yh(i,t){Array.isArray(t)?Ln(t)(i):Ln(t.columns,t.name)(i);}function fh(i,t){typeof t=="string"?Wn(t)(i):Wn(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 De=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 U=class extends M{constructor(e,r,n=false,o,s,a=false,l,u){super(e,r,n,"=",s,a);this.file="where_json";this.jsonOperator=o,this.value=s,this.path=l,this.comparisonOperator=u;}};var Ne=class extends S{constructor(e,r,n,o="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_subquery";this.column=e,this.operator=r,this.subquery=n,this.chainsWith=` ${o}`;}};var G=class extends S{constructor(e,r,n,o,s){super("select");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="select";this.file="select";this.column=e,this.alias=r,this.sqlFunction=n,this.isRawValue=o??false,this.distinct=s;}};var jn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(n+=` ${s.join(" ")}`);}return {sql:`add ${n}`,bindings:[]}}},ku=new jn;var Fn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Lu=new Fn;var Un=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`[${n}]`).join(", ")})`,bindings:[]}}},Wu=new Un;var Vn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),s=o.join(" ");e.newType.dataType==="uuid"&&(s=s.replace(/\s+default\s+.+$/i,"").trim());let a="";e.options.nullable!==void 0&&(a=e.options.nullable?" null":" not null");let l=`alter column [${e.column}] ${s}${a}`;if(e.options.dropDefault&&(l=`drop constraint DF_${e.column}, ${l}`),e.options.default!==void 0&&!e.options.dropDefault){let u=e.options.default;u===null?u="null":typeof u=="string"&&(u==="NULL"?u="null":u==="TRUE"||u==="FALSE"?u=u==="TRUE"?"1":"0":u=`'${u}'`),l+=`, add constraint DF_${e.column} default ${u} for [${e.column}]`;}return e.options.unique!==void 0&&e.options.unique&&(l+=`, add constraint UQ_${e.column} unique ([${e.column}])`),{sql:l,bindings:[]}}},ju=new Vn;var ut=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 Jn=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 ut){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}}},Fu=new Jn;var Hn=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},Uu=new Hn;var zn=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},Vu=new zn;var Gn=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},Ju=new Gn;var Bt=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"}},Yn=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)},dt=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,Yn(t[r]));for(let r=0;r<t.length;r++){let n=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(n,Yn(t[r]));}for(let r=0;r<t.length;r++){let n=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(n,Yn(t[r]));}return e},mt=(i,t)=>t?i==="mysql"||i==="mariadb"?t.code==="ER_NO_SUCH_TABLE"||t.errno===1146:i==="postgres"||i==="cockroachdb"?t.code==="42P01":i==="sqlite"?/no such table/i.test(String(t.message||"")):i==="mssql"?t.number===208:false:false,ct=(i,t)=>{let e=i.getDbType(),r;try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions,language:Bt(e)});}catch{try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var zu={info:0,warn:1,error:2};function yr(i){return i?i===true?{level:"info",logQueries:true}:{level:i.level??"info",logQueries:i.logQueries??true,customLogger:i.customLogger}:null}function bh(i,t="info"){let e=yr(i);if(!e)return false;let r=e.level??"info";return zu[t]>=zu[r]}function Th(i){let t=yr(i);return t?t.logQueries??true:false}var We={info:"32",warn:"33",error:"31",query:"35",dim:"2",cyan:"36"},wh=typeof process<"u"&&!!process.stdout?.isTTY&&!process.env.NO_COLOR,pt=(i,t)=>wh?`\x1B[${i}m${t}\x1B[0m`:t;function Xu(){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 Zn(i,t){let e=pt(We.dim,`[${Xu()}]`),r=pt(We[i],i.toUpperCase().padEnd(5));return `${e} ${r} ${t}`}var Sh=60,Nh=10,Gu=400;function pr(i,t=Sh){return i.length<=t?i:`${i.slice(0,t)}\u2026`}function qh(i){if(i==null)return "null";if(typeof i=="string")return `'${pr(i)}'`;if(typeof i=="number"||typeof i=="bigint")return String(i);if(typeof i=="boolean")return i?"true":"false";if(i instanceof Date)return `'${pr(i.toISOString())}'`;if(typeof i=="object"){let t;try{t=JSON.stringify(i);}catch{t=String(i);}return `'${pr(t)}'`}return pr(String(i))}function Ch(i){if(!i||i.length===0)return "[]";let t=i.slice(0,Nh).map(qh),e=i.length-t.length;e>0&&t.push(`\u2026 (${e} more)`);let r=`[${t.join(", ")}]`;return r.length>Gu&&(r=`${r.slice(0,Gu)}\u2026`),r}var Yu=(i,t)=>{let e=" ".repeat(t);return i.split(`
1
+ 'use strict';var stream=require('stream'),xn=require('fs'),It=require('path'),$e=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 xn__default=/*#__PURE__*/_interopDefault(xn);var It__default=/*#__PURE__*/_interopDefault(It);var $e__default=/*#__PURE__*/_interopDefault($e);var lu=Object.defineProperty;var uu=i=>{throw TypeError(i)};var se=(i=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(i,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):i)(function(i){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+i+'" is not supported')});var Ie=(i,t)=>()=>(i&&(t=i(i=0)),t);var du=(i,t)=>{for(var e in t)lu(i,e,{get:t[e],enumerable:true});};var mu=(i,t,e,r)=>{for(var n=void 0,o=i.length-1,s;o>=0;o--)(s=i[o])&&(n=(s(t,e,n))||n);return n&&lu(t,e,n),n};var Of=(i,t,e)=>t.has(i)||uu("Cannot "+e);var cu=(i,t,e)=>t.has(i)?uu("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);var pu=(i,t,e)=>(Of(i,t,"access private method"),e);var k,me=Ie(()=>{k=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};});var nf;exports.registerDriverAdapter=void 0;var dg,of,At=Ie(()=>{me();nf=[],exports.registerDriverAdapter=i=>{nf.push(i);},dg=async(i,t,e,r)=>{if(!Array.isArray(t?.dialects))throw new Error(`driver must be a registered driver name or a DriverAdapterFactory with a "dialects" array (got ${typeof t}).`);if(!t.dialects.includes(i))throw new Error(`driver "${t.name}" does not support dialect "${i}" (declares: ${t.dialects.join(", ")}).`);return t.create({dialect:i,jsEnvironment:e,input:r})},of=async(i,t,e,r)=>{if(e&&typeof e!="string")return dg(i,e,t,r);let n=nf.filter(l=>l.dialects.includes(i)),o=(l,u)=>(l.environments??["node"]).includes(u),s=(l,u)=>(e?l.name===e:true)&&o(l,u),a=n.find(l=>s(l,t));if(a)return a.create({dialect:i,jsEnvironment:t,input:r});if(t==="bun"){let l=n.find(u=>s(u,"node"));if(l)return l.create({dialect:i,jsEnvironment:t,input:r})}throw new k(e??i)};});var xt,hg,af,Xt=Ie(()=>{xt=async(i,t={},e)=>{let r=new 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},hg=i=>{if(i.writableNeedDrain)return new Promise(t=>i.once("drain",()=>t()))},af=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 hg(r);r.end();}catch(n){r.destroy(n);}return r};});var lf,Rn,uf=Ie(()=>{Xt();lf=i=>{if(!i||typeof i!="object")return i;let t=i,e=t.errno,r=typeof e=="string"&&/^[0-9A-Z]{5}$/.test(e),n=typeof t.code=="string"&&t.code.startsWith("ERR_");return !r||!n||(t.cause===void 0&&(t.cause=i),t.code=e),i},Rn=class{constructor(t,e,r){this.jsEnvironment="bun";this.dialect=t;let n={hostname:e.host,port:e.port,username:e.username,password:e.password,database:e.database,...e.driverOptions};(t==="mysql"||t==="mariadb")&&(n.adapter="mysql",n.allowPublicKeyRetrieval=true),this.sql=new r(n),this.pool=this.sql;}createPool(){}async closePool(){this.sql.close();}async reserveConnection(){return this.sql.reserve()}releaseConnection(t){t?.release();}async beginTransaction(t,e){(this.dialect==="mysql"||this.dialect==="mariadb")&&e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await e.rawQuery(this.dialect==="mysql"||this.dialect==="mariadb"?"START TRANSACTION":"BEGIN TRANSACTION"),(this.dialect==="postgres"||this.dialect==="cockroachdb")&&e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.sql,o;try{o=await n.unsafe(t,e);}catch(a){throw lf(a)}if(this.dialect==="mysql"||this.dialect==="mariadb"){let a=/^\s*(select|show|desc(ribe)?|explain)\b/i.test(t);if(Array.isArray(o)&&(a||o.length>0))return [o,void 0];let l=o;return [{affectedRows:Number(l.affectedRows),insertId:Number(l.lastInsertRowid)},void 0]}let s=o;return Array.isArray(o)&&!((s.command==="INSERT"||s.command==="UPDATE"||s.command==="DELETE")&&o.length===0)?{rows:o,rowCount:o.length}:{rows:[],rowCount:s.count??s.affectedRows??0}}extract(t,e){if(e==="raw")return t;if(this.dialect==="mysql"||this.dialect==="mariadb"){let n=t;return e==="affectedRows"?n[0]?.affectedRows??0:n[0]}let r=t;return e==="affectedRows"?r.rowCount:r.rows}async stream(t,e,r,n){let o=r.connection??this.sql,s;try{s=await o.unsafe(t,e);}catch(l){throw lf(l)}let a=Array.isArray(s)?s:[];return xt(a,r,n)}};});var _n,df=Ie(()=>{Xt();_n=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="bun";this.db=new r(String(e.database??":memory:"),e.driverOptions),this.pool=this.db;}createPool(){}async closePool(){this.db.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.db,o=r.sqlLiteOptions??{},s=o.mode||"fetch";return ["begin","begin transaction","commit","rollback"].includes(t.trim().toLowerCase())?n.query(t).run(...e).changes:s==="fetch"?n.query(t).all(...e):o?.typeofModel?s==="insertOne"||s==="insertMany"?n.query(`${t} returning *`).all(...e):n.query(t).run(...e).changes:n.query(t).run(...e).changes}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.db;return af(o.query(t).iterate(...e),r,n)}};});var mf={};du(mf,{registerBunDrivers:()=>gg});var gg,cf=Ie(()=>{At();uf();df();gg=async()=>{let{SQL:i}=await import('bun'),{Database:t}=await import('bun:sqlite');exports.registerDriverAdapter({name:"bun-sql",dialects:["postgres","cockroachdb","mysql","mariadb"],environments:["bun"],create:async({dialect:e,input:r})=>new Rn(e,r,i)}),exports.registerDriverAdapter({name:"bun-sqlite",dialects:["sqlite"],environments:["bun"],create:async({dialect:e,input:r})=>new _n(e,r,t)});};});var bg,Mn,zl,Gl=Ie(()=>{Xt();bg=async i=>(await(await import('@sqlite.org/sqlite-wasm')).default(i)).oo1,Mn=class{constructor(t,e,r=bg,n){this.dialect="sqlite";this.jsEnvironment="web";this.filename=String(e.database??":memory:"),this.loader=r,this.initConfig=n;}async createPool(){let t=await this.loader(this.initConfig),{filename:e}=this;this.db=e.startsWith(":memory:")||e===""?new t.DB(e):t.OpfsDb?new t.OpfsDb(e,"c"):new t.DB(e,"c"),this.pool=this.db;}async closePool(){this.db?.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.requireDb(),o=r.sqlLiteOptions??{},s=o.mode||"fetch",a=u=>(n.exec(u,{bind:e}),n.changes());return zl(t)?a(t):s==="fetch"?n.selectObjects(t,e):o?.typeofModel&&(s==="insertOne"||s==="insertMany")?n.selectObjects(`${t} returning *`,e):a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.requireDb();return xt(o.selectObjects(t,e),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-wasm: pool not created, await createPool() before querying");return this.db}},zl=i=>["begin","begin transaction","commit","rollback"].includes(i.trim().toLowerCase());});var Yl,On,pf=Ie(()=>{Xt();Gl();Yl=i=>Array.isArray(i)?i:i?._array??[],On=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="react-native";this.filename=String(e.database??":memory:"),this.engine=r;}createPool(){this.db=this.engine.open({name:this.filename}),this.pool=this.db;}async closePool(){this.db?.close();}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=r.connection??this.requireDb(),o=r.sqlLiteOptions??{},s=o.mode||"fetch",a=async u=>(await n.execute(u,e)).rowsAffected??0;if(zl(t))return a(t);if(s==="fetch"){let u=await n.execute(t,e);return Yl(u.rows)}if(!o?.typeofModel)return a(t);if(s==="insertOne"||s==="insertMany"){let u=await n.execute(`${t} returning *`,e);return Yl(u.rows)}return a(t)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let s=await(r.connection??this.requireDb()).execute(t,e);return xt(Yl(s.rows),r,n)}requireDb(){if(!this.db)throw new Error("sqlite-rn: pool not created, await createPool() before querying");return this.db}};});var Zl={};du(Zl,{registerReactNativeDrivers:()=>wg,registerWebDrivers:()=>Tg});var yf,ff,Tg,hf,wg,Xl=Ie(()=>{At();pf();Gl();yf=false,Tg=i=>{yf||(yf=true,ff=i,exports.registerDriverAdapter({name:"sqlite-wasm",dialects:["sqlite"],environments:["web"],create:({dialect:t,input:e})=>new Mn(t,e,void 0,ff)}));},hf=false,wg=async()=>{if(hf)return;hf=true;let i=await import('@op-engineering/op-sqlite');exports.registerDriverAdapter({name:"sqlite-rn",dialects:["sqlite"],environments:["react-native"],create:({dialect:t,input:e})=>new On(t,e,i)});};});var h=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}},vt=class extends h{constructor(t){super("ValidationError","VALIDATION_ERROR"),this.errors=t;}};function rr(i){if(i&&i!=="auto")return i;if(typeof process<"u"&&process.versions?.bun)return "bun";if(globalThis.navigator?.product==="ReactNative"||"HermesInternal"in globalThis)return "react-native";let e=typeof globalThis.self<"u";return typeof window<"u"||typeof document<"u"||e?"web":"node"}var Af=i=>{i[6]=i[6]&15|64,i[8]=i[8]&63|128;let t=ke(i);return [t.slice(0,8),t.slice(8,12),t.slice(12,16),t.slice(16,20),t.slice(20)].join("-")},yu=i=>{let t=globalThis.crypto;if(!t||typeof t.getRandomValues!="function")throw new it("crypto.getRandomValues \u2014 browsers require a secure context (HTTPS); React Native requires react-native-get-random-values or expo-crypto");return t.getRandomValues(i)},$n=class{unsupported(t){throw new it(`fs.${t}`)}exists(){return this.unsupported("exists")}readFileSync(){return this.unsupported("readFileSync")}readFile(){return this.unsupported("readFile")}readdir(){return this.unsupported("readdir")}mkdir(){return this.unsupported("mkdir")}writeFile(){return this.unsupported("writeFile")}rm(){return this.unsupported("rm")}},vn=class{join(...t){return t.filter(Boolean).join("/").replace(/\/+/g,"/")}dirname(t){let e=t.lastIndexOf("/");return e<=0?".":t.slice(0,e)}basename(t,e){let r=t.slice(t.lastIndexOf("/")+1);return e&&r.endsWith(e)?r.slice(0,-e.length):r}resolve(...t){let e=t.filter(Boolean).join("/").replace(/\/+/g,"/");return e.startsWith("/")?e:`/${e}`}},Ke=class{constructor(){this.name="web";this.crypto={randomUUID:()=>{let t=globalThis.crypto;return typeof t?.randomUUID=="function"?t.randomUUID():Af(yu(new Uint8Array(16)))},randomBytes:t=>yu(new Uint8Array(t))};this.timing={now:()=>globalThis.performance.now()};this.fs=new $n;this.path=new vn;}readEnv(t){}};var at=class extends Ke{constructor(){super(...arguments);this.name="node";this.fs={exists:e=>xn__default.default.existsSync(e),readFileSync:e=>xn__default.default.existsSync(e)?new Uint8Array(xn__default.default.readFileSync(e)):null,readFile:async e=>xn.promises.readFile(e,"utf8"),readdir:e=>xn.promises.readdir(e),mkdir:async(e,r)=>{await xn.promises.mkdir(e,{recursive:r?.recursive});},writeFile:async(e,r)=>{await xn.promises.writeFile(e,r);},rm:async(e,r)=>{await xn.promises.rm(e,{recursive:r?.recursive,force:r?.force});}};this.path=It__default.default;}readEnv(e){return typeof process>"u"?void 0:process.env[e]}};var Pn=()=>import('bun'),nr=class extends at{constructor(){super();this.name="bun";let e=this.fs;this.fs={...e,readFile:async r=>(await Pn()).file(r).text(),readdir:async r=>{let n=await Pn(),o=[];for await(let s of new n.Glob("*").scan({cwd:r}))o.push(s);return o},writeFile:async(r,n)=>{await(await Pn()).write(r,n);}};}};var or=class extends Ke{constructor(){super(...arguments);this.name="react-native";}};var it=class extends Error{constructor(t){super(`Platform does not support: ${t}`),this.name="PlatformUnsupportedError";}},ke=i=>{let t="";for(let e of i)t+=e.toString(16).padStart(2,"0");return t},fu=new Map,Df=i=>{switch(i){case "bun":return new nr;case "node":return new at;case "react-native":return new or;default:return new Ke}};function ne(i){let t=rr(i),e=fu.get(t);return e||(e=Df(t),fu.set(t,e)),e}function If(i){return typeof i!="string"||!i?i:i.replace(/([a-z])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}function hu(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function $f(i){if(typeof i!="string"||!i)return i;let t=hu(i);return t.charAt(0).toUpperCase()+t.slice(1)}function V(i,t){return t==="preserve"?i:t==="snake"?If(i):t==="camel"?hu(i):t==="pascal"?$f(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}function Me(i){return String(i).padStart(2,"0")}function vf(i,t){let e=i.getFullYear(),r=Me(i.getMonth()+1),n=Me(i.getDate()),o=Me(i.getHours()),s=Me(i.getMinutes()),a=Me(i.getSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${s}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${s}:${a}`;case "TIMESTAMP":return Math.floor(i.getTime()/1e3).toString()}}function gu(i,t){let e=i.getUTCFullYear(),r=Me(i.getUTCMonth()+1),n=Me(i.getUTCDate()),o=Me(i.getUTCHours()),s=Me(i.getUTCMinutes()),a=Me(i.getUTCSeconds());switch(t){case "ISO":return `${e}-${r}-${n} ${o}:${s}:${a}`;case "DATE_ONLY":return `${e}-${r}-${n}`;case "TIME_ONLY":return `${o}:${s}:${a}`;case "TIMESTAMP":return Math.floor(i.getTime()/1e3).toString()}}var ue=(i,t="ISO",e="UTC")=>{if(!(i instanceof Date)||isNaN(i.getTime()))throw new Error("Invalid date provided");return e==="LOCAL"?vf(i,t):gu(i,t)};var lt=(i=new Date)=>gu(i,"ISO");var bu=(i,t)=>{try{let e=$e__default.default.createHash("sha256").update(i).digest(),r=$e__default.default.randomBytes(16),n=$e__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 h("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Tu=(i,t)=>{try{let e=$e__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=$e__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 h("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},wu=(i,t)=>{try{let e=$e__default.default.randomBytes(32),r=$e__default.default.randomBytes(16),n=$e__default.default.createCipheriv("aes-256-cbc",e,r),o=n.update(t,"utf8","hex");o+=n.final("hex");let s=$e.publicEncrypt(i,e);return `${r.toString("hex")}:${s.toString("hex")}:${o}`}catch(e){throw new h("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},Nu=(i,t)=>{try{let e=String(t).trim(),[r,n,o]=e.split(":");if(!r||!n||!o)throw new Error(`Invalid encrypted value format: expected "iv:key:data" but got "${e.substring(0,50)}..."`);let s=$e.privateDecrypt(i,Buffer.from(n,"hex")),a=$e__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 h("Encryption::decryptAsymmetric","FAILED_TO_DECRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}};var K=class{static defineMetadata(t,e,r,n){if((typeof r!="object"||r===null)&&typeof r!="function")throw new TypeError("target must be an object or function");let o=this.store.get(r);o||(o=new Map,this.store.set(r,o));let s=o.get(n);s||(s=new Map,o.set(n,s)),s.set(t,e);}static getMetadata(t,e,r){if((typeof e!="object"||e===null)&&typeof e!="function")throw new TypeError("target must be an object or function");let n=e;for(;n;){let o=this.store.get(n);if(o){let s=o.get(r);if(s&&s.has(t))return s.get(t)}n=Object.getPrototypeOf(n);}}};K.store=new WeakMap;var Qn="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Bn=Qn.length,Bf=10,Qf=16,Kf=(i,t)=>{let e="";for(let r=0;r<t;r++){let n=i%Bn;e=Qn.charAt(n)+e,i=(i-n)/Bn;}return e},kf=i=>{let t=ne().crypto.randomBytes(i),e="";for(let r=0;r<i;r++){let n=t[r];e+=Qn.charAt(n%Bn);}return e},Su=()=>{let i=Math.floor(Date.now()/1e3),t=Kf(i,Bf),e=kf(Qf);return t+e};function Kn(i){return i.replace(/^[`"]|[`"]$/g,"")}function kn(i,t,e){if(!i.includes(".")){let o=Kn(i);return `${t}.${o}`}let[r,n]=i.split(".");return r=Kn(r),n=Kn(n),r!==e?i:n==="*"?`${t}.*`:`${t}.${n}`}function q(i){return typeof i=="function"?i():i}var F=(i,t=new WeakMap)=>{if(i===null||typeof i!="object")return i;if(t.has(i))return t.get(i);if(Array.isArray(i)){let r=[];t.set(i,r);for(let n=0;n<i.length;n++)r[n]=F(i[n],t);return r}let e=Object.create(Object.getPrototypeOf(i)||{});t.set(i,e);for(let r of Object.getOwnPropertyNames(i)){let n=i[r];if(typeof n=="function"){e[r]=n;continue}e[r]=F(n,t);}return e};var Oe=class{constructor(t,e){this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var sr=class extends Oe{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var ir=class extends Oe{constructor(e,r,n){super(e,r);this.type="hasMany";this.foreignKey=n,this.type="hasMany";}};var ar=class extends Oe{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var lr=class extends Oe{constructor(e,r,n){super(e,r);this.type="manyToMany";this.primaryModel=n.primaryModel,this.relatedModel=e.table,this.throughModel=n.throughModel,this.leftForeignKey=n.leftForeignKey,this.rightForeignKey=n.rightForeignKey;}};function Lf(i){return i.endsWith("ies")?i.slice(0,-3)+"y":i.endsWith("sses")||i.endsWith("shes")||i.endsWith("ches")||i.endsWith("xes")||i.endsWith("zes")?i.slice(0,-2):i.endsWith("s")&&!i.endsWith("ss")?i.slice(0,-1):i}var ur=Symbol("columns"),ut=Symbol("primaryKey"),we=Symbol("relations"),dr=Symbol("indexes"),mr=Symbol("uniques"),cr=Symbol("checks"),Le=i=>`${Lf(i)}_id`,pr=(i,t)=>`idx_${i}_${t}`,pe=(i,t)=>`uq_${i}_${t}`,H=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,Ne=(i,t)=>`pk_${i}_${t}`,qu=(i,t)=>{let e=t.replace(/[^a-zA-Z0-9]+/g,"_").replace(/^_|_$/g,"").toLowerCase();return `chk_${i}_${e}`.substring(0,63)};function Ln(i,t){return e=>{let r=Array.isArray(i)?i:[i],n=K.getMetadata(dr,e.prototype)||[];n.push({columns:r,name:t??pr(e.table,r.join("_"))}),K.defineMetadata(dr,n,e.prototype);}}function Wn(i,t){return e=>{let r=Array.isArray(i)?i:[i],n=K.getMetadata(mr,e.prototype)||[];n.push({columns:r,name:t??pe(e.table,r.join("_"))}),K.defineMetadata(mr,n,e.prototype);}}function Fn(i,t){return e=>{let r=K.getMetadata(cr,e.prototype)||[];r.push({expression:i,name:t??qu(e.table,i)}),K.defineMetadata(cr,r,e.prototype);}}var Cu=Symbol("viewStatement");function R(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let n=e.constructor;if(t){if(K.getMetadata(ut,e))throw new h("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");K.defineMetadata(ut,r,e),K.defineMetadata(ut,r,e.constructor);}let o=i.databaseName??V(r,n.databaseCaseConvention),s={columnName:r,serialize:i.serialize,prepare:i.prepare,isPrimary:t,primaryKeyConstraintName:i.primaryKeyConstraintName??Ne(n.table,r),autoUpdate:i.autoUpdate,autoCreate:i.autoCreate,databaseName:o,openApi:i.openApi,type:i.type,length:i?.length,precision:i?.precision,scale:i?.scale,withTimezone:i?.withTimezone,unsigned:i.unsigned,zerofill:i.zerofill,stringMode:i.stringMode,expression:i.expression,constraints:{nullable:i.nullable,default:i.default}};s.validate=i.validate;let a=K.getMetadata(ur,e)||[];a.push(s),K.defineMetadata(ur,a,e);}}R.primary=Wf;R.date=oh;R.datetime=sh;R.timestamp=ih;R.time=ah;R.boolean=nh;R.json=lh;R.uuid=Jf;R.ulid=Hf;R.integer=jf;R.bigInteger=Yf;R.float=Ff;R.decimal=Zf;R.increment=Uf;R.bigIncrement=Vf;R.string=zf;R.text=Gf;R.binary=Xf;R.enum=eh;R.encryption={symmetric:th,asymmetric:rh};R.computed=uh;function Wf(i={}){return R({...i,primaryKey:true})}function Ff(i={}){return R({type:"float",...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?Number.parseInt(t):Number.parseFloat(t)},openApi:{type:"number",format:"float",description:"A floating point number",...i.openApi||{}}})}function jf(i={}){return R({type:"integer",...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?+t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An integer number",...i.openApi||{}}})}function Uf(i={}){return R({type:"increment",...i,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An auto-incrementing integer number",...i.openApi||{}}})}function Vf(i={}){return R({type:"bigIncrement",...i,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)},openApi:{type:"integer",format:"int64",description:"An auto-incrementing bigint number",...i.openApi||{}}})}function Jf(i={}){return R({type:"uuid",...i,prepare:t=>t||ne().crypto.randomUUID(),openApi:{type:"string",format:"uuid",description:"uuid (Universally Unique Identifier)",...i.openApi||{}}})}function Hf(i={}){return R({type:"ulid",...i,prepare:t=>t||Su(),openApi:{type:"string",format:"ulid",description:"ulid (Universally Unique Lexicographically Sortable Identifier)",...i.openApi||{}}})}function zf(i={}){return R({type:"string",...i,openApi:{type:"string",description:"A string value",...i.openApi||{}}})}function Gf(i={}){return R({type:"longtext",...i,openApi:{type:"string",description:"A text value",...i.openApi||{}}})}function Yf(i={}){return R({type:"bigint",...i,serialize:t=>{if(t!==void 0){if(t===null)return null;if(typeof t=="number")return t;if(typeof t=="string")return Number.parseInt(t);if(typeof t=="bigint")return Number(t)}},openApi:{type:"integer",format:"int64",description:"A bigint number",...i.openApi||{}}})}function Zf(i={}){return R({type:"decimal",precision:i.precision??10,scale:i.scale??2,...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseFloat(t)},openApi:{type:"number",format:"double",description:"A decimal number",...i.openApi||{}}})}function Xf(i={}){return R({type:"binary",...i,openApi:{type:"string",format:"binary",description:"Binary data",...i.openApi||{}}})}function eh(i,t={}){return R({type:i,...t,openApi:{type:"string",enum:i,description:"An enum value",...t.openApi||{}}})}function th(i){return R({...i,prepare:t=>t&&bu(i.key,t),serialize:t=>t&&Tu(i.key,t)})}function rh(i){return R({...i,prepare:t=>t&&wu(i.publicKey,t),serialize:t=>t&&Nu(i.privateKey,t)})}function nh(i={}){return R({type:"boolean",...i,serialize:t=>!!t,prepare:t=>{if(t!=null)return !!t},openApi:{type:"boolean",description:"A boolean value",...i.openApi||{}}})}function oh(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=i,s=!!n,a=!!r,l=typeof n=="function"?"js":s?true:void 0,u=()=>new Date,d=()=>ue(new Date,"DATE_ONLY",e),c=t?typeof n=="function"?n:d:typeof n=="function"?n:u,m=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return R({type:"date",...o,autoUpdate:a,autoCreate:l,prepare:t?y=>y?a?m():y:s?c():null:y=>y?a?m():y:s?c():null,serialize:t?y=>{if(y!==void 0)return y===null?null:y instanceof Date?ue(y,"DATE_ONLY",e):String(y)}:y=>{if(y!==void 0)return y===null?null:y instanceof Date?y:new Date(y)},openApi:{type:"string",format:"date",description:"YYYY-MM-DD",...o.openApi||{}}})}function sh(i={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...s}=i,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,c=typeof o=="function"?"js":u?true:void 0,m=()=>new Date,p=()=>ue(new Date,"ISO",a),g=t?typeof o=="function"?o:p:typeof o=="function"?o:m,y=t?typeof n=="function"?n:p:typeof n=="function"?n:m;return R({type:"datetime",...s,withTimezone:l,autoUpdate:d,autoCreate:c,prepare:t?S=>S?d?y():S:u?g():null:S=>S?d?y():S:u?g():null,serialize:t?S=>{if(S!==void 0)return S===null?null:S instanceof Date?ue(S,"ISO",a):String(S)}:S=>{if(S!==void 0)return S===null?null:S instanceof Date?S:new Date(S)},stringMode:t,openApi:{type:"string",format:"date-time",description:"YYYY-MM-DD HH:mm:ss",...s.openApi||{}}})}function ih(i={},t=false){let{timezone:e,withTimezone:r,autoUpdate:n=false,autoCreate:o=false,...s}=i,a=e??"UTC",l=r??e!==void 0,u=!!o,d=!!n,c=typeof o=="function"?"js":u?true:void 0,m=()=>new Date,p=()=>ue(new Date,"TIMESTAMP",a),g=t?typeof o=="function"?o:p:typeof o=="function"?o:m,y=t?typeof n=="function"?n:p:typeof n=="function"?n:m;return R({type:"timestamp",...s,withTimezone:l,autoUpdate:d,autoCreate:c,prepare:t?S=>S?d?y():S:u?g():null:S=>S?d?y():S:u?g():null,serialize:t?S=>{if(S!==void 0)return S===null?null:S instanceof Date?ue(S,"TIMESTAMP",a):String(S)}:S=>{if(S!==void 0)return S===null?null:S instanceof Date?S:new Date(S)},stringMode:t,openApi:{type:"string",format:"date-time",description:"Unix timestamp",...s.openApi||{}}})}function ah(i={},t=false){let{timezone:e="UTC",autoUpdate:r=false,autoCreate:n=false,...o}=i,s=!!n,a=!!r,l=typeof n=="function"?"js":s?true:void 0,u=()=>new Date,d=()=>ue(new Date,"TIME_ONLY",e),c=t?typeof n=="function"?n:d:typeof n=="function"?n:u,m=t?typeof r=="function"?r:d:typeof r=="function"?r:u;return R({type:"time",...o,autoUpdate:a,autoCreate:l,prepare:t?y=>y?a?m():y:s?c():null:y=>y?a?m():y:s?c():null,serialize:t?y=>{if(y!==void 0)return y===null?null:y instanceof Date?ue(y,"TIME_ONLY",e):String(y)}:y=>{if(y!==void 0)return y===null?null:y instanceof Date?y:new Date(y)},stringMode:t,openApi:{type:"string",format:"time",description:"HH:mm:ss",...o.openApi||{}}})}function lh(i={}){return R({type:"jsonb",...i,serialize:t=>typeof t=="string"?JSON.parse(t):t,prepare:t=>typeof t!="string"?JSON.stringify(t):t,openApi:{type:"object",description:"A JSON object",...i.openApi||{}}})}function uh(i,t={}){return R({...t,expression:i})}function Ru(i){try{return K.getMetadata(ur,i.prototype)||[]}catch{return []}}function _u(i,t,e){return((r,n)=>{let o=()=>Le(i().table),s=()=>{let u=r.constructor.table,d=t||o();return H(u,d,i().table)},a={type:"belongsTo",columnName:n,model:i,foreignKey:t?String(t):o,constraintName:e?.constraintName??s,onUpdate:e?.onUpdate,onDelete:e?.onDelete},l=K.getMetadata(we,r)||[];l.push(a),K.defineMetadata(we,l,r);})}function Mu(i,t){return((e,r)=>{let n=()=>Le(e.constructor.table),o={type:"hasOne",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):n},s=K.getMetadata(we,e)||[];s.push(o),K.defineMetadata(we,s,e);})}function Ou(i,t){return((e,r)=>{let n=()=>Le(e.constructor.table),o={type:"hasMany",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):n},s=K.getMetadata(we,e)||[];s.push(o),K.defineMetadata(we,s,e);})}function Au(i,t,e,r){return((n,o)=>{let{leftForeignKey:s,rightForeignKey:a}=e??{},l=typeof t!="string",u=typeof t=="string"?t:()=>t().table,d=n.constructor.table,c=()=>Le(d),m=()=>Le(i().table),p=()=>H(q(u),s?String(s):c()),g={type:"manyToMany",columnName:o,model:i,constraintName:r?.constraintName??p,foreignKey:s?String(s):c,onDelete:r?.onDelete,onUpdate:r?.onUpdate,manyToManyOptions:{primaryModel:d,throughModel:u,leftForeignKey:s?String(s):c,rightForeignKey:a?String(a):m,wasModelProvided:l}},y=K.getMetadata(we,n)||[];y.push(g),K.defineMetadata(we,y,n);})}function xu(i){return K.getMetadata(we,i.prototype)||[]}function Du(i){return (K.getMetadata(we,i.prototype)||[]).map(e=>{let{type:r,model:n,columnName:o,foreignKey:s}=e,a=q(s),l=n();switch(r){case "belongsTo":return new sr(l,o,a);case "hasOne":return new ar(l,o,a);case "hasMany":return new ir(l,o,a);case "manyToMany":if(!e.manyToManyOptions)throw new h("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let u=n();return new lr(u,o,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:q(e.manyToManyOptions.throughModel),leftForeignKey:q(e.manyToManyOptions.leftForeignKey),rightForeignKey:q(e.manyToManyOptions.rightForeignKey)});default:throw new h("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function Iu(i){return K.getMetadata(ut,i)||K.getMetadata(ut,i.prototype)}function $u(i){return K.getMetadata(dr,i.prototype)||[]}function vu(i){return K.getMetadata(mr,i.prototype)||[]}function Eu(i){return K.getMetadata(cr,i.prototype)||[]}var We=class{};We.modelCaseConvention="camel",We.databaseCaseConvention="snake";var ye=class{};ye.columns=new WeakMap,ye.byName=new WeakMap,ye.byDatabaseName=new WeakMap;var de=class extends We{static get table(){let t=Object.getOwnPropertyDescriptor(this,"table");if(t&&"value"in t)return t.value;throw new Error(`Table name not set for model "${this.name}". Use defineModel() to create models.`)}static set table(t){Object.defineProperty(this,"table",{value:t,writable:true,enumerable:true,configurable:true});}static get primaryKey(){return Iu(this)}constructor(t){if(super(),t)for(let e in t)Object.assign(this,{[e]:t[e]});}static getColumns(){let t=ye.columns.get(this);return t||(t=Ru(this),ye.columns.set(this,t)),t}static getColumnsByName(){let t=ye.byName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.columnName,e])),ye.byName.set(this,t)),t}static getColumnsByDatabaseName(){let t=ye.byDatabaseName.get(this);return t||(t=new Map(this.getColumns().map(e=>[e.databaseName,e])),ye.byDatabaseName.set(this,t)),t}static getRelations(){return xu(this)}static getIndexes(){return $u(this)}static getUniques(){return vu(this)}static getChecks(){return Eu(this)}static async validate(t){var s,a;let e=this.getColumns(),r={},n=this.primaryKey,o=n&&t?.[n]!==void 0?"update":"insert";for(let l of e){if(l.expression)continue;let u=l.validate;if(!u)continue;let d=t?t[l.columnName]:void 0,c=Array.isArray(u)?u:[u];for(let m of c)try{let p=await m(d,{model:this,column:l.columnName,operation:o,data:t});if(!(p&&p.valid)){let g=p&&p.message||"Validation failed";(r[s=l.columnName]||(r[s]=[])).push(g);}}catch{(r[a=l.columnName]||(r[a]=[])).push("Validation error");}}if(Object.keys(r).length>0)throw new vt(r);return {valid:true}}};de.zodEngine=null,de.softDeleteColumn="deletedAt",de.softDeleteValue=lt();var Pu=new Set(["table","primaryKey","softDeleteColumn","softDeleteValue","modelCaseConvention","databaseCaseConvention","getColumns","getColumnsByName","getColumnsByDatabaseName","getRelations","getIndexes","getUniques","getChecks","beforeFetch","query","all","first","find","findOneOrFail","findOne","findBy","findOneBy","findOneByPrimaryKey","refresh","sync","insert","insertMany","updateRecord","firstOrInsert","upsert","upsertMany","deleteRecord","save","softDelete","truncate","sqlInstance","getTableInfo","getIndexInfo","getTableSchema","prototype","constructor"]);function W(i){return {_phantom:void 0,_apply:i}}function j(i={}){return W((t,e)=>{R(i)(t,e);})}j.primary=function(t={}){return W((e,r)=>{R.primary(t)(e,r);})};j.string=function(t){return W((e,r)=>{R.string(t??{})(e,r);})};j.text=function(t){return W((e,r)=>{R.text(t??{})(e,r);})};j.integer=function(t){return W((e,r)=>{R.integer(t??{})(e,r);})};j.bigInteger=function(t){return W((e,r)=>{R.bigInteger(t??{})(e,r);})};j.float=function(t){return W((e,r)=>{R.float(t??{})(e,r);})};j.decimal=function(t){return W((e,r)=>{R.decimal(t??{})(e,r);})};j.increment=function(t={}){return W((e,r)=>{R.increment(t)(e,r);})};j.bigIncrement=function(t={}){return W((e,r)=>{R.bigIncrement(t)(e,r);})};j.boolean=function(t){return W((e,r)=>{R.boolean(t??{})(e,r);})};function Bu(i){return W((t,e)=>{R.date(i??{},false)(t,e);})}Bu.string=function(t){return W((e,r)=>{R.date(t??{},true)(e,r);})};j.date=Bu;function Qu(i){return W((t,e)=>{R.datetime(i??{},false)(t,e);})}Qu.string=function(t){return W((e,r)=>{R.datetime(t??{},true)(e,r);})};j.datetime=Qu;function Ku(i){return W((t,e)=>{R.timestamp(i??{},false)(t,e);})}Ku.string=function(t){return W((e,r)=>{R.timestamp(t??{},true)(e,r);})};j.timestamp=Ku;function ku(i){return W((t,e)=>{R.time(i??{},false)(t,e);})}ku.string=function(t){return W((e,r)=>{R.time(t??{},true)(e,r);})};j.time=ku;j.json=function(t){return W((e,r)=>{R.json({type:"json",...t??{}})(e,r);})};j.jsonb=function(t){return W((e,r)=>{R.json(t??{})(e,r);})};j.uuid=function(t){return W((e,r)=>{R.uuid(t??{})(e,r);})};j.ulid=function(t){return W((e,r)=>{R.ulid(t??{})(e,r);})};j.binary=function(t){return W((e,r)=>{R.binary(t??{})(e,r);})};j.enum=function(t,e){return W((r,n)=>{R.enum(t,e??{})(r,n);})};j.nativeEnum=function(t,e){let r=Object.values(t).filter(s=>typeof s=="string"||typeof s=="number"),o=r.some(s=>typeof s=="number")?r.filter(s=>typeof s=="number").map(s=>String(s)):r.filter(s=>typeof s=="string");return W((s,a)=>{R.enum(o,e??{})(s,a);})};j.char=function(t){return W((e,r)=>{R.string({...t,type:"char"})(e,r);})};j.varbinary=function(t){return W((e,r)=>{R({type:"varbinary",...t})(e,r);})};j.tinyint=function(t){return W((e,r)=>{R.integer({...t,type:"tinyint"})(e,r);})};j.smallint=function(t){return W((e,r)=>{R.integer({...t,type:"smallint"})(e,r);})};j.mediumint=function(t){return W((e,r)=>{R.integer({...t,type:"mediumint"})(e,r);})};j.computed=function(t,e={}){return W((r,n)=>{R.computed(t,e)(r,n);})};j.encryption={symmetric(i){return W((t,e)=>{R.encryption.symmetric(i)(t,e);})},asymmetric(i){return W((t,e)=>{R.encryption.asymmetric(i)(t,e);})}};var dh=j;function mh(i,t){let{columns:e,indexes:r,uniques:n,checks:o,hooks:s,options:a}=t;class l extends de{}l.table=i,a?.modelCaseConvention&&(l.modelCaseConvention=a.modelCaseConvention),a?.databaseCaseConvention&&(l.databaseCaseConvention=a.databaseCaseConvention),a?.softDeleteColumn&&(l.softDeleteColumn=a.softDeleteColumn),a?.softDeleteValue!==void 0&&(l.softDeleteValue=a.softDeleteValue);for(let[u,d]of Object.entries(e)){if(d._apply(l.prototype,u),Pu.has(u))throw new Error(`defineModel("${i}"): column name "${u}" conflicts with an existing model property. Please rename this column.`);Object.defineProperty(l,u,{value:`${i}.${u}`,writable:false,enumerable:true,configurable:true});}if(r)for(let u of r)fh(l,u);if(n)for(let u of n)hh(l,u);if(o)for(let u of o)gh(l,u);return s&&s.beforeFetch&&(l.beforeFetch=s.beforeFetch),Lu(l),l}function ch(i,t){let r=t({hasOne(o,s){return {_kind:"hasOne",_target:o,_foreignKey:s.foreignKey,_phantom:void 0}},hasMany(o,s){return {_kind:"hasMany",_target:o,_foreignKey:s.foreignKey,_phantom:void 0}},belongsTo(o,s){let{foreignKey:a,...l}=s;return {_kind:"belongsTo",_target:o,_foreignKey:a,_constraintOptions:l,_phantom:void 0}},manyToMany(o,s){let{through:a,leftForeignKey:l,rightForeignKey:u,...d}=s;return {_kind:"manyToMany",_target:o,_foreignKey:l,_throughModel:typeof a=="string"?a:(()=>a),_throughModelKeys:{leftForeignKey:l,rightForeignKey:u},_constraintOptions:d,_phantom:void 0}}}),n=Object.fromEntries(Object.keys(r).map(o=>[o,o]));return {_source:i,_defs:r,...n}}function ph(i,t){for(let[e,r]of Object.entries(t||{})){if(!r)continue;let n=i[e];if(!n)throw new Error(`createSchema: relation key "${e}" does not match any model in the models record`);let o=r._defs;for(let[s,a]of Object.entries(o)){let l=a._target,u=a._foreignKey;switch(a._kind){case "hasOne":Mu(()=>l,u)(n.prototype,s);break;case "hasMany":Ou(()=>l,u)(n.prototype,s);break;case "belongsTo":_u(()=>l,u,a._constraintOptions)(n.prototype,s);break;case "manyToMany":{let d=a._throughModel,c=a._throughModelKeys;Au(()=>l,d,c,a._constraintOptions)(n.prototype,s);break}}}}return i}function yh(i,t){let{columns:e,statement:r,hooks:n,options:o}=t;class s extends de{}s.table=i,s[Cu]=r,o?.modelCaseConvention&&(s.modelCaseConvention=o.modelCaseConvention),o?.databaseCaseConvention&&(s.databaseCaseConvention=o.databaseCaseConvention);for(let[a,l]of Object.entries(e)){if(l._apply(s.prototype,a),Pu.has(a))throw new Error(`defineView("${i}"): column name "${a}" conflicts with an existing model property. Please rename this column.`);Object.defineProperty(s,a,{value:`${i}.${a}`,writable:false,enumerable:true,configurable:true});}return n&&n.beforeFetch&&(s.beforeFetch=n.beforeFetch),Lu(s),s}function Lu(i){i.toZodSchema=function(){let t=this.zodEngine||de.zodEngine;if(!t)throw new h("Model::toZodSchema","ZOD_ENGINE_NOT_LOADED",new Error("Zod engine not loaded. Please call sql.loadZodEngine(z) before using toZodSchema()."));let e=this.getColumns(),r={};for(let n of e){let o;if(n.expression){r[n.columnName]=t.any().optional();continue}if(Array.isArray(n.type))o=t.enum(n.type);else switch(n.type){case "string":case "varchar":case "char":case "text":case "longtext":case "mediumtext":case "tinytext":case "uuid":case "ulid":o=t.string();break;case "integer":case "tinyint":case "smallint":case "mediumint":case "bigint":case "float":case "double":case "real":case "decimal":case "numeric":case "increment":case "bigIncrement":o=t.number();break;case "boolean":o=t.boolean();break;case "date":case "datetime":case "timestamp":case "time":o=t.date();break;case "json":case "jsonb":o=t.any();break;case "binary":case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":o=t.any();break;default:o=t.any();}n.constraints?.nullable!==false&&!n.isPrimary&&(o=o.nullable()),r[n.columnName]=o;}return t.object(r)};}function fh(i,t){Array.isArray(t)?Ln(t)(i):Ln(t.columns,t.name)(i);}function hh(i,t){Array.isArray(t)?Wn(t)(i):Wn(t.columns,t.name)(i);}function gh(i,t){typeof t=="string"?Fn(t)(i):Fn(t.expression,t.name)(i);}var N=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var M=class extends N{constructor(e,r,n=false,o,s,a=false){super("where",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where";this.column=e,this.chainsWith=` ${r}`,this.isNegated=n,this.operator=o,this.value=s;}};var xe=class extends N{constructor(e,r="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_group";this.nodes=e,this.chainsWith=` ${r}`;}};var U=class extends M{constructor(e,r,n=false,o,s,a=false,l,u){super(e,r,n,"=",s,a);this.file="where_json";this.jsonOperator=o,this.value=s,this.path=l,this.comparisonOperator=u;}};var Se=class extends N{constructor(e,r,n,o="and"){super("where");this.canKeywordBeSeenMultipleTimes=false;this.folder="where";this.file="where_subquery";this.column=e,this.operator=r,this.subquery=n,this.chainsWith=` ${o}`;}};var z=class extends N{constructor(e,r,n,o,s){super("select");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="select";this.file="select";this.column=e,this.alias=r,this.sqlFunction=n,this.isRawValue=o??false,this.distinct=s;}};var jn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(n+=` ${s.join(" ")}`);}return {sql:`add ${n}`,bindings:[]}}},Wu=new jn;var Un=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Fu=new Un;var Vn=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`[${n}]`).join(", ")})`,bindings:[]}}},ju=new Vn;var Jn=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),s=o.join(" ");e.newType.dataType==="uuid"&&(s=s.replace(/\s+default\s+.+$/i,"").trim());let a="";e.options.nullable!==void 0&&(a=e.options.nullable?" null":" not null");let l=`alter column [${e.column}] ${s}${a}`;if(e.options.dropDefault&&(l=`drop constraint DF_${e.column}, ${l}`),e.options.default!==void 0&&!e.options.dropDefault){let u=e.options.default;u===null?u="null":typeof u=="string"&&(u==="NULL"?u="null":u==="TRUE"||u==="FALSE"?u=u==="TRUE"?"1":"0":u=`'${u}'`),l+=`, add constraint DF_${e.column} default ${u} for [${e.column}]`;}return e.options.unique!==void 0&&e.options.unique&&(l+=`, add constraint UQ_${e.column} unique ([${e.column}])`),{sql:l,bindings:[]}}},Uu=new Jn;var dt=class extends N{constructor(e){super("rename to");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="rename_table";this.newName=e;}};var Hn=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};if(e.children.length===1&&e.children[0]instanceof dt){let d=e.children[0];return {sql:`EXEC sp_rename '${e.table}', '${d.newName}'`,bindings:[]}}let o=new b(this.model,"mssql"),s=[],a=[];for(let d of e.children){let{sql:c,bindings:m}=o.parse([d]);s.push(c.trim()),a.push(...m);}let l=s.join(", ");return {sql:`${n} ${l}`,bindings:a}}},Vu=new Hn;var zn=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},Ju=new zn;var Gn=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},Hu=new Gn;var Yn=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},zu=new Yn;var Pt=i=>{switch(i){case "mysql":return "mysql";case "mariadb":return "mariadb";case "postgres":case "cockroachdb":return "postgresql";case "sqlite":return "sqlite";case "mssql":return "transactsql";default:return "sql"}},Zn=i=>{if(i==null)return "NULL";if(i instanceof Date)return `'${i.toISOString()}'`;let t=typeof i;return t==="boolean"?i?"TRUE":"FALSE":t==="number"&&Number.isFinite(i)||t==="bigint"?String(i):t==="string"?`'${i.replace(/'/g,"''")}'`:Array.isArray(i)||t==="object"&&Object.keys(i).length>0?`'${JSON.stringify(i).replace(/'/g,"''")}'`:String(i)},Bt=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,Zn(t[r]));for(let r=0;r<t.length;r++){let n=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(n,Zn(t[r]));}for(let r=0;r<t.length;r++){let n=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(n,Zn(t[r]));}return e},mt=(i,t)=>t?i==="mysql"||i==="mariadb"?t.code==="ER_NO_SUCH_TABLE"||t.errno===1146:i==="postgres"||i==="cockroachdb"?t.code==="42P01":i==="sqlite"?/no such table/i.test(String(t.message||"")):i==="mssql"?t.number===208:false:false,Qt=(i,t)=>{let e=i.getDbType(),r;try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions,language:Pt(e)});}catch{try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var Yu={info:0,warn:1,error:2};function fr(i){return i?i===true?{level:"info",logQueries:true}:{level:i.level??"info",logQueries:i.logQueries??true,customLogger:i.customLogger}:null}function wh(i,t="info"){let e=fr(i);if(!e)return false;let r=e.level??"info";return Yu[t]>=Yu[r]}function Nh(i){let t=fr(i);return t?t.logQueries??true:false}var Fe={info:"32",warn:"33",error:"31",query:"35",dim:"2",cyan:"36"},Sh=typeof process<"u"&&!!process.stdout?.isTTY&&!process.env.NO_COLOR,ct=(i,t)=>Sh?`\x1B[${i}m${t}\x1B[0m`:t;function td(){let i=new Date,t=r=>r.toString().padStart(2,"0"),e=i.getMilliseconds().toString().padStart(3,"0");return `${t(i.getHours())}:${t(i.getMinutes())}:${t(i.getSeconds())}.${e}`}function Xn(i,t){let e=ct(Fe.dim,`[${td()}]`),r=ct(Fe[i],i.toUpperCase().padEnd(5));return `${e} ${r} ${t}`}var qh=60,Ch=10,Zu=400;function yr(i,t=qh){return i.length<=t?i:`${i.slice(0,t)}\u2026`}function Rh(i){if(i==null)return "null";if(typeof i=="string")return `'${yr(i)}'`;if(typeof i=="number"||typeof i=="bigint")return String(i);if(typeof i=="boolean")return i?"true":"false";if(i instanceof Date)return `'${yr(i.toISOString())}'`;if(typeof i=="object"){let t;try{t=JSON.stringify(i);}catch{t=String(i);}return `'${yr(t)}'`}return yr(String(i))}function _h(i){if(!i||i.length===0)return "[]";let t=i.slice(0,Ch).map(Rh),e=i.length-t.length;e>0&&t.push(`\u2026 (${e} more)`);let r=`[${t.join(", ")}]`;return r.length>Zu&&(r=`${r.slice(0,Zu)}\u2026`),r}var Xu=(i,t)=>{let e=" ".repeat(t);return i.split(`
2
2
  `).map(r=>`${e}${r}`).join(`
3
- `)};function Rh(i){let t=i<10?We.info:i<100?We.warn:We.error;return pt(t,`(${i}ms)`)}function _h(i,t,e){let r=pt(We.dim,`[${Xu()}]`),n=pt(We.query,"QUERY"),s=[e===void 0?`${r} ${n}`:`${r} ${n} ${Rh(e)}`,Yu(i,2)];return t&&t.length>0&&s.push(Yu(`parameters: ${pt(We.cyan,Ch(t))}`,4)),s.join(`
4
- `)}var Zu={info(i){console.log(Zn("info",i));},error(i){console.error(Zn("error",i));},warn(i){console.warn(Zn("warn",i));}},yt=class{static setCustomLogger(t){this.loggerInstance=t;}static info(t){this.loggerInstance.info(t);}static error(t){this.loggerInstance.error(t instanceof Error?String(t):t);}static warn(t){this.loggerInstance.warn(t);}static query(t){if(this.loggerInstance===Zu){console.log(t);return}this.loggerInstance.info(t);}};yt.loggerInstance=Zu;function ft(i,t,e,r,n,o){if(!Th(t))return;let s=i;if(r||n)try{s=sqlFormatter.format(i,{...r,language:r?.language??(n?Bt(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"}});yt.query(_h(a,e,o));}function ed(i,t,e=false){bh(e,t)&&yt.loggerInstance[t](i);}var _=yt;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}] null`,bindings:[]}}},td=new Xn;var eo=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},rd=new eo;var to=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},nd=new to;var ro=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},od=new ro;var O=class extends S{constructor(e,r){super("raw",true);this.canKeywordBeSeenMultipleTimes=true;this.chainsWith=" ";this.currParamIndex=0;this.isRawValue=true;this.folder="raw";this.file="raw";this.rawValue=e,this.bindings=r;}};var I=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;}},Mh={uuid:()=>new I("$uuid"),now:()=>new I("$now"),currentTimestamp:()=>new I("$currentTimestamp")},no=new Map;function Oh(i,t){no.set(i,t);}function je(i,t){let e=i===void 0?void 0:no.get(i),r=no.get("*");return e?.(t)??r?.(t)}var oo=class{toSql(t){let e=t,r;return e.defaultValue instanceof O?r=e.defaultValue.rawValue:e.defaultValue instanceof I?r=new b(this.model,"mssql").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"||e.defaultValue===null?r="null":e.defaultValue==="TRUE"?r="1":e.defaultValue==="FALSE"?r="0":typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="1"&&e.defaultValue!=="0"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`add constraint DF_${e.column} default ${r} for [${e.column}]`,bindings:[]}}},sd=new oo;var so=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:[]}}},id=new so;var io=class{toSql(t){return {sql:"",bindings:[]}}},ad=new io;var ao=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:[]}}},ld=new ao;var lo=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
5
- `:e,bindings:[]}}},ud=new lo;var uo=class{toSql(t){return {sql:"",bindings:[]}}},dd=new uo;var mo=class{toSql(t){let e=t,r=new f(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let n=e.constraintName?`constraint [${e.constraintName}] `:"",o=(e.columns??[]).map(s=>r.formatStringColumn("mssql",q(s))).join(", ");return {sql:`${n}primary key (${o})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns??[],o=e.constraintName?`constraint [${e.constraintName}] `:"",s=n.map(a=>r.formatStringColumn("mssql",q(a))).join(", ");return e.constraintName?{sql:`${o}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let n=e.defaultValue;return n instanceof O?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof I?{sql:`default ${new b(this.model,"mssql").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"?{sql:"default 1",bindings:[]}:n==="FALSE"?{sql:"default 0",bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let n=e.columns.map(u=>r.formatStringColumn("mssql",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:[]}}},md=new mo;var co=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 x=`${w} ${N}`.trim();x=x.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(x),a.push(...T);continue}s.push(w),s.push(N),a.push(...T);continue}s.push(y),a.push(...T);}for(let 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}}},cd=new co;var po=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:[]}}},pd=new po;var yo=class{toSql(t){return {sql:"",bindings:[]}}},yd=new yo;var fo=class{toSql(t){return _.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},fd=new fo;var ho=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},hd=new ho;var go=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},gd=new go;var bo=class{toSql(t){let e=t,r=new f(this.model),n=e.alias?` as ${r.quoteIdentifier("mssql",e.alias)}`:"";if(e.table instanceof O){let{sql:l,bindings:u}=r.formatRawPlaceholders("mssql",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("mssql",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"mssql").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},bd=new bo;var To=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},Td=new To;var wo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,n=new b(this.model,"mssql"),o=new f(this.model);if(e.group?.length){let{sql:u,bindings:d}=n.parse(e.group,e.currParamIndex,true);return {sql:`(${u})`,bindings:d}}let s=o.formatStringColumn("mssql",e.column),a="",l=[];if(e.subquery!==void 0){let u=this.parseSubquery(n,e,r);a=`${e.column?`${s} `:""}${e.operator} (${u.sql})`,l=u.bindings;}else if(e.value instanceof I){let u=n.parse([e.value],1,true).sql;a=`${s} ${e.operator} ${u}`;}else if(e.operator==="is null"||e.operator==="is not null")a=`${s} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")a=`${s} ${e.operator} @${r} and @${r+1}`;else {let u=e.value.map((d,c)=>`@${r+c}`).join(", ");a=`${s} ${e.operator} (${u})`;}l=e.value;}else a=`${s} ${e.operator} @${r}`,l=[e.value];return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:l}}parseSubquery(t,e,r){let n=e.subquery;if(typeof n=="string")return {sql:n,bindings:[]};let o=Array.isArray(n)?n:[n];return t.parse(o,r)}},wd=new wo;var So=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table),o=e.columns.map(a=>`[${a}]`).join(", ");return {sql:`${e.unique?"unique ":""}[${e.indexName}] on ${n} (${o})`,bindings:[]}}},Sd=new So;var No=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},Nd=new No;var qo=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 O?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(", ")}},qd=new qo;var Co=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};if(e.using?.length)throw new g("JoinQueryBuilder::using","USING_NOT_SUPPORTED_IN_MSSQL");let r=new f(this.model),n=r.formatStringTable("mssql",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let s=e.right;s.includes(".")||(s=`${this.model.table}.${s}`);let a=r.formatStringColumn("mssql",o),l=r.formatStringColumn("mssql",s),u=`${n} on ${a} ${e.on?.operator} ${l}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"mssql");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");u+=` and ${h}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},Cd=new Co;var Kt=class extends S{constructor(e,r,n,o,s){super("json_mutation");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="json_mutation";this.file="json_mutation";this.operation=e,this.column=r,this.path=n,this.value=o,this.alias=s;}},Rd=(i,t,e,r)=>new Kt("set",i,t,e,r),_d=(i,t,e,r)=>new Kt("insert",i,t,e,r),Md=(i,t,e)=>new Kt("remove",i,t,void 0,e),Ah=/^[A-Za-z_][A-Za-z0-9_]*$/;function Od(i){if(Array.isArray(i))return i;let t=[],e=i.replace(/^\$/,""),r=/\.([^.[\]]+)|\[(\d+)\]/g,n;for(;(n=r.exec(e))!==null;)n[1]!==void 0?t.push(n[1]):t.push(Number(n[2]));return t}function ht(i){return "$"+Od(i).map(e=>typeof e=="number"?`[${e}]`:Ah.test(e)?`.${e}`:`["${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"]`).join("")}function Ad(i){return `'{${Od(i).map(r=>{let n=String(r);return /^[A-Za-z0-9_]+$/.test(n)?n:`"${n.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}).join(",")}}'`}var Ro=class{toSql(t){let e=t;if(e.operation!=="set")throw new g("MssqlJsonMutationInterpreter::toSql","NOT_SUPPORTED_IN_MSSQL",new Error(`json${e.operation==="insert"?"Insert":"Remove"} is not supported by mssql; only jsonSet (JSON_MODIFY) is`));let r=new f(this.model).formatStringColumn("mssql",e.column),n=`'${ht(e.path).replace(/'/g,"''")}'`,o=e.value!==null&&typeof e.value=="object",s=`JSON_MODIFY(${r}, ${n}, @${e.currParamIndex})`;return {sql:this.withAlias(s,e.alias),bindings:[o?JSON.stringify(e.value):e.value]}}withAlias(t,e){return e?`${t} as [${e}]`:t}},xd=new Ro;var _o=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},Dd=new _o;var Mo=class{toSql(t){return {sql:"",bindings:[]}}},$d=new Mo;var Oo=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},vd=new Oo;var Ao=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:[]})}},Id=new Ao;var xo=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:[]}}},Ed=new xo;var Do=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Pd=new Do;var $o=class{toSql(t){let e=t,r=new f(this.model);return {sql:`output ${!e.columns.length||e.columns.includes("*")?`${e.prefix}.*`:e.columns.map(o=>`${e.prefix}.${r.formatStringColumn("mssql",o)}${r.resolveColumnAlias("mssql",o)}`).join(", ")}`,bindings:[]}}},Bd=new $o;var vo=class{toSql(t){return {sql:`SELECT
3
+ `)};function Mh(i){let t=i<10?Fe.info:i<100?Fe.warn:Fe.error;return ct(t,`(${i}ms)`)}function Oh(i,t,e){let r=ct(Fe.dim,`[${td()}]`),n=ct(Fe.query,"QUERY"),s=[e===void 0?`${r} ${n}`:`${r} ${n} ${Mh(e)}`,Xu(i,2)];return t&&t.length>0&&s.push(Xu(`parameters: ${ct(Fe.cyan,_h(t))}`,4)),s.join(`
4
+ `)}var ed={info(i){console.log(Xn("info",i));},error(i){console.error(Xn("error",i));},warn(i){console.warn(Xn("warn",i));}},pt=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===ed){console.log(t);return}this.loggerInstance.info(t);}};pt.loggerInstance=ed;function yt(i,t,e,r,n,o){if(!Nh(t))return;let s=i;if(r||n)try{s=sqlFormatter.format(i,{...r,language:r?.language??(n?Pt(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"}});pt.query(Oh(a,e,o));}function rd(i,t,e=false){wh(e,t)&&pt.loggerInstance[t](i);}var _=pt;var eo=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:[]}}},nd=new eo;var to=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},od=new to;var ro=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},sd=new ro;var no=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},id=new no;var O=class extends N{constructor(e,r){super("raw",true);this.canKeywordBeSeenMultipleTimes=true;this.chainsWith=" ";this.currParamIndex=0;this.isRawValue=true;this.folder="raw";this.file="raw";this.rawValue=e,this.bindings=r;}};var v=class extends N{constructor(e,r=[]){super("sqlfunc");this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="sqlfunc";this.file="sqlfunc";this.fn=e,this.args=r;}},Ah={uuid:()=>new v("$uuid"),now:()=>new v("$now"),currentTimestamp:()=>new v("$currentTimestamp")},oo=new Map;function xh(i,t){oo.set(i,t);}function je(i,t){let e=i===void 0?void 0:oo.get(i),r=oo.get("*");return e?.(t)??r?.(t)}var so=class{toSql(t){let e=t,r;return e.defaultValue instanceof O?r=e.defaultValue.rawValue:e.defaultValue instanceof v?r=new b(this.model,"mssql").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"||e.defaultValue===null?r="null":e.defaultValue==="TRUE"?r="1":e.defaultValue==="FALSE"?r="0":typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="1"&&e.defaultValue!=="0"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`add constraint DF_${e.column} default ${r} for [${e.column}]`,bindings:[]}}},ad=new so;var io=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:[]}}},ld=new io;var ao=class{toSql(t){return {sql:"",bindings:[]}}},ud=new ao;var lo=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:[]}}},dd=new lo;var uo=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
5
+ `:e,bindings:[]}}},md=new uo;var mo=class{toSql(t){return {sql:"",bindings:[]}}},cd=new mo;var co=class{toSql(t){let e=t,r=new f(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let n=e.constraintName?`constraint [${e.constraintName}] `:"",o=(e.columns??[]).map(s=>r.formatStringColumn("mssql",q(s))).join(", ");return {sql:`${n}primary key (${o})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns??[],o=e.constraintName?`constraint [${e.constraintName}] `:"",s=n.map(a=>r.formatStringColumn("mssql",q(a))).join(", ");return e.constraintName?{sql:`${o}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let n=e.defaultValue;return n instanceof O?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof v?{sql:`default ${new b(this.model,"mssql").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"?{sql:"default 1",bindings:[]}:n==="FALSE"?{sql:"default 0",bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let n=e.columns.map(u=>r.formatStringColumn("mssql",q(u))).join(", ");if(!e.references)return {sql:"",bindings:[]};let o=r.formatStringTable("mssql",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("mssql",q(u))).join(", "),l=`${e.constraintName?`constraint [${e.constraintName}] `:""}foreign key (${n}) references ${o}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint [${e.constraintName}] `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},pd=new co;var po=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mssql"),s=[],a=[];for(let g of e.children){let{sql:y,bindings:w}=o.parse([g]);if(g.folder==="constraint"){let T=s.pop()??"",S=y;if(/not null/i.test(S)||/null/i.test(S)||/default/i.test(S)){let x=`${T} ${S}`.trim();x=x.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(x),a.push(...w);continue}s.push(T),s.push(S),a.push(...w);continue}s.push(y),a.push(...w);}for(let g of e.namedConstraints){let{sql:y,bindings:w}=o.parse([g]);s.push(y),a.push(...w);}let l=s.join(", "),u=[];e.dataCompression&&u.push(`DATA_COMPRESSION = ${e.dataCompression}`);let d=e.onFilegroup?` ON [${e.onFilegroup}]`:"",c=e.textImageOn?` TEXTIMAGE_ON [${e.textImageOn}]`:"",m=u.length>0?` WITH (${u.join(", ")})`:"";return {sql:`${n} (${l})${m}${d}${c}`,bindings:a}}},yd=new po;var yo=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mssql",e.fromNode),bindings:[]}}},fd=new yo;var fo=class{toSql(t){return {sql:"",bindings:[]}}},hd=new fo;var ho=class{toSql(t){return _.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},gd=new ho;var go=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},bd=new go;var bo=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Td=new bo;var To=class{toSql(t){let e=t,r=new f(this.model),n=e.alias?` as ${r.quoteIdentifier("mssql",e.alias)}`:"";if(e.table instanceof O){let{sql:l,bindings:u}=r.formatRawPlaceholders("mssql",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("mssql",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"mssql").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},wd=new To;var wo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},Nd=new wo;var No=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,n=new b(this.model,"mssql"),o=new f(this.model);if(e.group?.length){let{sql:u,bindings:d}=n.parse(e.group,e.currParamIndex,true);return {sql:`(${u})`,bindings:d}}let s=o.formatStringColumn("mssql",e.column),a="",l=[];if(e.subquery!==void 0){let u=this.parseSubquery(n,e,r);a=`${e.column?`${s} `:""}${e.operator} (${u.sql})`,l=u.bindings;}else if(e.value instanceof v){let u=n.parse([e.value],1,true).sql;a=`${s} ${e.operator} ${u}`;}else if(e.operator==="is null"||e.operator==="is not null")a=`${s} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")a=`${s} ${e.operator} @${r} and @${r+1}`;else {let u=e.value.map((d,c)=>`@${r+c}`).join(", ");a=`${s} ${e.operator} (${u})`;}l=e.value;}else a=`${s} ${e.operator} @${r}`,l=[e.value];return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:l}}parseSubquery(t,e,r){let n=e.subquery;if(typeof n=="string")return {sql:n,bindings:[]};let o=Array.isArray(n)?n:[n];return t.parse(o,r)}},Sd=new No;var So=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mssql",e.table),o=e.columns.map(a=>`[${a}]`).join(", ");return {sql:`${e.unique?"unique ":""}[${e.indexName}] on ${n} (${o})`,bindings:[]}}},qd=new So;var qo=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},Cd=new qo;var Co=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode),o=r.renderWithNodes("mssql",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u="",d;if(e.source){let m=new b(this.model,"mssql").parse(e.source,a);u=e.targetColumns?.length?` (${e.targetColumns.map(p=>r.formatStringColumn("mssql",p)).join(", ")})`:"",d=m.sql,l.push(...m.bindings);}else {let m=e.records.length?Object.keys(e.records[0]).filter(p=>e.records[0][p]!==void 0):[];if(!m.length)d="default values";else {u=` (${m.map(g=>r.formatStringColumn("mssql",g)).join(", ")})`;let p=[];for(let g of e.records){let y=m.map(T=>g[T]),w=[];for(let T of y)T instanceof O?w.push(T.rawValue):(l.push(T),w.push(`@${a++}`));p.push(`(${w.join(", ")})`);}d=`values ${p.join(", ")}`;}}let c="";return e.disableReturning||(c=` output ${(e.returning?.length?e.returning:this.getOutputColumns(e.source?e.targetColumns??[]:Object.keys(e.records[0]??{}).filter(p=>e.records[0][p]!==void 0),r)).map(p=>`inserted.${r.formatStringColumn("mssql",p)}${r.resolveColumnAlias("mssql",p)}`).join(", ")}`),{sql:`${s}${n}${u}${c} ${d}`,bindings:[...o.bindings,...l]}}getOutputColumns(t,e){let r=[...t],n=this.model.primaryKey;return n&&!t.includes(n)&&r.push(n),r}},Rd=new Co;var Ro=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};if(e.using?.length)throw new h("JoinQueryBuilder::using","USING_NOT_SUPPORTED_IN_MSSQL");let r=new f(this.model),n=r.formatStringTable("mssql",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let s=e.right;s.includes(".")||(s=`${this.model.table}.${s}`);let a=r.formatStringColumn("mssql",o),l=r.formatStringColumn("mssql",s),u=`${n} on ${a} ${e.on?.operator} ${l}`,d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"mssql");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let g=p.sql.replace(/^where\s+/i,"");u+=` and ${g}`,d.push(...p.bindings);}}}return {sql:u,bindings:d}}},_d=new Ro;var Kt=class extends N{constructor(e,r,n,o,s){super("json_mutation");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="json_mutation";this.file="json_mutation";this.operation=e,this.column=r,this.path=n,this.value=o,this.alias=s;}},Md=(i,t,e,r)=>new Kt("set",i,t,e,r),Od=(i,t,e,r)=>new Kt("insert",i,t,e,r),Ad=(i,t,e)=>new Kt("remove",i,t,void 0,e),Dh=/^[A-Za-z_][A-Za-z0-9_]*$/;function xd(i){if(Array.isArray(i))return i;let t=[],e=i.replace(/^\$/,""),r=/\.([^.[\]]+)|\[(\d+)\]/g,n;for(;(n=r.exec(e))!==null;)n[1]!==void 0?t.push(n[1]):t.push(Number(n[2]));return t}function ft(i){return "$"+xd(i).map(e=>typeof e=="number"?`[${e}]`:Dh.test(e)?`.${e}`:`["${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"]`).join("")}function Dd(i){return `'{${xd(i).map(r=>{let n=String(r);return /^[A-Za-z0-9_]+$/.test(n)?n:`"${n.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}).join(",")}}'`}var _o=class{toSql(t){let e=t;if(e.operation!=="set")throw new h("MssqlJsonMutationInterpreter::toSql","NOT_SUPPORTED_IN_MSSQL",new Error(`json${e.operation==="insert"?"Insert":"Remove"} is not supported by mssql; only jsonSet (JSON_MODIFY) is`));let r=new f(this.model).formatStringColumn("mssql",e.column),n=`'${ft(e.path).replace(/'/g,"''")}'`,o=e.value!==null&&typeof e.value=="object",s=`JSON_MODIFY(${r}, ${n}, @${e.currParamIndex})`;return {sql:this.withAlias(s,e.alias),bindings:[o?JSON.stringify(e.value):e.value]}}withAlias(t,e){return e?`${t} as [${e}]`:t}},Id=new _o;var Mo=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},$d=new Mo;var Oo=class{toSql(t){return {sql:"",bindings:[]}}},vd=new Oo;var Ao=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},Ed=new Ao;var xo=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:(_.warn("MSSQL does not support ON CONFLICT or ON DUPLICATE KEY. Use MERGE statement for upsert operations. This clause will be ignored. Consider using raw queries for MSSQL upserts."),{sql:"",bindings:[]})}},Pd=new xo;var Do=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("mssql",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},Bd=new Do;var Io=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Qd=new Io;var $o=class{toSql(t){let e=t,r=new f(this.model);return {sql:`output ${!e.columns.length||e.columns.includes("*")?`${e.prefix}.*`:e.columns.map(o=>`${e.prefix}.${r.formatStringColumn("mssql",o)}${r.resolveColumnAlias("mssql",o)}`).join(", ")}`,bindings:[]}}},Kd=new $o;var vo=class{toSql(t){return {sql:`SELECT
6
6
  cc.name AS name,
7
7
  cc.definition AS expression
8
8
  FROM sys.check_constraints cc
9
9
  JOIN sys.tables t ON cc.parent_object_id = t.object_id
10
- WHERE t.name = '${t.table}'`,bindings:[]}}},Kd=new vo;var Io=class{toSql(t){return {sql:`SELECT
10
+ WHERE t.name = '${t.table}'`,bindings:[]}}},kd=new vo;var Eo=class{toSql(t){return {sql:`SELECT
11
11
  fk.name as name,
12
12
  c.name as column_name,
13
13
  rt.name as referenced_table,
@@ -19,7 +19,7 @@ INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_i
19
19
  INNER JOIN sys.columns c ON fkc.parent_object_id = c.object_id AND fkc.parent_column_id = c.column_id
20
20
  INNER JOIN sys.tables rt ON fkc.referenced_object_id = rt.object_id
21
21
  INNER JOIN sys.columns rc ON fkc.referenced_object_id = rc.object_id AND fkc.referenced_column_id = rc.column_id
22
- WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},Qd=new Io;var Eo=class{toSql(t){return {sql:`SELECT COLUMN_NAME as column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '${t.table}' ORDER BY ORDINAL_POSITION`,bindings:[]}}},kd=new Eo;var Po=class{toSql(t){return {sql:"SELECT TABLE_NAME as table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_NAME",bindings:[]}}},Ld=new Po;var Bo=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS cc INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc ON cc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME WHERE tc.TABLE_NAME = '${e.table}' AND cc.CONSTRAINT_NAME = '${e.constraint}'`,bindings:[]}}},Wd=new Bo;var Ko=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '${e.table}' AND COLUMN_NAME = '${e.column}'`,bindings:[]}}},jd=new Ko;var Qo=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM sys.indexes i INNER JOIN sys.tables t ON i.object_id = t.object_id WHERE t.name = '${e.table}' AND i.name = '${e.index}'`,bindings:[]}}},Fd=new Qo;var ko=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = '${t.table}' AND CONSTRAINT_TYPE = 'PRIMARY KEY'`,bindings:[]}}},Ud=new ko;var Lo=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = '${t.table}'`,bindings:[]}}},Vd=new Lo;var Wo=class{toSql(t){return {sql:`SELECT
22
+ WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},Ld=new Eo;var Po=class{toSql(t){return {sql:`SELECT COLUMN_NAME as column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '${t.table}' ORDER BY ORDINAL_POSITION`,bindings:[]}}},Wd=new Po;var Bo=class{toSql(t){return {sql:"SELECT TABLE_NAME as table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_NAME",bindings:[]}}},Fd=new Bo;var Qo=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS cc INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc ON cc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME WHERE tc.TABLE_NAME = '${e.table}' AND cc.CONSTRAINT_NAME = '${e.constraint}'`,bindings:[]}}},jd=new Qo;var Ko=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '${e.table}' AND COLUMN_NAME = '${e.column}'`,bindings:[]}}},Ud=new Ko;var ko=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM sys.indexes i INNER JOIN sys.tables t ON i.object_id = t.object_id WHERE t.name = '${e.table}' AND i.name = '${e.index}'`,bindings:[]}}},Vd=new ko;var Lo=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = '${t.table}' AND CONSTRAINT_TYPE = 'PRIMARY KEY'`,bindings:[]}}},Jd=new Lo;var Wo=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = '${t.table}'`,bindings:[]}}},Hd=new Wo;var Fo=class{toSql(t){return {sql:`SELECT
23
23
  i.name as index_name,
24
24
  c.name as column_name,
25
25
  i.is_unique as is_unique
@@ -28,7 +28,7 @@ INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = i
28
28
  INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
29
29
  WHERE i.object_id = OBJECT_ID('${t.table}')
30
30
  AND i.is_primary_key = 0
31
- AND i.type > 0`,bindings:[]}}},Jd=new Wo;var jo=class{toSql(t){return {sql:`SELECT
31
+ AND i.type > 0`,bindings:[]}}},zd=new Fo;var jo=class{toSql(t){return {sql:`SELECT
32
32
  tc.CONSTRAINT_NAME as name,
33
33
  kcu.COLUMN_NAME as column_name
34
34
  FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
@@ -36,7 +36,7 @@ JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
36
36
  ON tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
37
37
  WHERE tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
38
38
  AND tc.TABLE_NAME = '${t.table}'
39
- ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},Hd=new jo;var Fo=class{toSql(t){return {sql:`SELECT
39
+ ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},Gd=new jo;var Uo=class{toSql(t){return {sql:`SELECT
40
40
  c.COLUMN_NAME as column_name,
41
41
  c.DATA_TYPE as data_type,
42
42
  c.IS_NULLABLE as is_nullable,
@@ -46,8 +46,8 @@ ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},Hd=new jo;var Fo=class{toSql(t){re
46
46
  c.NUMERIC_SCALE as numeric_scale
47
47
  FROM INFORMATION_SCHEMA.COLUMNS c
48
48
  WHERE c.TABLE_NAME = '${t.table}'
49
- ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},zd=new Fo;var Uo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("mssql",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"mssql").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"mssql").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new f(this.model).formatStringColumn("mssql",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"mssql").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},Gd=new Uo;var ee=class i{constructor(t){this.segments=this.normalize(t);}normalize(t){if(Array.isArray(t))return t;if(typeof t=="string"){if(!t||t==="$")return [];let e=t.trim();return e=e.startsWith("$.")?e.slice(2):e,e=e.startsWith("$")?e.slice(1):e,e=e.startsWith(".")?e.slice(1):e,e?e.split(".").map(r=>{let n=Number(r);return isNaN(n)?r:n}):[]}return []}getSegments(){return [...this.segments]}isEmpty(){return this.segments.length===0}toPostgres(t=false){if(this.isEmpty())return "";let e=[];for(let r=0;r<this.segments.length;r++){let n=this.segments[r],o=r===this.segments.length-1,s=typeof n=="number";o&&t?e.push(s?`->>${n}`:`->>'${n}'`):e.push(s?`->${n}`:`->'${n}'`);}return e.join("")}toStandardJsonPath(){return this.isEmpty()?"$":`$.${this.segments.join(".")}`}toMysql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments){if(typeof e=="number"){t.push(`[${e}]`);continue}t.push(`.${e}`);}return t.join("")}toSqlite(){return this.toStandardJsonPath()}toMssql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments)typeof e=="number"?t.push(`[${e}]`):t.push(`.${e}`);return t.join("")}toDbSyntax(t,e=false){switch(t){case "postgres":case "cockroachdb":return this.toPostgres(e);case "mysql":case "mariadb":return this.toMysql();case "sqlite":return this.toSqlite();case "mssql":return this.toMssql();default:return this.toStandardJsonPath()}}static from(t){return new i(t)}static root(){return new i("")}};var Vo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("mssql",e.column),n=ee.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMssql();return r==="$"?t:`JSON_VALUE(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toMssql();return `(SELECT COUNT(*) FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}buildObjectKeysSql(t,e){let r=e.toMssql();return `(SELECT [key] FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}formatWithAlias(t,e){return e&&e.length>0?`${t} as [${e}]`:t}},Yd=new Vo;var Jo=class{toSql(t){let e=t,r=je(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof O?s.rawValue:s instanceof I?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "NEWID()";case "$now":case "$currentTimestamp":return "current_timestamp";default:return}}},Zd=new Jo;var Ho=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:[]}}},Xd=new Ho;var zo=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}}},em=new zo;var Go=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((u,d)=>{let c=e.values[d],m=r.formatStringColumn("mssql",u);if(c instanceof O)return `${m} = ${c.rawValue}`;if(c instanceof S){let h=new b(this.model,"mssql").parse([c],s,true);return o.push(...h.bindings),s+=h.bindings.length,`${m} = ${h.sql}`}let p=`@${s++}`;return o.push(c),`${m} = ${p}`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},tm=new Go;var Yo=class{toSql(t){let e=t;if(e.isRawValue){let a=e.value??[];if(a.length===0)return {sql:e.column,bindings:[]};let l=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`@${l++}`),bindings:a}}let r=e.value,n=e.currParamIndex;if(this.isRawNode(r)){let a=this.formatRawIdentifierIfPossible(r.rawValue),u=`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`.trim();return e.isNegated&&(u=`not (${u})`),{sql:u,bindings:[]}}if(Array.isArray(r)){let a=new f(this.model).formatStringColumn("mssql",e.column);if(e.operator.toLowerCase()==="between"){let d=`@${n} AND @${n+1}`,c=`${a} between ${d}`;return e.isNegated&&(c=`not (${c})`),{sql:c.trim(),bindings:r}}let l=r.map((d,c)=>`@${n+c}`).join(", "),u=`${a} ${e.operator} (${l})`;return e.isNegated&&(u=`not (${u})`),{sql:u.trim(),bindings:r}}if(r instanceof I){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}},rm=new Yo;var Zo=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"mssql"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},nm=new Zo;var Xo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],s=new f(this.model).formatStringColumn("mssql",e.column);switch(e.jsonOperator){case "=":n=`${s} = @${r}`,o=[JSON.stringify(e.value)];break;case "contains":case "not contains":n=`CHARINDEX(@${r}, ${s}) > 0`,o=[JSON.stringify(e.value)];break;case "path":{let a=ee.from(e.path??"");n=`JSON_VALUE(${s}, '${a.toMssql()}') ${e.comparisonOperator??"="} @${r}`,o=[e.value];break}case "subset":case "has none":throw new g("WhereJsonInterpreter::unsupported","NOT_SUPPORTED_IN_MSSQL");case "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`NOT (${n})`),{sql:n.trim(),bindings:o}}},om=new Xo;var es=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}}},sm=new es;var ts=class{toSql(t){let e=t,r=new f(this.model),n=s=>r.formatStringColumn("mssql",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},im=new ts;var rs=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}}},am=new rs;var ns=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:[]}}},lm=new ns;var os=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},um=new os;var ss=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`\`${n}\``).join(", ")})`,bindings:[]}}},dm=new ss;var is=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:[]}}},mm=new is;var as=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}}},cm=new as;var ls=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},pm=new ls;var us=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},ym=new us;var ds=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},fm=new ds;var ms=class{toSql(t){return {sql:"",bindings:[]}}},hm=new ms;var cs=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},gm=new cs;var ps=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},bm=new ps;var ys=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},Tm=new ys;var fs=class{toSql(t){let e=t,r;return e.defaultValue instanceof O?r=e.defaultValue.rawValue:e.defaultValue instanceof I?r=new b(this.model,"mysql").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column \`${e.column}\` set default ${r}`,bindings:[]}}},wm=new fs;var hs=class{toSql(t){return {sql:"",bindings:[]}}},Sm=new hs;var gs=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:[]}}},Nm=new gs;var bs=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:[]}}},qm=new bs;var Ts=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
50
- `:e,bindings:[]}}},Cm=new Ts;var ws=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Rm=new ws;var Ss=class{toSql(t){let e=t,r=new f(this.model);if(e.constraintType==="primary_key"){let n=(e.columns??[]).map(s=>r.formatStringColumn("mysql",q(s))).join(", ");return {sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}primary key (${n})`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns.map(s=>r.formatStringColumn("mysql",q(s))).join(", "),o=e.constraintName?`constraint \`${e.constraintName}\` `:"";return e.constraintName?{sql:`${o}unique (${n})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let n=e.defaultValue;return n instanceof O?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof I?{sql:`default ${new b(this.model,"mysql").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let n=(e.columns??[]).map(u=>r.formatStringColumn("mysql",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:[]}}},_m=new Ss;var Ns=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}}},Mm=new Ns;var qs=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:[]}}},Om=new qs;var Cs=class{toSql(t){return {sql:"distinct",bindings:[]}}},Am=new Cs;var Rs=class{toSql(t){return _.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},xm=new Rs;var _s=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Dm=new _s;var Ms=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},$m=new Ms;var Os=class{toSql(t){let e=t,r=new f(this.model),n=e.alias?` as ${r.quoteIdentifier("mysql",e.alias)}`:"";if(e.table instanceof O){let{sql:l,bindings:u}=r.formatRawPlaceholders("mysql",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("mysql",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"mysql").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},vm=new Os;var As=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},Im=new As;var xs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=new b(this.model,"mysql"),n=new f(this.model);if(e.group?.length){let{sql:l,bindings:u}=r.parse(e.group,e.currParamIndex,true);return {sql:`(${l})`,bindings:u}}let o=n.formatStringColumn("mysql",e.column),s="",a=[];if(e.subquery!==void 0){let l=this.parseSubquery(r,e);s=`${e.column?`${o} `:""}${e.operator} (${l.sql})`,a=l.bindings;}else if(e.value instanceof I){let l=r.parse([e.value],1,true).sql;s=`${o} ${e.operator} ${l}`;}else if(e.operator==="is null"||e.operator==="is not null")s=`${o} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")s=`${o} ${e.operator} ? and ?`;else {let l=e.value.map(()=>"?").join(", ");s=`${o} ${e.operator} (${l})`;}a=e.value;}else s=`${o} ${e.operator} ?`,a=[e.value];return e.isNegated&&(s=`not (${s})`),{sql:s.trim(),bindings:a}}parseSubquery(t,e){let r=e.subquery;if(typeof r=="string")return {sql:r,bindings:[]};let n=Array.isArray(r)?r:[r];return t.parse(n,e.currParamIndex)}},Em=new xs;var Ds=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:[]}}},Pm=new Ds;var $s=class{toSql(t){let e=t;if(!e.table)throw new Error("MySQL DROP INDEX requires table name");return {sql:`\`${e.indexName}\` on \`${e.table}\``,bindings:[]}}},Bm=new $s;var vs=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 O?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}}},Km=new vs;var Is=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=r.formatStringTable("mysql",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o;if(e.using?.length){let c=e.using.map(m=>r.formatStringColumn("mysql",m)).join(", ");return o=`${n} using (${c})`,{sql:o,bindings:[]}}let s=e.left;s.includes(".")||(s=`${e.table}.${s}`);let a=e.right;a.includes(".")||(a=`${this.model.table}.${a}`);let l=r.formatStringColumn("mysql",s),u=r.formatStringColumn("mysql",a);o=`${n} on ${l} ${e.on?.operator} ${u}`;let d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"mysql");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");o+=` and ${h}`,d.push(...p.bindings);}}}return {sql:o,bindings:d}}},Qm=new Is;var xh={set:"JSON_SET",insert:"JSON_INSERT",remove:"JSON_REMOVE"},Es=class{toSql(t){let e=t,r=new f(this.model).formatStringColumn("mysql",e.column),n=`'${ht(e.path).replace(/'/g,"''")}'`,o=xh[e.operation];if(e.operation==="remove")return {sql:this.withAlias(`${o}(${r}, ${n})`,e.alias),bindings:[]};let s=e.value!==null&&typeof e.value=="object",a=s&&this.dbType!=="mariadb"?"CAST(? AS JSON)":"?",l=s?JSON.stringify(e.value):e.value;return {sql:this.withAlias(`${o}(${r}, ${n}, ${a})`,e.alias),bindings:[l]}}withAlias(t,e){return e?`${t} as \`${e}\``:t}},km=new Es;var Ps=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Lm=new Ps;var Dh={for_update:"for update",for_share:"lock in share mode"},Bs=class{toSql(t){let e=t,r=Dh[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},Wm=new Bs;var Ks=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},jm=new Ks;var Qs=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:[]}}},Fm=new Qs;var ks=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:[]}}},Um=new ks;var Ls=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Vm=new Ls;var Ws=class{toSql(t){return {sql:"",bindings:[]}}},Jm=new Ws;var js=class{toSql(t){return {sql:`SELECT
49
+ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Yd=new Uo;var Vo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("mssql",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"mssql").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"mssql").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new f(this.model).formatStringColumn("mssql",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"mssql").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},Zd=new Vo;var X=class i{constructor(t){this.segments=this.normalize(t);}normalize(t){if(Array.isArray(t))return t;if(typeof t=="string"){if(!t||t==="$")return [];let e=t.trim();return e=e.startsWith("$.")?e.slice(2):e,e=e.startsWith("$")?e.slice(1):e,e=e.startsWith(".")?e.slice(1):e,e?e.split(".").map(r=>{let n=Number(r);return isNaN(n)?r:n}):[]}return []}getSegments(){return [...this.segments]}isEmpty(){return this.segments.length===0}toPostgres(t=false){if(this.isEmpty())return "";let e=[];for(let r=0;r<this.segments.length;r++){let n=this.segments[r],o=r===this.segments.length-1,s=typeof n=="number";o&&t?e.push(s?`->>${n}`:`->>'${n}'`):e.push(s?`->${n}`:`->'${n}'`);}return e.join("")}toStandardJsonPath(){return this.isEmpty()?"$":`$.${this.segments.join(".")}`}toMysql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments){if(typeof e=="number"){t.push(`[${e}]`);continue}t.push(`.${e}`);}return t.join("")}toSqlite(){return this.toStandardJsonPath()}toMssql(){if(this.isEmpty())return "$";let t=["$"];for(let e of this.segments)typeof e=="number"?t.push(`[${e}]`):t.push(`.${e}`);return t.join("")}toDbSyntax(t,e=false){switch(t){case "postgres":case "cockroachdb":return this.toPostgres(e);case "mysql":case "mariadb":return this.toMysql();case "sqlite":return this.toSqlite();case "mssql":return this.toMssql();default:return this.toStandardJsonPath()}}static from(t){return new i(t)}static root(){return new i("")}};var Jo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("mssql",e.column),n=X.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMssql();return r==="$"?t:`JSON_VALUE(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toMssql();return `(SELECT COUNT(*) FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}buildObjectKeysSql(t,e){let r=e.toMssql();return `(SELECT [key] FROM OPENJSON(${r==="$"?t:`JSON_QUERY(${t}, '${r}')`}))`}formatWithAlias(t,e){return e&&e.length>0?`${t} as [${e}]`:t}},Xd=new Jo;var Ho=class{toSql(t){let e=t,r=je(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof O?s.rawValue:s instanceof v?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "NEWID()";case "$now":case "$currentTimestamp":return "current_timestamp";default:return}}},em=new Ho;var zo=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:[]};if(e.options&&Object.values(e.options).some(Boolean))throw new h("MssqlTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("MSSQL does not support TRUNCATE options"));return {sql:`table ${new f(this.model).getFromForWriteOperations("mssql",e.fromNode)}`,bindings:[]}}},tm=new zo;var Go=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new f(this.model).formatRawPlaceholders("mssql",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},rm=new Go;var Yo=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),n=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((u,d)=>{let c=e.values[d],m=r.formatStringColumn("mssql",u);if(c instanceof O)return `${m} = ${c.rawValue}`;if(c instanceof N){let g=new b(this.model,"mssql").parse([c],s,true);return o.push(...g.bindings),s+=g.bindings.length,`${m} = ${g.sql}`}let p=`@${s++}`;return o.push(c),`${m} = ${p}`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},nm=new Yo;var Zo=class{toSql(t){let e=t;if(e.isRawValue){let a=e.value??[];if(a.length===0)return {sql:e.column,bindings:[]};let l=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`@${l++}`),bindings:a}}let r=e.value,n=e.currParamIndex;if(this.isRawNode(r)){let a=this.formatRawIdentifierIfPossible(r.rawValue),u=`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`.trim();return e.isNegated&&(u=`not (${u})`),{sql:u,bindings:[]}}if(Array.isArray(r)){let a=new f(this.model).formatStringColumn("mssql",e.column);if(e.operator.toLowerCase()==="between"){let d=`@${n} AND @${n+1}`,c=`${a} between ${d}`;return e.isNegated&&(c=`not (${c})`),{sql:c.trim(),bindings:r}}let l=r.map((d,c)=>`@${n+c}`).join(", "),u=`${a} ${e.operator} (${l})`;return e.isNegated&&(u=`not (${u})`),{sql:u.trim(),bindings:r}}if(r instanceof v){let a=new b(this.model,"mssql").parse([r],1,true).sql,u=`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`;return e.isNegated&&(u=`not (${u})`),{sql:u.trim(),bindings:[]}}let o=new f(this.model).formatStringColumn("mssql",e.column);if(e.operator.includes("null")){let a=`${o} ${e.operator}`;return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:[]}}if(r===void 0)return {sql:"",bindings:[]};let s=`${o} ${e.operator} @${n}`;return e.isNegated&&(s=`not (${s})`),{sql:s.trim(),bindings:[r]}}isRawNode(t){if(!t||!(typeof t=="object"))return false;let r="rawValue"in t,n=t.isRawValue===true;return r&&n}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new f(this.model).formatStringColumn("mssql",t):t}},om=new Zo;var Xo=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"mssql"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},sm=new Xo;var es=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],s=new f(this.model).formatStringColumn("mssql",e.column);switch(e.jsonOperator){case "=":n=`${s} = @${r}`,o=[JSON.stringify(e.value)];break;case "contains":case "not contains":n=`CHARINDEX(@${r}, ${s}) > 0`,o=[JSON.stringify(e.value)];break;case "path":{let a=X.from(e.path??"");n=`JSON_VALUE(${s}, '${a.toMssql()}') ${e.comparisonOperator??"="} @${r}`,o=[e.value];break}case "subset":case "has none":throw new h("WhereJsonInterpreter::unsupported","NOT_SUPPORTED_IN_MSSQL");case "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`NOT (${n})`),{sql:n.trim(),bindings:o}}},im=new es;var ts=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"mssql"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"mssql"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},am=new ts;var rs=class{toSql(t){let e=t,r=new f(this.model),n=s=>r.formatStringColumn("mssql",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},lm=new rs;var ns=class{toSql(t){let e=t,r=new b(this.model,"mssql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex);e.clause==="materialized"&&_.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored.");let s=e.columns?.length?` (${e.columns.map(a=>new f(this.model).formatStringColumnBare("mssql",a)).join(", ")})`:"";return {sql:`[${e.alias}]${s} as (${o.sql})`,bindings:o.bindings}}},um=new ns;var os=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length>0){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length>0&&(n+=` ${s.join(" ")}`);}return this.dbType!=="mariadb"&&(n=n.replace(/\s+default\s+\(uuid\(\)\)/gi,"")),{sql:`add column ${n}`,bindings:[]}}},dm=new os;var ss=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},mm=new ss;var is=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`\`${n}\``).join(", ")})`,bindings:[]}}},cm=new is;var as=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),s=o.join(" ");e.newType.dataType==="uuid"&&(s=s.replace(/\s+default\s+.+$/i,"").trim());let a=`modify column \`${e.column}\` ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?" null":" not null";a+=l;}if(!e.options.dropDefault){if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=` default ${l}`;}}return e.options.collate&&(a+=` COLLATE ${e.options.collate}`),e.options.unique!==void 0&&e.options.unique&&(a+=" unique"),{sql:a,bindings:[]}}},pm=new as;var ls=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,this.dbType??"mysql"),s=[],a=[];for(let m of e.children){let{sql:p,bindings:g}=o.parse([m]);if(m.file==="add_column")s.push(p);else if(m.file==="add_constraint"||m.folder==="constraint"){let y=s[s.length-1]??"",w=/^\s*add\s+column\b/i.test(y),T=/^\s*add\s+constraint\b/i.test(p);if(w&&!T){let S=p.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${y} ${S}`;}else {let S=/^\s*add\b/i.test(p)?p:`add ${p}`;s.push(S);}}else m.file==="set_default"||m.file==="drop_default"||m.file==="set_not_null"||m.file,s.push(p);a.push(...g);}let l=s.join(", "),u=e.ifExists?"if exists ":"";return {sql:/^\s*drop\s+index\b/i.test(l)?l:`${u}${n} ${l}`,bindings:a}}},ym=new ls;var us=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},fm=new us;var ds=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},hm=new ds;var ms=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},gm=new ms;var cs=class{toSql(t){return {sql:"",bindings:[]}}},bm=new cs;var ps=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},Tm=new ps;var ys=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},wm=new ys;var fs=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},Nm=new fs;var hs=class{toSql(t){let e=t,r;return e.defaultValue instanceof O?r=e.defaultValue.rawValue:e.defaultValue instanceof v?r=new b(this.model,"mysql").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column \`${e.column}\` set default ${r}`,bindings:[]}}},Sm=new hs;var gs=class{toSql(t){return {sql:"",bindings:[]}}},qm=new gs;var bs=class{toSql(t){let e=t,r=[];return e.engine&&r.push(`ENGINE=${e.engine}`),e.charset&&r.push(`CHARSET=${e.charset}`),e.collate&&r.push(`COLLATE=${e.collate}`),{sql:r.join(" "),bindings:[]}}},Cm=new bs;var Ts=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new f(this.model).formatStringColumn("mysql",q(e.column)),o=e.dataType.toLowerCase(),s,a=false,l=false;if(o==="char"){let u=e.length??1;s=`${n} char(${u})`;}else if(o==="varchar"){let u=e.length??255;s=`${n} varchar(${u})`;}else if(o==="uuid")s=e.isForeignKey?`${n} varchar(36)`:`${n} varchar(36) default (uuid())`;else if(o==="ulid")s=`${n} varchar(26)`;else if(o==="longtext"||o==="mediumtext"||o==="tinytext"||o==="text")s=`${n} ${o}`;else if(o==="integer"||o==="int")a=true,l=!!e.autoIncrement,s=`${n} int`;else if(o==="tinyint")a=true,s=`${n} tinyint`;else if(o==="smallint")a=true,s=`${n} smallint`;else if(o==="mediumint")a=true,s=`${n} mediumint`;else if(o==="bigint")a=true,l=!!e.autoIncrement,s=`${n} bigint`;else if(o==="float")a=true,s=`${n} float`;else if(o==="double")a=true,s=`${n} double`;else if(o==="real")a=true,s=`${n} double`;else if(o==="decimal"){a=true;let u=e.precision??10,d=e.scale??0;s=`${n} decimal(${u}, ${d})`;}else if(o==="numeric"){a=true;let u=e.precision??10,d=e.scale??0;s=`${n} numeric(${u}, ${d})`;}else if(o==="date")s=`${n} date`;else if(o==="time"){let u=typeof e.precision=="number"?`(${e.precision})`:"";s=`${n} time${u}`.trimEnd();}else if(o==="datetime"){let u=typeof e.precision=="number"?`(${e.precision})`:"";s=`${n} datetime${u}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${u}`),e.autoUpdate&&(s+=` on update current_timestamp${u}`);}else if(o==="timestamp"){let u=typeof e.precision=="number"?`(${e.precision})`:"";s=`${n} timestamp${u}`.trimEnd(),e.autoCreate&&(s+=` default current_timestamp${u}`),e.autoUpdate&&(s+=` on update current_timestamp${u}`);}else if(o==="year")s=`${n} year`;else if(o==="boolean")s=`${n} boolean`;else if(o==="varbinary"){let u=e.length??255;s=`${n} varbinary(${u})`;}else if(o==="binary"){let u=e.length??255;s=`${n} binary(${u})`;}else if(o==="bytea"||o==="blob")s=`${n} blob`;else if(o==="json"||o==="jsonb")s=`${n} json`;else if(o==="enum")if(e.enumValues&&e.enumValues.length>0){let u=e.enumValues.map(d=>`'${d}'`).join(", ");s=`${n} enum(${u})`;}else s=`${n} text`;else if(o==="geometry")s=`${n} geometry`;else if(o==="point")s=`${n} point`;else if(o==="linestring")s=`${n} linestring`;else if(o==="polygon")s=`${n} polygon`;else if(o==="multipoint")s=`${n} multipoint`;else {let u=e.length?`(${e.length})`:"";s=`${n} ${o}${u}`;}return a&&(e.zerofill?s+=" ZEROFILL":e.unsigned&&(s+=" UNSIGNED"),l&&(s+=" AUTO_INCREMENT")),e.collate&&(s+=` COLLATE ${e.collate}`),{sql:s,bindings:[]}}},Rm=new Ts;var ws=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
50
+ `:e,bindings:[]}}},_m=new ws;var Ns=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Mm=new Ns;var Ss=class{toSql(t){let e=t,r=new f(this.model);if(e.constraintType==="primary_key"){let n=(e.columns??[]).map(s=>r.formatStringColumn("mysql",q(s))).join(", ");return {sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}primary key (${n})`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns.map(s=>r.formatStringColumn("mysql",q(s))).join(", "),o=e.constraintName?`constraint \`${e.constraintName}\` `:"";return e.constraintName?{sql:`${o}unique (${n})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let n=e.defaultValue;return n instanceof O?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof v?{sql:`default ${new b(this.model,"mysql").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let n=(e.columns??[]).map(u=>r.formatStringColumn("mysql",q(u))).join(", "),o=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("mysql",q(u))).join(", "),l=`${e.constraintName?`constraint \`${e.constraintName}\` `:""}foreign key (${n}) references ${o}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Om=new Ss;var qs=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"mysql"),s=[],a=[];for(let p of e.children){let{sql:g,bindings:y}=o.parse([p]);if(p.folder==="constraint"){let w=s.pop()??"",T=g;if(/not null/i.test(T)||/null/i.test(T)||/default/i.test(T)){let S=`${w} ${T}`.trim();S=S.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(S),a.push(...y);continue}s.push(w),s.push(T),a.push(...y);continue}s.push(g),a.push(...y);}for(let p of e.namedConstraints){let{sql:g,bindings:y}=o.parse([p]);s.push(g),a.push(...y);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.engine&&d.push(`ENGINE=${e.engine}`),e.charset&&d.push(`CHARSET=${e.charset}`),e.collate&&d.push(`COLLATE=${e.collate}`);let c=d.length>0?` ${d.join(" ")}`:"";return {sql:`${u}${n} (${l})${c}`,bindings:a}}},Am=new qs;var Cs=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},xm=new Cs;var Rs=class{toSql(t){return {sql:"distinct",bindings:[]}}},Dm=new Rs;var _s=class{toSql(t){return _.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},Im=new _s;var Ms=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},$m=new Ms;var Os=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},vm=new Os;var As=class{toSql(t){let e=t,r=new f(this.model),n=e.alias?` as ${r.quoteIdentifier("mysql",e.alias)}`:"";if(e.table instanceof O){let{sql:l,bindings:u}=r.formatRawPlaceholders("mysql",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("mysql",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"mysql").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},Em=new As;var xs=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},Pm=new xs;var Ds=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=new b(this.model,"mysql"),n=new f(this.model);if(e.group?.length){let{sql:l,bindings:u}=r.parse(e.group,e.currParamIndex,true);return {sql:`(${l})`,bindings:u}}let o=n.formatStringColumn("mysql",e.column),s="",a=[];if(e.subquery!==void 0){let l=this.parseSubquery(r,e);s=`${e.column?`${o} `:""}${e.operator} (${l.sql})`,a=l.bindings;}else if(e.value instanceof v){let l=r.parse([e.value],1,true).sql;s=`${o} ${e.operator} ${l}`;}else if(e.operator==="is null"||e.operator==="is not null")s=`${o} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")s=`${o} ${e.operator} ? and ?`;else {let l=e.value.map(()=>"?").join(", ");s=`${o} ${e.operator} (${l})`;}a=e.value;}else s=`${o} ${e.operator} ?`,a=[e.value];return e.isNegated&&(s=`not (${s})`),{sql:s.trim(),bindings:a}}parseSubquery(t,e){let r=e.subquery;if(typeof r=="string")return {sql:r,bindings:[]};let n=Array.isArray(r)?r:[r];return t.parse(n,e.currParamIndex)}},Bm=new Ds;var Is=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("mysql",e.table),o=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${n} (${o})`,bindings:[]}}},Qm=new Is;var $s=class{toSql(t){let e=t;if(!e.table)throw new Error("MySQL DROP INDEX requires table name");return {sql:`\`${e.indexName}\` on \`${e.table}\``,bindings:[]}}},Km=new $s;var vs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=this.dbType==="mariadb"?"mariadb":"mysql",n=new f(this.model),o=n.getFromForWriteOperations(r,e.fromNode);if(e.withNodes?.length&&!e.source)throw new h("MysqlInsertInterpreter","CTE_NOT_SUPPORTED_ON_INSERT",new Error("MySQL/MariaDB only support a CTE on INSERT ... SELECT (insertFrom), not on a VALUES insert"));let s=n.renderWithNodes(r,e.withNodes,e.currParamIndex),a=e.currParamIndex+s.bindings.length,l=[],u;if(e.source){let c=new b(this.model,r).parse(e.source,a),m=e.targetColumns?.length?` (${e.targetColumns.map(g=>n.formatStringColumn(r,g)).join(", ")})`:"",p=s.sql?` ${s.sql}`:"";u=`${o}${m}${p} ${c.sql}`,l.push(...c.bindings);}else {let c=e.records.length?Object.keys(e.records[0]):[];if(!c.length)u=`${o} () values ()`;else {let m=c.map(g=>n.formatStringColumn(r,g)).join(", "),p=[];for(let g of e.records){let y=c.map(T=>g[T]),w=[];for(let T of y)T instanceof O?w.push(T.rawValue):(l.push(T),w.push("?"));p.push(`(${w.join(", ")})`);}u=`${o} (${m}) VALUES ${p.join(", ")}`;}}let d=`${u}`;if(this.dbType==="mariadb"&&!e.disableReturning){if(e.returning&&e.returning.length){let c=e.returning.map(m=>n.formatStringColumn("mariadb",m)).join(", ");return {sql:`${d} returning ${c}`,bindings:[...s.bindings,...l]}}return {sql:`${d} returning *`,bindings:[...s.bindings,...l]}}return {sql:d,bindings:[...s.bindings,...l]}}},km=new vs;var Es=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=r.formatStringTable("mysql",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o;if(e.using?.length){let c=e.using.map(m=>r.formatStringColumn("mysql",m)).join(", ");return o=`${n} using (${c})`,{sql:o,bindings:[]}}let s=e.left;s.includes(".")||(s=`${e.table}.${s}`);let a=e.right;a.includes(".")||(a=`${this.model.table}.${a}`);let l=r.formatStringColumn("mysql",s),u=r.formatStringColumn("mysql",a);o=`${n} on ${l} ${e.on?.operator} ${u}`;let d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"mysql");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let g=p.sql.replace(/^where\s+/i,"");o+=` and ${g}`,d.push(...p.bindings);}}}return {sql:o,bindings:d}}},Lm=new Es;var Ih={set:"JSON_SET",insert:"JSON_INSERT",remove:"JSON_REMOVE"},Ps=class{toSql(t){let e=t,r=new f(this.model).formatStringColumn("mysql",e.column),n=`'${ft(e.path).replace(/'/g,"''")}'`,o=Ih[e.operation];if(e.operation==="remove")return {sql:this.withAlias(`${o}(${r}, ${n})`,e.alias),bindings:[]};let s=e.value!==null&&typeof e.value=="object",a=s&&this.dbType!=="mariadb"?"CAST(? AS JSON)":"?",l=s?JSON.stringify(e.value):e.value;return {sql:this.withAlias(`${o}(${r}, ${n}, ${a})`,e.alias),bindings:[l]}}withAlias(t,e){return e?`${t} as \`${e}\``:t}},Wm=new Ps;var Bs=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Fm=new Bs;var $h={for_update:"for update",for_share:"lock in share mode"},Qs=class{toSql(t){let e=t,r=$h[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},jm=new Qs;var Ks=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Um=new Ks;var ks=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model);if(e.mode==="ignore"){let o=e.conflictColumns?.[0]||"id",s=r.formatStringColumn("mysql",`${e.table}.${o}`);return {sql:`ON DUPLICATE KEY UPDATE ${s} = ${s}`,bindings:[]}}return {sql:`ON DUPLICATE KEY UPDATE ${e.columnsToUpdate.map(o=>`${r.formatStringColumn("mysql",o)} = VALUES(${r.formatStringColumn("mysql",o)})`).join(", ")}`,bindings:[]}}},Vm=new ks;var Ls=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("mysql",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},Jm=new Ls;var Ws=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},Hm=new Ws;var Fs=class{toSql(t){return {sql:"",bindings:[]}}},zm=new Fs;var js=class{toSql(t){return {sql:`SELECT
51
51
  cc.CONSTRAINT_NAME AS name,
52
52
  cc.CHECK_CLAUSE AS expression
53
53
  FROM information_schema.CHECK_CONSTRAINTS cc
@@ -56,7 +56,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},zd=new Fo;var Uo=class{toSql(t){let
56
56
  AND cc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
57
57
  WHERE tc.TABLE_SCHEMA = DATABASE()
58
58
  AND tc.TABLE_NAME = '${t.table}'
59
- AND tc.CONSTRAINT_TYPE = 'CHECK'`,bindings:[]}}},Hm=new js;var Fs=class{toSql(t){return {sql:`SELECT
59
+ AND tc.CONSTRAINT_TYPE = 'CHECK'`,bindings:[]}}},Gm=new js;var Us=class{toSql(t){return {sql:`SELECT
60
60
  k.CONSTRAINT_NAME AS name,
61
61
  k.COLUMN_NAME AS column_name,
62
62
  k.REFERENCED_TABLE_NAME AS referenced_table,
@@ -67,13 +67,13 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},zd=new Fo;var Uo=class{toSql(t){let
67
67
  JOIN information_schema.REFERENTIAL_CONSTRAINTS r
68
68
  ON k.CONSTRAINT_NAME = r.CONSTRAINT_NAME AND k.CONSTRAINT_SCHEMA = r.CONSTRAINT_SCHEMA
69
69
  WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.REFERENCED_TABLE_NAME IS NOT NULL
70
- ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},zm=new Fs;var Us=class{toSql(t){return {sql:`SELECT column_name as name FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${t.table}' ORDER BY ordinal_position`,bindings:[]}}},Gm=new Us;var Vs=class{toSql(t){return {sql:"SELECT table_name as name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE' ORDER BY table_name",bindings:[]}}},Ym=new Vs;var Js=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.check_constraints WHERE constraint_schema = DATABASE() AND constraint_name = '${t.constraint}'`,bindings:[]}}},Zm=new Js;var Hs=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${e.table}' AND column_name = '${e.column}'`,bindings:[]}}},Xm=new Hs;var zs=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM information_schema.statistics WHERE table_schema = DATABASE() AND table_name = '${e.table}' AND index_name = '${e.index}'`,bindings:[]}}},ec=new zs;var Gs=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.table_constraints WHERE table_schema = DATABASE() AND table_name = '${t.table}' AND constraint_type = 'PRIMARY KEY'`,bindings:[]}}},tc=new Gs;var Ys=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = '${t.table}'`,bindings:[]}}},rc=new Ys;var Zs=class{toSql(t){return {sql:`SHOW INDEX FROM \`${t.table}\``,bindings:[]}}},nc=new Zs;var Xs=class{toSql(t){return {sql:`SELECT
70
+ ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},Ym=new Us;var Vs=class{toSql(t){return {sql:`SELECT column_name as name FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${t.table}' ORDER BY ordinal_position`,bindings:[]}}},Zm=new Vs;var Js=class{toSql(t){return {sql:"SELECT table_name as name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE' ORDER BY table_name",bindings:[]}}},Xm=new Js;var Hs=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.check_constraints WHERE constraint_schema = DATABASE() AND constraint_name = '${t.constraint}'`,bindings:[]}}},ec=new Hs;var zs=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${e.table}' AND column_name = '${e.column}'`,bindings:[]}}},tc=new zs;var Gs=class{toSql(t){let e=t;return {sql:`SELECT COUNT(*) as count FROM information_schema.statistics WHERE table_schema = DATABASE() AND table_name = '${e.table}' AND index_name = '${e.index}'`,bindings:[]}}},rc=new Gs;var Ys=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.table_constraints WHERE table_schema = DATABASE() AND table_name = '${t.table}' AND constraint_type = 'PRIMARY KEY'`,bindings:[]}}},nc=new Ys;var Zs=class{toSql(t){return {sql:`SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = '${t.table}'`,bindings:[]}}},oc=new Zs;var Xs=class{toSql(t){return {sql:`SHOW INDEX FROM \`${t.table}\``,bindings:[]}}},sc=new Xs;var ei=class{toSql(t){return {sql:`SELECT
71
71
  CONSTRAINT_NAME AS name,
72
72
  COLUMN_NAME AS column_name
73
73
  FROM information_schema.KEY_COLUMN_USAGE k
74
74
  WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.CONSTRAINT_NAME = 'PRIMARY'
75
- ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},oc=new Xs;var ei=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:[]}}},sc=new ei;var ti=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("mysql",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"mysql").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"mysql").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new f(this.model).formatStringColumn("mysql",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"mysql").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},ic=new ti;var ri=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("mysql",e.column),n=ee.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMysql();return r==="$"?t:`JSON_EXTRACT(${t}, '${r}')`}buildExtractTextSql(t,e){let r=e.toMysql();return r==="$"?`JSON_UNQUOTE(${t})`:`JSON_UNQUOTE(JSON_EXTRACT(${t}, '${r}'))`}buildArrayLengthSql(t,e){let r=e.toMysql();return r==="$"?`JSON_LENGTH(${t})`:`JSON_LENGTH(${t}, '${r}')`}buildObjectKeysSql(t,e){let r=e.toMysql();return r==="$"?`JSON_KEYS(${t})`:`JSON_KEYS(${t}, '${r}')`}formatWithAlias(t,e){return e&&e.length>0?`${t} as \`${e}\``:t}},ac=new ri;var ni=class{toSql(t){let e=t,r=je(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof O?s.rawValue:s instanceof I?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "(uuid())";case "$now":return "now()";case "$currentTimestamp":return "current_timestamp";default:return}}},lc=new ni;var oi=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:[]}}},uc=new oi;var si=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}}},dc=new si;var ii=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),n=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((u,d)=>{let c=e.values[d],m=r.formatStringColumn("mysql",u);if(c instanceof O)return `${m} = ${c.rawValue}`;if(c instanceof S){let p=new b(this.model,"mysql").parse([c],s,true);return o.push(...p.bindings),s+=p.bindings.length,`${m} = ${p.sql}`}return o.push(c),`${m} = ?`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},mc=new ii;var ai=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 I){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}},cc=new ai;var li=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}}},pc=new li;var ui=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new f(this.model).formatStringColumn("mysql",e.column);switch(e.jsonOperator){case "=":r=this.dbType==="mariadb"?`${o} = ?`:`${o} = CAST(? AS JSON)`,n=[JSON.stringify(e.value)];break;case "contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "subset":r=`JSON_CONTAINS(?, ${o})`,n=[JSON.stringify(e.value)];break;case "path":{let s=ee.from(e.path??"");r=`JSON_UNQUOTE(JSON_EXTRACT(${o}, '${s.toMysql()}')) ${e.comparisonOperator??"="} ?`,n=[e.value];break}case "has none":throw new g("WhereJsonInterpreter::has none","NOT_SUPPORTED_IN_MYSQL");case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},yc=new ui;var di=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}}},fc=new di;var mi=class{toSql(t){let e=t,r=new f(this.model),n=s=>r.formatStringColumn("mysql",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},hc=new mi;var ci=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}}},gc=new ci;var pi=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:[]}}},bc=new pi;var yi=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Tc=new yi;var fi=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`"${n}"`).join(", ")})`,bindings:[]}}},wc=new fi;var hi=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:[]}}},Sc=new hi;var gi=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}}},Nc=new gi;var bi=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},qc=new bi;var Ti=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},Cc=new Ti;var wi=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Rc=new wi;var Si=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},_c=new Si;var Ni=class{toSql(t){return {sql:"",bindings:[]}}},Mc=new Ni;var qi=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Oc=new qi;var Ci=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Ac=new Ci;var Ri=class{toSql(t){let e=t,r;return e.defaultValue instanceof O?r=e.defaultValue.rawValue:e.defaultValue instanceof I?r=new b(this.model,"postgres").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},xc=new Ri;var _i=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Dc=new _i;var Mi=class{toSql(t){return {sql:"",bindings:[]}}},$c=new Mi;var Oi=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:[]}}},vc=new Oi;var Ai=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
76
- `:e,bindings:[]}}},Ic=new Ai;var xi=class{toSql(t){return {sql:"",bindings:[]}}},Ec=new xi;var Di=class{toSql(t){let e=t,r=new f(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let n=e.constraintName?`constraint "${e.constraintName}" `:"",o=(e.columns??[]).map(s=>r.formatStringColumn("postgres",q(s))).join(", ");return {sql:`${n}primary key (${o})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns??[],o=e.constraintName?`constraint "${e.constraintName}" `:"",s=n.map(a=>r.formatStringColumn("postgres",q(a))).join(", ");return e.constraintName?{sql:`${o}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let n=e.defaultValue;return n instanceof O?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof I?{sql:`default ${new b(this.model,"postgres").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let n=e.columns.map(u=>r.formatStringColumn("postgres",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:[]}}},Pc=new Di;var $i=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"postgres"),s=[],a=[];for(let w of e.children){let{sql:N,bindings:x}=o.parse([w]);if(w.folder==="constraint"){let C=s.pop()??"",$=N;if(/not null/i.test($)||/null/i.test($)||/default/i.test($)){let D=`${C} ${$}`.trim();D=D.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(D),a.push(...x);continue}s.push(C),s.push($),a.push(...x);continue}s.push(N),a.push(...x);}for(let w of e.namedConstraints){let{sql:N,bindings:x}=o.parse([w]);s.push(N),a.push(...x);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.temporary&&d.push("TEMPORARY"),e.unlogged&&d.push("UNLOGGED");let c=[];if(e.postgresWith){let w=Object.entries(e.postgresWith).map(([N,x])=>`${N}=${x}`).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}}},Bc=new $i;var vi=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},Kc=new vi;var Ii=class{toSql(t){return {sql:"",bindings:[]}}},Qc=new Ii;var Ei=class{toSql(t){return {sql:`(${t.columns.map(n=>new f(this.model).formatStringColumn("postgres",n)).join(", ")})`,bindings:[]}}},kc=new Ei;var Pi=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Lc=new Pi;var Bi=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},Wc=new Bi;var Ki=class{toSql(t){let e=t,r=new f(this.model),n=e.alias?` as ${r.quoteIdentifier("postgres",e.alias)}`:"";if(e.table instanceof O){let{sql:l,bindings:u}=r.formatRawPlaceholders("postgres",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("postgres",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"postgres").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},jc=new Ki;var Qi=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},Fc=new Qi;var ki=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,n=new b(this.model,"postgres"),o=new f(this.model);if(e.group?.length){let{sql:u,bindings:d}=n.parse(e.group,e.currParamIndex,true);return {sql:`(${u})`,bindings:d}}let s=o.formatStringColumn("postgres",e.column),a="",l=[];if(e.subquery!==void 0){let u=this.parseSubquery(n,e,r);a=`${e.column?`${s} `:""}${e.operator} (${u.sql})`,l=u.bindings;}else if(e.value instanceof I){let u=n.parse([e.value],1,true).sql;a=`${s} ${e.operator} ${u}`;}else if(e.operator==="is null"||e.operator==="is not null")a=`${s} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")a=`${s} ${e.operator} $${r} and $${r+1}`;else {let u=e.value.map((d,c)=>`$${r+c}`).join(", ");a=`${s} ${e.operator} (${u})`;}l=e.value;}else a=`${s} ${e.operator} $${r}`,l=[e.value];return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:l}}parseSubquery(t,e,r){let n=e.subquery;if(typeof n=="string")return {sql:n,bindings:[]};let o=Array.isArray(n)?n:[n];return t.parse(o,r)}},Uc=new ki;var Li=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:[]}}},Vc=new Li;var Wi=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},Jc=new Wi;var ji=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);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 O?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}},Hc=new ji;var Fi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=r.formatStringTable("postgres",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o;if(e.using?.length){let c=e.using.map(m=>r.formatStringColumn("postgres",m)).join(", ");return o=`${n} using (${c})`,{sql:o,bindings:[]}}let s=e.left;s.includes(".")||(s=`${e.table}.${s}`);let a=e.right;a.includes(".")||(a=`${this.model.table}.${a}`);let l=r.formatStringColumn("postgres",s),u=r.formatStringColumn("postgres",a);o=`${n} on ${l} ${e.on?.operator} ${u}`;let d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"postgres");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");o+=` and ${h}`,d.push(...p.bindings);}}}return {sql:o,bindings:d}}},zc=new Fi;var Ui=class{toSql(t){let e=t,r=new f(this.model).formatStringColumn("postgres",e.column),n=Ad(e.path);if(e.operation==="remove")return {sql:this.withAlias(`${r} #- ${n}`,e.alias),bindings:[]};let o=`jsonb_set(${r}, ${n}, $${e.currParamIndex}::jsonb, true)`,s=e.operation==="set"?o:`CASE WHEN ${r} #> ${n} IS NULL THEN ${o} ELSE ${r} END`;return {sql:this.withAlias(s,e.alias),bindings:[JSON.stringify(e.value)]}}withAlias(t,e){return e?`${t} as "${e}"`:t}},Gc=new Ui;var Vi=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},Yc=new Vi;var $h={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},Ji=class{toSql(t){let e=t,r=$h[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},Zc=new Ji;var Hi=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},Xc=new Hi;var zi=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:[]}}},ep=new zi;var Gi=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:[]}}},tp=new Gi;var Yi=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},rp=new Yi;var Zi=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:[]}}},np=new Zi;var Xi=class{toSql(t){return {sql:`SELECT
75
+ ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},ic=new ei;var ti=class{toSql(t){return {sql:`SELECT COLUMN_NAME AS column_name, DATA_TYPE AS data_type, COLUMN_TYPE AS column_type, IS_NULLABLE AS is_nullable, COLUMN_DEFAULT AS column_default, CHARACTER_MAXIMUM_LENGTH AS char_length, NUMERIC_PRECISION AS numeric_precision, NUMERIC_SCALE AS numeric_scale FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${t.table}' ORDER BY ORDINAL_POSITION`,bindings:[]}}},ac=new ti;var ri=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("mysql",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"mysql").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"mysql").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new f(this.model).formatStringColumn("mysql",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"mysql").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},lc=new ri;var ni=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("mysql",e.column),n=X.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toMysql();return r==="$"?t:`JSON_EXTRACT(${t}, '${r}')`}buildExtractTextSql(t,e){let r=e.toMysql();return r==="$"?`JSON_UNQUOTE(${t})`:`JSON_UNQUOTE(JSON_EXTRACT(${t}, '${r}'))`}buildArrayLengthSql(t,e){let r=e.toMysql();return r==="$"?`JSON_LENGTH(${t})`:`JSON_LENGTH(${t}, '${r}')`}buildObjectKeysSql(t,e){let r=e.toMysql();return r==="$"?`JSON_KEYS(${t})`:`JSON_KEYS(${t}, '${r}')`}formatWithAlias(t,e){return e&&e.length>0?`${t} as \`${e}\``:t}},uc=new ni;var oi=class{toSql(t){let e=t,r=je(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof O?s.rawValue:s instanceof v?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "(uuid())";case "$now":return "now()";case "$currentTimestamp":return "current_timestamp";default:return}}},dc=new oi;var si=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:[]};if(e.options&&Object.values(e.options).some(Boolean))throw new h("MysqlTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("MySQL/MariaDB do not support TRUNCATE options"));return {sql:new f(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},mc=new si;var ii=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new f(this.model).formatRawPlaceholders("mysql",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},cc=new ii;var ai=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),n=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((u,d)=>{let c=e.values[d],m=r.formatStringColumn("mysql",u);if(c instanceof O)return `${m} = ${c.rawValue}`;if(c instanceof N){let p=new b(this.model,"mysql").parse([c],s,true);return o.push(...p.bindings),s+=p.bindings.length,`${m} = ${p.sql}`}return o.push(c),`${m} = ?`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},pc=new ai;var li=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",n=[];if(this.isRawNode(e.value)){let o=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${o}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new f(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,n=e.value;else {let o=e.value.map(s=>"?").join(", ");r=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${o})`,n=e.value;}else if(e.value instanceof v){let o=new b(this.model,"mysql").parse([e.value],1,true).sql;r=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${o}`,n=[];}else if(e.operator.includes("null"))r=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ?`,n=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new f(this.model).formatStringColumn("mysql",t):t}},yc=new li;var ui=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"mysql"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},fc=new ui;var di=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new f(this.model).formatStringColumn("mysql",e.column);switch(e.jsonOperator){case "=":r=this.dbType==="mariadb"?`${o} = ?`:`${o} = CAST(? AS JSON)`,n=[JSON.stringify(e.value)];break;case "contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`JSON_CONTAINS(${o}, ?)`,n=[JSON.stringify(e.value)];break;case "subset":r=`JSON_CONTAINS(?, ${o})`,n=[JSON.stringify(e.value)];break;case "path":{let s=X.from(e.path??"");r=`JSON_UNQUOTE(JSON_EXTRACT(${o}, '${s.toMysql()}')) ${e.comparisonOperator??"="} ?`,n=[e.value];break}case "has none":throw new h("WhereJsonInterpreter::has none","NOT_SUPPORTED_IN_MYSQL");case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},hc=new di;var mi=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"mysql"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"mysql"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},gc=new mi;var ci=class{toSql(t){let e=t,r=new f(this.model),n=s=>r.formatStringColumn("mysql",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},bc=new ci;var pi=class{toSql(t){let e=t,r=new b(this.model,"mysql"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.columns?.length?` (${e.columns.map(a=>new f(this.model).formatStringColumnBare("mysql",a)).join(", ")})`:"";return {sql:`${e.alias}${s} as (${o.sql})`,bindings:o.bindings}}},Tc=new pi;var yi=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(n+=` ${s.join(" ")}`);}return {sql:`add column ${n}`,bindings:[]}}},wc=new yi;var fi=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.constraint]);return {sql:`add ${n}`,bindings:[]}}},Nc=new fi;var hi=class{toSql(t){return {sql:`add primary key (${t.columns.map(n=>`"${n}"`).join(", ")})`,bindings:[]}}},Sc=new hi;var gi=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:n}=r.parse([e.newType]),[,...o]=n.trim().split(/\s+/),s=o.join(" ");s=s.replace(/\s*check\s*\(.*\)\s*$/i,"").trim(),e.newType.dataType==="uuid"&&(s=s.replace(/\s+default\s+.+$/i,"").trim());let a=`alter column "${e.column}" type ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?`alter column "${e.column}" drop not null`:`alter column "${e.column}" set not null`;a+=`, ${l}`;}if(e.options.dropDefault)a+=`, alter column "${e.column}" drop default`;else if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=`, alter column "${e.column}" set default ${l}`;}return e.options.unique!==void 0&&(e.options.unique?a+=`, add constraint "unique_${e.column}" unique ("${e.column}")`:a+=`, drop constraint "unique_${e.column}"`),{sql:a,bindings:[]}}},qc=new gi;var bi=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"postgres"),s=[],a=[];for(let c of e.children){let{sql:m,bindings:p}=o.parse([c]);s.push(m.trim()),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifExists?"if exists ":""}${n} ${l}`,bindings:a}}},Cc=new bi;var Ti=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Rc=new Ti;var wi=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},_c=new wi;var Ni=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Mc=new Ni;var Si=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Oc=new Si;var qi=class{toSql(t){return {sql:"",bindings:[]}}},Ac=new qi;var Ci=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},xc=new Ci;var Ri=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Dc=new Ri;var _i=class{toSql(t){let e=t,r;return e.defaultValue instanceof O?r=e.defaultValue.rawValue:e.defaultValue instanceof v?r=new b(this.model,"postgres").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},Ic=new _i;var Mi=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},$c=new Mi;var Oi=class{toSql(t){return {sql:"",bindings:[]}}},vc=new Oi;var Ai=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new f(this.model).formatStringColumn("postgres",q(e.column)),o=e.dataType.toLowerCase();if(o==="char"){let a=e.length??1;return {sql:`${n} char(${a})`,bindings:[]}}else if(o==="varchar"){let a=e.length??255;return {sql:`${n} varchar(${a})`,bindings:[]}}else {if(o==="text"||o==="longtext"||o==="mediumtext"||o==="tinytext")return {sql:`${n} text`,bindings:[]};if(o==="uuid"){let a=e.isForeignKey?"":" default gen_random_uuid()";return {sql:`${n} uuid${a}`,bindings:[]}}else {if(o==="ulid")return {sql:`${n} varchar(26)`,bindings:[]};if(o==="bigint")return e.autoIncrement?{sql:`${n} bigserial`,bindings:[]}:{sql:`${n} bigint`,bindings:[]};if(o==="tinyint")return {sql:`${n} smallint`,bindings:[]};if(o==="smallint")return {sql:`${n} smallint`,bindings:[]};if(o==="mediumint")return {sql:`${n} integer`,bindings:[]};if(o==="float"||o==="real")return {sql:`${n} real`,bindings:[]};if(o==="double")return {sql:`${n} double precision`,bindings:[]};if(o==="decimal"||o==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${n} numeric(${a}, ${l})`,bindings:[]}}else {if(o==="date")return {sql:`${n} date`,bindings:[]};if(o==="year")return {sql:`${n} smallint`,bindings:[]};if(o==="time"){let a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${n} time${a}`,bindings:[]}}else if(o==="datetime"||o==="timestamp"){let a=e.withTimezone?" with time zone":" without time zone",l=typeof e.precision=="number"?`(${e.precision})`:"",u=`${n} timestamp${l}${a}`.trimEnd();return e.autoCreate&&(u+=" default current_timestamp"),{sql:u,bindings:[]}}else {if(o==="boolean"||o==="bool")return {sql:`${n} boolean`,bindings:[]};if(o==="bytea"||o==="binary"||o==="varbinary"||o==="blob"||o==="longblob"||o==="mediumblob"||o==="tinyblob")return {sql:`${n} bytea`,bindings:[]};if(o==="json")return {sql:`${n} json`,bindings:[]};if(o==="jsonb")return {sql:`${n} jsonb`,bindings:[]};if(o==="enum"){if(e.enumValues&&e.enumValues.length>0){let a=e.enumValues.map(l=>`'${l}'`).join(", ");return {sql:`${n} text check (${n} in (${a}))`,bindings:[]}}return {sql:`${n} text`,bindings:[]}}else {if(o==="integer"||o==="int")return e.autoIncrement?{sql:`${n} serial`,bindings:[]}:{sql:`${n} integer`,bindings:[]};if(o==="geometry")return {sql:`${n} geometry`,bindings:[]};if(o==="point")return {sql:`${n} point`,bindings:[]};if(o==="linestring")return {sql:`${n} linestring`,bindings:[]};if(o==="polygon")return {sql:`${n} polygon`,bindings:[]};if(o==="multipoint")return {sql:`${n} multipoint`,bindings:[]}}}}}}let s=e.length?`(${e.length})`:"";return {sql:`${n} ${o}${s}`,bindings:[]}}},Ec=new Ai;var xi=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
76
+ `:e,bindings:[]}}},Pc=new xi;var Di=class{toSql(t){return {sql:"",bindings:[]}}},Bc=new Di;var Ii=class{toSql(t){let e=t,r=new f(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let n=e.constraintName?`constraint "${e.constraintName}" `:"",o=(e.columns??[]).map(s=>r.formatStringColumn("postgres",q(s))).join(", ");return {sql:`${n}primary key (${o})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let n=e.columns??[],o=e.constraintName?`constraint "${e.constraintName}" `:"",s=n.map(a=>r.formatStringColumn("postgres",q(a))).join(", ");return e.constraintName?{sql:`${o}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let n=e.defaultValue;return n instanceof O?{sql:`default ${n.rawValue}`,bindings:[]}:n instanceof v?{sql:`default ${new b(this.model,"postgres").parse([n],1,true).sql}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let n=e.columns.map(u=>r.formatStringColumn("postgres",q(u))).join(", ");if(!e.references)return {sql:"",bindings:[]};let o=r.formatStringTable("postgres",e.references.table),s=e.references.columns.map(u=>r.formatStringColumn("postgres",q(u))).join(", "),l=`${e.constraintName?`constraint "${e.constraintName}" `:""}foreign key (${n}) references ${o}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${e.constraintName?`constraint "${e.constraintName}" `:""}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Qc=new Ii;var $i=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"postgres"),s=[],a=[];for(let T of e.children){let{sql:S,bindings:x}=o.parse([T]);if(T.folder==="constraint"){let C=s.pop()??"",I=S;if(/not null/i.test(I)||/null/i.test(I)||/default/i.test(I)){let D=`${C} ${I}`.trim();D=D.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(D),a.push(...x);continue}s.push(C),s.push(I),a.push(...x);continue}s.push(S),a.push(...x);}for(let T of e.namedConstraints){let{sql:S,bindings:x}=o.parse([T]);s.push(S),a.push(...x);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.temporary&&d.push("TEMPORARY"),e.unlogged&&d.push("UNLOGGED");let c=[];if(e.postgresWith){let T=Object.entries(e.postgresWith).map(([S,x])=>`${S}=${x}`).join(", ");T&&c.push(`WITH (${T})`);}let m=e.tablespace?`TABLESPACE ${e.tablespace}`:"",p=d.length>0?`${d.join(" ")} `:"",g=c.length>0?` ${c.join(" ")}`:"",y=m?` ${m}`:"";return {sql:`${u}${p}${n} (${l})${g}${y}`,bindings:a}}},Kc=new $i;var vi=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},kc=new vi;var Ei=class{toSql(t){return {sql:"",bindings:[]}}},Lc=new Ei;var Pi=class{toSql(t){return {sql:`(${t.columns.map(n=>new f(this.model).formatStringColumn("postgres",n)).join(", ")})`,bindings:[]}}},Wc=new Pi;var Bi=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Fc=new Bi;var Qi=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},jc=new Qi;var Ki=class{toSql(t){let e=t,r=new f(this.model),n=e.alias?` as ${r.quoteIdentifier("postgres",e.alias)}`:"";if(e.table instanceof O){let{sql:l,bindings:u}=r.formatRawPlaceholders("postgres",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("postgres",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"postgres").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},Uc=new Ki;var ki=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},Vc=new ki;var Li=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,n=new b(this.model,"postgres"),o=new f(this.model);if(e.group?.length){let{sql:u,bindings:d}=n.parse(e.group,e.currParamIndex,true);return {sql:`(${u})`,bindings:d}}let s=o.formatStringColumn("postgres",e.column),a="",l=[];if(e.subquery!==void 0){let u=this.parseSubquery(n,e,r);a=`${e.column?`${s} `:""}${e.operator} (${u.sql})`,l=u.bindings;}else if(e.value instanceof v){let u=n.parse([e.value],1,true).sql;a=`${s} ${e.operator} ${u}`;}else if(e.operator==="is null"||e.operator==="is not null")a=`${s} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")a=`${s} ${e.operator} $${r} and $${r+1}`;else {let u=e.value.map((d,c)=>`$${r+c}`).join(", ");a=`${s} ${e.operator} (${u})`;}l=e.value;}else a=`${s} ${e.operator} $${r}`,l=[e.value];return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:l}}parseSubquery(t,e,r){let n=e.subquery;if(typeof n=="string")return {sql:n,bindings:[]};let o=Array.isArray(n)?n:[n];return t.parse(o,r)}},Jc=new Li;var Wi=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("postgres",e.table),o=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${n} (${o})`,bindings:[]}}},Hc=new Wi;var Fi=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},zc=new Fi;var ji=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode),o=r.renderWithNodes("postgres",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u;if(e.source){let c=new b(this.model,"postgres").parse(e.source,a),m=e.targetColumns?.length?` (${e.targetColumns.map(p=>r.formatStringColumn("postgres",p)).join(", ")})`:"";u=`${n}${m} ${c.sql}`,l.push(...c.bindings);}else {let c=e.records.length?Object.keys(e.records[0]):[];if(!c.length)u=`${n} default values`;else {let m=c.map(y=>r.formatStringColumn("postgres",y)).join(", "),p=[],g=typeof this.model?.getColumnsByName=="function"?this.model.getColumnsByName():new Map;for(let y of e.records){let w=c.map(S=>y[S]),T=[];for(let S=0;S<c.length;S++){let x=w[S];x instanceof O?T.push(x.rawValue):(l.push(x),T.push(`$${a++}${this.formatTypeCast(x,g.get(c[S])?.type)}`));}p.push(`(${T.join(", ")})`);}u=`${n} (${m}) values ${p.join(", ")}`;}}let d=`${s}${u}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let c=e.returning.map(m=>r.formatStringColumn("postgres",m)).join(", ");d+=` returning ${c}`;}else d+=" returning *";return {sql:d,bindings:[...o.bindings,...l]}}formatTypeCast(t,e){if(typeof t=="string"&&(e==="jsonb"||e==="json"))return "::text::jsonb";let r="";return Buffer.isBuffer(t)?r="::bytea":Array.isArray(t)?r="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?r="::jsonb":typeof t=="boolean"?r="::boolean":typeof t=="bigint"&&(r="::bigint"),r}},Gc=new ji;var Ui=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=r.formatStringTable("postgres",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o;if(e.using?.length){let c=e.using.map(m=>r.formatStringColumn("postgres",m)).join(", ");return o=`${n} using (${c})`,{sql:o,bindings:[]}}let s=e.left;s.includes(".")||(s=`${e.table}.${s}`);let a=e.right;a.includes(".")||(a=`${this.model.table}.${a}`);let l=r.formatStringColumn("postgres",s),u=r.formatStringColumn("postgres",a);o=`${n} on ${l} ${e.on?.operator} ${u}`;let d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"postgres");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let g=p.sql.replace(/^where\s+/i,"");o+=` and ${g}`,d.push(...p.bindings);}}}return {sql:o,bindings:d}}},Yc=new Ui;var Vi=class{toSql(t){let e=t,r=new f(this.model).formatStringColumn("postgres",e.column),n=Dd(e.path);if(e.operation==="remove")return {sql:this.withAlias(`${r} #- ${n}`,e.alias),bindings:[]};let o=`jsonb_set(${r}, ${n}, $${e.currParamIndex}::jsonb, true)`,s=e.operation==="set"?o:`CASE WHEN ${r} #> ${n} IS NULL THEN ${o} ELSE ${r} END`;return {sql:this.withAlias(s,e.alias),bindings:[JSON.stringify(e.value)]}}withAlias(t,e){return e?`${t} as "${e}"`:t}},Zc=new Vi;var Ji=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},Xc=new Ji;var vh={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},Hi=class{toSql(t){let e=t,r=vh[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},ep=new Hi;var zi=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},tp=new zi;var Gi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=e.conflictColumns.map(l=>r.formatStringColumnBare("postgres",l)).join(", "),o=n?` (${n})`:"";if(e.mode==="ignore"){let l=`on conflict${o} do nothing`;if(e.returning&&e.returning.length){let u=e.returning.map(d=>r.formatStringColumn("postgres",d)).join(", ");l+=` returning ${u}`;}return {sql:l,bindings:[]}}let s=e.columnsToUpdate.map(l=>`${r.formatStringColumnBare("postgres",l)} = excluded.${r.formatStringColumnBare("postgres",l)}`).join(", "),a=`on conflict${o} do update set ${s}`;if(e.returning&&e.returning.length){let l=e.returning.map(u=>r.formatStringColumn("postgres",u)).join(", ");a+=` returning ${l}`;}return {sql:a,bindings:[]}}},rp=new Gi;var Yi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("postgres",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},np=new Yi;var Zi=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},op=new Zi;var Xi=class{toSql(t){let e=t,r=new f(this.model);return {sql:`returning ${!e.columns.length||e.columns.includes("*")?"*":e.columns.map(o=>r.formatStringColumn("postgres",o)).join(", ")}`,bindings:[]}}},sp=new Xi;var ea=class{toSql(t){return {sql:`SELECT
77
77
  con.conname AS name,
78
78
  pg_get_constraintdef(con.oid) AS expression
79
79
  FROM pg_constraint con
@@ -81,7 +81,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},zd=new Fo;var Uo=class{toSql(t){let
81
81
  JOIN pg_namespace nsp ON nsp.oid = rel.relnamespace
82
82
  WHERE con.contype = 'c'
83
83
  AND rel.relname = '${t.table}'
84
- AND nsp.nspname = current_schema()`,bindings:[]}}},op=new Xi;var ea=class{toSql(t){return {sql:`SELECT
84
+ AND nsp.nspname = current_schema()`,bindings:[]}}},ip=new ea;var ta=class{toSql(t){return {sql:`SELECT
85
85
  tc.constraint_name as name,
86
86
  kcu.column_name as column_name,
87
87
  ccu.table_name as referenced_table,
@@ -96,7 +96,7 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},zd=new Fo;var Uo=class{toSql(t){let
96
96
  JOIN information_schema.referential_constraints rc
97
97
  ON rc.constraint_name = tc.constraint_name AND rc.constraint_schema = tc.table_schema
98
98
  WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
99
- ORDER BY kcu.ordinal_position`,bindings:[]}}},sp=new ea;var ta=class{toSql(t){return {sql:`SELECT column_name FROM information_schema.columns WHERE table_schema = current_schema() AND table_name = '${t.table}' ORDER BY ordinal_position`,bindings:[]}}},ip=new ta;var ra=class{toSql(t){return {sql:"SELECT table_name AS name FROM information_schema.tables WHERE table_schema = current_schema() AND table_type = 'BASE TABLE' ORDER BY table_name",bindings:[]}}},ap=new ra;var na=class{toSql(t){let e=t;return {sql:`SELECT EXISTS (SELECT FROM information_schema.check_constraints cc INNER JOIN information_schema.table_constraints tc ON cc.constraint_name = tc.constraint_name WHERE tc.table_schema = current_schema() AND tc.table_name = '${e.table}' AND cc.constraint_name = '${e.constraint}') as exists`,bindings:[]}}},lp=new na;var oa=class{toSql(t){let e=t;return {sql:`SELECT EXISTS (SELECT FROM information_schema.columns WHERE table_schema = current_schema() AND table_name = '${e.table}' AND column_name = '${e.column}') as exists`,bindings:[]}}},up=new oa;var sa=class{toSql(t){let e=t;return {sql:`SELECT EXISTS (SELECT FROM pg_indexes WHERE tablename = '${e.table}' AND indexname = '${e.index}') as exists`,bindings:[]}}},dp=new sa;var ia=class{toSql(t){return {sql:`SELECT EXISTS (SELECT FROM information_schema.table_constraints WHERE table_schema = current_schema() AND table_name = '${t.table}' AND constraint_type = 'PRIMARY KEY') as exists`,bindings:[]}}},mp=new ia;var aa=class{toSql(t){return {sql:`SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_schema = current_schema() AND table_name = '${t.table}') as exists`,bindings:[]}}},cp=new aa;var la=class{toSql(t){return {sql:`SELECT
99
+ ORDER BY kcu.ordinal_position`,bindings:[]}}},ap=new ta;var ra=class{toSql(t){return {sql:`SELECT column_name FROM information_schema.columns WHERE table_schema = current_schema() AND table_name = '${t.table}' ORDER BY ordinal_position`,bindings:[]}}},lp=new ra;var na=class{toSql(t){return {sql:"SELECT table_name AS name FROM information_schema.tables WHERE table_schema = current_schema() AND table_type = 'BASE TABLE' ORDER BY table_name",bindings:[]}}},up=new na;var oa=class{toSql(t){let e=t;return {sql:`SELECT EXISTS (SELECT FROM information_schema.check_constraints cc INNER JOIN information_schema.table_constraints tc ON cc.constraint_name = tc.constraint_name WHERE tc.table_schema = current_schema() AND tc.table_name = '${e.table}' AND cc.constraint_name = '${e.constraint}') as exists`,bindings:[]}}},dp=new oa;var sa=class{toSql(t){let e=t;return {sql:`SELECT EXISTS (SELECT FROM information_schema.columns WHERE table_schema = current_schema() AND table_name = '${e.table}' AND column_name = '${e.column}') as exists`,bindings:[]}}},mp=new sa;var ia=class{toSql(t){let e=t;return {sql:`SELECT EXISTS (SELECT FROM pg_indexes WHERE tablename = '${e.table}' AND indexname = '${e.index}') as exists`,bindings:[]}}},cp=new ia;var aa=class{toSql(t){return {sql:`SELECT EXISTS (SELECT FROM information_schema.table_constraints WHERE table_schema = current_schema() AND table_name = '${t.table}' AND constraint_type = 'PRIMARY KEY') as exists`,bindings:[]}}},pp=new aa;var la=class{toSql(t){return {sql:`SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_schema = current_schema() AND table_name = '${t.table}') as exists`,bindings:[]}}},yp=new la;var ua=class{toSql(t){return {sql:`SELECT
100
100
  i.relname as index_name,
101
101
  a.attname as column_name,
102
102
  ix.indisunique as is_unique
@@ -115,14 +115,14 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},zd=new Fo;var Uo=class{toSql(t){let
115
115
  AND t.relname = '${t.table}'
116
116
  AND t.relnamespace = n.oid
117
117
  AND n.nspname = current_schema()
118
- AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},pp=new la;var ua=class{toSql(t){return {sql:`SELECT
118
+ AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},fp=new ua;var da=class{toSql(t){return {sql:`SELECT
119
119
  tc.constraint_name as name,
120
120
  kcu.column_name as column_name
121
121
  FROM information_schema.table_constraints tc
122
122
  JOIN information_schema.key_column_usage kcu
123
123
  ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
124
124
  WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
125
- ORDER BY kcu.ordinal_position`,bindings:[]}}},yp=new ua;var da=class{toSql(t){return {sql:`SELECT column_name,
125
+ ORDER BY kcu.ordinal_position`,bindings:[]}}},hp=new da;var ma=class{toSql(t){return {sql:`SELECT column_name,
126
126
  data_type,
127
127
  is_nullable,
128
128
  column_default,
@@ -132,16 +132,16 @@ ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},zd=new Fo;var Uo=class{toSql(t){let
132
132
  FROM information_schema.columns
133
133
  WHERE table_schema = current_schema()
134
134
  AND table_name = '${t.table}'
135
- ORDER BY ordinal_position`,bindings:[]}}},fp=new da;var ma=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("postgres",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"postgres").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"postgres").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new f(this.model).formatStringColumn("postgres",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"postgres").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},hp=new ma;var ca=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("postgres",e.column),n=ee.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toPostgres(false);return r?`${t}${r}`:t}buildExtractTextSql(t,e){if(e.isEmpty())return `${t}::text`;let r=e.toPostgres(true);return `${t}${r}`}buildArrayLengthSql(t,e){return `jsonb_array_length(${this.buildExtractSql(t,e)})`}buildObjectKeysSql(t,e){return `jsonb_object_keys(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},gp=new ca;var pa=class{toSql(t){let e=t,r=je(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof O?s.rawValue:s instanceof I?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "gen_random_uuid()";case "$now":return "now()";case "$currentTimestamp":return "current_timestamp";default:return}}},bp=new pa;var ya=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:[]}}},Tp=new ya;var fa=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}}},wp=new fa;var ha=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=typeof this.model?.getColumnsByName=="function"?this.model.getColumnsByName():new Map,l=e.columns.map((d,c)=>{let m=e.values[c],p=r.formatStringColumn("postgres",d);if(m instanceof O)return `${p} = ${m.rawValue}`;if(m instanceof S){let y=new b(this.model,"postgres").parse([m],s,true);return o.push(...y.bindings),s+=y.bindings.length,`${p} = ${y.sql}`}let h=`$${s++}`;return o.push(m),`${p} = ${h}${this.formatTypeCast(m,a.get(d)?.type)}`}).join(", ");return {sql:`${n} set ${l}`,bindings:o}}formatTypeCast(t,e){if(typeof t=="string"&&(e==="jsonb"||e==="json"))return "::text::jsonb";let r="";return Buffer.isBuffer(t)?r="::bytea":Array.isArray(t)?r="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?r="::jsonb":typeof t=="boolean"?r="::boolean":typeof t=="bigint"&&(r="::bigint"),r}},Sp=new ha;var ga=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 I){let s=new b(this.model,"postgres").parse([e.value],1,true).sql;n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,o=[];}else if(e.operator.includes("null"))n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,o=[e.value];}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new f(this.model).formatStringColumn("postgres",t):t}},Np=new ga;var ba=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}}},qp=new ba;var Ta=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],s=new f(this.model).formatStringColumn("postgres",e.column);switch(e.jsonOperator){case "=":n=`${s} = $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "contains":n=`${s} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "not contains":n=`${s} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "subset":n=`${s} <@ $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "path":{let a=ee.from(e.path??"");n=`${s}${a.toPostgres(true)} ${e.comparisonOperator??"="} $${r}`,o=[e.value];break}case "has none":{let a=e.value??[],l=a.map((u,d)=>`$${r+d}`).join(", ");n=`not (jsonb_exists_any(${s}, array[${l}]))`,o=a;break}case "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},Cp=new Ta;var wa=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}}},Rp=new wa;var Sa=class{toSql(t){let e=t,r=new f(this.model),n=s=>r.formatStringColumn("postgres",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},_p=new Sa;var Na=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" materialized":e.clause==="not materialized"?" not materialized":"";return {sql:`${e.alias} as${s} (${o.sql})`,bindings:o.bindings}}},Mp=new Na;var qa=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:[]}}},Op=new qa;var Ca=class{toSql(t){return {sql:"",bindings:[]}}},Ap=new Ca;var Ra=class{toSql(t){return {sql:"",bindings:[]}}},xp=new Ra;var _a=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:[]}}},Dp=new _a;var Ma=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},$p=new Ma;var Oa=class{toSql(t){return {sql:"",bindings:[]}}},vp=new Oa;var Aa=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Ip=new Aa;var xa=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Ep=new xa;var Da=class{toSql(t){return {sql:"",bindings:[]}}},Pp=new Da;var $a=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Bp=new $a;var va=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Kp=new va;var Ia=class{toSql(t){let e=t,r;return e.defaultValue instanceof O?r=e.defaultValue.rawValue:e.defaultValue instanceof I?r=new b(this.model,"sqlite").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},Qp=new Ia;var Ea=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},kp=new Ea;var Pa=class{toSql(t){return {sql:"",bindings:[]}}},Lp=new Pa;var Ba=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:[]}}},Wp=new Ba;var Ka=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
136
- `:e,bindings:[]}}},jp=new Ka;var Qa=class{toSql(t){return {sql:"",bindings:[]}}},Fp=new Qa;var ka=class{toSql(t){let e=t,r=new f(this.model),n=e.constraintName?`constraint "${e.constraintName}" `:"";if(e.constraintType==="primary_key"){let o=!!e.autoIncrement,s=(e.columnType||"").toLowerCase();return o&&(s==="integer"||s==="bigint")?{sql:`${n}primary key autoincrement`,bindings:[]}:{sql:`${n}primary key`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length){let o=e.columns.map(s=>r.formatStringColumn("sqlite",q(s))).join(", ");return e.constraintName?{sql:`${n}unique (${o})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let o=e.defaultValue;return o instanceof O?{sql:`default ${o.rawValue}`,bindings:[]}:o instanceof I?{sql:`default ${new b(this.model,"sqlite").parse([o],1,true).sql}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let o=(e.columns??[]).map(u=>r.formatStringColumn("sqlite",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:[]}}},Up=new ka;var La=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()??"",x=T;if(/not null/i.test(x)||/null/i.test(x)||/default/i.test(x)||/primary key/i.test(x)){let C=`${N} ${x}`.trim();C=C.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(C),a.push(...w);continue}s.push(N),s.push(x),a.push(...w);continue}s.push(T),a.push(...w);}for(let y of e.namedConstraints){let{sql:T,bindings:w}=o.parse([y]);s.push(T),a.push(...w);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.sqliteTemporary&&d.push("TEMPORARY");let 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}}},Vp=new La;var Wa=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("sqlite",e.fromNode),bindings:[]}}},Jp=new Wa;var ja=class{toSql(t){return {sql:"distinct",bindings:[]}}},Hp=new ja;var Fa=class{toSql(t){return _.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},zp=new Fa;var Ua=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Gp=new Ua;var Va=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},Yp=new Va;var Ja=class{toSql(t){let e=t,r=new f(this.model),n=e.alias?` as ${r.quoteIdentifier("sqlite",e.alias)}`:"";if(e.table instanceof O){let{sql:l,bindings:u}=r.formatRawPlaceholders("sqlite",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("sqlite",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"sqlite").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},Zp=new Ja;var Ha=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},Xp=new Ha;var za=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=new b(this.model,"sqlite"),n=new f(this.model);if(e.group?.length){let{sql:l,bindings:u}=r.parse(e.group,e.currParamIndex,true);return {sql:`(${l})`,bindings:u}}let o=n.formatStringColumn("sqlite",e.column),s="",a=[];if(e.subquery!==void 0){let l=this.parseSubquery(r,e);s=`${e.column?`${o} `:""}${e.operator} (${l.sql})`,a=l.bindings;}else if(e.value instanceof I){let l=r.parse([e.value],1,true).sql;s=`${o} ${e.operator} ${l}`;}else if(e.operator==="is null"||e.operator==="is not null")s=`${o} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")s=`${o} ${e.operator} ? and ?`;else {let l=e.value.map(()=>"?").join(", ");s=`${o} ${e.operator} (${l})`;}a=e.value;}else s=`${o} ${e.operator} ?`,a=[e.value];return e.isNegated&&(s=`not (${s})`),{sql:s.trim(),bindings:a}}parseSubquery(t,e){let r=e.subquery;if(typeof r=="string")return {sql:r,bindings:[]};let n=Array.isArray(r)?r:[r];return t.parse(n,e.currParamIndex)}},ey=new za;var Ga=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:[]}}},ty=new Ga;var Ya=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},ry=new Ya;var Za=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 O?p.push(h.rawValue):(l.push(h),p.push("?"));u.push(`(${p.join(", ")})`);}return {sql:`${n} (${a}) VALUES ${u.join(", ")}`,bindings:l}}},ny=new Za;var Xa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=r.formatStringTable("sqlite",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o;if(e.using?.length){let c=e.using.map(m=>r.formatStringColumn("sqlite",m)).join(", ");return o=`${n} using (${c})`,{sql:o,bindings:[]}}let s=e.left;s.includes(".")||(s=`${e.table}.${s}`);let a=e.right;a.includes(".")||(a=`${this.model.table}.${a}`);let l=r.formatStringColumn("sqlite",s),u=r.formatStringColumn("sqlite",a);o=`${n} on ${l} ${e.on?.operator} ${u}`;let d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"sqlite");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let h=p.sql.replace(/^where\s+/i,"");o+=` and ${h}`,d.push(...p.bindings);}}}return {sql:o,bindings:d}}},oy=new Xa;var vh={set:"json_set",insert:"json_insert",remove:"json_remove"},el=class{toSql(t){let e=t,r=new f(this.model).formatStringColumn("sqlite",e.column),n=`'${ht(e.path).replace(/'/g,"''")}'`,o=vh[e.operation];if(e.operation==="remove")return {sql:this.withAlias(`${o}(${r}, ${n})`,e.alias),bindings:[]};let s=e.value!==null&&typeof e.value=="object",a=s?"json(?)":"?",l=s?JSON.stringify(e.value):e.value;return {sql:this.withAlias(`${o}(${r}, ${n}, ${a})`,e.alias),bindings:[l]}}withAlias(t,e){return e?`${t} as "${e}"`:t}},sy=new el;var tl=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},iy=new tl;var rl=class{toSql(t){return {sql:"",bindings:[]}}},ay=new rl;var nl=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},ly=new nl;var ol=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:[]}}},uy=new ol;var sl=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:[]}}},dy=new sl;var il=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},my=new il;var al=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:[]}}},cy=new al;var ll=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},py=new ll;var ul=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},yy=new ul;var dl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},fy=new dl;var ml=class{toSql(t){return {sql:"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name",bindings:[]}}},hy=new ml;var cl=class{toSql(t){return {sql:`SELECT sql FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},gy=new cl;var pl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},by=new pl;var yl=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:[]}}},Ty=new yl;var fl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},wy=new fl;var hl=class{toSql(t){return {sql:`SELECT name FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},Sy=new hl;var gl=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},Ny=new gl;var bl=class{toSql(t){return {sql:`SELECT
135
+ ORDER BY ordinal_position`,bindings:[]}}},gp=new ma;var ca=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("postgres",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"postgres").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"postgres").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new f(this.model).formatStringColumn("postgres",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"postgres").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},bp=new ca;var pa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("postgres",e.column),n=X.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toPostgres(false);return r?`${t}${r}`:t}buildExtractTextSql(t,e){if(e.isEmpty())return `${t}::text`;let r=e.toPostgres(true);return `${t}${r}`}buildArrayLengthSql(t,e){return `jsonb_array_length(${this.buildExtractSql(t,e)})`}buildObjectKeysSql(t,e){return `jsonb_object_keys(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},Tp=new pa;var ya=class{toSql(t){let e=t,r=je(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof O?s.rawValue:s instanceof v?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "gen_random_uuid()";case "$now":return "now()";case "$currentTimestamp":return "current_timestamp";default:return}}},wp=new ya;var fa=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:[]};let r=e.options;if(this.dbType==="cockroachdb"&&(r?.restartIdentity||r?.continueIdentity))throw new h("PostgresTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("CockroachDB does not support the identity TRUNCATE options"));let n=new f(this.model).getFromForWriteOperations("postgres",e.fromNode),o="";return r?.restartIdentity?o+=" restart identity":r?.continueIdentity&&(o+=" continue identity"),r?.cascade&&(o+=" cascade"),{sql:`${n}${o}`,bindings:[]}}},Np=new fa;var ha=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new f(this.model).formatRawPlaceholders("postgres",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Sp=new ha;var ga=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),n=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=typeof this.model?.getColumnsByName=="function"?this.model.getColumnsByName():new Map,l=e.columns.map((d,c)=>{let m=e.values[c],p=r.formatStringColumn("postgres",d);if(m instanceof O)return `${p} = ${m.rawValue}`;if(m instanceof N){let y=new b(this.model,"postgres").parse([m],s,true);return o.push(...y.bindings),s+=y.bindings.length,`${p} = ${y.sql}`}let g=`$${s++}`;return o.push(m),`${p} = ${g}${this.formatTypeCast(m,a.get(d)?.type)}`}).join(", ");return {sql:`${n} set ${l}`,bindings:o}}formatTypeCast(t,e){if(typeof t=="string"&&(e==="jsonb"||e==="json"))return "::text::jsonb";let r="";return Buffer.isBuffer(t)?r="::bytea":Array.isArray(t)?r="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?r="::jsonb":typeof t=="boolean"?r="::boolean":typeof t=="bigint"&&(r="::bigint"),r}},qp=new ga;var ba=class{toSql(t){let e=t;if(e.isRawValue){let s=e.value??[];if(s.length===0)return {sql:e.column,bindings:[]};let a=e.currParamIndex;return {sql:e.column.replace(/\?/g,()=>`$${a++}`),bindings:s}}let r=e.currParamIndex,n="",o=[];if(this.isRawNode(e.value)){let s=this.formatRawIdentifierIfPossible(e.value.rawValue);n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between"){let s=`$${r} AND $${r+1}`;n=`${new f(this.model).formatStringColumn("postgres",e.column)} between ${s}`,o=e.value;}else {let s=e.value.map((a,l)=>`$${r+l}`).join(", ");n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,o=e.value;}else if(e.value instanceof v){let s=new b(this.model,"postgres").parse([e.value],1,true).sql;n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,o=[];}else if(e.operator.includes("null"))n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};n=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,o=[e.value];}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new f(this.model).formatStringColumn("postgres",t):t}},Cp=new ba;var Ta=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"postgres"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},Rp=new Ta;var wa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,n="",o=[],s=new f(this.model).formatStringColumn("postgres",e.column);switch(e.jsonOperator){case "=":n=`${s} = $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "contains":n=`${s} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "not contains":n=`${s} @> $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "subset":n=`${s} <@ $${r}::jsonb`,o=[JSON.stringify(e.value)];break;case "path":{let a=X.from(e.path??"");n=`${s}${a.toPostgres(true)} ${e.comparisonOperator??"="} $${r}`,o=[e.value];break}case "has none":{let a=e.value??[],l=a.map((u,d)=>`$${r+d}`).join(", ");n=`not (jsonb_exists_any(${s}, array[${l}]))`,o=a;break}case "raw":n=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(n=`not (${n})`),{sql:n.trim(),bindings:o}}},_p=new wa;var Na=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},Mp=new Na;var Sa=class{toSql(t){let e=t,r=new f(this.model),n=s=>r.formatStringColumn("postgres",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},Op=new Sa;var qa=class{toSql(t){let e=t,r=new b(this.model,"postgres"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" materialized":e.clause==="not materialized"?" not materialized":"",a=e.columns?.length?` (${e.columns.map(l=>new f(this.model).formatStringColumnBare("postgres",l)).join(", ")})`:"";return {sql:`${e.alias}${a} as${s} (${o.sql})`,bindings:o.bindings}}},Ap=new qa;var Ca=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),{sql:n}=r.parse([e.column]),o=e.inlineConstraints;if(o&&o.length>0){let s=[];for(let a of o){let{sql:l}=r.parse([a]);s.push(l);}s.length>0&&(n+=` ${s.join(" ")}`);}return {sql:`add column ${n}`,bindings:[]}}},xp=new Ca;var Ra=class{toSql(t){return {sql:"",bindings:[]}}},Dp=new Ra;var _a=class{toSql(t){return {sql:"",bindings:[]}}},Ip=new _a;var Ma=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let o=new b(this.model,"sqlite"),s=[],a=[],l=false;for(let m of e.children){let{sql:p,bindings:g}=o.parse([m]);if(!(!p||!p.trim())){if(m.file==="add_column")s.push(p),l=true;else if(m.file==="add_constraint"&&l){let y=s.pop()??"",w=p.replace(/^\s*add\s+/i,"").trimStart();s.push(`${y} ${w}`);}else {if(m.file==="set_not_null"||m.file==="drop_not_null")continue;if(m.file==="set_default"||m.file==="drop_default")continue;s.push(p),l=false;}a.push(...g);}}let u=s.join(", "),d=e.ifExists?"if exists ":"";return u.trim()?{sql:`${d}${n} ${u}`,bindings:a}:{sql:"",bindings:[]}}},$p=new Ma;var Oa=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},vp=new Oa;var Aa=class{toSql(t){return {sql:"",bindings:[]}}},Ep=new Aa;var xa=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Pp=new xa;var Da=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Bp=new Da;var Ia=class{toSql(t){return {sql:"",bindings:[]}}},Qp=new Ia;var $a=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Kp=new $a;var va=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},kp=new va;var Ea=class{toSql(t){let e=t,r;return e.defaultValue instanceof O?r=e.defaultValue.rawValue:e.defaultValue instanceof v?r=new b(this.model,"sqlite").parse([e.defaultValue],1,true).sql:e.defaultValue==="NULL"?r="null":e.defaultValue==="TRUE"||e.defaultValue==="FALSE"?r=e.defaultValue.toLowerCase():typeof e.defaultValue=="string"&&e.defaultValue!=="null"&&e.defaultValue!=="true"&&e.defaultValue!=="false"?r=`'${e.defaultValue}'`:r=String(e.defaultValue),{sql:`alter column "${e.column}" set default ${r}`,bindings:[]}}},Lp=new Ea;var Pa=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},Wp=new Pa;var Ba=class{toSql(t){return {sql:"",bindings:[]}}},Fp=new Ba;var Qa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let n=new f(this.model).formatStringColumn("sqlite",q(e.column)),o=e.dataType.toLowerCase();if(o==="bigincrement")return {sql:`${n} integer primary key autoincrement`,bindings:[]};if(o==="char"||o==="varchar")return {sql:`${n} text`,bindings:[]};if(o==="uuid"){let a=e.isForeignKey?"":" default (lower(hex(randomblob(16))))";return {sql:`${n} varchar(36)${a}`,bindings:[]}}else if(o==="ulid")return {sql:`${n} varchar(26)`,bindings:[]};if(o.includes("text"))return {sql:`${n} text`,bindings:[]};if(o==="integer"||o==="bigint"||o==="int")return e.autoIncrement?{sql:`${n} integer primary key autoincrement`,bindings:[]}:{sql:`${n} integer`,bindings:[]};if(o==="tinyint")return {sql:`${n} integer`,bindings:[]};if(o==="smallint")return {sql:`${n} integer`,bindings:[]};if(o==="mediumint")return {sql:`${n} integer`,bindings:[]};if(o==="float"||o==="double")return {sql:`${n} real`,bindings:[]};if(o==="decimal"||o==="numeric"){let a=e.precision??10,l=e.scale??0;return {sql:`${n} numeric(${a}, ${l})`,bindings:[]}}if(o==="date"||o==="datetime"||o==="timestamp"||o==="time"||o==="year"){let a=`${n} text`;return (o==="datetime"||o==="timestamp")&&e.autoCreate&&(a+=" default current_timestamp"),{sql:a,bindings:[]}}else {if(o==="boolean")return {sql:`${n} integer`,bindings:[]};if(o==="json"||o==="jsonb")return {sql:`${n} text`,bindings:[]};if(o==="enum")return {sql:`${n} text`,bindings:[]};if(o==="bytea"||o==="blob"||o==="binary"||o==="longblob"||o==="mediumblob"||o==="tinyblob")return {sql:`${n} blob`,bindings:[]};if(o==="geometry"||o==="point"||o==="linestring"||o==="polygon"||o==="multipoint")return {sql:`${n} ${o}`,bindings:[]}}let s=e.length?`(${e.length})`:"";return {sql:`${n} ${o}${s}`,bindings:[]}}},jp=new Qa;var Ka=class{toSql(t){let e=t.value;return {sql:e.startsWith("--")||e.startsWith("#")?`${e}
136
+ `:e,bindings:[]}}},Up=new Ka;var ka=class{toSql(t){return {sql:"",bindings:[]}}},Vp=new ka;var La=class{toSql(t){let e=t,r=new f(this.model),n=e.constraintName?`constraint "${e.constraintName}" `:"";if(e.constraintType==="primary_key"){let o=!!e.autoIncrement,s=(e.columnType||"").toLowerCase();return o&&(s==="integer"||s==="bigint")?{sql:`${n}primary key autoincrement`,bindings:[]}:{sql:`${n}primary key`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length){let o=e.columns.map(s=>r.formatStringColumn("sqlite",q(s))).join(", ");return e.constraintName?{sql:`${n}unique (${o})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let o=e.defaultValue;return o instanceof O?{sql:`default ${o.rawValue}`,bindings:[]}:o instanceof v?{sql:`default ${new b(this.model,"sqlite").parse([o],1,true).sql}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let o=(e.columns??[]).map(u=>r.formatStringColumn("sqlite",q(u))).join(", "),s=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(u=>r.formatStringColumn("sqlite",q(u))).join(", "),l=`${n}foreign key (${o}) references ${s}(${a})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return e.constraintType==="check"?e.checkExpression?{sql:`${n}check (${e.checkExpression})`,bindings:[]}:{sql:"",bindings:[]}:{sql:"",bindings:[]}}},Jp=new La;var Wa=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${n} ()`,bindings:[]};let o=new b(this.model,"sqlite"),s=[],a=[];for(let y of e.children){let{sql:w,bindings:T}=o.parse([y]);if(y.folder==="constraint"){let S=s.pop()??"",x=w;if(/not null/i.test(x)||/null/i.test(x)||/default/i.test(x)||/primary key/i.test(x)){let C=`${S} ${x}`.trim();C=C.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(C),a.push(...T);continue}s.push(S),s.push(x),a.push(...T);continue}s.push(w),a.push(...T);}for(let y of e.namedConstraints){let{sql:w,bindings:T}=o.parse([y]);s.push(w),a.push(...T);}let l=s.join(", "),u=e.ifNotExists?"if not exists ":"",d=[];e.sqliteTemporary&&d.push("TEMPORARY");let c=d.length>0?`${d.join(" ")} `:"",m=e.withoutRowId?" WITHOUT ROWID":"",p=e.strict?" STRICT":"";return {sql:`${u}${c}${n} (${l})${m}${p}`,bindings:a}}},Hp=new Wa;var Fa=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("sqlite",e.fromNode),bindings:[]}}},zp=new Fa;var ja=class{toSql(t){return {sql:"distinct",bindings:[]}}},Gp=new ja;var Ua=class{toSql(t){return _.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},Yp=new Ua;var Va=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${n}`,bindings:[]}}},Zp=new Va;var Ja=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},Xp=new Ja;var Ha=class{toSql(t){let e=t,r=new f(this.model),n=e.alias?` as ${r.quoteIdentifier("sqlite",e.alias)}`:"";if(e.table instanceof O){let{sql:l,bindings:u}=r.formatRawPlaceholders("sqlite",e.table.rawValue,e.table.bindings??[],e.currParamIndex);return {sql:`${l}${n}`,bindings:u}}if(typeof e.table=="string")return {sql:`${r.formatStringTable("sqlite",e.schema?`${e.schema}.${e.table}`:e.table)}${n}`,bindings:[]};let o=Array.isArray(e.table)?e.table:[e.table],a=new b(this.model,"sqlite").parse(o);return {sql:`(${a.sql})${n}`,bindings:a.bindings}}},ey=new Ha;var za=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},ty=new za;var Ga=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=new b(this.model,"sqlite"),n=new f(this.model);if(e.group?.length){let{sql:l,bindings:u}=r.parse(e.group,e.currParamIndex,true);return {sql:`(${l})`,bindings:u}}let o=n.formatStringColumn("sqlite",e.column),s="",a=[];if(e.subquery!==void 0){let l=this.parseSubquery(r,e);s=`${e.column?`${o} `:""}${e.operator} (${l.sql})`,a=l.bindings;}else if(e.value instanceof v){let l=r.parse([e.value],1,true).sql;s=`${o} ${e.operator} ${l}`;}else if(e.operator==="is null"||e.operator==="is not null")s=`${o} ${e.operator}`;else if(Array.isArray(e.value)){if(e.operator==="between"||e.operator==="not between")s=`${o} ${e.operator} ? and ?`;else {let l=e.value.map(()=>"?").join(", ");s=`${o} ${e.operator} (${l})`;}a=e.value;}else s=`${o} ${e.operator} ?`,a=[e.value];return e.isNegated&&(s=`not (${s})`),{sql:s.trim(),bindings:a}}parseSubquery(t,e){let r=e.subquery;if(typeof r=="string")return {sql:r,bindings:[]};let n=Array.isArray(r)?r:[r];return t.parse(n,e.currParamIndex)}},ry=new Ga;var Ya=class{toSql(t){let e=t,n=new f(this.model).formatStringTable("sqlite",e.table),o=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${n} (${o})`,bindings:[]}}},ny=new Ya;var Za=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},oy=new Za;var Eh=new Set(["where","group_by","having","order_by","limit","offset","union"]),Xa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode),o=r.renderWithNodes("sqlite",e.withNodes,e.currParamIndex),s=o.sql?`${o.sql} `:"",a=e.currParamIndex+o.bindings.length,l=[],u;if(e.source){let d=new b(this.model,"sqlite").parse(e.source,a),c=e.targetColumns?.length?` (${e.targetColumns.map(p=>r.formatStringColumn("sqlite",p)).join(", ")})`:"",m=e.disambiguateSource&&!e.source.some(p=>Eh.has(p.folder));u=`${n}${c} ${d.sql}${m?" where true":""}`,l.push(...d.bindings);}else {let d=e.records.length?Object.keys(e.records[0]):[];if(!d.length)u=`${n} default values`;else {let c=d.map(p=>r.formatStringColumn("sqlite",p)).join(", "),m=[];for(let p of e.records){let g=d.map(w=>p[w]),y=[];for(let w of g)w instanceof O?y.push(w.rawValue):(l.push(w),y.push("?"));m.push(`(${y.join(", ")})`);}u=`${n} (${c}) VALUES ${m.join(", ")}`;}}return {sql:`${s}${u}`,bindings:[...o.bindings,...l]}}},sy=new Xa;var el=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=r.formatStringTable("sqlite",e.schema?`${e.schema}.${e.table}`:e.table);if(e.type==="cross")return {sql:n,bindings:[]};let o;if(e.using?.length){let c=e.using.map(m=>r.formatStringColumn("sqlite",m)).join(", ");return o=`${n} using (${c})`,{sql:o,bindings:[]}}let s=e.left;s.includes(".")||(s=`${e.table}.${s}`);let a=e.right;a.includes(".")||(a=`${this.model.table}.${a}`);let l=r.formatStringColumn("sqlite",s),u=r.formatStringColumn("sqlite",a);o=`${n} on ${l} ${e.on?.operator} ${u}`;let d=[];if(e.additionalConditions&&e.additionalConditions.length>0){let c=new b(this.model,"sqlite");for(let m of e.additionalConditions){let p=c.parse([m]);if(p.sql){let g=p.sql.replace(/^where\s+/i,"");o+=` and ${g}`,d.push(...p.bindings);}}}return {sql:o,bindings:d}}},iy=new el;var Ph={set:"json_set",insert:"json_insert",remove:"json_remove"},tl=class{toSql(t){let e=t,r=new f(this.model).formatStringColumn("sqlite",e.column),n=`'${ft(e.path).replace(/'/g,"''")}'`,o=Ph[e.operation];if(e.operation==="remove")return {sql:this.withAlias(`${o}(${r}, ${n})`,e.alias),bindings:[]};let s=e.value!==null&&typeof e.value=="object",a=s?"json(?)":"?",l=s?JSON.stringify(e.value):e.value;return {sql:this.withAlias(`${o}(${r}, ${n}, ${a})`,e.alias),bindings:[l]}}withAlias(t,e){return e?`${t} as "${e}"`:t}},ay=new tl;var rl=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},ly=new rl;var nl=class{toSql(t){return {sql:"",bindings:[]}}},uy=new nl;var ol=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},dy=new ol;var sl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),n=e.conflictColumns.map(a=>r.formatStringColumnBare("sqlite",a)).join(", "),o=n?` (${n})`:"";if(e.mode==="ignore")return {sql:`ON CONFLICT${o} DO NOTHING`,bindings:[]};let s=e.columnsToUpdate.map(a=>`${r.formatStringColumnBare("sqlite",a)} = EXCLUDED.${r.formatStringColumnBare("sqlite",a)}`).join(", ");return {sql:`ON CONFLICT${o} DO UPDATE SET ${s}`,bindings:[]}}},my=new sl;var il=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("sqlite",e.column),n=e.direction.toLowerCase();return {sql:`${r} ${n}`,bindings:[]}}},cy=new il;var al=class{toSql(t){let e=t;return {sql:e.rawValue,bindings:e.bindings??[]}}},py=new al;var ll=class{toSql(t){let e=t,r=new f(this.model);return {sql:`returning ${!e.columns.length||e.columns.includes("*")?"*":e.columns.map(o=>r.formatStringColumn("sqlite",o)).join(", ")}`,bindings:[]}}},yy=new ll;var ul=class{toSql(t){return {sql:"SELECT 1 WHERE 0",bindings:[]}}},fy=new ul;var dl=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},hy=new dl;var ml=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},gy=new ml;var cl=class{toSql(t){return {sql:"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name",bindings:[]}}},by=new cl;var pl=class{toSql(t){return {sql:`SELECT sql FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},Ty=new pl;var yl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},wy=new yl;var fl=class{toSql(t){let e=t;return {sql:`SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='${e.table}' AND name='${e.index}'`,bindings:[]}}},Ny=new fl;var hl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Sy=new hl;var gl=class{toSql(t){return {sql:`SELECT name FROM sqlite_master WHERE type='table' AND name='${t.table}'`,bindings:[]}}},qy=new gl;var bl=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},Cy=new bl;var Tl=class{toSql(t){return {sql:`SELECT
137
137
  'PRIMARY' as name,
138
138
  name as column_name
139
139
  FROM pragma_table_info('${t.table}')
140
140
  WHERE pk > 0
141
- ORDER BY pk`,bindings:[]}}},qy=new bl;var Tl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Cy=new Tl;var wl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("sqlite",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"sqlite").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"sqlite").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new f(this.model).formatStringColumn("sqlite",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"sqlite").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},Ry=new wl;var Sl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("sqlite",e.column),n=ee.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toSqlite();return r==="$"?t:`json_extract(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toSqlite();return r==="$"?`json_array_length(${t})`:`json_array_length(${t}, '${r}')`}buildObjectKeysSql(t,e){return `json_each.key FROM json_each(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},_y=new Sl;var Nl=class{toSql(t){let e=t,r=je(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof O?s.rawValue:s instanceof I?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "lower(hex(randomblob(16)))";case "$now":case "$currentTimestamp":return "current_timestamp";default:return}}},My=new Nl;var ql=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:[]}}},Oy=new ql;var Cl=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}}},Ay=new Cl;var Rl=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((l,u)=>{let d=e.values[u],c=r.formatStringColumn("sqlite",l);if(d instanceof O)return `${c} = ${d.rawValue}`;if(d instanceof S){let m=new b(this.model,"sqlite").parse([d],s,true);return o.push(...m.bindings),s+=m.bindings.length,`${c} = ${m.sql}`}return o.push(d),`${c} = ?`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},xy=new Rl;var _l=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 I){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}},Dy=new _l;var Ml=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}}},$y=new Ml;var Ol=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new f(this.model).formatStringColumn("sqlite",e.column);switch(e.jsonOperator){case "=":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "path":{let s=ee.from(e.path??"");r=`json_extract(${o}, '${s.toSqlite()}') ${e.comparisonOperator??"="} ?`,n=[e.value];break}case "subset":case "has none":throw new g("WhereJsonInterpreter::unsupported","NOT_SUPPORTED_IN_SQLITE");case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},vy=new Ol;var Al=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}}},Iy=new Al;var xl=class{toSql(t){let e=t,r=new f(this.model),n=s=>r.formatStringColumn("sqlite",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},Ey=new xl;var Dl=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}}},Py=new Dl;var $l={mssql:{alter_table:{add_column:ku,add_constraint:Lu,add_primary_key:Wu,alter_column_type:ju,alter_table:Fu,drop_column:Uu,drop_constraint:Vu,drop_default:Ju,drop_not_null:td,drop_primary_key:rd,rename_column:nd,rename_table:od,set_default:sd,set_not_null:id,set_table_options:ad},column:{column_type:ld},comment:{comment:ud},constraint:{after:dd,constraint:md},create_table:{create_table:cd},delete:{delete:pd},distinct:{distinct:yd,distinct_on:fd},drop_table:{drop_table:hd},extension:{create_extension:gd},from:{from:bd},group_by:{group_by:Td},having:{having:wd},index_op:{create_index:Sd,drop_index:Nd},insert:{insert:qd},join:{join:Cd},json_mutation:{json_mutation:xd},limit:{limit:Dd},lock:{lock:$d},offset:{offset:vd},on_duplicate:{on_duplicate:Id},order_by:{order_by:Ed},raw:{raw:Pd},returning:{returning:Bd},schema:{check_constraint_info:Kd,foreign_key_info:Qd,get_column_listing:kd,get_tables:Ld,has_check_constraint:Wd,has_column:jd,has_index:Fd,has_primary_key:Ud,has_table:Vd,index_info:Jd,primary_key_info:Hd,table_info:zd},select:{select:Gd,select_json:Yd},sqlfunc:{sqlfunc:Zd},truncate:{truncate:Xd},union:{union:em},update:{update:tm},where:{where:rm,where_group:nm,where_json:om,where_subquery:sm},window:{window:im},with:{with:am}},mysql:{alter_table:{add_column:lm,add_constraint:um,add_primary_key:dm,alter_column_type:mm,alter_table:cm,drop_column:pm,drop_constraint:ym,drop_default:fm,drop_not_null:hm,drop_primary_key:gm,rename_column:bm,rename_table:Tm,set_default:wm,set_not_null:Sm,set_table_options:Nm},column:{column_type:qm},comment:{comment:Cm},constraint:{after:Rm,constraint:_m},create_table:{create_table:Mm},delete:{delete:Om},distinct:{distinct:Am,distinct_on:xm},drop_table:{drop_table:Dm},extension:{create_extension:$m},from:{from:vm},group_by:{group_by:Im},having:{having:Em},index_op:{create_index:Pm,drop_index:Bm},insert:{insert:Km},join:{join:Qm},json_mutation:{json_mutation:km},limit:{limit:Lm},lock:{lock:Wm},offset:{offset:jm},on_duplicate:{on_duplicate:Fm},order_by:{order_by:Um},raw:{raw:Vm},returning:{returning:Jm},schema:{check_constraint_info:Hm,foreign_key_info:zm,get_column_listing:Gm,get_tables:Ym,has_check_constraint:Zm,has_column:Xm,has_index:ec,has_primary_key:tc,has_table:rc,index_info:nc,primary_key_info:oc,table_info:sc},select:{select:ic,select_json:ac},sqlfunc:{sqlfunc:lc},truncate:{truncate:uc},union:{union:dc},update:{update:mc},where:{where:cc,where_group:pc,where_json:yc,where_subquery:fc},window:{window:hc},with:{with:gc}},postgres:{alter_table:{add_column:bc,add_constraint:Tc,add_primary_key:wc,alter_column_type:Sc,alter_table:Nc,drop_column:qc,drop_constraint:Cc,drop_default:Rc,drop_not_null:_c,drop_primary_key:Mc,rename_column:Oc,rename_table:Ac,set_default:xc,set_not_null:Dc,set_table_options:$c},column:{column_type:vc},comment:{comment:Ic},constraint:{after:Ec,constraint:Pc},create_table:{create_table:Bc},delete:{delete:Kc},distinct:{distinct:Qc,distinct_on:kc},drop_table:{drop_table:Lc},extension:{create_extension:Wc},from:{from:jc},group_by:{group_by:Fc},having:{having:Uc},index_op:{create_index:Vc,drop_index:Jc},insert:{insert:Hc},join:{join:zc},json_mutation:{json_mutation:Gc},limit:{limit:Yc},lock:{lock:Zc},offset:{offset:Xc},on_duplicate:{on_duplicate:ep},order_by:{order_by:tp},raw:{raw:rp},returning:{returning:np},schema:{check_constraint_info:op,foreign_key_info:sp,get_column_listing:ip,get_tables:ap,has_check_constraint:lp,has_column:up,has_index:dp,has_primary_key:mp,has_table:cp,index_info:pp,primary_key_info:yp,table_info:fp},select:{select:hp,select_json:gp},sqlfunc:{sqlfunc:bp},truncate:{truncate:Tp},union:{union:wp},update:{update:Sp},where:{where:Np,where_group:qp,where_json:Cp,where_subquery:Rp},window:{window:_p},with:{with:Mp}},sqlite:{alter_table:{add_column:Op,add_constraint:Ap,alter_column_type:xp,alter_table:Dp,drop_column:$p,drop_constraint:vp,drop_default:Ip,drop_not_null:Ep,drop_primary_key:Pp,rename_column:Bp,rename_table:Kp,set_default:Qp,set_not_null:kp,set_table_options:Lp},column:{column_type:Wp},comment:{comment:jp},constraint:{after:Fp,constraint:Up},create_table:{create_table:Vp},delete:{delete:Jp},distinct:{distinct:Hp,distinct_on:zp},drop_table:{drop_table:Gp},extension:{create_extension:Yp},from:{from:Zp},group_by:{group_by:Xp},having:{having:ey},index_op:{create_index:ty,drop_index:ry},insert:{insert:ny},join:{join:oy},json_mutation:{json_mutation:sy},limit:{limit:iy},lock:{lock:ay},offset:{offset:ly},on_duplicate:{on_duplicate:uy},order_by:{order_by:dy},raw:{raw:my},returning:{returning:cy},schema:{check_constraint_info:py,foreign_key_info:yy,get_column_listing:fy,get_tables:hy,has_check_constraint:gy,has_column:by,has_index:Ty,has_primary_key:wy,has_table:Sy,index_info:Ny,primary_key_info:qy,table_info:Cy},select:{select:Ry,select_json:_y},sqlfunc:{sqlfunc:My},truncate:{truncate:Oy},union:{union:Ay},update:{update:xy},where:{where:Dy,where_group:$y,where_json:vy,where_subquery:Iy},window:{window:Ey},with:{with:Py}}};var b=class{constructor(t,e){this.dbType=e,this.model=t;}parse(t,e=1,r=false){if(!t.length)return {sql:"",bindings:[]};let n=t.find(C=>!!C&&C.folder==="distinctOn"),o=!n&&t.find(C=>!!C&&C.folder==="distinct"),s=t.filter(C=>!!C&&C.folder==="comment"&&C.isHint).map(C=>this.renderNode(C)).filter(C=>C.length>0).join(" "),a=this.dbType==="mssql"?t.find(C=>!!C&&C.folder==="lock")??null:null,l=a?this.getMssqlTableHints(a):"",u=t.filter(C=>C!==null&&C.folder!=="distinct"&&C.folder!=="distinctOn"&&!(C.folder==="comment"&&C.isHint)),d=u.some(C=>C.folder==="offset"),c=u.some(C=>C.folder==="order_by"),m=u.find(C=>C.folder==="limit"),p=u.find(C=>C.folder==="offset"),h=this.dbType==="mssql"&&m&&!d&&!c,y=this.dbType==="mssql"&&!h&&(m||p),T=[],w=[],N=null;h&&m&&w.push(m.limit);for(let C=0;C<u.length;C++){let $=u[C];if(h&&$.folder==="limit"||y&&($.folder==="limit"||$.folder==="offset"))continue;$.currParamIndex=e+w.length;let D=$l[this.mapCommonDbType(this.dbType)][$.folder][$.file];if(!D)throw new Error(`Interpreter not found for ${this.dbType} ${$.keyword}`);D.model=this.model,D.dbType=this.dbType;let A=D.toSql($);if(!A.sql||!A.sql.trim().length)continue;let Q=u[C+1],E=!Q||Q.keyword!==$.keyword?"":Q.chainsWith;if($.folder==="lock"||$.folder==="on_duplicate"||$.folder==="returning"||$.folder==="schema"||$.folder==="comment"){T.push(`${A.sql}${E}`),w.push(...A.bindings),N=$.keyword;continue}if(N!==$.keyword||$.canKeywordBeSeenMultipleTimes){if(r)T.push(`${A.sql}${E}`);else {let ne=$.keyword;if($.folder==="with"&&this.dbType!=="mssql"){let _e=C,Me=false;for(;_e<u.length&&u[_e].keyword===$.keyword;){let su=u[_e];if(su.folder==="with"&&su.clause==="recursive"){Me=true;break}_e++;}Me&&(ne=`${ne} recursive`);}let Ze=s?`${s} `:"";if(ne==="select"){let _e=h?`top (@${e}) `:"";if(n){let Me=Array.isArray(n.columns)?n.columns.join(", "):"";T.push(`select ${_e}${Ze}distinct on (${Me}) ${A.sql}${E}`);}else o?T.push(`select ${_e}${Ze}distinct ${A.sql}${E}`):T.push(`select ${_e}${Ze}${A.sql}${E}`);}else ne==="from"&&l?T.push(`${ne} ${A.sql}${l}${E}`):T.push(`${ne} ${A.sql}${E}`);}N=$.keyword;}else T.push(`${A.sql}${E}`);w.push(...A.bindings);}if(y){c||T.push("order by (select null)");let C=p?.offset??0;w.push(C);let D=`offset @${e+w.length-1} rows`;if(m){w.push(m.limit);let A=e+w.length-1;D+=` fetch next @${A} rows only`;}T.push(D);}return {sql:T.join(" "),bindings:w}}renderNode(t){let e=$l[this.mapCommonDbType(this.dbType)][t.folder][t.file];if(!e)throw new Error(`Interpreter not found for ${this.dbType} ${t.keyword}`);return e.model=this.model,e.dbType=this.dbType,e.toSql(t).sql}mapCommonDbType(t){switch(t){case "mariadb":return "mysql";case "cockroachdb":return "postgres";default:return t}}getMssqlTableHints(t){let e=[];switch(t.lockType){case "UPDATE":e.push("UPDLOCK");break;case "SHARE":e.push("HOLDLOCK");break;case "NO_KEY_UPDATE":e.push("UPDLOCK");break;case "KEY_SHARE":e.push("HOLDLOCK");break}return t.skipLocked&&e.push("READPAST"),t.noWait&&e.push("NOWAIT"),e.length>0?` with (${e.join(", ")})`:""}};var Ih=i=>{if(i==null||typeof i!="object"||i instanceof Date)return false;if(Array.isArray(i))return true;let t=Object.getPrototypeOf(i);return t===Object.prototype||t===null},vl=i=>!i.expression&&(i.type==="date"||i.type==="datetime"||i.type==="timestamp"),f=class{constructor(t){this.model=t;this.modelColumnsMap=typeof t.getColumnsByName=="function"?t.getColumnsByName():new Map;let e=[],r=[];for(let n of this.modelColumnsMap.values())n.expression||((n.type==="ulid"||n.autoCreate==="js")&&e.push(n),n.autoUpdate&&r.push(n));this.jsInsertColumns=e,this.autoUpdateColumns=r;}formatStringColumn(t,e){if(e==="*")return "*";let r=this.resolveComputedExpression(e);if(r!==void 0)return `(${r})`;if(e.includes(".")){let[s,a]=e.split(".");if(a==="*")switch(t){case "mysql":case "mariadb":return `\`${s}\`.*`;case "postgres":case "cockroachdb":case "sqlite":return `"${s}".*`;case "mssql":return `[${s}].*`;default:throw new Error(`Unsupported database type: ${t}`)}let l=this.modelColumnsMap.get(a)?.databaseName??J(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??J(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${o}"`;case "mssql":return `[${o}]`;default:throw new Error(`Unsupported database type: ${t}`)}}resolveComputedExpression(t){let e=t.includes(".")?t.split(".").pop():t;return this.modelColumnsMap.get(e)?.expression}isComputedColumn(t){return !!this.modelColumnsMap.get(t)?.expression}filterComputedColumns(t){return this.modelColumnsMap.size===0?t:t.filter(e=>!this.isComputedColumn(e))}stripComputedFromData(t){if(this.modelColumnsMap.size===0)return t;let e={};for(let r of Object.keys(t))this.isComputedColumn(r)||(e[r]=t[r]);return e}formatStringColumnBare(t,e){let r=e.includes(".")?e.split(".")[1]:e;return this.formatStringColumn(t,r)}dialectEmitsReturning(t){switch(t){case "postgres":case "cockroachdb":case "sqlite":case "mssql":return true;default:return false}}shouldFetchNatively(t,e){if(!this.dialectEmitsReturning(t)||t==="mssql")return false;if(t==="sqlite"&&e==="update"){for(let r of this.modelColumnsMap.values())if(r.autoUpdate)return false}return true}hasComputedColumn(t){return t.some(e=>this.isComputedColumn(e))}resolveColumnAlias(t,e){let r=this.modelColumnsMap.get(e);if(!r||r.columnName===r.databaseName)return "";switch(t){case "mssql":return ` as [${r.columnName}]`;case "mysql":case "mariadb":return ` as \`${r.columnName}\``;case "postgres":case "cockroachdb":case "sqlite":return ` as "${r.columnName}"`;default:return ""}}formatStringTable(t,e){e=e.replace(/\s+/g," ").trim();let r="";return e.toLowerCase().includes(" as ")&&([e,r]=e.split(" as ")),`${e.split(".").map(o=>this.quoteIdentifier(t,o)).join(".")}${r?` as ${this.quoteIdentifier(t,r)}`:""}`}quoteIdentifier(t,e){switch(t){case "mysql":case "mariadb":return `\`${e}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${e}"`;case "mssql":return `[${e}]`;default:return e}}formatRawPlaceholders(t,e,r=[],n=1){if(!r.length)return {sql:e,bindings:[]};let o=n;return {sql:e.replace(/\?/g,()=>{switch(t){case "postgres":case "cockroachdb":return `$${o++}`;case "mssql":return `@${o++}`;default:return "?"}}),bindings:r}}prepareColumns(t,e,r="insert",n="postgres"){if(!t.length)return {columns:t,values:e};let o=[],s=[];for(let l=0;l<t.length;l++){let u=t[l],d=e[l];u!=="*"&&(o.push(u),s.push(d));}let a=n==="mysql"||n==="mariadb";for(let l=0;l<o.length;l++){let u=o[l],d=s[l],c=this.modelColumnsMap.get(u);if(c?.expression){o.splice(l,1),s.splice(l,1),l--;continue}if(!(d instanceof S)){if(!c){Ih(d)&&(s[l]=JSON.stringify(d));continue}if(d==null&&(c.autoCreate===true||c.type==="uuid"&&n!=="mysql"&&n!=="mariadb")){o.splice(l,1),s.splice(l,1),l--;continue}if(c.prepare){let m=r==="insert"?c.prepare(d):c.prepare(d)??d;if(m!==null&&typeof m?.then=="function")throw new Error(`hysteria-orm: prepare on column "${u}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);s[l]=m;}n==="sqlite"&&s[l]instanceof Date&&vl(c)&&(s[l]=de(s[l],"ISO","UTC"));}}if(r==="insert"){let l=new Set(t);for(let u of this.jsInsertColumns)l.has(u.columnName)||this.generateJsInsertColumn(u,o,s,n);if(a){let u=this.model.primaryKey;if(u){let d=this.modelColumnsMap.get(u);d&&d.type==="uuid"&&d.isPrimary&&!l.has(u)&&this.generateJsInsertColumn(d,o,s,n);}}}else {let l=new Set(t);for(let u of this.autoUpdateColumns){if(l.has(u.columnName))continue;let d=u.prepare?.(new Date);if(d!=null){if(typeof d?.then=="function")throw new Error(`hysteria-orm: prepare on column "${u.columnName}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);o.push(u.columnName),s.push(n==="sqlite"&&d instanceof Date&&vl(u)?de(d,"ISO","UTC"):d);}}}return {columns:o,values:s}}generateJsInsertColumn(t,e,r,n){let o=t.prepare?.(void 0);if(o!==null&&typeof o?.then=="function")throw new Error(`hysteria-orm: prepare on column "${t.columnName}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);e.push(t.columnName),r.push(n==="sqlite"&&o instanceof Date&&vl(t)?de(o,"ISO","UTC"):o??void 0);}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new b(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}};var gt=class extends S{constructor(e,r=false){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.fromNode=e;}};var 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 te=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 qe=class extends S{constructor(e,r,n,o="update",s,a=false){super("on duplicate",a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="on_duplicate";this.file="on_duplicate";this.table=e,this.conflictColumns=r,this.columnsToUpdate=n,this.mode=o,this.returning=s;}};var bt=class extends S{constructor(e=[],r="inserted"){super("returning");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="returning";this.file="returning";this.columns=e,this.prefix=r;}};var Ie=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 By;By=Symbol.toStringTag;var Z=class{constructor(t,e,r,n){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=n;this[By]="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 Eh=(i,t,e,r,n,o=false,s=new Set)=>{let a=Object.create(t.prototype);for(let l of Object.keys(i)){let u=i[l],d=s.has(l),c=e.get(l),m=l;!c&&!d&&(c=r.get(l),c&&(m=c.columnName));let p=c!==void 0,h=d||o?true:n?n.has(m):true;if(p){if(!h)continue;if(u===null){a[m]=null;continue}if(c?.serialize){let y=c.serialize(u);if(y!==null&&typeof y?.then=="function")throw new Error(`hysteria-orm: column "${m}" on model "${t.name}" has an async serialize function, but serializers must be synchronous. Move async work to prepare or a getter.`);a[m]=y;continue}a[m]=u;continue}(d||!o||n&&n.has(m))&&(a[m]=u);}if(n)for(let l of n)l in a||(a[l]=null);return a},fe=(i,t,e=[],r=[])=>{if(!i.length)return null;let n=t.getColumnsByName(),o=t.getColumnsByDatabaseName(),s=e.some(c=>c.includes("*")),a=[];for(let c of e){if(c.toLowerCase().includes(" as ")){let y=c.match(/\s+as\s+(.+)$/i);y&&a.push(y[1].trim());continue}let p=c;if(p.includes(".")&&(p=p.split(".").pop()),p==="*")continue;let h=n.get(p)?.columnName??p;a.push(h);}let l=a.length?new Set(a):null,u=new Set(r),d=i.map(c=>Eh(c,t,n,o,l,s,u));return d.length===1?d[0]:d};var Tt=class{constructor(t){this.observers=t??[];}add(t){this.observers.push(t);}async notifyBefore(t){for(let e of this.observers)e?.onBeforeQuery&&await e.onBeforeQuery(t);}async notifyAfter(t,e){for(let r of this.observers)r?.onAfterQuery&&(t.result??(t.result=e),await r.onAfterQuery(t));}async notifyError(t){for(let e of this.observers)e?.onQueryError&&await e.onQueryError(t);}},Ky=i=>{if(!i)return "OTHER";let t=i.trim().toUpperCase();return t.startsWith("SELECT")?"SELECT":t.startsWith("INSERT")?"INSERT":t.startsWith("UPDATE")?"UPDATE":t.startsWith("DELETE")?"DELETE":"OTHER"};var fr=se();function Il(i){let t=fr.timing.now()-i;return Math.round(t*100)/100}var Y=async(i,t,e,r,n="rows",o)=>{await e.ensureConnected();let s={id:fr.crypto.randomUUID(),sql:i,params:t,model:void 0,operation:Ky(i),timestamp:fr.timing.now()};try{let u=e.observerChain;u&&typeof u.notifyBefore=="function"&&await u.notifyBefore(s);}catch{}let a=fr.timing.now(),l=u=>{o?.shouldNotLog||ft(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=o?.timeout,c=d?new AbortController:void 0,m,p=Ph(()=>u.execute(i,t,{returning:n,sqlLiteOptions:o?.sqlLiteOptions,signal:c?.signal,connection:e.sqlConnection}),e.inputDetails.connectionPolicies?.retry,e.logs),h;try{d&&c?(h=await Promise.race([p,new Promise((y,T)=>{m=setTimeout(()=>{let w=new g("ExecSql::timeout","QUERY_TIMEOUT",new Error(`Query exceeded the ${d.ms}ms timeout`));d.cancel&&c.abort(w),T(w);},d.ms);})]),p.catch(()=>{})):h=await p;}finally{m&&clearTimeout(m);}try{let y=Il(a),T=e.observerChain;if(T&&typeof T.notifyAfter=="function"){let w={...s,duration:y,result:h};await T.notifyAfter(w);}}catch{}return l(Il(a)),u.extract(h,n)}catch(u){throw l(Il(a)),u}},hr=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 Ph(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++,ed(`Retrying sql in ${o}ms (attempt ${r}/${n})`,"info",e),await new Promise(l=>setTimeout(l,o)),s();throw a}}return s()}function Qy(){return {}}var Xe=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=Qy(),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 te(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:ct(this.sqlDataSource,u.sql),bindings:u.bindings}},l=()=>{let{sql:u,bindings:d}=a();return dt(u,d)};return new Z(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,x)=>{let C=d[x];c[N]=C,t[N]??(t[N]=C);});let m=!e.returning||e.returning.length===0,{sql:p,bindings:h}=this.astParser.parse([new te(new V(this.model.table),[c],e.returning,m)]),y=await Y(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?fe([T],this.model,e.returning):t})}insertMany(t,e={}){let r=t.map(u=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(u).map(d=>[d,u[d]])))),n=!e.returning||e.returning.length===0,o=new te(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:ct(this.sqlDataSource,u.sql),bindings:u.bindings}},l=()=>{let{sql:u,bindings:d}=a();return dt(u,d)};return new Z(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),x={};return w.forEach((C,$)=>{let D=N[$];x[C]=D,T[C]??(T[C]=D);}),x}),d=!e.returning||e.returning.length===0,{sql:c,bindings:m}=this.astParser.parse([new te(new V(this.model.table),u,e.returning,d)]),p=await Y(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?fe(h,this.model,e.returning)||[]:[]})}upsertMany(t,e,r,n={updateOnConflict:true}){let o=this.interpreterUtils.filterComputedColumns(e),s=r.map(p=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(p).map(h=>[h,p[h]])))),a=new te(new V(this.model.table),s,void 0,true),l=n.returning?.length&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?n.returning:void 0;new qe(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:ct(this.sqlDataSource,p.sql),bindings:p.bindings}},m=()=>{let{sql:p,bindings:h}=c();return dt(p,h)};return new Z(d,c,m,async()=>{let p=r.map(D=>{let{columns:A,values:Q}=this.interpreterUtils.prepareColumns(Object.keys(D),Object.values(D),"insert",this.sqlType);return Object.fromEntries(A.map((ue,E)=>[ue,Q[E]]))});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 te(new V(this.model.table),p,void 0,true),new qe(this.model.table,t,o,n.updateOnConflict??true?"update":"ignore",y)]),N=await Y(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 Q=t[0],ue=r.map(ne=>ne[Q]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(Q,ue).many()}return fe(N,this.model,n.returning)||[]}let x=t[0],C=r.map(D=>D[x]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(x,C).many()})}async executeMssqlMerge(t,e,r,n,o){if(!t.length)return [];let s=Object.keys(t[0]),a=this.interpreterUtils.formatStringColumn("mssql",this.model.table),l=D=>this.interpreterUtils.formatStringColumn("mssql",D),u=[],d=t.map(D=>`select ${s.map(Q=>(u.push(D[Q]),`@${u.length}`)).join(", ")}`),c=s.map(l).join(", "),m=d.join(" union all "),p=e.map(D=>`target.${l(D)} = source.${l(D)}`).join(" and "),h=r.filter(D=>!e.includes(D)).map(D=>`target.${l(D)} = source.${l(D)}`).join(", "),y=s.map(l).join(", "),T=s.map(D=>`source.${l(D)}`).join(", "),w=n.returning&&n.returning.length?n.returning.map(D=>`inserted.${l(D)}${this.interpreterUtils.resolveColumnAlias("mssql",D)}`).join(", "):s.map(D=>`inserted.${l(D)}${this.interpreterUtils.resolveColumnAlias("mssql",D)}`).join(", "),x=(n.updateOnConflict??true)&&h?`when matched then update set ${h}`:"",C=`merge into ${a} as target using (${m}) as source (${c}) on ${p} ${x} when not matched then insert (${y}) values (${T}) output ${w};`,$=await Y(C,u,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});if($.length===0&&!(n.updateOnConflict??true)){let D=e[0],A=o.map(ue=>ue[D]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(D,A).many()}return $}async updateRecord(t,e,r){let n=new Set(this.model.getColumns().map(w=>w.columnName)),o=Object.keys(e).filter(w=>n.has(w)),s=o.map(w=>e[w]),{columns:a,values:l}=this.interpreterUtils.prepareColumns(o,s,"update",this.sqlType),{primaryKey:u}=this.model;if(!u)throw new 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 Ie(new V(this.model.table),a,l),new M(u,"and",false,"=",t),...m?[new bt(c)]:[]]),y=await Y(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 fe([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 gt(new V(this.model.table)),e]);await Y(r,n,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new Fe(this.model,this.sqlDataSource);return this.replicationMode&&t.setReplicationMode(this.replicationMode),t}async handleMysqlInsert(t,e,r,n){if(!this.model.primaryKey){if(r==="one"){let a=e.length?e[0]:null;return a?fe([a],this.model):null}return fe(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(d=>d[this.model.primaryKey]),l=a.map(d=>`'${d}'`).join(","),u=await this.query().select(...n??["*"]).whereIn(this.model.primaryKey,a).orderByRaw(`FIELD(${this.model.primaryKey}, ${l})`).many();return r==="one"?u.length?u[0]:null:u}let o=Array.from({length:t.affectedRows},(a,l)=>l+t.insertId),s=await this.query().select(...n||["*"]).whereIn(this.model.primaryKey,o).many();return r==="one"?s.length?s[0]:null:s}handleWhereCondition(t,e,r=false){if(e)for(let[n,o]of Object.entries(e))n==="$and"&&Array.isArray(o)?t[r?"orWhere":"where"](a=>{for(let l of o)this.handleWhereCondition(a,l,false);}):n==="$or"&&Array.isArray(o)?t[r?"orWhere":"where"](a=>{let l=true;for(let u of o)this.handleWhereCondition(a,u,!l),l=false;}):this.applyFieldCondition(t,n,o,r);}applyFieldCondition(t,e,r,n=false){if(r==null||typeof r!="object"){r===null?n?t.orWhereNull(e):t.whereNull(e):n?t.orWhere(e,"=",r):t.where(e,"=",r);return}let o=r,s=o.op,a=o.value;switch(s){case "$eq":a===null?n?t.orWhereNull(e):t.whereNull(e):n?t.orWhere(e,"=",a):t.where(e,"=",a);break;case "$ne":a===null?n?t.orWhereNotNull(e):t.whereNotNull(e):n?t.orWhere(e,"!=",a):t.where(e,"!=",a);break;case "$gt":n?t.orWhere(e,">",a):t.where(e,">",a);break;case "$gte":n?t.orWhere(e,">=",a):t.where(e,">=",a);break;case "$lt":n?t.orWhere(e,"<",a):t.where(e,"<",a);break;case "$lte":n?t.orWhere(e,"<=",a):t.where(e,"<=",a);break;case "$between":{let[l,u]=a;n?t.orWhereBetween(e,l,u):t.whereBetween(e,l,u);break}case "$not between":{let[l,u]=a;n?t.orWhereNotBetween(e,l,u):t.whereNotBetween(e,l,u);break}case "$regexp":n?t.orWhereRegexp(e,a):t.whereRegexp(e,a);break;case "$not regexp":n?t.orWhereNotRegexp(e,a):t.whereNotRegexp(e,a);break;case "$is null":n?t.orWhereNull(e):t.whereNull(e);break;case "$is not null":n?t.orWhereNotNull(e):t.whereNotNull(e);break;case "$like":n?t.orWhereLike(e,a):t.whereLike(e,a);break;case "$not like":n?t.orWhereNotLike(e,a):t.whereNotLike(e,a);break;case "$ilike":n?t.orWhereILike(e,a):t.whereILike(e,a);break;case "$not ilike":n?t.orWhereNotILike(e,a):t.whereNotILike(e,a);break;case "$in":n?t.orWhereIn(e,a):t.whereIn(e,a);break;case "$nin":n?t.orWhereNotIn(e,a):t.whereNotIn(e,a);break;default:n?t.orWhere(e,"=",r):t.where(e,"=",r);}}};var Qt=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 gr(i,t,e){return {total:e,perPage:t,currentPage:i,firstPage:1,isEmpty:e===0,lastPage:Math.max(1,Math.ceil(e/t)),hasMorePages:i<Math.max(1,Math.ceil(e/t)),hasPages:e>t}}var wt=i=>typeof i=="number"?i:parseFloat(i);var br=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var Ce=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var St=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var Tr=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 he=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 wr=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var Re=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var kt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var Sr=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var Nt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var Nr=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 qr=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 Cr=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var qt=class extends S{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="set_table_options";this.engine=e.engine,this.charset=e.charset,this.collate=e.collate;}};var K=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 Lt=class extends S{constructor(e,r=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="comment";this.file="comment";this.value=e,this.isHint=r;}};var H=class extends S{constructor(e,r={},n=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="constraint";this.constraintType=e,this.columns=r.columns,this.references=r.references,this.constraintName=r.constraintName,this.onDelete=r.onDelete,this.onUpdate=r.onUpdate,this.defaultValue=r.defaultValue,this.checkExpression=r.checkExpression,this.isRawValue=n;}};var Rr=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 _r=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 Mr=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 Or=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 Ar=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 et=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 xr=class extends S{constructor(e,r=[],n=[]){super("window");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="window";this.file="window";this.fn=e,this.partitionBy=r,this.orderBy=n;}};function ky(i){return i?Array.isArray(i)?i:[i]:[]}function Ly(i){return i?(Array.isArray(i)?i:[i]).map(e=>typeof e=="string"?{column:e}:e):[]}var Ee=class extends S{constructor(e,r=false,n="union"){super(r?`${n} all`:n);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="union";this.file="union";this.query=e,this.isAll=r,this.type=n;}};var 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 Ct=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 X=class extends S{constructor(e,r,n=false,o,s,a=false,l,u){super("having",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="having";this.file="having";this.column=e,this.chainsWith=` ${r}`,this.isNegated=n,this.operator=o,this.value=s,this.subquery=l,this.group=u;}};var Dr=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 Ue=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 oe=class extends S{constructor(e,r,n,o="inner",s,a=false,l){super(`${o} join`,a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="join";this.file="join";this.type="inner";this.table=e,this.left=r,this.right=n,this.type=o,this.on=s,this.additionalConditions=l;}};var Wt=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 vr=class extends S{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var Ir=class extends S{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var jt=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 Pr=class Pr{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=Pr.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 Wt(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Wt(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new jt(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new jt(t,"asc",true)),this}limit(t){return typeof t!="number"&&_.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new vr(t),this}offset(t){return typeof t!="number"&&_.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new Ir(t),this}};Pr.EMPTY_MAP=new Map;var Er=Pr;var rt=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 De(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 De(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 Br=class extends Er{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new oe(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new oe(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new oe(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new oe(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new oe(t,"","","cross",{operator:"="},true)),this}crossJoin(t,e){let r=typeof t=="string"?t:t.table;return this.joinNodes.push(new oe(e?`${r} as ${e}`:r,"","","cross",{operator:"="})),this}using(...t){let e=this.joinNodes[this.joinNodes.length-1];if(!e||!t.length||e.isRawValue||e.type==="cross"||e.type==="natural")throw new g("JoinQueryBuilder::using","USING_REQUIRES_JOIN");return e.using=t.map(r=>String(r)),this}naturalJoinRaw(t){return this.joinNodes.push(new oe(t,"","","natural",{operator:"="},true)),this}innerJoin(t,e,r,n,o){if(e===void 0)return this.join(typeof t=="string"?t:t.table);let s=r,a=n,l=typeof n=="function"?n:o;if(!s){if(!this.model.primaryKey)throw new 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){if(e===void 0)return this.joinNodes.push(new oe(typeof t=="string"?t:t.table,"","","inner",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new g("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new rt(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new oe(typeof t=="string"?t:t.table,e,s,"inner",{operator:a||"="},false,u)),this}leftJoin(t,e,r,n,o){if(e===void 0)return this.joinNodes.push(new oe(typeof t=="string"?t:t.table,"","","left",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new g("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new rt(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new oe(typeof t=="string"?t:t.table,e,s,"left",{operator:a||"="},false,u)),this}rightJoin(t,e,r,n,o){if(e===void 0)return this.joinNodes.push(new oe(typeof t=="string"?t:t.table,"","","right",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new g("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new rt(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new oe(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 rt(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new oe(typeof t=="string"?t:t.table,e,s,"full",{operator:a||"="},false,u)),this}};var Bh=/\bas\s+"?([A-Za-z_][A-Za-z0-9_]*)"?\s*(?:,|$)/gi,Kh=/^[A-Za-z_][A-Za-z0-9_.]*$/,Qh=i=>{let t=[];for(let e of i.matchAll(Bh))t.push(e[1]);if(!t.length){let e=i.trim();Kh.test(e)&&t.push(e.split(".").pop());}return t},Kr=class extends Br{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.userOutputColumns=[];this.dbType=r.getDbType(),this.fromNode=new V(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return e.forEach(r=>{if(Array.isArray(r)){let[a,l]=r;this.modelSelectedColumns.push(l),this.userOutputColumns.push(l);let u=this.resolveComputedColumn(a);if(u){this.selectNodes.push(new G(`(${u.expression}) as ${l}`,void 0,void 0,true));return}let d=J(a,this.model.databaseCaseConvention);this.selectNodes.push(new G(d,l));return}let n=r;this.modelSelectedColumns.push(n);let o=this.resolveComputedColumn(n);if(o){this.selectNodes.push(new G(`(${o.expression}) as ${o.alias}`,void 0,void 0,true));return}let s=J(n,this.model.databaseCaseConvention);this.selectNodes.push(new G(s));}),this}selectRaw(e){return this.selectNodes.push(new G(e,void 0,void 0,true)),this.userOutputColumns.push(...Qh(e)),this}collectUserOutputNames(){let e=new Set(this.userOutputColumns);for(let r of this.selectNodes)r.alias&&e.add(r.alias);return [...e]}selectFunc(e,r,n){return this.selectNodes.push(new G(r,n,e)),this}countDistinct(e,r){return this.selectNodes.push(new G(e,r,"count",false,true)),this}sumDistinct(e,r){return this.selectNodes.push(new G(e,r,"sum",false,true)),this}avgDistinct(e,r){return this.selectNodes.push(new G(e,r,"avg",false,true)),this}rank(e,r={}){return this.pushWindow("rank",e,r)}denseRank(e,r={}){return this.pushWindow("dense_rank",e,r)}rowNumber(e,r={}){return this.pushWindow("row_number",e,r)}pushWindow(e,r,n){return this.selectNodes.push(new G(new xr(e,ky(n.partitionBy),Ly(n.orderBy)),r)),this}clearSelect(){return this.modelSelectedColumns=[],this.userOutputColumns=[],this.selectNodes=[],this}resolveComputedColumn(e){let r=this.model.getColumnsByName?.();if(!r||r.size===0)return;let n=e.includes(".")?e.split(".").pop():e,o=r.get(n);if(o?.expression)return {expression:o.expression,alias:o.databaseName||n}}clearFrom(){return this.fromNode=new V(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new V(e),this}distinct(){return this.distinctNode=new Dr,this}distinctOn(...e){return this.distinctOnNode=new $r(e),this}selectJson(e,r,n){return this.selectNodes.push(new Ue(e,r,n,"extract")),this}selectJsonText(e,r,n){return this.selectNodes.push(new Ue(e,r,n,"extract_text")),this}selectJsonArrayLength(e,r,n){return this.selectNodes.push(new Ue(e,r,n,"array_length")),this}selectJsonKeys(e,r,n){return this.selectNodes.push(new Ue(e,r,n,"object_keys")),this}selectJsonRaw(e,r){return this.selectNodes.push(new Ue(e,"",r,"raw",true)),this}};var Qr=class extends Kr{constructor(e,r,n=false){super(e,r);this.isNestedCondition=false;this.whereNodes=[],this.havingNodes=[],this.isNestedCondition=n;}clearWhere(){return this.whereNodes=[],this}clearHaving(){return this.havingNodes=[],this}strictWhen(e,r){return e==null?this:(r(this),this)}when(e,r){return e?(r(this),this):this}where(e,r,n){return typeof e=="function"?this.andWhereGroup(e):typeof r=="function"&&n===void 0?this.andWhereSubQuery(e,"in",r):r instanceof B&&n===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function")?this.andWhereSubQuery(e,r,n):this.andWhere(e,r,n)}andWhere(e,r,n){if(typeof e=="function")return this.andWhereGroup(e);if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new M(e,"and",false,o,s)),this}orWhere(e,r,n){if(typeof e=="function")return this.orWhereGroup(e);if(typeof r=="function"&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(r instanceof B&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new M(e,"or",false,o,s)),this}whereColumn(e,r,n){return this.andWhereColumn(e,r,n)}andWhereColumn(e,r,n){let o="=",s;return n!==void 0?(o=r,s=n):s=r,this.whereNodes.push(new M(e,"and",false,o,new O(s))),this}orWhereColumn(e,r,n){let o="=",s;return n!==void 0?(o=r,s=n):s=r,this.whereNodes.push(new M(e,"or",false,o,new O(s))),this}whereNotColumn(e,r,n){return this.andWhereNotColumn(e,r,n)}andWhereNotColumn(e,r,n){return this.pushNotColumnWhere("and",e,r,n)}orWhereNotColumn(e,r,n){return this.pushNotColumnWhere("or",e,r,n)}pushNotColumnWhere(e,r,n,o){let s="!=",a=false,l;return o!==void 0?(s=n,l=o,a=true):l=n,this.whereNodes.push(new M(r,e,a,s,new O(l))),this}whereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new M(e,"and",true,o,s)),this}andWhereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new M(e,"and",true,o,s)),this}orWhereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new M(e,"or",true,o,s)),this}whereBetween(e,r,n){return this.andWhereBetween(e,r,n)}andWhereBetween(e,r,n){return this.whereNodes.push(new M(e,"and",false,"between",[r,n])),this}orWhereBetween(e,r,n){return this.whereNodes.push(new M(e,"or",false,"between",[r,n])),this}whereNotBetween(e,r,n){return this.andWhereNotBetween(e,r,n)}andWhereNotBetween(e,r,n){return this.whereNodes.push(new M(e,"and",true,"between",[r,n])),this}orWhereNotBetween(e,r,n){return this.whereNodes.push(new M(e,"or",true,"between",[r,n])),this}whereLike(e,r){return this.andWhereLike(e,r)}andWhereLike(e,r){return this.where(e,"like",r),this}orWhereLike(e,r){return this.orWhere(e,"like",r),this}whereILike(e,r){return this.andWhereILike(e,r)}andWhereILike(e,r){return this.where(e,"ilike",r),this}orWhereILike(e,r){return this.orWhere(e,"ilike",r),this}whereNotLike(e,r){return this.andWhereNotLike(e,r)}andWhereNotLike(e,r){return this.where(e,"not like",r),this}orWhereNotLike(e,r){return this.orWhere(e,"not like",r),this}whereNotILike(e,r){return this.andWhereNotILike(e,r)}andWhereNotILike(e,r){return this.where(e,"not ilike",r),this}orWhereNotILike(e,r){return this.orWhere(e,"not ilike",r),this}whereIn(e,r){return this.andWhereIn(e,r)}andWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new M(e,"and",false,"in",r)),this):(this.whereNodes.push(new M("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new M(e,"or",false,"in",r)),this):(this.whereNodes.push(new M("false","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"in",r)}whereNotIn(e,r){return this.andWhereNotIn(e,r)}andWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new M(e,"and",true,"in",r)),this):(this.whereNodes.push(new M("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new M(e,"or",true,"in",r)),this):(this.whereNodes.push(new M("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new M(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new M(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new M(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new M(e,"or",false,"is not null",void 0)),this}whereRegexp(e,r){return this.andWhereRegexp(e,r)}andWhereRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new M(e,"and",false,n?"~":"regexp",r.source)),this}orWhereRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new M(e,"or",false,n?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new M(e,"and",true,n?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new M(e,"and",true,n?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new M(e,"or",true,n?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ne("","exists",r.extractQueryNodes(),"and")),this}orWhereExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ne("","exists",r.extractQueryNodes(),"or")),this}whereNotExists(e){return this.andWhereNotExists(e)}andWhereNotExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ne("","not exists",r.extractQueryNodes(),"and")),this}orWhereNotExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Ne("","not exists",r.extractQueryNodes(),"or")),this}whereRaw(e,r=[]){return this.andWhereRaw(e,r)}andWhereRaw(e,r=[]){return this.whereNodes.push(new M(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new M(e,"or",false,"=",r,true)),this}having(e,r,n){return this.andHaving(e,r,n)}andHaving(e,r,n){let o="=",s;return typeof r=="string"&&n?(o=r,s=n):(s=r,o="="),this.havingNodes.push(new X(e,"and",false,o,s)),this}orHaving(e,r,n){let o="=",s;return typeof r=="string"&&n?(o=r,s=n):(s=r,o="="),this.havingNodes.push(new X(e,"or",false,o,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new X(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new X(e,"or",false,"=",[],true)),this}havingNull(e){return this.andHavingNull(e)}andHavingNull(e){return this.havingNodes.push(new X(e,"and",false,"is null",void 0)),this}orHavingNull(e){return this.havingNodes.push(new X(e,"or",false,"is null",void 0)),this}havingNotNull(e){return this.andHavingNotNull(e)}andHavingNotNull(e){return this.havingNodes.push(new X(e,"and",false,"is not null",void 0)),this}orHavingNotNull(e){return this.havingNodes.push(new X(e,"or",false,"is not null",void 0)),this}havingIn(e,r){return this.andHavingIn(e,r)}andHavingIn(e,r){return this.pushHavingIn("and",e,r,false)}orHavingIn(e,r){return this.pushHavingIn("or",e,r,false)}havingNotIn(e,r){return this.andHavingNotIn(e,r)}andHavingNotIn(e,r){return this.pushHavingIn("and",e,r,true)}orHavingNotIn(e,r){return this.pushHavingIn("or",e,r,true)}havingBetween(e,r){return this.andHavingBetween(e,r)}andHavingBetween(e,r){return this.havingNodes.push(new X(e,"and",false,"between",r)),this}orHavingBetween(e,r){return this.havingNodes.push(new X(e,"or",false,"between",r)),this}havingNotBetween(e,r){return this.andHavingNotBetween(e,r)}andHavingNotBetween(e,r){return this.havingNodes.push(new X(e,"and",false,"not between",r)),this}orHavingNotBetween(e,r){return this.havingNodes.push(new X(e,"or",false,"not between",r)),this}havingExists(e){return this.andHavingExists(e)}andHavingExists(e){return this.pushHavingExists("and",e,false)}orHavingExists(e){return this.pushHavingExists("or",e,false)}havingNotExists(e){return this.andHavingNotExists(e)}andHavingNotExists(e){return this.pushHavingExists("and",e,true)}orHavingNotExists(e){return this.pushHavingExists("or",e,true)}havingWrapped(e){return this.andHavingWrapped(e)}andHavingWrapped(e){return this.pushHavingGroup("and",e)}orHavingWrapped(e){return this.pushHavingGroup("or",e)}pushHavingIn(e,r,n,o){let s=o?"not in":"in";if(Array.isArray(n))return this.havingNodes.push(new X(r,e,false,s,n)),this;let a=this.buildSubQuery(n);return this.havingNodes.push(new X(r,e,false,s,[],false,a.extractQueryNodes())),this}pushHavingExists(e,r,n){let o=r instanceof B?r:new B(this.model,this.sqlDataSource);return o.isNestedCondition=true,typeof r=="function"&&r(o),this.havingNodes.push(new X("",e,false,n?"not exists":"exists",[],false,o.extractQueryNodes())),this}pushHavingGroup(e,r){let n=new B(this.model,this.sqlDataSource);return n.isNestedCondition=true,r(n),this.havingNodes.push(new X("",e,false,"=",[],false,void 0,n.havingNodes)),this}buildSubQuery(e){if(e instanceof B)return e;let r=new B(this.model,this.sqlDataSource),n=e(r);return n!=null&&"extractQueryNodes"in n?n:r}andWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new Ne(e,r,o.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new Ne(e,r,o.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new B(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new De(r.whereNodes,"and");return this.whereNodes.push(n),this}orWhereGroup(e){let r=new B(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new De(r.whereNodes,"or");return this.whereNodes.push(n),this}};var kr=class extends Qr{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new U(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new U(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new U(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new U(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new U(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new U(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new U(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new U(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new U(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new U(t,"or",false,"raw",e)),this}whereJsonObject(t,e){return this.andWhereJsonObject(t,e)}andWhereJsonObject(t,e){return this.whereNodes.push(new U(t,"and",false,"=",e)),this}orWhereJsonObject(t,e){return this.whereNodes.push(new U(t,"or",false,"=",e)),this}whereNotJsonObject(t,e){return this.andWhereNotJsonObject(t,e)}andWhereNotJsonObject(t,e){return this.whereNodes.push(new U(t,"and",true,"=",e)),this}orWhereNotJsonObject(t,e){return this.whereNodes.push(new U(t,"or",true,"=",e)),this}whereJsonPath(t,e,r,n){return this.andWhereJsonPath(t,e,r,n)}andWhereJsonPath(t,e,r,n){return this.pushJsonPath("and",t,e,r,n,false),this}orWhereJsonPath(t,e,r,n){return this.pushJsonPath("or",t,e,r,n,false),this}whereJsonSupersetOf(t,e){return this.andWhereJsonSupersetOf(t,e)}andWhereJsonSupersetOf(t,e){return this.whereNodes.push(new U(t,"and",false,"contains",e)),this}orWhereJsonSupersetOf(t,e){return this.whereNodes.push(new U(t,"or",false,"contains",e)),this}whereJsonNotSupersetOf(t,e){return this.andWhereJsonNotSupersetOf(t,e)}andWhereJsonNotSupersetOf(t,e){return this.whereNodes.push(new U(t,"and",true,"contains",e)),this}orWhereJsonNotSupersetOf(t,e){return this.whereNodes.push(new U(t,"or",true,"contains",e)),this}whereJsonSubsetOf(t,e){return this.andWhereJsonSubsetOf(t,e)}andWhereJsonSubsetOf(t,e){return this.whereNodes.push(new U(t,"and",false,"subset",e)),this}orWhereJsonSubsetOf(t,e){return this.whereNodes.push(new U(t,"or",false,"subset",e)),this}whereJsonNotSubsetOf(t,e){return this.andWhereJsonNotSubsetOf(t,e)}andWhereJsonNotSubsetOf(t,e){return this.whereNodes.push(new U(t,"and",true,"subset",e)),this}orWhereJsonNotSubsetOf(t,e){return this.whereNodes.push(new U(t,"or",true,"subset",e)),this}whereJsonHasNone(t,e){return this.andWhereJsonHasNone(t,e)}andWhereJsonHasNone(t,e){return this.whereNodes.push(new U(t,"and",false,"has none",e)),this}orWhereJsonHasNone(t,e){return this.whereNodes.push(new U(t,"or",false,"has none",e)),this}pushJsonPath(t,e,r,n,o,s){let a=new U(e,t,s,"path",o,false,r,n);this.whereNodes.push(a);}};var B=class i extends kr{constructor(e,r){super(e,r);this.isNestedCondition=false;this._interpreterUtils=null;this.insertNode=null;this.onDuplicateNode=null;this.updateNode=null;this.deleteNode=null;this.returningNode=null;this.truncateNode=null;this.replicationMode=null;this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.comments=[],this.hints=[],this.astParser=new b(this.model,this.dbType);}get interpreterUtils(){return this._interpreterUtils||(this._interpreterUtils=new 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 G(a.extractQueryNodes(),n)),this}return this.selectNodes.push(new G(r.extractQueryNodes(),n)),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}clearSelect(){return super.clearSelect(),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}countDistinct(e,r){return super.countDistinct(e,r),this}sumDistinct(e,r){return super.sumDistinct(e,r),this}avgDistinct(e,r){return super.avgDistinct(e,r),this}rank(e,r){return super.rank(e,r),this}denseRank(e,r){return super.denseRank(e,r),this}rowNumber(e,r){return super.rowNumber(e,r),this}async exists(){return !!await this.one()}async many(){let{sql:e,bindings:r}=this.unWrap();return this.execSqlWithSlaveHandling("read",n=>Y(e,r,n,this.dbType,"rows",{timeout:this.queryTimeout,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 hr(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 et("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new et("for_share",e.skipLocked,e.noWait)),this}forNoKeyUpdate(e={}){return this.assertPgLockStrength("forNoKeyUpdate","FOR NO KEY UPDATE"),this.lockQueryNodes.push(new et("for_no_key_update",e.skipLocked,e.noWait)),this}forKeyShare(e={}){return this.assertPgLockStrength("forKeyShare","FOR KEY SHARE"),this.lockQueryNodes.push(new et("for_key_share",e.skipLocked,e.noWait)),this}assertPgLockStrength(e,r){if(this.dbType!=="postgres")throw new g(`QueryBuilder::${e}`,`LOCK_STRENGTH_NOT_SUPPORTED_IN_${this.dbType.toUpperCase()}`,new Error(`${r} is only supported by postgres`))}timeout(e,r={}){return this.queryTimeout={ms:e,cancel:r.cancel??false},this}comment(e){return this.assertValidSqlComment(e),this.comments.push(e),this}hintComment(e){this.assertValidSqlComment(e);let r=e.slice(3,-2).trim(),n=this.hints[0];return this.hints=[n?`${n.slice(0,-2).trimEnd()} ${r} */`:`/*+ ${r} */`],this}clearComment(){return this.comments=[],this}clearHintComment(){return this.hints=[],this}assertValidSqlComment(e){let r=()=>{throw new g("QueryBuilder::comment","INVALID_SQL_COMMENT")};(!e.trim().length||e.includes("?"))&&r();let n=(this.dbType==="mysql"||this.dbType==="mariadb")&&e.startsWith("#");if(e.startsWith("--")||n){/[\r\n]/.test(e)&&r();return}if(e.startsWith("/*")&&e.endsWith("*/")&&e.length>=4){let o=e.slice(2,-2);(o.includes("/*")||o.includes("*/"))&&r();return}r();}union(e){if(typeof e=="string")return this.unionNodes.push(new Ee(e)),this;let n=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Ee(n)),this}unionAll(e){if(typeof e=="string")return this.unionNodes.push(new Ee(e,true)),this;let n=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Ee(n,true)),this}intersect(e){return this.unionNodes.push(new Ee(this.resolveSetOperationNodes(e),false,"intersect")),this}except(e){return this.unionNodes.push(new Ee(this.resolveSetOperationNodes(e),false,"except")),this}resolveSetOperationNodes(e){return typeof e=="string"?e:(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes()}increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?wt(r.total):0}needsDerivedTableCount(){return this.groupByNodes.length>0||this.havingNodes.length>0||this.distinctNode!==null||this.distinctOnNode!==null}buildCountQuery(e="*"){if(!this.needsDerivedTableCount()){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);return}this.clearOrderBy(),this.clearLimit(),this.clearOffset();let r=this.extractQueryNodes();this.withNodes=[],this.distinctNode=null,this.distinctOnNode=null,this.clearSelect(),this.fromNode=new V(r,"g"),this.joinNodes=[],this.whereNodes=[],this.groupByNodes=[],this.havingNodes=[],this.lockQueryNodes=[],this.unionNodes=[],this.comments=[],this.hints=[],this.selectRaw(`count(${e}) as total`);}async getMax(e){this.clearForFunctions(),this.selectFunc("max",e,"total");let r=await this.one();return r?wt(r.total):0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?wt(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?wt(r.total):0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?wt(r.total):0}async columnInfo(e){let r=typeof this.fromNode.table=="string"?this.fromNode.table:this.model.table,o=await(await this.getSqlDataSource("read")).getTableInfo(r);return e===void 0?o:o.find(s=>s.name===e)}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&_.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:gr(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}withSchema(e){return this.schemaName=e,this}fromRaw(e,r=[]){return this.fromNode=new V(new O(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}withNotMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new g("QueryBuilder::withNotMaterialized","NOT_MATERIALIZED_CTE_NOT_SUPPORTED",new Error("NOT MATERIALIZED CTE is only supported by postgres"));let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new tt("not materialized",e,s.extractQueryNodes())),this}insert(e,r){let n=Object.fromEntries(Object.keys(e).map(s=>[s,e[s]])),o=!r||r.length===0;return this.insertNode=new te(this.fromNode,[this.interpreterUtils.stripComputedFromData(n)],r,o),new Z(()=>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 te(this.fromNode,[l],r,o);let{sql:u,bindings:d}=this.astParser.parse([this.insertNode]),c=await this.getSqlDataSource("write"),m=await Y(u,d,c,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[e]}});if(!o)return Array.isArray(m)&&m.length?m[0]:m})}insertMany(e,r){let n=e.map(s=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(s).map(a=>[a,s[a]])))),o=!r||r.length===0;return this.insertNode=new te(this.fromNode,n,r,o),new Z(()=>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 te(this.fromNode,s,r,o);let{sql:a,bindings:l}=this.astParser.parse([this.insertNode]),u=await this.getSqlDataSource("write"),d=await Y(a,l,u,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:s}});if(!o)return d})}upsert(e,r,n={updateOnConflict:true}){let o=this.interpreterUtils.filterComputedColumns(Object.keys(e)),s=Object.keys(r),a=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(e).map(l=>[l,e[l]])));return this.insertNode=new te(new V(this.model.table),[a],void 0,true),this.onDuplicateNode=new qe(this.model.table,s,o,n.updateOnConflict??true?"update":"ignore",n.returning),new Z(()=>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 te(new V(this.model.table),[d],void 0,true),new qe(this.model.table,s,o,n.updateOnConflict??true?"update":"ignore",n.returning)]),p=await this.getSqlDataSource("write"),h=await Y(c,m,p,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:[e]}});return Array.isArray(h)?h:[h]})}upsertMany(e,r,n,o={updateOnConflict:true}){let s=this.interpreterUtils.filterComputedColumns(r),a=n.map(l=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(l).map(u=>[u,l[u]]))));return this.insertNode=new te(new V(this.model.table),a,void 0,true),this.onDuplicateNode=new qe(this.model.table,e,s,o.updateOnConflict??true?"update":"ignore",o.returning),new Z(()=>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 te(new V(this.model.table),l,void 0,true),new qe(this.model.table,e,s,o.updateOnConflict??true?"update":"ignore",o.returning)]),c=await this.getSqlDataSource("write"),m=await Y(u,d,c,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:n}});return Array.isArray(m)?m:[m]})}async executeMssqlMergeRaw(e,r,n,o,s){if(!e.length)return [];let a=Object.keys(e[0]),l=this.interpreterUtils.formatStringColumn("mssql",this.model.table),u=Q=>this.interpreterUtils.formatStringColumn("mssql",Q),d=[],c=e.map(Q=>`select ${a.map(E=>(d.push(Q[E]),`@${d.length}`)).join(", ")}`),m=a.map(u).join(", "),p=c.join(" union all "),h=r.map(Q=>`target.${u(Q)} = source.${u(Q)}`).join(" and "),y=n.filter(Q=>!r.includes(Q)).map(Q=>`target.${u(Q)} = source.${u(Q)}`).join(", "),T=a.map(u).join(", "),w=a.map(Q=>`source.${u(Q)}`).join(", "),N=o.returning&&o.returning.length?o.returning.map(Q=>`inserted.${u(Q)}`).join(", "):a.map(Q=>`inserted.${u(Q)}`).join(", "),C=(o.updateOnConflict??true)&&y?`when matched then update set ${y}`:"",$=`merge into ${l} as target using (${p}) as source (${m}) on ${h} ${C} when not matched then insert (${T}) values (${w}) output ${N};`,D=await this.getSqlDataSource("write"),A=await Y($,d,D,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(A)?A:[A]}update(e,r){let n=this.interpreterUtils.stripComputedFromData(e),o=Object.keys(n),s=Object.values(n);this.updateNode=new Ie(this.fromNode,o,s),this.returningNode=this.buildReturningNode("update",r);let a=this.returningNode!==null;return new Z(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:u}=this.interpreterUtils.prepareColumns(o,s,"update",this.dbType);this.updateNode=new Ie(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 Y(d,c,m,this.dbType,a?"rows":"affectedRows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:a?"fetch":"affectedRows"}})})}buildReturningNode(e,r){return !r?.length||!this.interpreterUtils.dialectEmitsReturning(this.dbType)?null:new bt(r,e==="delete"?"deleted":"inserted")}withReturningNode(e){if(!this.returningNode)return e;if(this.dbType==="mssql"){let[r,...n]=e;return [r,this.returningNode,...n]}return [...e,this.returningNode]}truncate(){return this.truncateNode=new Ct(this.fromNode),new Z(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:e,bindings:r}=this.astParser.parse([this.truncateNode]),n=await this.getSqlDataSource("write");await Y(e,r,n,this.dbType,"rows",{timeout:this.queryTimeout});})}delete(e){this.deleteNode=new gt(this.fromNode),this.returningNode=this.buildReturningNode("delete",e);let r=this.returningNode!==null;return new Z(()=>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 Y(n,o,s,this.dbType,r?"rows":"affectedRows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:r?"fetch":"affectedRows"}})})}softDelete(e={}){let{column:r="deletedAt",value:n=at()}=e||{};return this.updateNode=new Ie(this.fromNode,[r],[n]),new Z(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:o,values:s}=this.interpreterUtils.prepareColumns([r],[n],"update",this.dbType);this.updateNode=new Ie(this.fromNode,o,s);let{sql:a,bindings:l}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),u=await this.getSqlDataSource("write");return Y(a,l,u,this.dbType,"affectedRows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return dt(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),n=ct(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${n}`:n,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new G("*")]);let{sql:e,bindings:r}=this.astParser.parse(this.extractQueryNodes());return {sql:this.withQuery?`${this.withQuery} ${e}`:e,bindings:[...r||[]]}}clone(){let e=new i(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=j(this.modelSelectedColumns),e.distinctNode=j(this.distinctNode),e.distinctOnNode=j(this.distinctOnNode),e.selectNodes=j(this.selectNodes),e.withQuery=j(this.withQuery),e.joinNodes=j(this.joinNodes),e.whereNodes=j(this.whereNodes),e.groupByNodes=j(this.groupByNodes),e.havingNodes=j(this.havingNodes),e.orderByNodes=j(this.orderByNodes),e.lockQueryNodes=j(this.lockQueryNodes),e.unionNodes=j(this.unionNodes),e.withNodes=j(this.withNodes),e.comments=[...this.comments],e.hints=[...this.hints],e.schemaName=this.schemaName,e.fromNode=j(this.fromNode),e.limitNode=j(this.limitNode),e.offsetNode=j(this.offsetNode),e.returningNode=j(this.returningNode),e.isNestedCondition=this.isNestedCondition,e}clear(){let e=new i(this.model,this.sqlDataSource);return this.fromNode.alias&&e.table(e.model.table,this.fromNode.alias),e}clearLockQuery(){return this.lockQueryNodes=[],this}clearUnionQuery(){return this.unionNodes=[],this}clearWithQuery(){return this.withNodes=[],this}extractQueryNodes(){if(this.selectNodes.length||(this.selectNodes=[new G("*")]),this.schemaName){this.fromNode&&typeof this.fromNode.table=="string"&&(this.fromNode.schema=this.schemaName);for(let n of this.joinNodes)n.schema=this.schemaName;}if(this.insertNode)return [this.insertNode,this.onDuplicateNode].filter(Boolean);if(this.updateNode)return this.withReturningNode([this.updateNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode]).filter(Boolean);if(this.deleteNode)return this.withReturningNode([this.deleteNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode]).filter(Boolean);if(this.truncateNode)return [this.truncateNode];let e=this.comments.map(n=>new Lt(n)),r=this.hints.length?[new Lt(this.hints.join(" "),true)]:[];return [...this.withNodes,...e,this.distinctNode,this.distinctOnNode,...this.selectNodes,...r,this.fromNode,...this.joinNodes,...this.whereNodes,...this.groupByNodes,...this.havingNodes,...this.orderByNodes,this.limitNode,this.offsetNode,...this.lockQueryNodes,...this.unionNodes].filter(Boolean)}clearForFunctions(){return this.clearSelect(),this.clearGroupBy(),this.clearOrderBy(),this.clearLimit(),this.clearOffset(),this}isMssqlTransaction(){return this.sqlDataSource.type==="mssql"&&!!this.sqlDataSource.sqlConnection}async executePaginateQueries(e,r){if(this.isMssqlTransaction()){let n=await e(),o=await r();return [n,o]}return Promise.all([e(),r()])}async getSqlDataSource(e){return this.replicationMode?this.replicationMode==="master"?this.sqlDataSource:e==="write"?this.sqlDataSource:this.sqlDataSource.getSlave()||this.sqlDataSource:e==="read"?this.sqlDataSource.getSlave()||this.sqlDataSource:this.sqlDataSource}async execSqlWithSlaveHandling(e,r){let n=await this.getSqlDataSource(e);if(!(n!==this.sqlDataSource))return r(n);try{return await r(n)}catch(s){let a=s instanceof Error?s:new Error(String(s)),l=this.sqlDataSource.getOnSlaveServerFailure();if(l)return await l(a,{host:n.host,port:n.port,username:n.username,password:n.password,database:n.database,type:n.getDbType()}),await r(this.sqlDataSource);throw a}}};function Wy(i,t){return t.strategy&&t.strategy!=="auto"?t.strategy:kh(i)}function kh(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 El=se(),Fe=class i extends B{constructor(e,r){super(e,r);this.loadOptions={strategy:"auto"};this.sqlModelManagerUtils=new Qt(e,this.dbType,r),this.relationQueryBuilders=[],this.modelSelectedColumns=[],this.modelColumnsMap=this.model.getColumnsByDatabaseName(),this.modelColumnsDatabaseNames=new Map;for(let[n,o]of this.modelColumnsMap)this.modelColumnsDatabaseNames.set(n,o.columnName);}expandModelSelectColumns(){let e=this.selectNodes;if(!e.length){if(this.joinNodes.length)return;for(let[,r]of this.modelColumnsMap)r.expression||e.push(new G(r.databaseName,r.columnName));return}for(let r of e){if(r.isRawValue||r.alias!==void 0||typeof r.column!="string"||r.column.includes(".")||r.column==="*")continue;let n=this.modelColumnsMap.get(r.column);!n||n.expression||(r.alias=n.columnName);}}get isRelationQueryBuilder(){return !!this.relation}static from(e,r={}){if(r.connection)return new i(e,r.connection);if(r.trx)return new i(e,r.trx.sql);throw new Error("ModelQueryBuilder::from - A connection or transaction is required. Use sql.from(Model) instead.")}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async oneOrFail(e){let r=await this.one();if(!r)throw new g(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return r}async many(){await this.model.beforeFetch?.(this);let e=this.collectUserOutputNames();this.expandModelSelectColumns();let n=await super.many();if(!n.length)return [];let o=fe(n,this.model,this.modelSelectedColumns,e);if(!o)return [];let s=Array.isArray(o)?o:[o];return this.relationQueryBuilders.length&&await this.processRelationsWithStrategy(s),s}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async*chunk(e){let r=0;for(;;){let n=await this.limit(e).offset(r).many();if(!n.length)break;yield n,r+=n.length;}}async stream(e={}){await this.model.beforeFetch?.(this);let r=this.collectUserOutputNames();this.expandModelSelectColumns();let{sql:n,bindings:o}=this.unWrap(),s=await this.getSqlDataSource("read");return await hr(n,o,s,e,{onData:async(l,u)=>{let d=fe([u],this.model,this.modelSelectedColumns,r);d&&(this.relationQueryBuilders.length&&await this.processRelationsRecursively([d]),l.write(d));}})}async paginateWithCursor(e,r){return super.paginateWithCursor(e,r)}insert(e,r={}){return this.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 Xe(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=J(a.leftForeignKey,s.caseConvention||this.model.databaseCaseConvention),u=J(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 me{static get table(){return a.throughModel}}c.databaseCaseConvention="preserve",c.modelCaseConvention="preserve",await new Xe(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 Z(()=>o.unWrap(),()=>o.toSql(),()=>o.toQuery(),async()=>{if(!n||!this.returningNode)return o;let s=await o;return fe(s,this.model,n)})}softDelete(e={}){let r=super.softDelete(e);return new Z(()=>r.unWrap(),()=>r.toSql(),()=>r.toQuery(),async()=>r)}delete(e={}){let r=e.returning,n=super.delete(r);return new Z(()=>n.unWrap(),()=>n.toSql(),()=>n.toQuery(),async()=>{if(!r||!this.returningNode)return n;let o=await n;return fe(o,this.model,r)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?+r.total:0}async getMax(e){this.clearForFunctions(),this.selectFunc("max",e,"total");let r=await this.one();return r?+r.total:0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?+r.total:0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?+r.total:0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?+r.total:0}async paginate(e,r){let n=this.clone(),o=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>o.many(),()=>n.getCount("*"));return {paginationMetadata:gr(e,r,a),data:s}}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof B)&&typeof e[1]=="string"){let[r,n]=e;return super.select(r,n),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}countDistinct(e,r){return super.countDistinct(e,r),this}sumDistinct(e,r){return super.sumDistinct(e,r),this}avgDistinct(e,r){return super.avgDistinct(e,r),this}rank(e,r){return super.rank(e,r),this}denseRank(e,r){return super.denseRank(e,r),this}rowNumber(e,r){return super.rowNumber(e,r),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}load(e,r,n){let o,s={strategy:"auto"};typeof r=="function"?(o=r,n&&(s=n)):r&&typeof r=="object"&&(s=r);let a=this.sqlModelManagerUtils.getRelationFromModel(e),l=new i(a.model,this.sqlDataSource);return l.relation=a,l.loadOptions=s,o?.(l),this.relationQueryBuilders.push(l),this}clearRelations(){return this.relationQueryBuilders=[],this}havingRelated(e,r,n){return this.andHavingRelated(e,r,n)}andHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.whereExists(d),this}orHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.orWhereExists(d),this}notHavingRelated(e,r,n){return this.andNotHavingRelated(e,r,n)}andNotHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.whereNotExists(d),this}orNotHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.orWhereNotExists(d),this}clone(){let e=super.clone();return e.relationQueryBuilders=j(this.relationQueryBuilders),e}async processRelationsRecursively(e){await Promise.all(this.relationQueryBuilders.filter(r=>r.isRelationQueryBuilder).map(async r=>{let n=await this.getRelatedModelsForRelation(r,r.relation,e);this.mapRelatedModelsToModels(r.relation,e,n);}));}async processRelationsWithStrategy(e){let r=e.length,n=this.relationQueryBuilders.filter(s=>s.isRelationQueryBuilder),o=async s=>{let a=Wy({parentCount:r,relationType:s.relation.type,hasLimitOffset:!!s.limitNode||!!s.offsetNode,hasOrderBy:s.orderByNodes.length>0},s.loadOptions),l=s.relationQueryBuilders.length>0;a==="join"&&!l?await this.loadRelationViaJoin(s,e):await this.loadRelationViaBatch(s,e);};if(this.dbType==="mssql"){for(let s of n)await o(s);return}await Promise.all(n.map(o));}async loadRelationViaJoin(e,r){let n=e.relation,o=e.loadOptions.joinSeparator||"__",a=await this.buildJoinQuery(e,n,o).many();this.mapJoinedResultsToModels(a,r,n,o);}buildJoinQuery(e,r,n){let o=new i(this.model,this.sqlDataSource);if(this.modelSelectedColumns.length>0)for(let s of this.selectNodes)o.selectNodes.push(j(s));else for(let[s,a]of this.model.getColumnsByDatabaseName())a.expression||o.selectNodes.push(new G(`${this.model.table}.${s}`,void 0,void 0,true));for(let s of this.whereNodes){let a=j(s);this.qualifyWhereNodeColumns(a,this.model.table),o.whereNodes.push(a);}for(let s of this.groupByNodes)o.groupByNodes.push(j(s));for(let s of this.orderByNodes)o.orderByNodes.push(j(s));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(o.limitNode=j(this.limitNode)),this.offsetNode&&(o.offsetNode=j(this.offsetNode))),r.type){case "hasOne":case "hasMany":o.leftJoin(r.model.table,`${this.model.table}.${this.model.primaryKey}`,`${r.model.table}.${r.foreignKey}`);break;case "belongsTo":o.leftJoin(r.model.table,`${this.model.table}.${r.foreignKey}`,`${r.model.table}.${r.model.primaryKey}`);break;case "manyToMany":{let s=r;o.leftJoin(s.throughModel,`${this.model.table}.${this.model.primaryKey}`,`${s.throughModel}.${s.leftForeignKey}`),o.leftJoin(s.model.table,`${s.throughModel}.${s.rightForeignKey}`,`${s.model.table}.${s.model.primaryKey}`);break}}this.selectRelationColumnsWithAlias(o,r,e,n);for(let s of e.whereNodes)o.whereNodes.push(j(s));for(let s of e.orderByNodes)o.orderByNodes.push(j(s));return o}selectRelationColumnsWithAlias(e,r,n,o){let s=r.columnName,a=r.model,l=a.getColumnsByName(),u=a.getColumnsByDatabaseName(),d=n.selectNodes.filter(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 Ne)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof De)for(let n of e.nodes)this.qualifyWhereNodeColumns(n,r);}serializeRelationData(e,r){for(let n of Object.keys(e)){let o=r.get(n);o?.serialize&&e[n]!==null&&e[n]!==void 0&&(e[n]=o.serialize(e[n]));}}async loadRelationViaBatch(e,r){let n=await this.getRelatedModelsForRelation(e,e.relation,r);this.mapRelatedModelsToModels(e.relation,r,n);}mapRelatedModelsToModels(e,r,n){switch(e.type){case "hasOne":if(!this.model.primaryKey)throw new 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)||J(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=Qe(El.crypto.randomBytes(6)),u=`${r.model.table}_cte_${l}`,d=e.orderByNodes.map(A=>A.isRawValue?A.column:`${this.interpreterUtils.formatStringColumn(this.dbType,A.column)} ${A.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let c=e.with(u,A=>A.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${d}) as rn_${l}`).whereIn(r.foreignKey,o));s&&c.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&c.whereRaw(`rn_${l} > ${a}`);let m=e.modelSelectedColumns.map(A=>Qn(A,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(A=>A.includes(".")?A:`${r.model.table}.${A}`):[`${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=Qe(El.crypto.randomBytes(6)),N=`${r.model.table}_cte_${w}`,x=e.orderByNodes.map(A=>{if(A.isRawValue)return A.column;let Q=A.column.includes(".")?A.column:`${r.model.table}.${A.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,Q)} ${A.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let C=`${Qe(El.crypto.randomBytes(6))}_left_foreign_key`,$=e.with(N,A=>A.select(...T).select([`${p.throughModel}.${p.leftForeignKey}`,C]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${x}) as rn_${w}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o));h&&$.whereRaw(`rn_${w} <= ${h+(y||0)}`),y&&$.whereRaw(`rn_${w} > ${y}`);let D=T.map(A=>Qn(A,N,e.model.table));return $.select(...D).select([`${N}.${C}`,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 Pl=class{constructor(t,e,r){this.sqlDataSource=t,this.typeofModel=e,this.modelData=r;}merge(t){this.modelData={...this.modelData,...t};}getQueryBuilder(){return new Fe(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:["*"]})}},Lh=(i,t,e)=>new Pl(i,t,e);var Rt=new Map,Ve=new Map,Lr=class{async get(t){return Rt.get(t)}async set(t,e,r){let n=Ve.get(t);if(n&&(clearTimeout(n),Ve.delete(t)),Rt.set(t,e),r){let o=setTimeout(()=>{Rt.delete(t),Ve.delete(t);},r);Ve.set(t,o);}}async invalidate(t){let e=Ve.get(t);e&&(clearTimeout(e),Ve.delete(t)),Rt.delete(t);}async invalidateAll(t){let e=Rt.keys();for(let r of e)if(r.startsWith(t)){let n=Ve.get(r);n&&(clearTimeout(n),Ve.delete(r)),Rt.delete(r);}}};ce();var jy=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 L("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 re=se(),P={DB_TYPE:re.readEnv("DB_TYPE"),DB_HOST:re.readEnv("DB_HOST"),DB_PORT:re.readEnv("DB_PORT"),DB_USER:re.readEnv("DB_USER"),DB_PASSWORD:re.readEnv("DB_PASSWORD"),DB_DATABASE:re.readEnv("DB_DATABASE"),DB_LOGS:re.readEnv("DB_LOGS")==="true",MIGRATION_PATH:re.readEnv("MIGRATION_PATH")||"database/migrations",REDIS_HOST:re.readEnv("REDIS_HOST"),REDIS_PORT:re.readEnv("REDIS_PORT"),REDIS_USERNAME:re.readEnv("REDIS_USERNAME"),REDIS_PASSWORD:re.readEnv("REDIS_PASSWORD"),REDIS_DATABASE:re.readEnv("REDIS_DATABASE"),MONGO_URL:re.readEnv("MONGO_URL"),MONGO_LOGS:re.readEnv("MONGO_LOGS")==="true",MSSQL_TRUST_SERVER_CERTIFICATE:re.readEnv("MSSQL_TRUST_SERVER_CERTIFICATE")==="true"||false},Wh=()=>{try{if(!re.fs.exists(".env"))return P;let i=re.fs.readFileSync(".env");if(!i)return P;new TextDecoder().decode(i).split(`
142
- `).forEach(r=>{let[n,o]=r.split("="),s=n.trim(),a=o.trim();switch(s){case "DB_TYPE":P.DB_TYPE||(P.DB_TYPE=a);break;case "DB_HOST":P.DB_HOST||(P.DB_HOST=a);break;case "DB_PORT":P.DB_PORT||(P.DB_PORT=a);break;case "DB_USER":P.DB_USER||(P.DB_USER=a);break;case "DB_PASSWORD":P.DB_PASSWORD||(P.DB_PASSWORD=a);break;case "DB_DATABASE":P.DB_DATABASE||(P.DB_DATABASE=a);break;case "MIGRATION_PATH":P.MIGRATION_PATH||(P.MIGRATION_PATH=a||"database/migrations");break;case "REDIS_HOST":P.REDIS_HOST||(P.REDIS_HOST=a);break;case "REDIS_PORT":P.REDIS_PORT||(P.REDIS_PORT=a);break;case "REDIS_USERNAME":P.REDIS_USERNAME||(P.REDIS_USERNAME=a);break;case "REDIS_PASSWORD":P.REDIS_PASSWORD||(P.REDIS_PASSWORD=a);break;case "REDIS_DATABASE":P.REDIS_DATABASE||(P.REDIS_DATABASE=a);break;case "MONGO_URL":P.MONGO_URL||(P.MONGO_URL=a);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":P.MSSQL_TRUST_SERVER_CERTIFICATE||(P.MSSQL_TRUST_SERVER_CERTIFICATE=a==="true");break}});}catch{}finally{return P}},v=Wh();var _t=class{constructor(t){switch(this.type=t?.type||v.DB_TYPE,this.type){case "mongo":this.handleMongoSource(t);break;case "cockroachdb":this.handleCockroachdbSource(t);break;case "postgres":this.handlePostgresSource(t);break;case "mariadb":case "mysql":this.handleMysqlSource(t);break;case "sqlite":this.handleSqliteSource(t);break;case "mssql":this.handleMssqlSource(t);break;default:throw new 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
143
- Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}let e=yr(this.logs);e?.customLogger&&_.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||v.DB_HOST,this.port=+t?.port||+v.DB_PORT,this.username=t?.username||v.DB_USER,this.password=t?.password||v.DB_PASSWORD,this.database=t?.database||v.DB_DATABASE,this.logs=t?.logs||v.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||v.DB_HOST,this.port=+t?.port||+v.DB_PORT,this.username=t?.username||v.DB_USER,this.password=t?.password||v.DB_PASSWORD,this.database=t?.database||v.DB_DATABASE,this.logs=t?.logs||v.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||v.DB_HOST,this.port=+t?.port||+v.DB_PORT,this.username=t?.username||v.DB_USER,this.password=t?.password||v.DB_PASSWORD,this.database=t?.database||v.DB_DATABASE,this.logs=t?.logs||v.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||v.DB_DATABASE||":memory:",this.logs=t?.logs||v.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||v.MONGO_URL,this.logs=t?.logs||v.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||v.DB_HOST,this.port=+t?.port||+v.DB_PORT,this.username=t?.username||v.DB_USER,this.password=t?.password||v.DB_PASSWORD,this.database=t?.database||v.DB_DATABASE,this.logs=t?.logs||v.DB_LOGS||false,this.port||(this.port=1433);}};var ge=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")}};ce();var Ft=class Ft extends ge{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new Ft(this.mongoClient);let e=await import('mongodb').catch(()=>{throw new L("mongodb")});if(this.mongoClient=e.default??e,!this.mongoClient)throw new L("mongodb");return new Ft(this.mongoClient)}};Ft.mongoClient=null;var Wr=Ft;ce();var Ut=class Ut extends ge{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new Ut(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new L("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new L("mssql");return new Ut(this.mssqlClient)}};Ut.mssqlClient=null;var jr=Ut;ce();var Vt=class Vt extends ge{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new Vt(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new L("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new L("mysql2");return new Vt(this.mysqlClient)}};Vt.mysqlClient=null;var Fr=Vt;ce();var Jt=class Jt extends ge{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new Jt(this.pgClient);let e=await import('pg').catch(()=>{throw new L("pg")});if("default"in e&&(e.default,this.pgClient=e.default??e),!this.pgClient)throw new L("pg");return new Jt(this.pgClient)}};Jt.pgClient=null;var Ur=Jt;ce();var Ht=class Ht extends ge{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new Ht(this.sqlite3Client);let e=await import('sqlite3').catch(()=>{throw new L("sqlite3")});if(this.sqlite3Client=e.default??e,!this.sqlite3Client)throw new L("sqlite3");return new Ht(this.sqlite3Client)}};Ht.sqlite3Client=null;var Vr=Ht;var ae=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await Fr.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await Ur.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await Vr.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await Wr.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await jr.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}}};ae.mysqlDriver=null,ae.pgDriver=null,ae.sqliteDriver=null,ae.mssqlDriver=null,ae.mongodbDriver=null;var Bl=Symbol("mongoProperties");function Jr(){return (i,t)=>{let e=k.getMetadata(Bl,i)||[];e.push(t),k.defineMetadata(Bl,e,i);}}function Fy(i){return k.getMetadata(Bl,i.prototype)||[]}function Uy(){return {$annotations:{}}}var Mt=class extends Le{static get collection(){if(!this._collection)throw new Error(`Collection name not set for ${this.name}. Use defineCollection() to create collections.`);return this._collection}static beforeFetch(t){}static beforeInsert(t){return t}static beforeUpdate(t){}static beforeDelete(t){}static async afterFetch(t){return t}};uu([Jr()],Mt.prototype,"id");function jh(i){return typeof i!="function"||!i.prototype}function Fh(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(jh(i))return Fh(t);let r=Uy(),n=Fy(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=J(o,i.modelCaseConvention);r.$annotations[a]=t[o];return}let s=J(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=J(o,i.modelCaseConvention);r[s]=null;}})),r}async function Hr(i,t,e){return (await Promise.all(t.map(async n=>await Je(i,n,e)))).filter(n=>n!==null)}var zr=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 Hr(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 Hr(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 Hr(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=ie("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=ie("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=ie("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=ie("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=ie("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=ie("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=ie("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=ie("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=ie("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=ie("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=ie("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=ie("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=ie("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=ie("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=ie("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 Gr=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 zr(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 Kl=class extends _t{constructor(e){super({type:"mongo",url:e?.url,logs:e?.logs});this.mongoClient=null;this.connecting=null;this.isConnected=false,this.mongoOptions=e?.options,this.lazyLoad=e?.lazyLoad??false,this.url||(this.url=v.MONGO_URL);}async connect(){if(!this.url)throw new 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 ae.getDriver("mongo")).client;this.mongoClient=new e.MongoClient(this.url,this.mongoOptions),await this.mongoClient.connect(),this.isConnected=true;}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new 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 Gr(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}}};ce();var Ql=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||+v.REDIS_PORT||6379,e=await import('ioredis').catch(()=>{throw new L("ioredis")});this.ioRedisConnection=new e.default({host:this.inputOptions.host||v.REDIS_HOST,username:this.inputOptions.username||v.REDIS_USERNAME,port:t,password:this.inputOptions.password||v.REDIS_PASSWORD,...this.inputOptions});try{await this.ioRedisConnection.ping(),this.isConnected=!0;}catch{throw new 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)}};ce();var Yr={string:"string",varchar:"string",char:"string",text:"textarea",longtext:"textarea",mediumtext:"textarea",tinytext:"textarea",integer:"number",int:"number",smallint:"number",bigint:"number",tinyint:"number",mediumint:"number",float:"float",double:"float",decimal:"float",numeric:"float",real:"float",boolean:"boolean",bool:"boolean",date:"date",datetime:"datetime",timestamp:"datetime",time:"string",year:"number",json:"mixed",jsonb:"mixed",uuid:"string",ulid:"string",binary:"string",blob:"string",enum:"string"};var Jy=null;function nt(i,t){return t.getModelManager(i)}function Vy(i,t,e){if(!t||typeof t!="object")return;let r=t;if(!r.filters)return;let n=e.getColumns();for(let[o,s]of Object.entries(r.filters)){let a=s.value;if(a==null||a==="")continue;let l=n.find(c=>c.columnName===o||c.databaseName===o);if(!l)continue;let u=typeof l.type=="string"?l.type:"string",d=Yr[u]||"string";if(d==="string"||d==="textarea"){i.whereLike(o,`%${a}%`);continue}if(d==="boolean"){i.where(o,a==="true"||a===true);continue}if(d==="date"||d==="datetime"){if(typeof a=="object"&&a!==null){let c=a;c.from&&i.where(o,">=",c.from),c.to&&i.where(o,"<=",c.to);continue}i.where(o,a);continue}i.where(o,a);}}function zt(i,t){let e={},r=t.getColumns();for(let n of r){let o=i[n.columnName];e[n.columnName]=o;}return e}async function Uh(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(o){super(o),this._model=o,this._db=Jy;}static isAdapterFor(o){if(typeof o!="function")return false;let s=o;return s.prototype!==void 0&&typeof s.table=="string"&&typeof s.getColumns=="function"}databaseName(){return this._db.database||"hysteria"}databaseType(){return this._db.getDbType()}id(){return this._model.table}properties(){return this._model.getColumns().map(s=>{let a=typeof s.type=="string"?s.type:"string",l=Yr[a]||"string";return new r({path:s.columnName,type:l,isId:s.isPrimary,isSortable:true})})}property(o){let a=this._model.getColumns().find(d=>d.columnName===o||d.databaseName===o);if(!a)return null;let l=typeof a.type=="string"?a.type:"string",u=Yr[l]||"string";return new r({path:a.columnName,type:u,isId:a.isPrimary,isSortable:true})}async count(o){let a=nt(this._model,this._db).query();return Vy(a,o,this._model),a.getCount()}async find(o,s={}){let l=nt(this._model,this._db).query();return Vy(l,o,this._model),s.limit&&l.limit(s.limit),s.offset&&l.offset(s.offset),s.sort?.sortBy&&l.orderBy(s.sort.sortBy,s.sort.direction||"asc"),(await l.many()).map(d=>new e(zt(d,this._model),this))}async findOne(o){if(!this._model.primaryKey)return null;let l=await nt(this._model,this._db).findOneByPrimaryKey(o);return l?new e(zt(l,this._model),this):null}async findMany(o){let s=this._model.primaryKey;return s?(await nt(this._model,this._db).query().whereIn(s,o).many()).map(u=>new e(zt(u,this._model),this)):[]}async create(o){let a=await nt(this._model,this._db).insert(o,{returning:["*"]});return zt(a,this._model)}async update(o,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=nt(this._model,this._db);if(!await l.findOneByPrimaryKey(o))throw new Error("Record not found");let d=await l.updateRecord(o,s,{returning:["*"]});return zt(d,this._model)}async delete(o){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=nt(this._model,this._db);await a.findOneByPrimaryKey(o)&&await a.deleteRecord(o);}}}async function Vh(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function Jh(){let i=await import('adminjs').catch(()=>{throw new L("adminjs")}),t=await Uh(),e=await Vh();i.default.registerAdapter({Database:e,Resource:t});}async function kl(i,t){Jy=i;let e=await import('adminjs').catch(()=>{throw new L("adminjs")});await Jh();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 Hy(i,t){let{admin:e}=await kl(i,t),r;try{r=await import('@adminjs/express');}catch{throw new L("@adminjs/express")}let n=r.buildRouter(e);return {admin:e,router:n}}var Hh=i=>{let{required:t,...e}=i.openApi||{},r={...e,type:i.openApi?.type||"string",description:i.openApi?.description??`Property: ${i.columnName}`};return i.openApi?.type?{...r,type:i.openApi.type}:Array.isArray(i.type)?{...r,type:"string",enum:i.type}:i.type==="date"||i.type==="datetime"||i.type==="timestamp"||i.type==="time"?{...r,type:"string",format:"date-time"}:i.type==="boolean"?{...r,type:"boolean"}:i.type==="integer"||i.type==="tinyint"||i.type==="smallint"||i.type==="mediumint"||i.type==="increment"?{...r,type:"integer",format:"int32"}:i.type==="biginteger"||i.type==="bigIncrement"?{...r,type:"integer",format:"int64"}:i.type==="float"||i.type==="real"?{...r,type:"number",format:"float"}:i.type==="double"?{...r,type:"number",format:"double"}:i.type==="decimal"||i.type==="numeric"?{...r,type:"number"}:i.type==="json"||i.type==="jsonb"?{...r,type:"object"}:i.type==="uuid"?{...r,type:"string",format:"uuid"}:i.type==="ulid"?{...r,type:"string",format:"ulid"}:i.type==="string"||i.type==="char"||i.type==="varchar"||i.type==="text"||i.type==="longtext"||i.type==="mediumtext"||i.type==="tinytext"?{...r,type:"string"}:i.type==="blob"||i.type==="binary"||i.type==="varbinary"||i.type==="tinyblob"||i.type==="mediumblob"||i.type==="longblob"?{...r,type:"string",format:"binary"}:i.type==="year"?{...r,type:"integer",format:"int32"}:r},zh=i=>i.openApi?.required??false,Gh=i=>{let t=i.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=Hh(r));return e},Yh=i=>{let t=i.getColumns(),e=[];for(let r of t)zh(r)&&e.push(r.columnName);return e||[]},Ll=i=>{let t=Gh(i),e=Yh(i);return {type:"object",properties:t,required:e.length?e:[]}},dk=i=>i.map(t=>Ll(t)),mk=i=>Ll(i),zy=i=>i.map(t=>({...Ll(t),modelName:t.table,$id:t.table}));var Wl=(i,t)=>{let e=ve__default.default.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var Zr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var Xr=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var en=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var tn=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var rn=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var nn=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_table";this.table=e;}};var on=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 sn=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 an=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_primary_key";this.table=e;}};var ln=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 un=class extends S{constructor(){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_tables";}};var dn=class extends S{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_column_listing";this.table=e;}};var He=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var mn=class extends S{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var cn=class extends He{constructor(t,e,r,n,o=[],s="create_table"){super(e),this.columnNode=r,this.tableName=n,this.namedConstraints=o,this.context=s,this.sqlType=t;}primaryKey(t){let e=Se(this.tableName,q(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new H("primary_key",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new H("primary_key",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??e})),this)}foreignKey(t,e){this.columnNode.isForeignKey=true;let[r,n]=t.split("."),o=n.split(","),s=e?.constraintName??z(this.tableName??"",q(this.columnNode.column),o[0]);return this.context==="alter_table"?(this.nodes.push(new H("foreign_key",{columns:[q(this.columnNode.column)],references:{table:r,columns:o},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this):(this.namedConstraints.push(new H("foreign_key",{columns:[q(this.columnNode.column)],references:{table:r,columns:o},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this)}increment(){return this.columnNode.autoIncrement=true,this}unsigned(){return this.columnNode.unsigned=true,this}zerofill(){return this.columnNode.zerofill=true,this}notNullable(){return this.nodes.push(new H("not_null",{columns:[q(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new H("null",{columns:[q(this.columnNode.column)]})),this}default(t){let e;return t instanceof O||t instanceof I?e=t:t===null?e="NULL":typeof t=="boolean"?e=t?"TRUE":"FALSE":t!==void 0&&(e=t.toString()),this.nodes.push(new H("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new H("unique",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??pe(this.tableName??"",q(this.columnNode.column))})),this):(this.namedConstraints.push(new H("unique",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName||pe(this.tableName??"",q(this.columnNode.column))})),this)}check(t,e){let r=q(this.columnNode.column),n=e?.constraintName??`chk_${this.tableName}_${r}`.substring(0,63);return this.context==="alter_table"?(this.nodes.push(new H("check",{columns:[r],checkExpression:t,constraintName:n})),this):(this.namedConstraints.push(new H("check",{columns:[r],checkExpression:t,constraintName:n})),this)}after(t){return this.sqlType!=="mysql"?this:(this.nodes.push(new mn(t)),this)}collate(t){return this.columnNode.collate=t,this}handleSqliteAutoIncrement(t){return this.isInlineSqlitePrimaryKey()?this:(this.nodes.push(new H("primary_key",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this)}isInlineSqlitePrimaryKey(){let t=(this.columnNode.dataType??"").toLowerCase();return t==="bigincrement"?true:(t==="integer"||t==="bigint"||t==="int")&&!!this.columnNode.autoIncrement}};var ot=class extends He{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 cn(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new O(e)}char(e,r=1){let n=new K(e,"char",{length:r});return this.build(n)}varchar(e,r=255){let n=new K(e,"varchar",{length:r});return this.build(n)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let n=new K(e,r);return this.build(n)}longtext(e){return this.text(e,"longtext")}mediumtext(e){return this.text(e,"mediumtext")}tinytext(e){return this.text(e,"tinytext")}uuid(e){let r=new K(e,"uuid");return this.build(r)}ulid(e){let r=new K(e,"ulid");return this.build(r)}integer(e,r=255){let n=new K(e,"integer",{length:r});return this.build(n)}tinyint(e,r=255){let n=new K(e,"tinyint",{length:r});return this.build(n)}smallint(e,r=255){let n=new K(e,"smallint",{length:r});return this.build(n)}mediumint(e,r=255){let n=new K(e,"mediumint",{length:r});return this.build(n)}biginteger(e,r=255){let n=new K(e,"bigint",{length:r});return this.build(n)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let n=new K(e,"float",{precision:r});return this.build(n)}double(e,r=10){let n=new K(e,"double",{precision:r});return this.build(n)}real(e,r=10){let n=new K(e,"real",{precision:r});return this.build(n)}decimal(e,r=10,n=2){let o=new K(e,"decimal",{precision:r,scale:n});return this.build(o)}numeric(e,r=10,n=2){let o=new K(e,"numeric",{precision:r,scale:n});return this.build(o)}increment(e,r=255){return this.integer(e,r).increment()}bigIncrement(e,r=255){return this.biginteger(e,r).increment()}date(e,r){let n=new K(e,"date",{precision:r});return this.build(n)}time(e,r){let n=new K(e,"time",{precision:r});return this.build(n)}year(e){let r=new K(e,"year");return this.build(r)}datetime(e,r){let n=new K(e,"datetime",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}timestamp(e,r){let n=new K(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}boolean(e){let r=new K(e,"boolean");return this.build(r)}binary(e){let r=new K(e,"binary");return this.build(r)}varbinary(e,r=255){let n=new K(e,"varbinary",{length:r});return this.build(n)}blob(e){let r=new K(e,"blob");return this.build(r)}tinyblob(e){let r=new K(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new K(e,"mediumblob");return this.build(r)}longblob(e){let r=new K(e,"longblob");return this.build(r)}json(e){let r=new K(e,"json");return this.build(r)}jsonb(e){let r=new K(e,"jsonb");return this.build(r)}enum(e,r){let n=new K(e,"enum",{enumValues:r});return this.build(n)}custom(e,r,n){let o=new K(e,r,{length:n});return this.build(o)}rawColumn(e){let r=new K(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new K(e,"geometry");return this.build(r)}point(e){let r=new K(e,"point");return this.build(r)}linestring(e){let r=new K(e,"linestring");return this.build(r)}polygon(e){let r=new K(e,"polygon");return this.build(r)}multiPoint(e){let r=new K(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var pn=class extends He{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new O(t)}addColumn(t){let e=[],r=new ot(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 br(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 Ce(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 ot(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 Tr(q(a),s,m)),d&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(d.constraintType==="not_null"?this.nodes.push(new Cr(q(a))):d.constraintType==="null"&&this.nodes.push(new Sr(q(a)))),c&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(c.defaultValue===void 0||c.defaultValue===null||c.defaultValue==="NULL"?this.nodes.push(new kt(q(a))):this.nodes.push(new qr(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 wr(t));}renameColumn(t,e){this.nodes.push(new Nr(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 kt(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 St([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 Ce(new H(...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 Ce(new H("foreign_key",{columns:[t],references:{table:e,columns:[r]},constraintName:n?.constraintName??z(this.table,t,r),onDelete:n?.onDelete,onUpdate:n?.onUpdate})));}unique(t,e){if(this.sqlType==="sqlite")throw new g("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Ce(new H("unique",{columns:[t],constraintName:e?.constraintName??pe(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 Re(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??pe(this.table,t);this.nodes.push(new Re(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 Re(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 Nt(t));}setTableOptions(t){let e=this.sqlType==="mysql"||this.sqlType==="mariadb",r=this.sqlType==="postgres"||this.sqlType==="cockroachdb",n=this.sqlType==="mssql";return this.sqlType==="sqlite"?this:(e?this.nodes.push(new qt(t)):r?this.nodes.push(new qt(t)):n&&this.nodes.push(new qt(t)),this)}};var le=class{constructor(t){if(this.sqlType=t||v.DB_TYPE,!this.sqlType)throw new g("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new O(t)}rawQuery(t){this.queryStatements.push(t);}async execute(){for(let t of this.queryStatements)this.rawQuery(t);}runFile(t){if(!An__default.default.existsSync(t))throw new g("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=vt__default.default.basename(t),r=vt__default.default.extname(e);if(r!==".sql"&&r!==".txt")throw new g("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let o=An__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 ot(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 Rr(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 pn(t,r,this.sqlType);if(e(n),!r.length)return;let o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"}),s=[],a=()=>{if(!s.length)return;let u=new he(t,s),d=o.parse([u]).sql;if(!d||!d.trim())return;let c=d.startsWith("alter table")?d:`alter table ${d}`;this.rawQuery(c),s=[];};for(let u of r)u.file==="add_constraint"&&s.length&&s[0].file==="add_column"||a(),s.push(u);a();let l=r.filter(u=>u.file==="add_column").map(u=>u.column);this.generateAutoUpdateTriggers(t,l);}dropTable(t,e=false){let r=new _r(t,e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}renameTable(t,e){let r=new he(t,[new ut(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}truncateTable(t){let e=new Ct(t,true),r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}createIndex(t,e,r={}){Array.isArray(e)||(e=[e]);let n=r.constraintName||cr(t,e.join("_")),o=new Or(t,e,n),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([o]).sql);}dropIndex(t,e){let r=new Ar(t,e),n=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addPrimaryKey(t,e){let r=new he(t,[new St(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addUnique(t,e,r){let n=Array.isArray(e)?e:[e],o=r?.constraintName??pe(t,n.join("_")),s=new H("unique",{columns:n,constraintName:o}),a=new he(t,[new Ce(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 Re(n),s=new he(t,[o]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropUnique(t,e,r){let n=Array.isArray(e)?pe(t,e.join("_")):pe(t,e),o=r?.constraintName??n,s=new Re(o),a=new he(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new Nt,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new H(...e),n=new he(t,[new Ce(r)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}dropConstraint(t,e){let r=new Re(e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addCheck(t,e,r){let n=r?.constraintName??`chk_${t}_custom`.substring(0,63),o=new H("check",{checkExpression:e,constraintName:n}),s=new he(t,[new Ce(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 Re(e),n=new he(t,[r]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}createExtension(t,e=true){let r=new Mr(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 yn,Zy,Gt=class{constructor(t,e){du(this,yn);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new le(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=mu(this,yn,Zy).call(this)),this.executionPromise.then(t,e)}rawStatement(t){return this.schema.rawStatement(t)}rawQuery(t){return this.schema.rawQuery(t),this}createTable(t,e,r){return this.schema.createTable(t,e,r),this}alterTable(t,e){return this.schema.alterTable(t,e),this}dropTable(t,e=false){return this.schema.dropTable(t,e),this}renameTable(t,e){return this.schema.renameTable(t,e),this}truncateTable(t){return this.schema.truncateTable(t),this}createIndex(t,e,r){return this.schema.createIndex(t,e,r),this}dropIndex(t,e){return this.schema.dropIndex(t,e),this}addPrimaryKey(t,e){return this.schema.addPrimaryKey(t,e),this}addUnique(t,e,r){return this.schema.addUnique(t,e,r),this}addConstraint(t,e,...r){return this.schema.addConstraint(t,e,...r),this}dropPrimaryKey(t){return this.schema.dropPrimaryKey(t),this}dropForeignKey(t,e,r){return this.schema.dropForeignKey(t,e,r),this}dropUnique(t,e,r){return this.schema.dropUnique(t,e,r),this}dropConstraint(t,e){return this.schema.dropConstraint(t,e),this}createExtension(t,e=true){return this.schema.createExtension(t,e),this}toQuery(){let t=this.schema.queryStatements;return t.length===1?t[0]:t}toQueries(){return [...this.schema.queryStatements]}toString(){let t=this.schema.queryStatements;return t.length===1?t[0]||"":t.join(`;
144
- `)}async execute(){if(this.state!=="executed"){if(this.state==="failed")throw this.executionError;return this.then()}}isExecuted(){return this.state==="executed"}isPending(){return this.state==="pending"}hasFailed(){return this.state==="failed"}async hasTable(t){return this.dataSource.hasTable(t)}async hasColumn(t,e){return this.dataSource.hasColumn(t,e)}async hasColumns(t,...e){return this.dataSource.hasColumns(t,...e)}async hasIndex(t,e){return this.dataSource.hasIndex(t,e)}async hasPrimaryKey(t){return this.dataSource.hasPrimaryKey(t)}async hasUnique(t,e){return this.dataSource.hasUnique(t,e)}async hasForeignKey(t,e){return this.dataSource.hasForeignKey(t,e)}async hasCheckConstraint(t,e){return this.dataSource.hasCheckConstraint(t,e)}async getTables(){return this.dataSource.getTables()}async getColumnListing(t){return this.dataSource.getColumnListing(t)}dropTableIfExists(t){return this.schema.dropTable(t,true),this}async dropIndexIfExists(t,e){if(await this.dataSource.hasIndex(e,t)){let n=new le(this.dataSource.getDbType());n.dropIndex(t,e);let o=n.queryStatements[0];o&&await this.dataSource.rawQuery(o);}}renameColumn(t,e,r){return this.schema.alterTable(t,n=>{n.renameColumn(e,r);}),this}};yn=new WeakSet,Zy=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 fn=class{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}buildDropDependencies(t){let e=new Map,r=new Map,n=new Map;for(let o of t.relationsToDrop||[]){let s=`${o.table}.${o.relation.name}`,a=[];if(o.relation.referencedTable&&a.push(`table.${o.relation.referencedTable}`),o.relation.referencedColumns)for(let l of o.relation.referencedColumns)a.push(`column.${o.relation.referencedTable}.${l}`);e.set(s,a);}for(let o of t.tablesToDrop||[]){let s=`table.${o.table}`,a=[];for(let l of this.models){let u=l.getRelations();for(let d of u)d.type==="belongsTo"&&d.model().table===o.table&&a.push(`fk.${l.table}.${d.constraintName}`);}r.set(s,a);}for(let o of t.columnsToDrop||[]){let s=`column.${o.table}.${o.column}`,a=[],l=this.models.find(u=>u.table===o.table);if(l){let u=l.getColumns().find(d=>d.databaseName===o.column);if(u){u.isPrimary&&a.push(`pk.${o.table}`);let d=l.getRelations();for(let c of d)c.columnName===u.columnName&&a.push(`fk.${o.table}.${c.constraintName}`);}}n.set(s,a);}return {foreignKeys:e,tables:r,constraints:n}}topologicalSortReverse(t,e){let r=new Set,n=new Set,o=[],s=a=>{if(n.has(a))throw new Error(`Circular dependency detected: ${a}`);if(r.has(a))return;n.add(a);let l=e(a);for(let u of l)s(u);n.delete(a),r.add(a),o.push(a);};for(let a of t.keys())r.has(a)||s(a);return o}generateDropOperations(t){let e=this.buildDropDependencies(t),r=[],n=this.topologicalSortReverse(e.foreignKeys,s=>e.foreignKeys.get(s)||[]);for(let s of n){let[a,l]=s.split("."),u=t.relationsToDrop?.find(d=>d.table===a&&d.relation.name===l);u&&r.push({type:"DROP_FOREIGN_KEY",phase:"DESTRUCTIVE_OPERATIONS",table:a,constraint:l,data:u,dependencies:e.foreignKeys.get(s)||[],sqlStatements:this.generateDropForeignKeySql(u)});}let o=this.topologicalSortReverse(e.tables,s=>e.tables.get(s)||[]);for(let s of t.columnsToDrop||[]){let a=`column.${s.table}.${s.column}`,l=e.constraints.get(a)||[];for(let u of l)u.startsWith("pk.")?r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:"PRIMARY KEY",data:{type:"primary_key",table:s.table},dependencies:[a],sqlStatements:this.generateDropPrimaryKeySql(s.table)}):u.startsWith("unique.")&&r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:`UNIQUE_${s.column}`,data:{type:"unique",table:s.table,column:s.column},dependencies:[a],sqlStatements:this.generateDropUniqueConstraintSql(s.table,s.column)});}for(let s of t.columnsToDrop||[])r.push({type:"DROP_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,column:s.column,data:s,dependencies:[],sqlStatements:this.generateDropColumnSql(s)});for(let s of o){let a=s.replace("table.",""),l=t.tablesToDrop?.find(u=>u.table===a);l&&r.push({type:"DROP_TABLE",phase:"DESTRUCTIVE_OPERATIONS",table:a,data:l,dependencies:e.tables.get(s)||[],sqlStatements:this.generateDropTableSql(l)});}return r}analyzeConstraintImpact(t){let e=new Map;for(let r of t.columnsToDrop||[]){let n=[],o=this.models.find(s=>s.table===r.table);if(o){let s=o.getColumns().find(a=>a.databaseName===r.column);if(s){s.isPrimary&&n.push(`PRIMARY KEY on ${r.table}`);let a=o.getRelations();for(let l of a)l.columnName===s.columnName&&n.push(`FOREIGN KEY ${l.constraintName} on ${r.table}`);}}e.set(`${r.table}.${r.column}`,n);}return e}detectMixedOperations(t){let e=[];for(let r of t.columnsToModify||[]){let n=this.models.find(o=>o.table===r.table);n&&n.getColumns().find(s=>s.databaseName===r.dbColumns.name)&&this.hasConstraintChanges(r.dbColumns,r.modelColumn)&&e.push({type:"column_modification_with_constraints",table:r.table,column:r.dbColumns.name,description:`Column ${r.dbColumns.name} modification requires constraint recreation`});}for(let r of t.primaryKeysToModify||[])e.push({type:"primary_key_modification",table:r.table,description:`Primary key modification on ${r.table} requires FK recreation`});return e}hasConstraintChanges(t,e){return t.isNullable!==!e.constraints?.nullable||t.isUnique!==!!e.constraints?.unique||t.defaultValue!==e.constraints?.default}generateDropForeignKeySql(t){if(this.sql.getDbType()==="sqlite")return [];if(!t.relation.name)return [];let e=this.sql.schema().alterTable(t.table,n=>{n.dropConstraint(t.relation.name);}).toQueries(),r=this.sql.getDbType();return (r==="mysql"||r==="mariadb")&&e.push(`DROP INDEX \`${t.relation.name}\` ON \`${t.table}\``),e}generateDropPrimaryKeySql(t){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,e=>{e.dropPrimaryKey();}).toQueries()}generateDropUniqueConstraintSql(t,e){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,r=>{r.dropConstraint(`UNIQUE_${e}`);}).toQueries()}generateDropColumnSql(t){return this.sql.schema().alterTable(t.table,e=>{e.dropColumn(t.column);}).toQueries()}generateDropTableSql(t){return [`DROP TABLE ${t.table}`]}};var Fl=i=>String(i??"").replace(/::[a-z_ ]+$/i,"").replace(/[()\s]/g,"").toLowerCase(),Xh=/^(current[ _]?timestamp\d*|now\d*|getdate\d*|localtimestamp\d*|localtime\d*)$/,eg={postgres:i=>i.includes("nextval"),cockroachdb:i=>i.includes("unique_rowid")},tg={postgres:["gen_random_uuid"],cockroachdb:["gen_random_uuid"],mysql:["uuid"],mariadb:["uuid"],mssql:["newid"],sqlite:["lower(hex(randomblob(16)))"]},ef=(i,t)=>(tg[i]??[]).includes(Fl(t)),Ot=(i,t)=>!!i.autoCreate&&Xh.test(Fl(t)),At=(i,t,e)=>{if(t.type!=="increment"&&t.type!=="bigIncrement")return false;let r=eg[i];return r?r(Fl(e)):false};var hn=class hn{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new fn(t);}generateOperations(t){let e=[];e.push(...this.generateStructureCreationOperations(t)),e.push(...this.generateConstraintCreationOperations(t)),e.push(...this.generateDestructiveOperations(t)),e.push(...this.generateColumnModificationOperations(t));let r=l=>l.table&&l.constraint?`${l.table}::${l.constraint}`:void 0,n=new Set(e.filter(l=>l.type==="ADD_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),o=new Set(e.filter(l=>l.type==="DROP_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),s=new Set([...n].filter(l=>o.has(l)));return e.filter(l=>{let u=r(l);return u?!(s.has(u)&&(l.type==="ADD_FOREIGN_KEY"||l.type==="DROP_FOREIGN_KEY")):true})}generateStructureCreationOperations(t){let e=[];for(let r of t.tablesToAdd){let n=this.sql.schema().createTable(r.table,o=>{for(let s of r.columns){if(Array.isArray(s.type)){o.enum(s.databaseName,s.type);continue}s.type&&this.executeBuilderMethod(r.table,o,s,[s.databaseName,s.length,s.precision&&!s.withTimezone?s.precision:void 0,s.scale,s.withTimezone?{withTimezone:s.withTimezone,precision:s.precision}:void 0].filter(Boolean),true);}}).toQuery();e.push({type:"CREATE_TABLE",phase:"STRUCTURE_CREATION",table:r.table,data:r,dependencies:[],sqlStatements:[n]});}for(let r of t.columnsToAdd){let n=this.generateAddColumnViaAlter(r);e.push({type:"ADD_COLUMN",phase:"STRUCTURE_CREATION",table:r.table,column:r.column.databaseName,data:r,dependencies:[`table.${r.table}`],sqlStatements:n});}return e}generateConstraintCreationOperations(t){let e=[];for(let n of t.uniquesToDrop||[]){let o=this.sql.schema().alterTable(n.table,s=>{s.dropConstraint(n.name);}).toQueries();e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:o});}let r=new Set((t.uniquesToDrop||[]).map(n=>n.name));for(let n of t.indexesToDrop){if(r.has(n.index))continue;let o=new le(this.sql.getDbType());o.dropIndex(n.index,n.table);let s=o.queryStatements[0];e.push({type:"DROP_INDEX",phase:"CONSTRAINT_CREATION",table:n.table,index:n.index,data:n,dependencies:[`table.${n.table}`],sqlStatements:[s]});}for(let n of t.primaryKeysToAdd){let a=this.models.find(u=>u.table===n.table)?.getColumns().find(u=>u.columnName===n.columns[0])?.primaryKeyConstraintName||Se(n.table,n.columns[0]),l=this.sql.schema().alterTable(n.table,u=>{let d=a||Se(n.table,n.columns[0]);u.addConstraint("primary_key",{columns:[n.columns[0]],constraintName:d});}).toQueries();e.push({type:"ADD_PRIMARY_KEY",phase:"CONSTRAINT_CREATION",table:n.table,constraint:a,data:n,dependencies:[`table.${n.table}`],sqlStatements:l});}for(let n of t.relationsToAdd){if(n.relation.type==="manyToMany")continue;let o=this.generateAddRelationViaAlter(n),s=this.computeFkConstraintName(n);e.push({type:"ADD_FOREIGN_KEY",phase:"CONSTRAINT_CREATION",table:n.table,constraint:s,data:n,dependencies:this.getForeignKeyDependencies(n),sqlStatements:o});}for(let n of t.uniquesToAdd||[]){let o=this.models.find(l=>l.table===n.table),s=(n.columns||[]).map(l=>o?.getColumns().find(d=>d.columnName===l)?.databaseName||l),a=this.sql.schema().alterTable(n.table,l=>{l.addConstraint("unique",{columns:s,constraintName:n.name||"mandatory"});}).toQueries();e.push({type:"ADD_UNIQUE_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name||"mandatory",data:n,dependencies:[`table.${n.table}`],sqlStatements:a});}for(let n of t.indexesToAdd){let o=this.generateCreateIndexSql(n);e.push({type:"CREATE_INDEX",phase:"CONSTRAINT_CREATION",table:n.table,index:n.index,data:n,dependencies:[`table.${n.table}`],sqlStatements:[o]});}for(let n of t.checksToDrop||[]){let o=new le(this.sql.getDbType());o.dropCheck(n.table,n.name);let s=o.queryStatements;e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:s});}for(let n of t.checksToAdd||[]){let o=new le(this.sql.getDbType());o.addCheck(n.table,n.expression,{constraintName:n.name});let s=o.queryStatements;e.push({type:"ADD_CHECK_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:s});}return e}computeFkConstraintName(t){let e=q(t.relation.constraintName);if(e)return e;let r=t.table;t.relation.type==="belongsTo"?r=t.relation.model().table:t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(r=q(t.relation.manyToManyOptions.throughModel));let o=this.models.find(a=>a.table===t.table)?.getColumns()||[],s=t.relation.columnName;return t.relation.type==="belongsTo"?s=o.find(l=>l.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey:s=o.find(l=>l.columnName===s)?.databaseName||s,z(t.table,s,r)}generateDestructiveOperations(t){return this.dropResolver.generateDropOperations(t)}generateColumnModificationOperations(t){let e=[];for(let r of t.columnsToModify||[]){let n=this.generateModifyColumnViaAlter(r);e.push({type:"MODIFY_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:r.table,column:r.dbColumns.name,data:r,dependencies:[],sqlStatements:n});}return e}getForeignKeyDependencies(t){let e=[];if(t.relation.type==="belongsTo"){let n=t.relation.model();e.push(`table.${n.table}`);let o=n.primaryKey||"id",s=n.getColumns().find(a=>a.columnName===o);s&&e.push(`column.${n.table}.${s.databaseName}`);}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let n=q(t.relation.manyToManyOptions.throughModel);e.push(`table.${n}`);}e.push(`table.${t.table}`);let r=this.models.find(n=>n.table===t.table);if(r){let n=r.getColumns().find(o=>o.columnName===t.relation.columnName||o.databaseName===t.relation.columnName);n&&e.push(`column.${t.table}.${n.databaseName}`);}return e}applyNullableConstraint(t,e){return e===false?t.notNullable():e===true||this.sql.getDbType()==="mariadb"?t.nullable():t}executeBuilderMethod(t,e,r,n,o=true){let s;if(Array.isArray(r.type))s=e.enum(n[0],r.type);else if(typeof r.type=="string"&&hn.BUILTIN_COLUMN_TYPES.has(r.type))s=e[r.type](...n);else if(typeof r.type=="string")s=e.custom(n[0],r.type,r.length);else throw new Error(`Unknown column type: ${String(r.type)} for column ${r.columnName}`);return o&&(r.isPrimary&&s.primaryKey({constraintName:r.primaryKeyConstraintName||Se(t,r.columnName)}),r.unsigned&&s.unsigned(),r.zerofill&&s.zerofill(),r.constraints?.default!==void 0&&s.default(r.constraints.default),this.applyNullableConstraint(s,r.constraints?.nullable)),s}generateAddColumnViaAlter(t){let e=[t.column.databaseName,t.column.length,t.column.precision&&!t.column.withTimezone?t.column.precision:void 0,t.column.scale,t.column.withTimezone?{withTimezone:t.column.withTimezone,precision:t.column.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,r=>{r.addColumn(n=>{let o=this.executeBuilderMethod(t.table,n,t.column,e,false);return t.column.constraints?.default!==void 0&&o.default(t.column.constraints.default),this.applyNullableConstraint(o,t.column.constraints?.nullable),o});}).toQueries()}generateModifyColumnViaAlter(t){if(this.sql.getDbType()==="sqlite")return [];let e=[t.modelColumn.databaseName,t.modelColumn.length,t.modelColumn.precision&&!t.modelColumn.withTimezone?t.modelColumn.precision:void 0,t.modelColumn.scale,t.modelColumn.withTimezone?{withTimezone:t.modelColumn.withTimezone,precision:t.modelColumn.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,n=>{n.alterColumn(o=>{let s=this.executeBuilderMethod(t.table,o,t.modelColumn,e,false);return t.modelColumn.constraints?.default!==void 0?s.default(t.modelColumn.constraints.default):t.dbColumns.defaultValue!=null&&t.dbColumns.defaultValue!==""&&!Ot(t.modelColumn,t.dbColumns.defaultValue)&&!At(this.sql.getDbType(),t.modelColumn,t.dbColumns.defaultValue)&&s.default(null),this.applyNullableConstraint(s,t.modelColumn.constraints?.nullable),s});}).toQueries()}generateCreateIndexSql(t){let e=this.models.find(s=>s.table===t.table),n=(e?.getIndexes().find(s=>s.name===t.index)?.columns||[]).map(s=>e?.getColumns().find(l=>l.columnName===s)?.databaseName||s),o=new le(this.sql.getDbType());return o.createIndex(t.table,n,{constraintName:t.index}),o.queryStatements[0]||""}generateAddRelationViaAlter(t){let e=t.table,r=t.relation.foreignKey;t.relation.type==="belongsTo"?(e=t.relation.model().table,r=t.relation.model().primaryKey||"id"):t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(e=q(t.relation.manyToManyOptions.throughModel),r=q(t.relation.manyToManyOptions.rightForeignKey),(!r||r==="undefined")&&(r=t.relation.model().primaryKey||"id"));let n=typeof t.relation.constraintName=="string"?t.relation.constraintName:void 0,o=q(r);if(t.relation.type==="belongsTo"){let m=t.relation.model(),p=m.primaryKey,y=m.getColumns().find(T=>T.columnName===p);if(y)o=y.databaseName;else {let T=m?.databaseCaseConvention||"preserve";o=J(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=J(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=J(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=J(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=J(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=J(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," "))}))}};hn.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 Yt=hn;var bn=class bn{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||Se(e.table,e.columns[0]),s=`[${e.columns.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.addConstraint("primary_key", { columns: ${s}, constraintName: ${this.quote(o)} });`,"});"],l=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`," table.dropPrimaryKey();","});"];return {up:a,down:l}}generateDropTableCode(t){let e=t.table||t.data?.table,r=[`this.schema.dropTable(${this.quote(e)});`],n=[`// TODO: reverse table drop for ${this.quote(e)}`];return {up:r,down:n}}generateModifyPrimaryKeyCode(t){let e=t.data,r=e.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});",`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.addPrimaryKey(${this.quote(e.modelPrimaryKey)});`,"});"],o=[`// TODO: reverse primary key modification on ${this.quote(r)}`];return {up:n,down:o}}generateColumnCode(t,e,r){let n=this.generateColumnTypeCode(e);if(!r)return n;if(e.isPrimary){let o=e.primaryKeyConstraintName||Se(t,e.columnName);n+=`.primaryKey({ constraintName: ${this.quote(o)} })`;}return e.unsigned&&(n+=".unsigned()"),e.zerofill&&(n+=".zerofill()"),e.constraints?.default!==void 0&&(n+=`.default(${this.formatDefaultValue(e.constraints.default)})`),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n+";"}generateColumnCodeForModify(t,e,r){let n=this.generateColumnTypeCode(e);return e.constraints?.default!==void 0?n+=`.default(${this.formatDefaultValue(e.constraints.default)})`:r.defaultValue!=null&&r.defaultValue!==""&&!Ot(e,r.defaultValue)&&!At(this.sql.getDbType(),e,r.defaultValue)&&(n+=".default(null)"),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n}generateColumnTypeCode(t){let e=t.databaseName;if(Array.isArray(t.type)){let s=t.type.map(a=>this.quote(a)).join(", ");return `table.enum(${this.quote(e)}, [${s}])`}let r=t.type;if(new Set(["uuid","ulid","boolean","year","json","jsonb","binary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]).has(r))return `table.${r}(${this.quote(e)})`;if(r==="timestamp"||r==="datetime"){let s=[];return t.withTimezone&&s.push("withTimezone: true"),t.precision!=null&&s.push(`precision: ${t.precision}`),s.length>0?`table.${r}(${this.quote(e)}, { ${s.join(", ")} })`:`table.${r}(${this.quote(e)})`}return r==="date"||r==="time"?t.precision!=null?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="increment"||r==="bigIncrement"?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:r==="decimal"||r==="numeric"?t.precision!=null?t.scale!=null?`table.${r}(${this.quote(e)}, ${t.precision}, ${t.scale})`:`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="float"||r==="double"||r==="real"?t.precision!=null&&t.precision!==10?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="longtext"||r==="mediumtext"||r==="tinytext"?`table.${r}(${this.quote(e)})`:new Set(["varchar","char","string","integer","tinyint","smallint","mediumint","bigint","biginteger","varbinary"]).has(r)?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:bn.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))}};bn.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 gn=bn;function ng(i){return i.replace(/\s+/g," ").trim()}function og(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function sg(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 ig(i,t){return t.length===0?i:`${i} ${t.join(" ")}`}function ze(i,t){let e=ng(t.toLowerCase()),r=og(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}=sg(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?ig(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 Tn=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(C=>C.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,"\\$&"),x=new RegExp(`[\\["\\[]?${N}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),C=new RegExp(`[\\("\\[]?${N}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return x.test(y.expression)||C.test(y.expression)});if(T){let w=c.find(x=>(x.databaseName||x.columnName)===T),N=n.columns.find(x=>x.name===T);if(w&&N?.enumValues&&Array.isArray(w.type)){let x=[...w.type].sort(),C=[...N.enumValues].sort();if(!(x.length===C.length&&x.every((D,A)=>D===C[A]))){e.data.checksToDrop.push({table:r.table,name:y.name});let D=e.sql.getDbType(),A=D==="mssql"?"[":'"',Q=D==="mssql"?"]":'"',ue=w.type.map(E=>`'${E.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:y.name,expression:`${A}${T}${Q} IN (${ue})`});}}}else e.data.checksToDrop.push({table:r.table,name:y.name});}for(let y of o.columns){let T=n.columns.find(x=>x.name===y.databaseName||x.name===y.columnName);if(!T)continue;let w=!e.areColumnsEqual(T,y,n.indexes),N=e.getDefaultChange({table:r.table,dbColumns:T,modelColumn:y});(w||N)&&e.data.columnsToModify.push({table:r.table,dbColumns:T,modelColumn:y});}for(let y of o.relations){if(y.type!=="belongsTo"&&y.type!=="manyToMany")continue;if(y.type==="manyToMany"&&y.manyToManyOptions){let N=q(y.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:N,relation:{type:"belongsTo",model:()=>r,columnName:q(y.manyToManyOptions.leftForeignKey),foreignKey:y.manyToManyOptions.leftForeignKey,constraintName:y.constraintName?q(y.constraintName):z(N,q(y.manyToManyOptions.leftForeignKey||ke(r.table)),r.table),onDelete:y.onDelete,onUpdate:y.onUpdate},onDelete:y.onDelete,onUpdate:y.onUpdate});continue}let T=q(y.constraintName);if(T&&n.foreignKeys.some(N=>N.name===T))continue;n.foreignKeys.find(N=>e.relationMatchesDbRelation(r,y,N))||e.data.relationsToAdd.push({table:r.table,relation:y,onDelete:y.onDelete,onUpdate:y.onUpdate});}let p=new Set(o.relations.filter(y=>y.type==="belongsTo").map(y=>{let T=q(y.foreignKey)||y.columnName,N=r.getColumns().find(x=>x.columnName===T)?.databaseName||T;return q(y.constraintName)||z(r.table,N,y.model().table)}));for(let y of n.foreignKeys){if(y.name&&p.has(y.name))continue;o.relations.find(w=>w.type!=="belongsTo"&&w.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,w,y))||e.data.relationsToDrop.push({table:r.table,relation:y});}for(let y of o.relations){if(y.type!=="belongsTo"&&y.type!=="manyToMany")continue;let T=n.foreignKeys.find(w=>e.relationMatchesDbRelation(r,y,w));T&&!e.areRelationsEqual(T,y)&&e.data.relationsToModify.push({table:r.table,dbRelation:T,modelRelation:y,onDelete:y.onDelete,onUpdate:y.onUpdate});}let 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 Yt(this.sql).generateOperations(this.data);return new gn(this.sql).generateCode(e)}getSqlStatementsByPhase(){let t=new Yt(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=ze(o,t.dataType),a=typeof e.type=="string"?ze(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=ze(e,t.dbColumns.dataType),n=typeof t.modelColumn.type=="string"?ze(e,t.modelColumn.type):void 0;if(n&&r!==n||t.modelColumn.length!=null&&t.dbColumns.length!=null&&t.dbColumns.length!==t.modelColumn.length||t.modelColumn.precision!=null&&t.dbColumns.precision!=null&&t.dbColumns.precision!==t.modelColumn.precision||t.modelColumn.scale!=null&&t.dbColumns.scale!=null&&t.dbColumns.scale!==t.modelColumn.scale||(this.sql.getDbType()==="postgres"||this.sql.getDbType()==="cockroachdb")&&typeof t.modelColumn.type=="string"&&(n==="timestamp"||n==="time")&&t.modelColumn.withTimezone!==void 0&&t.dbColumns.withTimezone!==void 0&&!!t.dbColumns.withTimezone!=!!t.modelColumn.withTimezone)return false;let s=t.modelColumn.constraints?.default!==void 0,a=t.dbColumns.defaultValue!==null&&t.dbColumns.defaultValue!==void 0;if(s&&!a)return "set";if(!s&&a){let l=t.dbColumns.defaultValue;return At(e,t.modelColumn,l)||Ot(t.modelColumn,l)||t.modelColumn.type==="uuid"&&ef(e,l)?false:"drop"}if(s&&a){let l=String(t.dbColumns.defaultValue),u=String(t.modelColumn.constraints?.default),d=this.normalizeDefaultValue(e,r,l),c=this.normalizeDefaultValue(e,n||r,u);return d!==c?"set":false}return false}normalizeDefaultValue(t,e,r){let n=String(r).trim();if(!n)return n;if(t==="postgres"||t==="cockroachdb"){if(e==="json"||e==="jsonb")try{n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::(jsonb?|[a-zA-Z_ ]+[\[\]]*)/g,"");let s=n.match(/^'(.*)'$/s);if(s&&(n=s[1]),n==="{}"||n==="")return "{}";let a=JSON.parse(n);return JSON.stringify(a)}catch{}n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::[a-zA-Z_ ]+[\[\]]*/g,"");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),/^true$/i.test(n)?"true":/^false$/i.test(n)?"false":/^null$/i.test(n)?"null":(n)}if(t==="mysql"||t==="mariadb"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);if(o&&(n=o[1]),/^current_timestamp(?:\(\d+\))?$/i.test(n))return "current_timestamp";if(e==="boolean"){if(/^1$/.test(n))return "true";if(/^0$/.test(n))return "false"}return n}if(t==="sqlite"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),n.toLowerCase()}return n}async processManyToMany(){let t=new Set;for(let e of this.models){let r=e.getRelations();for(let n of r){if(n.type!=="manyToMany"||!n.manyToManyOptions||n.manyToManyOptions.wasModelProvided)continue;let o=q(n.manyToManyOptions.throughModel);if(t.has(o))continue;t.add(o);let s=this.models.find(E=>E.table===n?.manyToManyOptions?.primaryModel),a=n.model();if(!s||!a)continue;let l=s.primaryKey||"id",u=a.primaryKey||"id",d=s.getColumns().find(E=>E.columnName===l),c=a.getColumns().find(E=>E.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(E=>E.name===m),N=h.columns.find(E=>E.name===p),x=w?this.areColumnsEqual(w,y,h.indexes):false,C=N?this.areColumnsEqual(N,T,h.indexes):false;for(let E of h.foreignKeys){let ne=E.referencedTable===s.table,Ze=E.referencedTable===a.table;if(!ne&&!Ze)continue;let _e=ne?m:p,Me=E.columns[0];Me&&Me!==_e&&(this.data.relationsToDrop.push({table:o,relation:E}),Me!==m&&Me!==p&&this.data.columnsToDrop.push({table:o,column:Me}));}let $={};x||($[y.databaseName]=y),C||($[T.databaseName]=$[T.databaseName]||T);for(let E of Object.keys($))this.data.columnsToAdd.push({table:o,column:$[E]});let D=this.buildBelongsToRelation(o,()=>s,m,l,void 0,n.onDelete,n.onUpdate),A=this.buildBelongsToRelation(o,n.model,p,u,void 0,n.onDelete,n.onUpdate),Q=h.foreignKeys.find(E=>E.referencedTable===s.table&&E.columns.length===1&&E.columns[0]===m),ue=h.foreignKeys.find(E=>E.referencedTable===a.table&&E.columns.length===1&&E.columns[0]===p);if(!Q){let E=h.foreignKeys.find(ne=>ne.referencedTable===s.table);E&&this.data.relationsToDrop.push({table:o,relation:E}),this.data.relationsToAdd.push(D);}if(!ue){let E=h.foreignKeys.find(ne=>ne.referencedTable===a.table);E&&this.data.relationsToDrop.push({table:o,relation:E}),this.data.relationsToAdd.push(A);}}}}async removeFkChurnByName(){let t=new Set;for(let n of this.data.relationsToAdd)t.add(n.table);for(let n of this.data.relationsToDrop)t.add(n.table);let e=new Map;for(let n of t){let o=await this.sql.getTableSchema(n),s=new Set((o.foreignKeys||[]).map(a=>a.name).filter(Boolean));e.set(n,s);}let r=new Map;for(let n of this.models){let o=n.getRelations(),s=new Set;for(let a of o){if(a.type!=="belongsTo")continue;let l=a.foreignKey||a.columnName,d=n.getColumns().find(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,x=n.table===y&&n.relation.columnName===w&&n.relation.model().table!==s?.table,C=await this.sql.getTableSchema(y),$=C.foreignKeys.some(A=>A.columns.length===1&&A.columns[0]===T&&A.referencedTable===(s?.table||"")),D=C.foreignKeys.some(A=>A.columns.length===1&&A.columns[0]===w&&A.referencedTable===n.relation.model().table);if(N&&$||x&&D)return null}return n})).then(n=>n.filter(Boolean)),this.data.relationsToDrop=await Promise.all(this.data.relationsToDrop.map(async n=>{let o=this.models.find(u=>u.table===n.table);if(!o)return n;let s=o.getRelations(),a=o.getColumns();return s.some(u=>{if(u.type!=="belongsTo")return false;let c=a.find(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 Ul=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??at()});xt();xt();ce();var wn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;let n=e.coerceNumericTypes&&!e.driverOptions?.types?{getTypeParser:(o,s)=>{let a=!s||s==="text";return a&&o===20?l=>BigInt(l):a&&o===1700?l=>Number.parseFloat(l):r.types.getTypeParser(o,s)}}:void 0;this.pool=new r.Pool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions,...n?{types:n}:{}});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.connect()}releaseConnection(t){t?.release();}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION"),e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=0,o=t.replace(/\?/g,()=>`$${++n}`);if(!r.signal)return (r.connection??this.pool).query(o,e);let s=r.connection??await this.pool.connect(),a=!r.connection,l=()=>{let u=s.processID;u!=null&&this.pool.query("SELECT pg_cancel_backend($1)",[u]).catch(()=>{});};r.signal.addEventListener("abort",l,{once:true});try{return await s.query(o,e)}finally{r.signal.removeEventListener("abort",l),a&&s.release();}}extract(t,e){return e==="rows"?t.rows:e==="raw"?t:t.rowCount}async stream(t,e,r,n){let o=r.connection,s=!o,a=o??await this.pool.connect(),l=await import('pg-query-stream').catch(()=>{throw new L("pg-query-stream")}),u=new 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(x=>{T=true,w(x),u.destroy(x);});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 Sn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=r.createPool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.getConnection()}releaseConnection(t){t?.release();}async beginTransaction(t,e){e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await t.beginTransaction();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){if(!r.signal)return (r.connection??this.pool).query(t,e);let n=r.connection??await this.pool.getConnection(),o=!r.connection,s=()=>{let a=n.threadId;a!=null&&this.pool.query(`KILL QUERY ${Number(a)}`).catch(()=>{});};r.signal.addEventListener("abort",s,{once:true});try{return await n.query(t,e)}finally{r.signal.removeEventListener("abort",s),o&&n.release();}}extract(t,e){let r=t;return e==="affectedRows"?r[0]?.affectedRows??0:e==="raw"?t:r[0]}async stream(t,e,r,n){let o=this.pool,s=r.connection??await o.getConnection(),a=new 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 Nn=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 Vl(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);});})}},Vl=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);});}};ce();var qn=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:v.MSSQL_TRUST_SERVER_CERTIFICATE??void 0,...o,abortTransactionOnError:false,enableImplicitTransactions:false}});}async createPool(){await this.pool.connect();}async closePool(){await this.pool.close();}async reserveConnection(){return this.pool.transaction()}releaseConnection(){}async beginTransaction(t,e){if(e.isolationLevel){let r=await this.getMssqlTransactionLevel(e.isolationLevel);await t.begin(r);return}await t.begin();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){let n=this.pool,o=r.connection?r.connection.request():n.request();e.forEach((l,u)=>{o.input(`p${u}`,l);});let s=0,a=t.replace(/\?|@(\d+)/g,()=>`@p${s++}`);if(r.signal){let l=()=>{try{o.cancel();}catch{}};r.signal.addEventListener("abort",l,{once:true});try{return await o.query(a)}finally{r.signal.removeEventListener("abort",l);}}return o.query(a)}extract(t,e){return e==="affectedRows"?t.rowsAffected[0]:e==="raw"?t:t.recordset}async stream(t,e,r,n){let o=r.connection??this.pool,s=new 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 L("mssql")});switch(t){case "READ UNCOMMITTED":return e.READ_UNCOMMITTED;case "READ COMMITTED":return e.READ_COMMITTED;case "REPEATABLE READ":return e.REPEATABLE_READ;case "SERIALIZABLE":return e.SERIALIZABLE;default:throw new g("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${t}`)}}};var cg=()=>{exports.registerDriverAdapter({name:"pg",dialects:["postgres","cockroachdb"],create:async({dialect:i,input:t})=>{let e=(await ae.getDriver(i)).client;return new wn(i,t,e)}}),exports.registerDriverAdapter({name:"mysql2",dialects:["mysql","mariadb"],create:async({dialect:i,input:t})=>{let e=(await ae.getDriver(i)).client;return new Sn(i,t,e)}}),exports.registerDriverAdapter({name:"sqlite3",dialects:["sqlite"],create:async({dialect:i,input:t})=>{let e=(await ae.getDriver(i)).client;return new Nn(i,t,e)}}),exports.registerDriverAdapter({name:"mssql",dialects:["mssql"],create:async({dialect:i,input:t})=>{let e=(await ae.getDriver(i)).client;return new qn(i,t,e)}});};cg();var bg=async i=>{if(i==="bun"){await(await Promise.resolve().then(()=>(df(),uf))).registerBunDrivers();return}if(i==="web"){(await Promise.resolve().then(()=>(Yl(),Gl))).registerWebDrivers();return}if(i==="react-native"){await(await Promise.resolve().then(()=>(Yl(),Gl))).registerReactNativeDrivers();return}},On=async(i,t)=>{let e=tr(t?.jsEnvironment);await bg(e);let r=await rf(i,e,t?.driver,t);return await r.createPool(),r};var Xt=class Xt{constructor(){}static run(t,e){return Xt.storage.run(t,e)}static getTransaction(){return Xt.storage.getStore()}};Xt.storage=new async_hooks.AsyncLocalStorage;var Ge=Xt;var er=class i{constructor(t,e,r=false,n=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=Qe(se().crypto.randomBytes(16)),this.isolationLevel=e,this.isNested=r,this.nestingDepth=n;}async nestedTransaction(t){let e=new i(this.sql,this.isolationLevel,true,this.nestingDepth+1);if(await e.transaction(),t)try{let r=await Ge.run(e,()=>t(e));return await e.commit(),r}catch(r){throw await e.rollback(),r}return e}async transaction(){if(this.getIsolationLevelQuery(),this.isNested){let r=this.getSavePointName();this.sql.type==="mssql"?await this.sql.rawQuery(`SAVE TRANSACTION ${r}`):await this.sql.rawQuery(`SAVEPOINT ${r}`),this.isActive=true;return}(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&ft("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")&&ft("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")&&ft("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 Zl=Symbol.for("hysteria.orm.SqlDataSource"),ff,hf,Pe=class i extends(hf=_t,ff=Zl,hf){constructor(e){super(e);this[ff]=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=se().crypto.randomUUID();this.logicalSourceId=se().crypto.randomUUID();this.cacheAdapter=new Lr;this.migrationConfig={path:v.MIGRATION_PATH||"database/migrations",lock:true,transactional:true,lockTimeout:3e4};this.seederConfig={path:"database/seeders"};this.zodEngine=null;this.lazyLoad=false;this.connecting=null;this.sqlType=e?.type||this.type;let r=e;this.inputDetails={...e,type:this.sqlType,host:r?.host??this.host,port:r?.port??this.port,username:r?.username??this.username,password:r?.password??this.password,database:r?.database??this.database,logs:r?.logs??this.logs},this.inputDetails.connectionPolicies=e?.connectionPolicies||{retry:{maxRetries:0,delay:0}},this.inputDetails.queryFormatOptions=e?.queryFormatOptions||{language:Bt(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&&Zl in e&&e[Zl]===true}get isClsEnabled(){return this.clsEnabled}getOnSlaveServerFailure(){return this.onSlaveServerFailure}addObserver(e){return this.observerChain||(this.observerChain=new Tt([])),this.observerChain.add(e),this}static async useConnection(e,r){let n=new i(e);await n.connect();try{await r(n),n.isConnected&&await n.disconnect();}catch(o){throw n.isConnected&&await n.disconnect(),o}}async connect(){if(this.isConnected)throw new g("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");try{this.driverAdapter=await On(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 On(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=Ge.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=Wl(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=Wl(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 On(r.sqlType,this.inputDetails),r.sqlPool=r.driverAdapter.pool,r.ownsPool=true):(r.driverAdapter=this.driverAdapter,r.sqlPool=this.sqlPool,r.ownsPool=false),r}getDbType(){return this.sqlType}from(e,r){let n=this.getTransactionBoundSqlDataSource()??this;if(typeof e=="string"){let o=new B(Ul(e,r),n);return r?.alias&&o.table(e,r.alias),o}return new Fe(e,n)}fromRaw(e,r=[],n){let o=this.getTransactionBoundSqlDataSource()??this;return new B(Ul("",n),o).fromRaw(e,r)}schema(){if(!this.isConnected&&!this.lazyLoad)throw new g("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new Gt(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 er(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?Ge.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 er(s,n?.isolationLevel);if(await a.transaction(),typeof e=="function")try{let l=this.clsEnabled?await Ge.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 Xe(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
+ ORDER BY pk`,bindings:[]}}},Ry=new Tl;var wl=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},_y=new wl;var Nl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.quoteAliasesInRawSql(e.column),bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction,e.distinct),n=this.formatAlias(e.alias);return {sql:`${r.sql}${n}`,bindings:r.bindings}}formatColumn(t,e,r){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("sqlite",t),s=o;return e&&(s=`${e.toLowerCase()}(${r?"DISTINCT ":""}${o})`),{sql:s,bindings:[]}}if(Array.isArray(t)&&t.length>0){let s=new b(this.model,"sqlite").parse(t),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}if(!Array.isArray(t)){let s=new b(this.model,"sqlite").parse([t],void 0,true),a=`(${s.sql})`;return e&&(a=`${e.toLowerCase()}${a}`),{sql:a,bindings:s.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let u=new f(this.model).formatStringColumn("sqlite",o);return e?`${e.toLowerCase()}(${u})`:u}let l=`(${new b(this.model,"sqlite").parse([o]).sql})`;return e&&(l=`${e.toLowerCase()}${l}`),l}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}quoteAliasesInRawSql(t){return t.replace(/\bas\s+([a-zA-Z_][a-zA-Z0-9_]*)\b/gi,(e,r,n)=>{let o=t.slice(0,n),s=o.toLowerCase(),a=s.lastIndexOf("cast");for(;a>=0;){let l=a>0?s[a-1]:" ",u=s[a+4]||" ";if(!/[a-z0-9_]/i.test(l)&&!/[a-z0-9_]/i.test(u))break;a=s.lastIndexOf("cast",a-1);}if(a>=0){let l=o.slice(a),u=0;for(let d of l)d==="("&&u++,d===")"&&u--;if(u>0)return e}return `as "${r}"`})}},My=new Nl;var Sl=class{toSql(t){let e=t;if(e.isRawValue)return {sql:this.formatWithAlias(e.column,e.alias),bindings:[]};let r=new f(this.model).formatStringColumn("sqlite",e.column),n=X.from(e.jsonPath),o="";switch(e.jsonOperator){case "extract":o=this.buildExtractSql(r,n);break;case "extract_text":o=this.buildExtractTextSql(r,n);break;case "array_length":o=this.buildArrayLengthSql(r,n);break;case "object_keys":o=this.buildObjectKeysSql(r,n);break;case "raw":o=e.column;break}return {sql:this.formatWithAlias(o,e.alias),bindings:[]}}buildExtractSql(t,e){let r=e.toSqlite();return r==="$"?t:`json_extract(${t}, '${r}')`}buildExtractTextSql(t,e){return this.buildExtractSql(t,e)}buildArrayLengthSql(t,e){let r=e.toSqlite();return r==="$"?`json_array_length(${t})`:`json_array_length(${t}, '${r}')`}buildObjectKeysSql(t,e){return `json_each.key FROM json_each(${this.buildExtractSql(t,e)})`}formatWithAlias(t,e){return e&&e.length>0?`${t} as "${e}"`:t}},Oy=new Sl;var ql=class{toSql(t){let e=t,r=je(this.dbType,e);if(r!==void 0)return {sql:r,bindings:[]};let n=this.renderToken(e.fn);if(n!==void 0)return {sql:n,bindings:[]};let o=e.args.map(s=>s instanceof O?s.rawValue:s instanceof v?this.toSql(s).sql:typeof s=="number"?String(s):`'${s}'`).join(", ");return {sql:`${e.fn}(${o})`,bindings:[]}}renderToken(t){switch(t){case "$uuid":return "lower(hex(randomblob(16)))";case "$now":case "$currentTimestamp":return "current_timestamp";default:return}}},Ay=new ql;var Cl=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return e.keyword="",{sql:e.fromNode,bindings:[]};if(e.options&&Object.values(e.options).some(Boolean))throw new h("SqliteTruncateInterpreter","TRUNCATE_OPTION_NOT_SUPPORTED",new Error("SQLite does not support TRUNCATE options"));let r=new f(this.model).getFromForWriteOperations("sqlite",e.fromNode);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},xy=new Cl;var Rl=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.query)?e.query:[e.query],o=typeof e.query=="string"?new f(this.model).formatRawPlaceholders("sqlite",e.query,e.bindings,e.currParamIndex):r.parse(n.filter(Boolean),e.currParamIndex);return {sql:o.sql,bindings:o.bindings}}},Dy=new Rl;var _l=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),n=r.getFromForWriteOperations("sqlite",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:n,bindings:[]};let o=[],s=e.currParamIndex,a=e.columns.map((l,u)=>{let d=e.values[u],c=r.formatStringColumn("sqlite",l);if(d instanceof O)return `${c} = ${d.rawValue}`;if(d instanceof N){let m=new b(this.model,"sqlite").parse([d],s,true);return o.push(...m.bindings),s+=m.bindings.length,`${c} = ${m.sql}`}return o.push(d),`${c} = ?`}).join(", ");return {sql:`${n} set ${a}`,bindings:o}}},Iy=new _l;var Ml=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",n=[];if(this.isRawNode(e.value)){let o=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${o}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new f(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,n=e.value;else {let o=e.value.map(s=>"?").join(", ");r=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${o})`,n=e.value;}else if(e.value instanceof v){let o=new b(this.model,"sqlite").parse([e.value],1,true).sql;r=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${o}`,n=[];}else if(e.operator.includes("null"))r=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ?`,n=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new f(this.model).formatStringColumn("sqlite",t):t}},$y=new Ml;var Ol=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"sqlite"),{sql:n,bindings:o}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${n})`,bindings:o}}},vy=new Ol;var Al=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",n=[],o=new f(this.model).formatStringColumn("sqlite",e.column);switch(e.jsonOperator){case "=":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "not contains":r=`json(${o}) = json(?)`,n=[JSON.stringify(e.value)];break;case "path":{let s=X.from(e.path??"");r=`json_extract(${o}, '${s.toSqlite()}') ${e.comparisonOperator??"="} ?`,n=[e.value];break}case "subset":case "has none":throw new h("WhereJsonInterpreter::unsupported","NOT_SUPPORTED_IN_SQLITE");case "raw":r=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:n}}},Ey=new Al;var xl=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"sqlite"),{sql:r,bindings:n}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}handleObjectSubquery(t){let e=new b(this.model,"sqlite"),{sql:r,bindings:n}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:n}}},Py=new xl;var Dl=class{toSql(t){let e=t,r=new f(this.model),n=s=>r.formatStringColumn("sqlite",s),o=[];return e.partitionBy.length&&o.push(`partition by ${e.partitionBy.map(n).join(", ")}`),e.orderBy.length&&o.push(`order by ${e.orderBy.map(s=>s.order?`${n(s.column)} ${s.order}`:n(s.column)).join(", ")}`),{sql:`${e.fn}() over (${o.join(" ")})`,bindings:[]}}},By=new Dl;var Il=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),n=Array.isArray(e.body)?e.body:[e.body],o=r.parse(n.filter(Boolean),e.currParamIndex),s=e.columns?.length?` (${e.columns.map(a=>new f(this.model).formatStringColumnBare("sqlite",a)).join(", ")})`:"";return {sql:`${e.alias}${s} as (${o.sql})`,bindings:o.bindings}}},Qy=new Il;var $l={mssql:{alter_table:{add_column:Wu,add_constraint:Fu,add_primary_key:ju,alter_column_type:Uu,alter_table:Vu,drop_column:Ju,drop_constraint:Hu,drop_default:zu,drop_not_null:nd,drop_primary_key:od,rename_column:sd,rename_table:id,set_default:ad,set_not_null:ld,set_table_options:ud},column:{column_type:dd},comment:{comment:md},constraint:{after:cd,constraint:pd},create_table:{create_table:yd},delete:{delete:fd},distinct:{distinct:hd,distinct_on:gd},drop_table:{drop_table:bd},extension:{create_extension:Td},from:{from:wd},group_by:{group_by:Nd},having:{having:Sd},index_op:{create_index:qd,drop_index:Cd},insert:{insert:Rd},join:{join:_d},json_mutation:{json_mutation:Id},limit:{limit:$d},lock:{lock:vd},offset:{offset:Ed},on_duplicate:{on_duplicate:Pd},order_by:{order_by:Bd},raw:{raw:Qd},returning:{returning:Kd},schema:{check_constraint_info:kd,foreign_key_info:Ld,get_column_listing:Wd,get_tables:Fd,has_check_constraint:jd,has_column:Ud,has_index:Vd,has_primary_key:Jd,has_table:Hd,index_info:zd,primary_key_info:Gd,table_info:Yd},select:{select:Zd,select_json:Xd},sqlfunc:{sqlfunc:em},truncate:{truncate:tm},union:{union:rm},update:{update:nm},where:{where:om,where_group:sm,where_json:im,where_subquery:am},window:{window:lm},with:{with:um}},mysql:{alter_table:{add_column:dm,add_constraint:mm,add_primary_key:cm,alter_column_type:pm,alter_table:ym,drop_column:fm,drop_constraint:hm,drop_default:gm,drop_not_null:bm,drop_primary_key:Tm,rename_column:wm,rename_table:Nm,set_default:Sm,set_not_null:qm,set_table_options:Cm},column:{column_type:Rm},comment:{comment:_m},constraint:{after:Mm,constraint:Om},create_table:{create_table:Am},delete:{delete:xm},distinct:{distinct:Dm,distinct_on:Im},drop_table:{drop_table:$m},extension:{create_extension:vm},from:{from:Em},group_by:{group_by:Pm},having:{having:Bm},index_op:{create_index:Qm,drop_index:Km},insert:{insert:km},join:{join:Lm},json_mutation:{json_mutation:Wm},limit:{limit:Fm},lock:{lock:jm},offset:{offset:Um},on_duplicate:{on_duplicate:Vm},order_by:{order_by:Jm},raw:{raw:Hm},returning:{returning:zm},schema:{check_constraint_info:Gm,foreign_key_info:Ym,get_column_listing:Zm,get_tables:Xm,has_check_constraint:ec,has_column:tc,has_index:rc,has_primary_key:nc,has_table:oc,index_info:sc,primary_key_info:ic,table_info:ac},select:{select:lc,select_json:uc},sqlfunc:{sqlfunc:dc},truncate:{truncate:mc},union:{union:cc},update:{update:pc},where:{where:yc,where_group:fc,where_json:hc,where_subquery:gc},window:{window:bc},with:{with:Tc}},postgres:{alter_table:{add_column:wc,add_constraint:Nc,add_primary_key:Sc,alter_column_type:qc,alter_table:Cc,drop_column:Rc,drop_constraint:_c,drop_default:Mc,drop_not_null:Oc,drop_primary_key:Ac,rename_column:xc,rename_table:Dc,set_default:Ic,set_not_null:$c,set_table_options:vc},column:{column_type:Ec},comment:{comment:Pc},constraint:{after:Bc,constraint:Qc},create_table:{create_table:Kc},delete:{delete:kc},distinct:{distinct:Lc,distinct_on:Wc},drop_table:{drop_table:Fc},extension:{create_extension:jc},from:{from:Uc},group_by:{group_by:Vc},having:{having:Jc},index_op:{create_index:Hc,drop_index:zc},insert:{insert:Gc},join:{join:Yc},json_mutation:{json_mutation:Zc},limit:{limit:Xc},lock:{lock:ep},offset:{offset:tp},on_duplicate:{on_duplicate:rp},order_by:{order_by:np},raw:{raw:op},returning:{returning:sp},schema:{check_constraint_info:ip,foreign_key_info:ap,get_column_listing:lp,get_tables:up,has_check_constraint:dp,has_column:mp,has_index:cp,has_primary_key:pp,has_table:yp,index_info:fp,primary_key_info:hp,table_info:gp},select:{select:bp,select_json:Tp},sqlfunc:{sqlfunc:wp},truncate:{truncate:Np},union:{union:Sp},update:{update:qp},where:{where:Cp,where_group:Rp,where_json:_p,where_subquery:Mp},window:{window:Op},with:{with:Ap}},sqlite:{alter_table:{add_column:xp,add_constraint:Dp,alter_column_type:Ip,alter_table:$p,drop_column:vp,drop_constraint:Ep,drop_default:Pp,drop_not_null:Bp,drop_primary_key:Qp,rename_column:Kp,rename_table:kp,set_default:Lp,set_not_null:Wp,set_table_options:Fp},column:{column_type:jp},comment:{comment:Up},constraint:{after:Vp,constraint:Jp},create_table:{create_table:Hp},delete:{delete:zp},distinct:{distinct:Gp,distinct_on:Yp},drop_table:{drop_table:Zp},extension:{create_extension:Xp},from:{from:ey},group_by:{group_by:ty},having:{having:ry},index_op:{create_index:ny,drop_index:oy},insert:{insert:sy},join:{join:iy},json_mutation:{json_mutation:ay},limit:{limit:ly},lock:{lock:uy},offset:{offset:dy},on_duplicate:{on_duplicate:my},order_by:{order_by:cy},raw:{raw:py},returning:{returning:yy},schema:{check_constraint_info:fy,foreign_key_info:hy,get_column_listing:gy,get_tables:by,has_check_constraint:Ty,has_column:wy,has_index:Ny,has_primary_key:Sy,has_table:qy,index_info:Cy,primary_key_info:Ry,table_info:_y},select:{select:My,select_json:Oy},sqlfunc:{sqlfunc:Ay},truncate:{truncate:xy},union:{union:Dy},update:{update:Iy},where:{where:$y,where_group:vy,where_json:Ey,where_subquery:Py},window:{window:By},with:{with:Qy}}};var b=class{constructor(t,e){this.dbType=e,this.model=t;}parse(t,e=1,r=false){if(!t.length)return {sql:"",bindings:[]};let n=t.find(C=>!!C&&C.folder==="distinctOn"),o=!n&&t.find(C=>!!C&&C.folder==="distinct"),s=t.filter(C=>!!C&&C.folder==="comment"&&C.isHint).map(C=>this.renderNode(C)).filter(C=>C.length>0).join(" "),a=this.dbType==="mssql"?t.find(C=>!!C&&C.folder==="lock")??null:null,l=a?this.getMssqlTableHints(a):"",u=t.filter(C=>C!==null&&C.folder!=="distinct"&&C.folder!=="distinctOn"&&!(C.folder==="comment"&&C.isHint)),d=u.some(C=>C.folder==="offset"),c=u.some(C=>C.folder==="order_by"),m=u.find(C=>C.folder==="limit"),p=u.find(C=>C.folder==="offset"),g=this.dbType==="mssql"&&m&&!d&&!c,y=this.dbType==="mssql"&&!g&&(m||p),w=[],T=[],S=null;g&&m&&T.push(m.limit);for(let C=0;C<u.length;C++){let I=u[C];if(g&&I.folder==="limit"||y&&(I.folder==="limit"||I.folder==="offset"))continue;I.currParamIndex=e+T.length;let D=$l[this.mapCommonDbType(this.dbType)][I.folder][I.file];if(!D)throw new Error(`Interpreter not found for ${this.dbType} ${I.keyword}`);D.model=this.model,D.dbType=this.dbType;let A=D.toSql(I);if(!A.sql||!A.sql.trim().length)continue;let L=u[C+1],P=!L||L.keyword!==I.keyword?"":L.chainsWith;if(I.folder==="lock"||I.folder==="on_duplicate"||I.folder==="returning"||I.folder==="schema"||I.folder==="comment"){w.push(`${A.sql}${P}`),T.push(...A.bindings),S=I.keyword;continue}if(S!==I.keyword||I.canKeywordBeSeenMultipleTimes){if(r)w.push(`${A.sql}${P}`);else {let oe=I.keyword;if(I.folder==="with"&&this.dbType!=="mssql"){let Re=C,_e=false;for(;Re<u.length&&u[Re].keyword===I.keyword;){let au=u[Re];if(au.folder==="with"&&au.clause==="recursive"){_e=true;break}Re++;}_e&&(oe=`${oe} recursive`);}let Xe=s?`${s} `:"";if(oe==="select"){let Re=g?`top (@${e}) `:"";if(n){let _e=Array.isArray(n.columns)?n.columns.join(", "):"";w.push(`select ${Re}${Xe}distinct on (${_e}) ${A.sql}${P}`);}else o?w.push(`select ${Re}${Xe}distinct ${A.sql}${P}`):w.push(`select ${Re}${Xe}${A.sql}${P}`);}else oe==="from"&&l?w.push(`${oe} ${A.sql}${l}${P}`):w.push(`${oe} ${A.sql}${P}`);}S=I.keyword;}else w.push(`${A.sql}${P}`);T.push(...A.bindings);}if(y){c||w.push("order by (select null)");let C=p?.offset??0;T.push(C);let D=`offset @${e+T.length-1} rows`;if(m){T.push(m.limit);let A=e+T.length-1;D+=` fetch next @${A} rows only`;}w.push(D);}return {sql:w.join(" "),bindings:T}}renderNode(t){let e=$l[this.mapCommonDbType(this.dbType)][t.folder][t.file];if(!e)throw new Error(`Interpreter not found for ${this.dbType} ${t.keyword}`);return e.model=this.model,e.dbType=this.dbType,e.toSql(t).sql}mapCommonDbType(t){switch(t){case "mariadb":return "mysql";case "cockroachdb":return "postgres";default:return t}}getMssqlTableHints(t){let e=[];switch(t.lockType){case "UPDATE":e.push("UPDLOCK");break;case "SHARE":e.push("HOLDLOCK");break;case "NO_KEY_UPDATE":e.push("UPDLOCK");break;case "KEY_SHARE":e.push("HOLDLOCK");break}return t.skipLocked&&e.push("READPAST"),t.noWait&&e.push("NOWAIT"),e.length>0?` with (${e.join(", ")})`:""}};var Bh=i=>{if(i==null||typeof i!="object"||i instanceof Date)return false;if(Array.isArray(i))return true;let t=Object.getPrototypeOf(i);return t===Object.prototype||t===null},vl=i=>!i.expression&&(i.type==="date"||i.type==="datetime"||i.type==="timestamp"),f=class{constructor(t){this.model=t;this.modelColumnsMap=typeof t.getColumnsByName=="function"?t.getColumnsByName():new Map;let e=[],r=[];for(let n of this.modelColumnsMap.values())n.expression||((n.type==="ulid"||n.autoCreate==="js")&&e.push(n),n.autoUpdate&&r.push(n));this.jsInsertColumns=e,this.autoUpdateColumns=r;}formatStringColumn(t,e){if(e==="*")return "*";let r=this.resolveComputedExpression(e);if(r!==void 0)return `(${r})`;if(e.includes(".")){let[s,a]=e.split(".");if(a==="*")switch(t){case "mysql":case "mariadb":return `\`${s}\`.*`;case "postgres":case "cockroachdb":case "sqlite":return `"${s}".*`;case "mssql":return `[${s}].*`;default:throw new Error(`Unsupported database type: ${t}`)}let l=this.modelColumnsMap.get(a)?.databaseName??V(a,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${s}\`.\`${l}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${s}"."${l}"`;case "mssql":return `[${s}].[${l}]`;default:throw new Error(`Unsupported database type: ${t}`)}}let o=this.modelColumnsMap.get(e)?.databaseName??V(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${o}"`;case "mssql":return `[${o}]`;default:throw new Error(`Unsupported database type: ${t}`)}}resolveComputedExpression(t){let e=t.includes(".")?t.split(".").pop():t;return this.modelColumnsMap.get(e)?.expression}isComputedColumn(t){return !!this.modelColumnsMap.get(t)?.expression}filterComputedColumns(t){return this.modelColumnsMap.size===0?t:t.filter(e=>!this.isComputedColumn(e))}stripComputedFromData(t){if(this.modelColumnsMap.size===0)return t;let e={};for(let r of Object.keys(t))this.isComputedColumn(r)||(e[r]=t[r]);return e}formatStringColumnBare(t,e){let r=e.includes(".")?e.split(".")[1]:e;return this.formatStringColumn(t,r)}dialectEmitsReturning(t){switch(t){case "postgres":case "cockroachdb":case "sqlite":case "mssql":return true;default:return false}}shouldFetchNatively(t,e){if(!this.dialectEmitsReturning(t)||t==="mssql")return false;if(t==="sqlite"&&e==="update"){for(let r of this.modelColumnsMap.values())if(r.autoUpdate)return false}return true}hasComputedColumn(t){return t.some(e=>this.isComputedColumn(e))}resolveColumnAlias(t,e){let r=this.modelColumnsMap.get(e);if(!r||r.columnName===r.databaseName)return "";switch(t){case "mssql":return ` as [${r.columnName}]`;case "mysql":case "mariadb":return ` as \`${r.columnName}\``;case "postgres":case "cockroachdb":case "sqlite":return ` as "${r.columnName}"`;default:return ""}}formatStringTable(t,e){e=e.replace(/\s+/g," ").trim();let r="";return e.toLowerCase().includes(" as ")&&([e,r]=e.split(" as ")),`${e.split(".").map(o=>this.quoteIdentifier(t,o)).join(".")}${r?` as ${this.quoteIdentifier(t,r)}`:""}`}quoteIdentifier(t,e){switch(t){case "mysql":case "mariadb":return `\`${e}\``;case "postgres":case "cockroachdb":case "sqlite":return `"${e}"`;case "mssql":return `[${e}]`;default:return e}}formatRawPlaceholders(t,e,r=[],n=1){if(!r.length)return {sql:e,bindings:[]};let o=n;return {sql:e.replace(/\?/g,()=>{switch(t){case "postgres":case "cockroachdb":return `$${o++}`;case "mssql":return `@${o++}`;default:return "?"}}),bindings:r}}prepareColumns(t,e,r="insert",n="postgres"){if(!t.length)return {columns:t,values:e};let o=[],s=[];for(let l=0;l<t.length;l++){let u=t[l],d=e[l];u!=="*"&&(o.push(u),s.push(d));}let a=n==="mysql"||n==="mariadb";for(let l=0;l<o.length;l++){let u=o[l],d=s[l],c=this.modelColumnsMap.get(u);if(c?.expression){o.splice(l,1),s.splice(l,1),l--;continue}if(!(d instanceof N)){if(!c){Bh(d)&&(s[l]=JSON.stringify(d));continue}if(d==null&&(c.autoCreate===true||c.type==="uuid"&&n!=="mysql"&&n!=="mariadb")){o.splice(l,1),s.splice(l,1),l--;continue}if(c.prepare){let m=r==="insert"?c.prepare(d):c.prepare(d)??d;if(m!==null&&typeof m?.then=="function")throw new Error(`hysteria-orm: prepare on column "${u}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);s[l]=m;}n==="sqlite"&&s[l]instanceof Date&&vl(c)&&(s[l]=ue(s[l],"ISO","UTC"));}}if(r==="insert"){let l=new Set(t);for(let u of this.jsInsertColumns)l.has(u.columnName)||this.generateJsInsertColumn(u,o,s,n);if(a){let u=this.model.primaryKey;if(u){let d=this.modelColumnsMap.get(u);d&&d.type==="uuid"&&d.isPrimary&&!l.has(u)&&this.generateJsInsertColumn(d,o,s,n);}}}else {let l=new Set(t);for(let u of this.autoUpdateColumns){if(l.has(u.columnName))continue;let d=u.prepare?.(new Date);if(d!=null){if(typeof d?.then=="function")throw new Error(`hysteria-orm: prepare on column "${u.columnName}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);o.push(u.columnName),s.push(n==="sqlite"&&d instanceof Date&&vl(u)?ue(d,"ISO","UTC"):d);}}}return {columns:o,values:s}}generateJsInsertColumn(t,e,r,n){let o=t.prepare?.(void 0);if(o!==null&&typeof o?.then=="function")throw new Error(`hysteria-orm: prepare on column "${t.columnName}" on model "${this.model.name}" returned a Promise, but prepare must be synchronous.`);e.push(t.columnName),r.push(n==="sqlite"&&o instanceof Date&&vl(t)?ue(o,"ISO","UTC"):o??void 0);}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new b(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}renderWithNodes(t,e,r){return e?.length?new b(this.model,t).parse(e,r):{sql:"",bindings:[]}}};var ht=class extends N{constructor(e,r=false){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.fromNode=e;}};var G=class extends N{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var te=class extends N{constructor(e,r=[],n,o=false,s=false,a={}){super(a.ignoreInto?"insert ignore into":"insert into",s);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="insert";this.file="insert";this.fromNode=e,this.records=r,this.returning=n,this.disableReturning=o,this.withNodes=a.withNodes,this.source=a.source,this.targetColumns=a.targetColumns,this.ignoreInto=a.ignoreInto??false,this.disambiguateSource=a.disambiguateSource??false;}};var ve=class extends N{constructor(e,r,n,o="update",s,a=false){super("on duplicate",a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="on_duplicate";this.file="on_duplicate";this.table=e,this.conflictColumns=r,this.columnsToUpdate=n,this.mode=o,this.returning=s;}};var gt=class extends N{constructor(e=[],r="inserted"){super("returning");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="returning";this.file="returning";this.columns=e,this.prefix=r;}};var Ee=class extends N{constructor(e,r=[],n=[],o=false){super("update",o);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="update";this.file="update";this.fromNode=e,this.columns=r,this.values=n;}};var Ky;Ky=Symbol.toStringTag;var ie=class{constructor(t,e,r,n){this.unWrapFn=t;this.toSqlFn=e;this.toQueryFn=r;this.executor=n;this[Ky]="WriteOperation";}then(t,e){return this.executor().then(t,e)}catch(t){return this.executor().catch(t)}finally(t){return this.executor().finally(t)}toQuery(){return this.toQueryFn()}toSql(){return this.toSqlFn()}unWrap(){return this.unWrapFn()}};var El=i=>{let t=i.lastIndexOf(".");return t===-1?i:i.slice(t+1)},De=class extends ie{constructor(e,r,n,o,s,a,l){let u={requested:false,actionProvided:false};super(e,r,n,async()=>{if(u.requested&&!u.actionProvided)throw new h(l,"ON_CONFLICT_REQUIRES_MERGE_OR_IGNORE");return o()});this.conflictColumns=null;this.conflictState=u,this.commit=s,this.insertColumns=a.map(El),this.caller=l;}onConflict(e){if(e===void 0)return this.conflictColumns=[],this.conflictState.requested=true,this;let r=(Array.isArray(e)?e:[e]).map(El);if(!r.length)throw new h(this.caller,"ON_CONFLICT_COLUMNS_REQUIRED");return this.conflictColumns=r,this.conflictState.requested=true,this}merge(e){let r=this.requireConflictTarget("merge"),n=e===void 0?this.insertColumns.filter(o=>!r.includes(o)):(Array.isArray(e)?e:[e]).map(El);return this.commitConflict(r,"update",n),this}ignore(){if(!this.conflictState.requested)throw new h(`${this.caller}::ignore`,"MERGE_REQUIRES_ON_CONFLICT");return this.conflictState.actionProvided=true,this.commitConflict(this.conflictColumns??[],"ignore",[]),this}requireConflictTarget(e){if(!this.conflictColumns?.length)throw new h(`${this.caller}::${e}`,"MERGE_REQUIRES_ON_CONFLICT");return this.conflictColumns}commitConflict(e,r,n){this.conflictState.actionProvided=true,this.commit({conflictColumns:e,mode:r,columnsToUpdate:n});}};var Qh=(i,t,e,r,n,o=false,s=new Set)=>{let a=Object.create(t.prototype);for(let l of Object.keys(i)){let u=i[l],d=s.has(l),c=e.get(l),m=l;!c&&!d&&(c=r.get(l),c&&(m=c.columnName));let p=c!==void 0,g=d||o?true:n?n.has(m):true;if(p){if(!g)continue;if(u===null){a[m]=null;continue}if(c?.serialize){let y=c.serialize(u);if(y!==null&&typeof y?.then=="function")throw new Error(`hysteria-orm: column "${m}" on model "${t.name}" has an async serialize function, but serializers must be synchronous. Move async work to prepare or a getter.`);a[m]=y;continue}a[m]=u;continue}(d||!o||n&&n.has(m))&&(a[m]=u);}if(n)for(let l of n)l in a||(a[l]=null);return a},fe=(i,t,e=[],r=[])=>{if(!i.length)return null;let n=t.getColumnsByName(),o=t.getColumnsByDatabaseName(),s=e.some(c=>c.includes("*")),a=[];for(let c of e){if(c.toLowerCase().includes(" as ")){let y=c.match(/\s+as\s+(.+)$/i);y&&a.push(y[1].trim());continue}let p=c;if(p.includes(".")&&(p=p.split(".").pop()),p==="*")continue;let g=n.get(p)?.columnName??p;a.push(g);}let l=a.length?new Set(a):null,u=new Set(r),d=i.map(c=>Qh(c,t,n,o,l,s,u));return d.length===1?d[0]:d};var bt=class{constructor(t){this.observers=t??[];}add(t){this.observers.push(t);}async notifyBefore(t){for(let e of this.observers)e?.onBeforeQuery&&await e.onBeforeQuery(t);}async notifyAfter(t,e){for(let r of this.observers)r?.onAfterQuery&&(t.result??(t.result=e),await r.onAfterQuery(t));}async notifyError(t){for(let e of this.observers)e?.onQueryError&&await e.onQueryError(t);}},ky=i=>{if(!i)return "OTHER";let t=i.trim().toUpperCase();return t.startsWith("SELECT")?"SELECT":t.startsWith("INSERT")?"INSERT":t.startsWith("UPDATE")?"UPDATE":t.startsWith("DELETE")?"DELETE":"OTHER"};var hr=ne();function Pl(i){let t=hr.timing.now()-i;return Math.round(t*100)/100}var Y=async(i,t,e,r,n="rows",o)=>{await e.ensureConnected();let s={id:hr.crypto.randomUUID(),sql:i,params:t,model:void 0,operation:ky(i),timestamp:hr.timing.now()};try{let u=e.observerChain;u&&typeof u.notifyBefore=="function"&&await u.notifyBefore(s);}catch{}let a=hr.timing.now(),l=u=>{o?.shouldNotLog||yt(i,e.logs,t,e.inputDetails.queryFormatOptions,r,u);};try{let u=e.driverAdapter;if(!u)throw new h("ExecSql","CONNECTION_NOT_ESTABLISHED");let d=o?.timeout,c=d?new AbortController:void 0,m,p=Kh(()=>u.execute(i,t,{returning:n,sqlLiteOptions:o?.sqlLiteOptions,signal:c?.signal,connection:e.sqlConnection}),e.inputDetails.connectionPolicies?.retry,e.logs),g;try{d&&c?(g=await Promise.race([p,new Promise((y,w)=>{m=setTimeout(()=>{let T=new h("ExecSql::timeout","QUERY_TIMEOUT",new Error(`Query exceeded the ${d.ms}ms timeout`));d.cancel&&c.abort(T),w(T);},d.ms);})]),p.catch(()=>{})):g=await p;}finally{m&&clearTimeout(m);}try{let y=Pl(a),w=e.observerChain;if(w&&typeof w.notifyAfter=="function"){let T={...s,duration:y,result:g};await w.notifyAfter(T);}}catch{}return l(Pl(a)),u.extract(g,n)}catch(u){throw l(Pl(a)),u}},gr=async(i,t,e,r={},n)=>{let o=e.driverAdapter;if(!o)throw new h("ExecSqlStreaming","CONNECTION_NOT_ESTABLISHED");return await o.stream(i,t,{...r,connection:e.sqlConnection??void 0},{onData:n.onData})};async function Kh(i,t={maxRetries:0,delay:0},e=false){let r=0,n=t.maxRetries||0,o=t.delay||0;async function s(){try{return i()}catch(a){if(!Object.prototype.hasOwnProperty.call(a,"code")||a.code!=="ECONNREFUSED")throw a;if(r<n)return r++,rd(`Retrying sql in ${o}ms (attempt ${r}/${n})`,"info",e),await new Promise(l=>setTimeout(l,o)),s();throw a}}return s()}function Ly(){return {}}var et=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=Ly(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new b(this.model,this.sqlType),this.interpreterUtils=new f(this.model);}setReplicationMode(t){return this.replicationMode=t,this}async find(t){if(!t)return this.query().many();let e=this.query();return t.select&&e.select(...t.select),t.relations&&t.relations.forEach(r=>{e.load(r);}),t.where&&this.handleWhereCondition(e,t.where),t.orderBy&&Object.entries(t.orderBy).forEach(([r,n])=>{e.orderBy(r,n);}),t.limit&&e.limit(t.limit),t.offset&&e.offset(t.offset),t.groupBy&&e.groupBy(...t.groupBy),e.many()}async findOne(t){let e=await this.find({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,offset:t.offset,limit:1});return e.length?e[0]:null}async findOneOrFail(t){let e=await this.findOne({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,offset:t.offset});if(e===null)throw t.customError?t.customError:new h(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new h(this.model.name+"::findOneByPrimaryKey","MODEL_HAS_NO_PRIMARY_KEY");return this.query().select(...e||[]).where(this.model.primaryKey,t).one()}withInsertNodes(t,e,r){let n=this.sqlType==="mysql"||this.sqlType==="mariadb";return t.withNodes=n&&r?.length?r:void 0,[...n?[]:r??[],t,e].filter(Boolean)}insert(t,e={}){let r=this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(t).map(c=>[c,t[c]]))),n=!e.returning||e.returning.length===0,o=new te(new G(this.model.table),[r],e.returning,n,false),s=null,a=null,l=()=>{let c=this.astParser.parse(this.withInsertNodes(o,s,e.withNodes));return {sql:c.sql,bindings:c.bindings}},u=()=>{let c=this.astParser.parse(this.withInsertNodes(o,s,e.withNodes));return {sql:Qt(this.sqlDataSource,c.sql),bindings:c.bindings}},d=()=>{let{sql:c,bindings:m}=u();return Bt(c,m)};return new De(l,u,d,async()=>{try{await this.model.validate?.(t);}catch(C){throw C}let{columns:c,values:m}=this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert",this.sqlType),p={};if(c.forEach((C,I)=>{let D=m[I];p[C]=D,t[C]??(t[C]=D);}),a)return (await this.executeInsertConflict([p],[t],a,e.returning,e.withNodes))[0];let g=!e.returning||e.returning.length===0,{sql:y,bindings:w}=this.astParser.parse(this.withInsertNodes(new te(new G(this.model.table),[p],e.returning,g,false),null,e.withNodes)),T=await Y(y,w,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(g)return;if(this.sqlType==="mysql")return this.handleMysqlInsert(T,[t],"one",e.returning);let S=T[0];return S?fe([S],this.model,e.returning):t},c=>{if(a=c,c.conflictColumns.length===0&&this.sqlType==="mssql")throw new h("ModelManager::onConflict","NOT_SUPPORTED_IN_MSSQL",new Error("MSSQL cannot express a target-less ON CONFLICT; provide the conflict columns"));o=new te(new G(this.model.table),o.records,void 0,true,false),s=this.sqlType==="mssql"?null:new ve(this.model.table,c.conflictColumns,c.columnsToUpdate,c.mode,e.returning);},this.interpreterUtils.filterComputedColumns(Object.keys(t)),"ModelManager::insert")}insertMany(t,e={}){return this.insertManyInternal(t,e,true)}insertManyInternal(t,e,r){let n=t.map(m=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(m).map(p=>[p,m[p]])))),o=!e.returning||e.returning.length===0,s=new te(new G(this.model.table),n,e.returning,o,false),a=null,l=null,u=()=>{let m=this.astParser.parse(this.withInsertNodes(s,a,e.withNodes));return {sql:m.sql,bindings:m.bindings}},d=()=>{let m=this.astParser.parse(this.withInsertNodes(s,a,e.withNodes));return {sql:Qt(this.sqlDataSource,m.sql),bindings:m.bindings}},c=()=>{let{sql:m,bindings:p}=d();return Bt(m,p)};return new De(u,d,c,async()=>{if(r)try{await this.model.validate?.(t);}catch(x){throw x}let m=t.map(x=>{let{columns:C,values:I}=this.interpreterUtils.prepareColumns(Object.keys(x),Object.values(x),"insert",this.sqlType),D={};return C.forEach((A,L)=>{let ce=I[L];D[A]=ce,x[A]??(x[A]=ce);}),D});if(l)return this.executeInsertConflict(m,t,l,e.returning,e.withNodes);let p=!e.returning||e.returning.length===0,{sql:g,bindings:y}=this.astParser.parse(this.withInsertNodes(new te(new G(this.model.table),m,e.returning,p,false),null,e.withNodes)),w=await Y(g,y,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(p)return [];if(this.sqlType==="mysql")return await this.handleMysqlInsert(w,t,"many",e.returning)||[];let T=w;return T.length?fe(T,this.model,e.returning)||[]:[]},m=>{if(l=m,m.conflictColumns.length===0&&this.sqlType==="mssql")throw new h("ModelManager::onConflict","NOT_SUPPORTED_IN_MSSQL",new Error("MSSQL cannot express a target-less ON CONFLICT; provide the conflict columns"));s=new te(new G(this.model.table),s.records,void 0,true,false),a=this.sqlType==="mssql"?null:new ve(this.model.table,m.conflictColumns,m.columnsToUpdate,m.mode,e.returning);},t.length?this.interpreterUtils.filterComputedColumns(Object.keys(t[0])):[],"ModelManager::insertMany")}upsertMany(t,e,r,n={updateOnConflict:true}){let o=this.insertManyInternal(r,n,false).onConflict(t);return n.updateOnConflict??true?o.merge(this.interpreterUtils.filterComputedColumns(e)):o.ignore()}async executeInsertConflict(t,e,r,n,o){let s=r.mode==="update";if(this.sqlType==="mssql")return this.executeMssqlMerge(t,r.conflictColumns,r.columnsToUpdate,{updateOnConflict:s,returning:n},e);let a=!n||n.length===0,l=!a&&(this.sqlType==="postgres"||this.sqlType==="cockroachdb")?n:void 0,{sql:u,bindings:d}=this.astParser.parse(this.withInsertNodes(new te(new G(this.model.table),t,void 0,true,false),new ve(this.model.table,r.conflictColumns,r.columnsToUpdate,r.mode,l),o)),c=await Y(u,d,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:e}});if(a)return [];if(this.sqlType==="postgres"||this.sqlType==="cockroachdb"){if(c.length<e.length&&!s)return this.refetchByConflictColumn(r.conflictColumns[0],e,n);let p=fe(c,this.model,n);return p?Array.isArray(p)?p:[p]:[]}return this.refetchByConflictColumn(r.conflictColumns[0],e,n)}async refetchByConflictColumn(t,e,r){if(!t)return [];let n=e.map(s=>s[t]);return await this.query().select(...r?.length?r:["*"]).whereIn(t,n).many()}async executeMssqlMerge(t,e,r,n,o){if(!t.length)return [];let s=Object.keys(t[0]),a=this.interpreterUtils.formatStringColumn("mssql",this.model.table),l=D=>this.interpreterUtils.formatStringColumn("mssql",D),u=[],d=t.map(D=>`select ${s.map(L=>(u.push(D[L]),`@${u.length}`)).join(", ")}`),c=s.map(l).join(", "),m=d.join(" union all "),p=e.map(D=>`target.${l(D)} = source.${l(D)}`).join(" and "),g=r.filter(D=>!e.includes(D)).map(D=>`target.${l(D)} = source.${l(D)}`).join(", "),y=s.map(l).join(", "),w=s.map(D=>`source.${l(D)}`).join(", "),T=n.returning&&n.returning.length?n.returning.map(D=>`inserted.${l(D)}${this.interpreterUtils.resolveColumnAlias("mssql",D)}`).join(", "):s.map(D=>`inserted.${l(D)}${this.interpreterUtils.resolveColumnAlias("mssql",D)}`).join(", "),x=(n.updateOnConflict??true)&&g?`when matched then update set ${g}`:"",C=`merge into ${a} as target using (${m}) as source (${c}) on ${p} ${x} when not matched then insert (${y}) values (${w}) output ${T};`,I=await Y(C,u,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});if(I.length===0&&!(n.updateOnConflict??true)){let D=e[0],A=o.map(ce=>ce[D]);return await this.query().select(...n.returning?.length?n.returning:["*"]).whereIn(D,A).many()}return I}async updateRecord(t,e,r){let n=new Set(this.model.getColumns().map(T=>T.columnName)),o=Object.keys(e).filter(T=>n.has(T)),s=o.map(T=>e[T]),{columns:a,values:l}=this.interpreterUtils.prepareColumns(o,s,"update",this.sqlType),{primaryKey:u}=this.model;if(!u)throw new h(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let d=a.indexOf(u);d!==-1&&(a.splice(d,1),l.splice(d,1));let c=r?.returning??[],m=c.length>0&&!this.interpreterUtils.hasComputedColumn(c)&&this.interpreterUtils.shouldFetchNatively(this.sqlType,"update"),{sql:p,bindings:g}=this.astParser.parse([new Ee(new G(this.model.table),a,l),new M(u,"and",false,"=",t),...m?[new gt(c)]:[]]),y=await Y(p,g,this.sqlDataSource,this.sqlType,m?"rows":"affectedRows",m?{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}:void 0);if(!c.length)return;if(m){if(!y.length)throw new h(this.model.name+"::updateRecord","ROW_NOT_FOUND");return fe([y[0]],this.model,c)}let w=await this.findOneByPrimaryKey(t,r?.returning);if(!w)throw new h(this.model.name+"::updateRecord","ROW_NOT_FOUND");return w}async deleteRecord(t){if(!this.model.primaryKey)throw new h(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new M(this.model.primaryKey,"and",false,"=",t),{sql:r,bindings:n}=this.astParser.parse([new ht(new G(this.model.table)),e]);await Y(r,n,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new Ue(this.model,this.sqlDataSource);return this.replicationMode&&t.setReplicationMode(this.replicationMode),t}async handleMysqlInsert(t,e,r,n){if(!this.model.primaryKey){if(r==="one"){let a=e.length?e[0]:null;return a?fe([a],this.model):null}return fe(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(d=>d[this.model.primaryKey]),l=a.map(d=>`'${d}'`).join(","),u=await this.query().select(...n??["*"]).whereIn(this.model.primaryKey,a).orderByRaw(`FIELD(${this.model.primaryKey}, ${l})`).many();return r==="one"?u.length?u[0]:null:u}let o=Array.from({length:t.affectedRows},(a,l)=>l+t.insertId),s=await this.query().select(...n||["*"]).whereIn(this.model.primaryKey,o).many();return r==="one"?s.length?s[0]:null:s}handleWhereCondition(t,e,r=false){if(e)for(let[n,o]of Object.entries(e))n==="$and"&&Array.isArray(o)?t[r?"orWhere":"where"](a=>{for(let l of o)this.handleWhereCondition(a,l,false);}):n==="$or"&&Array.isArray(o)?t[r?"orWhere":"where"](a=>{let l=true;for(let u of o)this.handleWhereCondition(a,u,!l),l=false;}):this.applyFieldCondition(t,n,o,r);}applyFieldCondition(t,e,r,n=false){if(r==null||typeof r!="object"){r===null?n?t.orWhereNull(e):t.whereNull(e):n?t.orWhere(e,"=",r):t.where(e,"=",r);return}let o=r,s=o.op,a=o.value;switch(s){case "$eq":a===null?n?t.orWhereNull(e):t.whereNull(e):n?t.orWhere(e,"=",a):t.where(e,"=",a);break;case "$ne":a===null?n?t.orWhereNotNull(e):t.whereNotNull(e):n?t.orWhere(e,"!=",a):t.where(e,"!=",a);break;case "$gt":n?t.orWhere(e,">",a):t.where(e,">",a);break;case "$gte":n?t.orWhere(e,">=",a):t.where(e,">=",a);break;case "$lt":n?t.orWhere(e,"<",a):t.where(e,"<",a);break;case "$lte":n?t.orWhere(e,"<=",a):t.where(e,"<=",a);break;case "$between":{let[l,u]=a;n?t.orWhereBetween(e,l,u):t.whereBetween(e,l,u);break}case "$not between":{let[l,u]=a;n?t.orWhereNotBetween(e,l,u):t.whereNotBetween(e,l,u);break}case "$regexp":n?t.orWhereRegexp(e,a):t.whereRegexp(e,a);break;case "$not regexp":n?t.orWhereNotRegexp(e,a):t.whereNotRegexp(e,a);break;case "$is null":n?t.orWhereNull(e):t.whereNull(e);break;case "$is not null":n?t.orWhereNotNull(e):t.whereNotNull(e);break;case "$like":n?t.orWhereLike(e,a):t.whereLike(e,a);break;case "$not like":n?t.orWhereNotLike(e,a):t.whereNotLike(e,a);break;case "$ilike":n?t.orWhereILike(e,a):t.whereILike(e,a);break;case "$not ilike":n?t.orWhereNotILike(e,a):t.whereNotILike(e,a);break;case "$in":n?t.orWhereIn(e,a):t.whereIn(e,a);break;case "$nin":n?t.orWhereNotIn(e,a):t.whereNotIn(e,a);break;default:n?t.orWhere(e,"=",r):t.where(e,"=",r);}}};var kt=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=Du(t),this.modelRelationsMap=new Map(this.modelRelations.map(n=>[n.columnName,n]));}getRelationFromModel(t){let e=this.modelRelationsMap.get(t.toString());if(!e)throw new h("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function br(i,t,e){return {total:e,perPage:t,currentPage:i,firstPage:1,isEmpty:e===0,lastPage:Math.max(1,Math.ceil(e/t)),hasMorePages:i<Math.max(1,Math.ceil(e/t)),hasPages:e>t}}var Tt=i=>typeof i=="number"?i:parseFloat(i);var Tr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var qe=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var wt=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var wr=class extends N{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="alter_column_type";this.column=e,this.newType=r,this.options=n;}};var he=class extends N{constructor(e,r=[],n=false){super("alter table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="alter_table";this.table=e,this.children=r,this.ifExists=n;}};var Nr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var Ce=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var Lt=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var Sr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var Nt=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var qr=class extends N{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="rename_column";this.oldName=e,this.newName=r;}};var Cr=class extends N{constructor(e,r){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_default";this.column=e,this.defaultValue=r;}};var Rr=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var St=class extends N{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="set_table_options";this.engine=e.engine,this.charset=e.charset,this.collate=e.collate;}};var Q=class extends N{constructor(e,r,n={}){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="column";this.file="column_type";this.isRawValue=false;this.column=e,this.dataType=r,this.length=n.length,this.precision=n.precision,this.scale=n.scale,this.enumValues=n.enumValues,this.withTimezone=n.withTimezone,this.autoIncrement=n.autoIncrement,this.autoCreate=n.autoCreate,this.autoUpdate=n.autoUpdate,this.collate=n.collate,this.isRawValue=n.isRawValue??false,this.unsigned=n.unsigned,this.zerofill=n.zerofill;}};var Wt=class extends N{constructor(e,r=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="comment";this.file="comment";this.value=e,this.isHint=r;}};var J=class extends N{constructor(e,r={},n=false){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="constraint";this.constraintType=e,this.columns=r.columns,this.references=r.references,this.constraintName=r.constraintName,this.onDelete=r.onDelete,this.onUpdate=r.onUpdate,this.defaultValue=r.defaultValue,this.checkExpression=r.checkExpression,this.isRawValue=n;}};var _r=class extends N{constructor(e,r=[],n=[],o=false,s){super("create table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="create_table";this.file="create_table";this.table=e,this.children=r,this.namedConstraints=n,this.ifNotExists=o,s&&Object.assign(this,s);}};var Mr=class extends N{constructor(e,r=false){super("drop table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="drop_table";this.file="drop_table";this.table=e,this.ifExists=r;}};var Or=class extends N{constructor(e,r=true){super("create extension");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="extension";this.file="create_extension";this.extensionName=e,this.ifNotExists=r;}};var Ar=class extends N{constructor(e,r,n,o=false){super("create index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="index_op";this.file="create_index";this.table=e,this.columns=r,this.indexName=n,this.unique=o;}};var xr=class extends N{constructor(e,r,n){super("drop index");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.cascade=false;this.folder="index_op";this.file="drop_index";this.indexName=e,this.table=r,this.cascade=n??false;}};var tt=class extends N{constructor(e,r=false,n=false){super("lock");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="lock";this.file="lock";this.lockType=e,this.skipLocked=r,this.noWait=n;}};var Dr=class extends N{constructor(e,r=[],n=[]){super("window");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="window";this.file="window";this.fn=e,this.partitionBy=r,this.orderBy=n;}};function Wy(i){return i?Array.isArray(i)?i:[i]:[]}function Fy(i){return i?(Array.isArray(i)?i:[i]).map(e=>typeof e=="string"?{column:e}:e):[]}var Pe=class extends N{constructor(e,r=false,n="union",o){super(r?`${n} all`:n);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="union";this.file="union";this.query=e,this.isAll=r,this.type=n,this.bindings=o;}};var rt=class extends N{constructor(e,r,n,o){e==="normal"&&(e="");super("with");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="with";this.file="with";this.alias=r,this.body=n,this.clause=e,this.columns=o;}};var qt=class extends N{constructor(e,r=false,n){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e,this.options=n;}};var Z=class extends N{constructor(e,r,n=false,o,s,a=false,l,u){super("having",a);this.chainsWith="and";this.canKeywordBeSeenMultipleTimes=false;this.folder="having";this.file="having";this.column=e,this.chainsWith=` ${r}`,this.isNegated=n,this.operator=o,this.value=s,this.subquery=l,this.group=u;}};var Ir=class extends N{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var $r=class extends N{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var Ve=class extends N{constructor(e,r,n,o="extract",s=false){super("select");this.folder="select";this.file="select_json";this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.column=e,this.jsonPath=r,this.alias=n,this.jsonOperator=o,this.isRawValue=s;}};var re=class extends N{constructor(e,r,n,o="inner",s,a=false,l){super(`${o} join`,a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="join";this.file="join";this.type="inner";this.table=e,this.left=r,this.right=n,this.type=o,this.on=s,this.additionalConditions=l;}};var Ft=class extends N{constructor(e,r=false){super("group by",r);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="group_by";this.file="group_by";this.column=e;}};var vr=class extends N{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var Er=class extends N{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var jt=class extends N{constructor(e,r="asc",n=false){super("order by",n);this.chainsWith=", ";this.canKeywordBeSeenMultipleTimes=false;this.folder="order_by";this.file="order_by";this.column=e,this.direction=r;}};var Br=class Br{constructor(t,e){this.model=t,this.sqlDataSource=e,this.groupByNodes=[],this.orderByNodes=[],this.limitNode=null,this.offsetNode=null,this.logs=this.sqlDataSource.logs,typeof t.getColumns=="function"?(this.modelColumns=t.getColumns(),this.modelColumnsMap=t.getColumnsByName?.()??new Map(this.modelColumns.map(r=>[r.columnName,r]))):(this.modelColumns=[],this.modelColumnsMap=Br.EMPTY_MAP);}clearGroupBy(){return this.groupByNodes=[],this}clearOrderBy(){return this.orderByNodes=[],this}clearLimit(){return this.limitNode=null,this}clearOffset(){return this.offsetNode=null,this}groupBy(...t){return t.forEach(e=>{this.groupByNodes.push(new Ft(e));}),this}groupByRaw(t){return this.groupByNodes.push(new Ft(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new jt(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new jt(t,"asc",true)),this}limit(t){return typeof t!="number"&&_.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new vr(t),this}offset(t){return typeof t!="number"&&_.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new Er(t),this}};Br.EMPTY_MAP=new Map;var Pr=Br;var nt=class i{constructor(t,e=false){this.sqlDataSource=t;this.isNestedCondition=false;this.whereNodes=[],this.isNestedCondition=e;}getConditions(){return this.whereNodes}where(t,e,r){return typeof t=="function"?this.andWhereGroup(t):this.andWhere(t,e,r)}andWhere(t,e,r){if(typeof t=="function")return this.andWhereGroup(t);let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new M(t,"and",false,n,o)),this}orWhere(t,e,r){if(typeof t=="function")return this.orWhereGroup(t);let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new M(t,"or",false,n,o)),this}whereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new M(t,"and",true,n,o)),this}andWhereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new M(t,"and",true,n,o)),this}orWhereNot(t,e,r){let n="=",o;return typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="="),this.whereNodes.push(new M(t,"or",true,n,o)),this}whereBetween(t,e,r){return this.andWhereBetween(t,e,r)}andWhereBetween(t,e,r){return this.whereNodes.push(new M(t,"and",false,"between",[e,r])),this}orWhereBetween(t,e,r){return this.whereNodes.push(new M(t,"or",false,"between",[e,r])),this}whereNotBetween(t,e,r){return this.andWhereNotBetween(t,e,r)}andWhereNotBetween(t,e,r){return this.whereNodes.push(new M(t,"and",true,"between",[e,r])),this}orWhereNotBetween(t,e,r){return this.whereNodes.push(new M(t,"or",true,"between",[e,r])),this}whereLike(t,e){return this.andWhereLike(t,e)}andWhereLike(t,e){return this.where(t,"like",e),this}orWhereLike(t,e){return this.orWhere(t,"like",e),this}whereILike(t,e){return this.andWhereILike(t,e)}andWhereILike(t,e){return this.where(t,"ilike",e),this}orWhereILike(t,e){return this.orWhere(t,"ilike",e),this}whereNotLike(t,e){return this.andWhereNotLike(t,e)}andWhereNotLike(t,e){return this.where(t,"not like",e),this}orWhereNotLike(t,e){return this.orWhere(t,"not like",e),this}whereNotILike(t,e){return this.andWhereNotILike(t,e)}andWhereNotILike(t,e){return this.where(t,"not ilike",e),this}orWhereNotILike(t,e){return this.orWhere(t,"not ilike",e),this}whereIn(t,e){return this.andWhereIn(t,e)}andWhereIn(t,e){return e.length?(this.whereNodes.push(new M(t,"and",false,"in",e)),this):(this.whereNodes.push(new M("false","and",true,"=",[],true)),this)}orWhereIn(t,e){return e.length?(this.whereNodes.push(new M(t,"or",false,"in",e)),this):(this.whereNodes.push(new M("false","or",true,"=",[],true)),this)}whereNotIn(t,e){return this.andWhereNotIn(t,e)}andWhereNotIn(t,e){return e.length?(this.whereNodes.push(new M(t,"and",true,"in",e)),this):(this.whereNodes.push(new M("true","and",true,"=",[],true)),this)}orWhereNotIn(t,e){return e.length?(this.whereNodes.push(new M(t,"or",true,"in",e)),this):(this.whereNodes.push(new M("true","or",true,"=",[],true)),this)}whereNull(t){return this.andWhereNull(t)}andWhereNull(t){return this.whereNodes.push(new M(t,"and",false,"is null",void 0)),this}orWhereNull(t){return this.whereNodes.push(new M(t,"or",false,"is null",void 0)),this}whereNotNull(t){return this.andWhereNotNull(t)}andWhereNotNull(t){return this.whereNodes.push(new M(t,"and",false,"is not null",void 0)),this}orWhereNotNull(t){return this.whereNodes.push(new M(t,"or",false,"is not null",void 0)),this}whereRegexp(t,e){return this.andWhereRegexp(t,e)}andWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new M(t,"and",false,r?"~":"regexp",e.source)),this}orWhereRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new M(t,"or",false,r?"~":"regexp",e.source)),this}whereNotRegexp(t,e){return this.andWhereNotRegexp(t,e)}andWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new M(t,"and",true,r?"~":"regexp",e.source)),this}orWhereNotRegexp(t,e){let r=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new M(t,"or",true,r?"~":"regexp",e.source)),this}whereGroup(t){return this.andWhereGroup(t)}andWhereGroup(t){let e=new i(this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new xe(r,"and")),this}orWhereGroup(t){let e=new i(this.sqlDataSource,true);t(e);let r=e.getConditions();return r.length>0&&this.whereNodes.push(new xe(r,"or")),this}whereRaw(t,e){return this.andWhereRaw(t,e)}andWhereRaw(t,e){return this.whereNodes.push(new M(t,"and",true,"=",e??[],true)),this}orWhereRaw(t,e){return this.whereNodes.push(new M(t,"or",true,"=",e??[],true)),this}};var Qr=class extends Pr{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new re(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new re(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new re(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new re(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new re(t,"","","cross",{operator:"="},true)),this}crossJoin(t,e){let r=typeof t=="string"?t:t.table;return this.joinNodes.push(new re(e?`${r} as ${e}`:r,"","","cross",{operator:"="})),this}using(...t){let e=this.joinNodes[this.joinNodes.length-1];if(!e||!t.length||e.isRawValue||e.type==="cross"||e.type==="natural")throw new h("JoinQueryBuilder::using","USING_REQUIRES_JOIN");return e.using=t.map(r=>String(r)),this}naturalJoinRaw(t){return this.joinNodes.push(new re(t,"","","natural",{operator:"="},true)),this}innerJoin(t,e,r,n,o){if(e===void 0)return this.join(typeof t=="string"?t:t.table);let s=r,a=n,l=typeof n=="function"?n:o;if(!s){if(!this.model.primaryKey)throw new h("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}return this.join(typeof t=="string"?t:t.table,e,s,a,l),this}join(t,e,r,n,o){if(e===void 0)return this.joinNodes.push(new re(typeof t=="string"?t:t.table,"","","inner",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new h("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new nt(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new re(typeof t=="string"?t:t.table,e,s,"inner",{operator:a||"="},false,u)),this}leftJoin(t,e,r,n,o){if(e===void 0)return this.joinNodes.push(new re(typeof t=="string"?t:t.table,"","","left",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new h("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new nt(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new re(typeof t=="string"?t:t.table,e,s,"left",{operator:a||"="},false,u)),this}rightJoin(t,e,r,n,o){if(e===void 0)return this.joinNodes.push(new re(typeof t=="string"?t:t.table,"","","right",{operator:"="})),this;let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new h("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new nt(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new re(typeof t=="string"?t:t.table,e,s,"right",{operator:a||"="},false,u)),this}fullJoin(t,e,r,n,o){let s=r,a="=",l;if(typeof n=="function"?l=n:typeof n=="string"&&(a=n,l=o),!s){if(!this.model.primaryKey)throw new h("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");s=`${this.model.table}.${this.model.primaryKey}`;}let u;if(l){let d=new nt(this.sqlDataSource);l(d),u=d.getConditions();}return this.joinNodes.push(new re(typeof t=="string"?t:t.table,e,s,"full",{operator:a||"="},false,u)),this}};var kh=/\bas\s+"?([A-Za-z_][A-Za-z0-9_]*)"?\s*(?:,|$)/gi,Lh=/^[A-Za-z_][A-Za-z0-9_.]*$/,Wh=i=>{let t=[];for(let e of i.matchAll(kh))t.push(e[1]);if(!t.length){let e=i.trim();Lh.test(e)&&t.push(e.split(".").pop());}return t},Kr=class extends Qr{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.userOutputColumns=[];this.dbType=r.getDbType(),this.fromNode=new G(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return e.forEach(r=>{if(Array.isArray(r)){let[a,l]=r;this.modelSelectedColumns.push(l),this.userOutputColumns.push(l);let u=this.resolveComputedColumn(a);if(u){this.selectNodes.push(new z(`(${u.expression}) as ${l}`,void 0,void 0,true));return}let d=V(a,this.model.databaseCaseConvention);this.selectNodes.push(new z(d,l));return}let n=r;this.modelSelectedColumns.push(n);let o=this.resolveComputedColumn(n);if(o){this.selectNodes.push(new z(`(${o.expression}) as ${o.alias}`,void 0,void 0,true));return}let s=V(n,this.model.databaseCaseConvention);this.selectNodes.push(new z(s));}),this}selectRaw(e){return this.selectNodes.push(new z(e,void 0,void 0,true)),this.userOutputColumns.push(...Wh(e)),this}collectUserOutputNames(){let e=new Set(this.userOutputColumns);for(let r of this.selectNodes)r.alias&&e.add(r.alias);return [...e]}selectFunc(e,r,n){return this.selectNodes.push(new z(r,n,e)),this}countDistinct(e,r){return this.selectNodes.push(new z(e,r,"count",false,true)),this}sumDistinct(e,r){return this.selectNodes.push(new z(e,r,"sum",false,true)),this}avgDistinct(e,r){return this.selectNodes.push(new z(e,r,"avg",false,true)),this}rank(e,r={}){return this.pushWindow("rank",e,r)}denseRank(e,r={}){return this.pushWindow("dense_rank",e,r)}rowNumber(e,r={}){return this.pushWindow("row_number",e,r)}pushWindow(e,r,n){return this.selectNodes.push(new z(new Dr(e,Wy(n.partitionBy),Fy(n.orderBy)),r)),this}clearSelect(){return this.modelSelectedColumns=[],this.userOutputColumns=[],this.selectNodes=[],this}resolveComputedColumn(e){let r=this.model.getColumnsByName?.();if(!r||r.size===0)return;let n=e.includes(".")?e.split(".").pop():e,o=r.get(n);if(o?.expression)return {expression:o.expression,alias:o.databaseName||n}}clearFrom(){return this.fromNode=new G(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}table(e){return this.fromNode=new G(e),this}distinct(){return this.distinctNode=new Ir,this}distinctOn(...e){return this.distinctOnNode=new $r(e),this}selectJson(e,r,n){return this.selectNodes.push(new Ve(e,r,n,"extract")),this}selectJsonText(e,r,n){return this.selectNodes.push(new Ve(e,r,n,"extract_text")),this}selectJsonArrayLength(e,r,n){return this.selectNodes.push(new Ve(e,r,n,"array_length")),this}selectJsonKeys(e,r,n){return this.selectNodes.push(new Ve(e,r,n,"object_keys")),this}selectJsonRaw(e,r){return this.selectNodes.push(new Ve(e,"",r,"raw",true)),this}};var kr=class extends Kr{constructor(e,r,n=false){super(e,r);this.isNestedCondition=false;this.whereNodes=[],this.havingNodes=[],this.isNestedCondition=n;}clearWhere(){return this.whereNodes=[],this}clearHaving(){return this.havingNodes=[],this}strictWhen(e,r){return e==null?this:(r(this),this)}when(e,r){return e?(r(this),this):this}where(e,r,n){return typeof e=="function"?this.andWhereGroup(e):typeof r=="function"&&n===void 0?this.andWhereSubQuery(e,"in",r):r instanceof B&&n===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function")?this.andWhereSubQuery(e,r,n):this.andWhere(e,r,n)}andWhere(e,r,n){if(typeof e=="function")return this.andWhereGroup(e);if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new M(e,"and",false,o,s)),this}orWhere(e,r,n){if(typeof e=="function")return this.orWhereGroup(e);if(typeof r=="function"&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(r instanceof B&&n===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new M(e,"or",false,o,s)),this}whereColumn(e,r,n){return this.andWhereColumn(e,r,n)}andWhereColumn(e,r,n){let o="=",s;return n!==void 0?(o=r,s=n):s=r,this.whereNodes.push(new M(e,"and",false,o,new O(s))),this}orWhereColumn(e,r,n){let o="=",s;return n!==void 0?(o=r,s=n):s=r,this.whereNodes.push(new M(e,"or",false,o,new O(s))),this}whereNotColumn(e,r,n){return this.andWhereNotColumn(e,r,n)}andWhereNotColumn(e,r,n){return this.pushNotColumnWhere("and",e,r,n)}orWhereNotColumn(e,r,n){return this.pushNotColumnWhere("or",e,r,n)}pushNotColumnWhere(e,r,n,o){let s="!=",a=false,l;return o!==void 0?(s=n,l=o,a=true):l=n,this.whereNodes.push(new M(r,e,a,s,new O(l))),this}whereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new M(e,"and",true,o,s)),this}andWhereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.andWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new M(e,"and",true,o,s)),this}orWhereNot(e,r,n){if(typeof r=="function"&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(r instanceof B&&n===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&n!==void 0&&(n instanceof B||typeof n=="function"))return this.orWhereSubQuery(e,r,n);let o="=",s;return typeof r=="string"&&n!==void 0&&!(n instanceof B)&&typeof n!="function"?(o=r,s=n):(s=r,o="="),this.whereNodes.push(new M(e,"or",true,o,s)),this}whereBetween(e,r,n){return this.andWhereBetween(e,r,n)}andWhereBetween(e,r,n){return this.whereNodes.push(new M(e,"and",false,"between",[r,n])),this}orWhereBetween(e,r,n){return this.whereNodes.push(new M(e,"or",false,"between",[r,n])),this}whereNotBetween(e,r,n){return this.andWhereNotBetween(e,r,n)}andWhereNotBetween(e,r,n){return this.whereNodes.push(new M(e,"and",true,"between",[r,n])),this}orWhereNotBetween(e,r,n){return this.whereNodes.push(new M(e,"or",true,"between",[r,n])),this}whereLike(e,r){return this.andWhereLike(e,r)}andWhereLike(e,r){return this.where(e,"like",r),this}orWhereLike(e,r){return this.orWhere(e,"like",r),this}whereILike(e,r){return this.andWhereILike(e,r)}andWhereILike(e,r){return this.where(e,"ilike",r),this}orWhereILike(e,r){return this.orWhere(e,"ilike",r),this}whereNotLike(e,r){return this.andWhereNotLike(e,r)}andWhereNotLike(e,r){return this.where(e,"not like",r),this}orWhereNotLike(e,r){return this.orWhere(e,"not like",r),this}whereNotILike(e,r){return this.andWhereNotILike(e,r)}andWhereNotILike(e,r){return this.where(e,"not ilike",r),this}orWhereNotILike(e,r){return this.orWhere(e,"not ilike",r),this}whereIn(e,r){return this.andWhereIn(e,r)}andWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new M(e,"and",false,"in",r)),this):(this.whereNodes.push(new M("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new M(e,"or",false,"in",r)),this):(this.whereNodes.push(new M("false","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"in",r)}whereNotIn(e,r){return this.andWhereNotIn(e,r)}andWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new M(e,"and",true,"in",r)),this):(this.whereNodes.push(new M("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new M(e,"or",true,"in",r)),this):(this.whereNodes.push(new M("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new M(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new M(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new M(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new M(e,"or",false,"is not null",void 0)),this}whereRegexp(e,r){return this.andWhereRegexp(e,r)}andWhereRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new M(e,"and",false,n?"~":"regexp",r.source)),this}orWhereRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new M(e,"or",false,n?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new M(e,"and",true,n?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new M(e,"and",true,n?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let n=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new M(e,"or",true,n?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Se("","exists",r.extractQueryNodes(),"and")),this}orWhereExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Se("","exists",r.extractQueryNodes(),"or")),this}whereNotExists(e){return this.andWhereNotExists(e)}andWhereNotExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Se("","not exists",r.extractQueryNodes(),"and")),this}orWhereNotExists(e){let r=e instanceof B?e:new B(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Se("","not exists",r.extractQueryNodes(),"or")),this}whereRaw(e,r=[]){return this.andWhereRaw(e,r)}andWhereRaw(e,r=[]){return this.whereNodes.push(new M(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new M(e,"or",false,"=",r,true)),this}having(e,r,n){return this.andHaving(e,r,n)}andHaving(e,r,n){let o="=",s;return typeof r=="string"&&n?(o=r,s=n):(s=r,o="="),this.havingNodes.push(new Z(e,"and",false,o,s)),this}orHaving(e,r,n){let o="=",s;return typeof r=="string"&&n?(o=r,s=n):(s=r,o="="),this.havingNodes.push(new Z(e,"or",false,o,s)),this}havingRaw(e){return this.andHavingRaw(e)}andHavingRaw(e){return this.havingNodes.push(new Z(e,"and",false,"=",[],true)),this}orHavingRaw(e){return this.havingNodes.push(new Z(e,"or",false,"=",[],true)),this}havingNull(e){return this.andHavingNull(e)}andHavingNull(e){return this.havingNodes.push(new Z(e,"and",false,"is null",void 0)),this}orHavingNull(e){return this.havingNodes.push(new Z(e,"or",false,"is null",void 0)),this}havingNotNull(e){return this.andHavingNotNull(e)}andHavingNotNull(e){return this.havingNodes.push(new Z(e,"and",false,"is not null",void 0)),this}orHavingNotNull(e){return this.havingNodes.push(new Z(e,"or",false,"is not null",void 0)),this}havingIn(e,r){return this.andHavingIn(e,r)}andHavingIn(e,r){return this.pushHavingIn("and",e,r,false)}orHavingIn(e,r){return this.pushHavingIn("or",e,r,false)}havingNotIn(e,r){return this.andHavingNotIn(e,r)}andHavingNotIn(e,r){return this.pushHavingIn("and",e,r,true)}orHavingNotIn(e,r){return this.pushHavingIn("or",e,r,true)}havingBetween(e,r){return this.andHavingBetween(e,r)}andHavingBetween(e,r){return this.havingNodes.push(new Z(e,"and",false,"between",r)),this}orHavingBetween(e,r){return this.havingNodes.push(new Z(e,"or",false,"between",r)),this}havingNotBetween(e,r){return this.andHavingNotBetween(e,r)}andHavingNotBetween(e,r){return this.havingNodes.push(new Z(e,"and",false,"not between",r)),this}orHavingNotBetween(e,r){return this.havingNodes.push(new Z(e,"or",false,"not between",r)),this}havingExists(e){return this.andHavingExists(e)}andHavingExists(e){return this.pushHavingExists("and",e,false)}orHavingExists(e){return this.pushHavingExists("or",e,false)}havingNotExists(e){return this.andHavingNotExists(e)}andHavingNotExists(e){return this.pushHavingExists("and",e,true)}orHavingNotExists(e){return this.pushHavingExists("or",e,true)}havingWrapped(e){return this.andHavingWrapped(e)}andHavingWrapped(e){return this.pushHavingGroup("and",e)}orHavingWrapped(e){return this.pushHavingGroup("or",e)}pushHavingIn(e,r,n,o){let s=o?"not in":"in";if(Array.isArray(n))return this.havingNodes.push(new Z(r,e,false,s,n)),this;let a=this.buildSubQuery(n);return this.havingNodes.push(new Z(r,e,false,s,[],false,a.extractQueryNodes())),this}pushHavingExists(e,r,n){let o=r instanceof B?r:new B(this.model,this.sqlDataSource);return o.isNestedCondition=true,typeof r=="function"&&r(o),this.havingNodes.push(new Z("",e,false,n?"not exists":"exists",[],false,o.extractQueryNodes())),this}pushHavingGroup(e,r){let n=new B(this.model,this.sqlDataSource);return n.isNestedCondition=true,r(n),this.havingNodes.push(new Z("",e,false,"=",[],false,void 0,n.havingNodes)),this}buildSubQuery(e){if(e instanceof B)return e;let r=new B(this.model,this.sqlDataSource),n=e(r);return n!=null&&"extractQueryNodes"in n?n:r}andWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new Se(e,r,o.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,n){let o=this.buildSubQuery(n);return this.whereNodes.push(new Se(e,r,o.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new B(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new xe(r.whereNodes,"and");return this.whereNodes.push(n),this}orWhereGroup(e){let r=new B(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let n=new xe(r.whereNodes,"or");return this.whereNodes.push(n),this}};var Lr=class extends kr{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new U(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new U(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new U(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new U(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new U(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new U(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new U(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new U(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new U(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new U(t,"or",false,"raw",e)),this}whereJsonObject(t,e){return this.andWhereJsonObject(t,e)}andWhereJsonObject(t,e){return this.whereNodes.push(new U(t,"and",false,"=",e)),this}orWhereJsonObject(t,e){return this.whereNodes.push(new U(t,"or",false,"=",e)),this}whereNotJsonObject(t,e){return this.andWhereNotJsonObject(t,e)}andWhereNotJsonObject(t,e){return this.whereNodes.push(new U(t,"and",true,"=",e)),this}orWhereNotJsonObject(t,e){return this.whereNodes.push(new U(t,"or",true,"=",e)),this}whereJsonPath(t,e,r,n){return this.andWhereJsonPath(t,e,r,n)}andWhereJsonPath(t,e,r,n){return this.pushJsonPath("and",t,e,r,n,false),this}orWhereJsonPath(t,e,r,n){return this.pushJsonPath("or",t,e,r,n,false),this}whereJsonSupersetOf(t,e){return this.andWhereJsonSupersetOf(t,e)}andWhereJsonSupersetOf(t,e){return this.whereNodes.push(new U(t,"and",false,"contains",e)),this}orWhereJsonSupersetOf(t,e){return this.whereNodes.push(new U(t,"or",false,"contains",e)),this}whereJsonNotSupersetOf(t,e){return this.andWhereJsonNotSupersetOf(t,e)}andWhereJsonNotSupersetOf(t,e){return this.whereNodes.push(new U(t,"and",true,"contains",e)),this}orWhereJsonNotSupersetOf(t,e){return this.whereNodes.push(new U(t,"or",true,"contains",e)),this}whereJsonSubsetOf(t,e){return this.andWhereJsonSubsetOf(t,e)}andWhereJsonSubsetOf(t,e){return this.whereNodes.push(new U(t,"and",false,"subset",e)),this}orWhereJsonSubsetOf(t,e){return this.whereNodes.push(new U(t,"or",false,"subset",e)),this}whereJsonNotSubsetOf(t,e){return this.andWhereJsonNotSubsetOf(t,e)}andWhereJsonNotSubsetOf(t,e){return this.whereNodes.push(new U(t,"and",true,"subset",e)),this}orWhereJsonNotSubsetOf(t,e){return this.whereNodes.push(new U(t,"or",true,"subset",e)),this}whereJsonHasNone(t,e){return this.andWhereJsonHasNone(t,e)}andWhereJsonHasNone(t,e){return this.whereNodes.push(new U(t,"and",false,"has none",e)),this}orWhereJsonHasNone(t,e){return this.whereNodes.push(new U(t,"or",false,"has none",e)),this}pushJsonPath(t,e,r,n,o,s){let a=new U(e,t,s,"path",o,false,r,n);this.whereNodes.push(a);}};var B=class i extends Lr{constructor(e,r){super(e,r);this.isNestedCondition=false;this._interpreterUtils=null;this.insertNode=null;this.insertNodeSource=void 0;this.onDuplicateNode=null;this.insertConflictConfig=null;this.updateNode=null;this.deleteNode=null;this.returningNode=null;this.truncateNode=null;this.replicationMode=null;this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.comments=[],this.hints=[],this.astParser=new b(this.model,this.dbType);}get interpreterUtils(){return this._interpreterUtils||(this._interpreterUtils=new f(this.model)),this._interpreterUtils}setReplicationMode(e){return this.replicationMode=e,this}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof i)&&typeof e[1]=="string"){let[r,n]=e;if(typeof r=="function"){let o=new i(this.model,this.sqlDataSource),s=r(o),a=s!=null&&"extractQueryNodes"in s?s:o;return this.selectNodes.push(new z(a.extractQueryNodes(),n)),this}return this.selectNodes.push(new z(r.extractQueryNodes(),n)),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}clearSelect(){return super.clearSelect(),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}countDistinct(e,r){return super.countDistinct(e,r),this}sumDistinct(e,r){return super.sumDistinct(e,r),this}avgDistinct(e,r){return super.avgDistinct(e,r),this}rank(e,r){return super.rank(e,r),this}denseRank(e,r){return super.denseRank(e,r),this}rowNumber(e,r){return super.rowNumber(e,r),this}async exists(){return !!await this.one()}async many(){let{sql:e,bindings:r}=this.unWrap();return this.execSqlWithSlaveHandling("read",n=>Y(e,r,n,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}))}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async pluck(e){return (await this.many()).map(n=>n[e])}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async oneOrFail(){let e=await this.one();if(!e)throw new h("SqlDataSource::query::oneOrFail","ROW_NOT_FOUND");return e}async stream(e={}){let{sql:r,bindings:n}=this.unWrap();return this.execSqlWithSlaveHandling("read",async o=>await gr(r,n,o,e,{onData:(a,l)=>{a.write(l);}}))}async*chunk(e){let r=0;for(;;){let n=await this.limit(e).offset(r).many();if(!n.length)break;r+=n.length,yield n;}}async paginateWithCursor(e,r){if(!this.orderByNodes.length)throw new h(this.model.name+"::paginateWithCursor","ORDER_BY_REQUIRED");let n=this.orderByNodes;if(n.some(m=>m.isRawValue))throw new h(this.model.name+"::paginateWithCursor","ORDER_BY_RAW_NOT_SUPPORTED");let o=n.map(m=>m.column),s=n[0].direction==="desc"?"<":">";if(r){let m=Array.isArray(r.value)?r.value:[r.value];this.andWhere(p=>{for(let g=0;g<o.length;g++){let y=g;p.orWhere(w=>{for(let T=0;T<y;T++)w.where(o[T],"=",m[T]);w.where(o[y],s,m[y]);});}});}this.limit(e+1);let a=await this.many(),l=a.length>e,u=l?a.slice(0,e):a,d=u[u.length-1],c=o.map(m=>m.includes(".")?m.slice(m.lastIndexOf(".")+1):m);return {data:u,hasMore:l,nextCursor:d?{key:c.length===1?c[0]:c,value:c.length===1?d[c[0]]:c.map(m=>d[m])}:null}}lockForUpdate(e={}){return this.lockQueryNodes.push(new tt("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new tt("for_share",e.skipLocked,e.noWait)),this}forNoKeyUpdate(e={}){return this.assertPgLockStrength("forNoKeyUpdate","FOR NO KEY UPDATE"),this.lockQueryNodes.push(new tt("for_no_key_update",e.skipLocked,e.noWait)),this}forKeyShare(e={}){return this.assertPgLockStrength("forKeyShare","FOR KEY SHARE"),this.lockQueryNodes.push(new tt("for_key_share",e.skipLocked,e.noWait)),this}assertPgLockStrength(e,r){if(this.dbType!=="postgres")throw new h(`QueryBuilder::${e}`,`LOCK_STRENGTH_NOT_SUPPORTED_IN_${this.dbType.toUpperCase()}`,new Error(`${r} is only supported by postgres`))}timeout(e,r={}){return this.queryTimeout={ms:e,cancel:r.cancel??false},this}comment(e){return this.assertValidSqlComment(e),this.comments.push(e),this}hintComment(e){this.assertValidSqlComment(e);let r=e.slice(3,-2).trim(),n=this.hints[0];return this.hints=[n?`${n.slice(0,-2).trimEnd()} ${r} */`:`/*+ ${r} */`],this}clearComment(){return this.comments=[],this}clearHintComment(){return this.hints=[],this}assertValidSqlComment(e){let r=()=>{throw new h("QueryBuilder::comment","INVALID_SQL_COMMENT")};(!e.trim().length||e.includes("?"))&&r();let n=(this.dbType==="mysql"||this.dbType==="mariadb")&&e.startsWith("#");if(e.startsWith("--")||n){/[\r\n]/.test(e)&&r();return}if(e.startsWith("/*")&&e.endsWith("*/")&&e.length>=4){let o=e.slice(2,-2);(o.includes("/*")||o.includes("*/"))&&r();return}r();}union(e,r){if(typeof e=="string")return this.unionNodes.push(new Pe(e,false,"union",r)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Pe(o)),this}unionAll(e,r){if(typeof e=="string")return this.unionNodes.push(new Pe(e,true,"union",r)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Pe(o,true)),this}intersect(e,r){return this.unionNodes.push(new Pe(this.resolveSetOperationNodes(e),false,"intersect",r)),this}except(e,r){return this.unionNodes.push(new Pe(this.resolveSetOperationNodes(e),false,"except",r)),this}resolveSetOperationNodes(e){return typeof e=="string"?e:(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes()}increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?Tt(r.total):0}needsDerivedTableCount(){return this.groupByNodes.length>0||this.havingNodes.length>0||this.distinctNode!==null||this.distinctOnNode!==null}buildCountQuery(e="*"){if(!this.needsDerivedTableCount()){this.clearForFunctions(),this.selectRaw(`count(${e}) as total`);return}this.clearOrderBy(),this.clearLimit(),this.clearOffset();let r=this.extractQueryNodes();this.withNodes=[],this.distinctNode=null,this.distinctOnNode=null,this.clearSelect(),this.fromNode=new G(r,"g"),this.joinNodes=[],this.whereNodes=[],this.groupByNodes=[],this.havingNodes=[],this.lockQueryNodes=[],this.unionNodes=[],this.comments=[],this.hints=[],this.selectRaw(`count(${e}) as total`);}async getMax(e){this.clearForFunctions(),this.selectFunc("max",e,"total");let r=await this.one();return r?Tt(r.total):0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?Tt(r.total):0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?Tt(r.total):0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?Tt(r.total):0}async columnInfo(e){let r=typeof this.fromNode.table=="string"?this.fromNode.table:this.model.table,o=await(await this.getSqlDataSource("read")).getTableInfo(r);return e===void 0?o:o.find(s=>s.name===e)}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&_.warn(`${this.model.name}::paginate Non numeric values provided to \`paginate\``);let n=this.clone(),o=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>o.many(),()=>n.getCount("*"));return {paginationMetadata:br(e,r,a),data:s}}table(e,r){if(typeof e=="function"){if(!r)throw new h("QueryBuilder::table","MISSING_ALIAS_FOR_SUBQUERY");let n=new i(this.model,this.sqlDataSource),o=e(n),a=(o!=null&&"extractQueryNodes"in o?o:n).extractQueryNodes();return this.fromNode=new G(a,r),this}return this.fromNode=new G(e,r),this}withSchema(e){return this.schemaName=e,this}fromRaw(e,r=[]){return this.fromNode=new G(new O(e,r)),this}with(e,r,n){let o=Array.isArray(r)?r:void 0,s=Array.isArray(r)?n:r,a=new i(this.model,this.sqlDataSource),l=s(a),u=l!=null&&"extractQueryNodes"in l?l:a;return this.withNodes.push(new rt("normal",e,u.extractQueryNodes(),o)),this}withRecursive(e,r){let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new rt("recursive",e,s.extractQueryNodes())),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new h("QueryBuilder::withMaterialized","MATERIALIZED_CTE_NOT_SUPPORTED",new Error("MATERIALIZED CTE is only supported by postgres"));let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new rt("materialized",e,s.extractQueryNodes())),this}withNotMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new h("QueryBuilder::withNotMaterialized","NOT_MATERIALIZED_CTE_NOT_SUPPORTED",new Error("NOT MATERIALIZED CTE is only supported by postgres"));let n=new i(this.model,this.sqlDataSource),o=r(n),s=o!=null&&"extractQueryNodes"in o?o:n;return this.withNodes.push(new rt("not materialized",e,s.extractQueryNodes())),this}insert(e,r){this.assertWriteClausesSupported("QueryBuilder::insert");let n=Object.fromEntries(Object.keys(e).map(s=>[s,e[s]])),o=!r||r.length===0;return this.insertNodeSource=void 0,this.insertConflictConfig=null,this.onDuplicateNode=null,this.insertNode=new te(this.fromNode,[this.interpreterUtils.stripComputedFromData(n)],r,o),new De(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:s,values:a}=this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert",this.dbType),l=Object.fromEntries(s.map((g,y)=>[g,a[y]])),u=this.insertConflictConfig;if(this.insertNode=new te(this.fromNode,[l],u?void 0:r,u?true:o),u&&this.dbType==="mssql"){let g=await this.executeMssqlMergeRaw([l],u.conflictColumns,u.columnsToUpdate,{updateOnConflict:u.mode==="update",returning:r},[e]);return o?void 0:g[0]}let{sql:d,bindings:c}=this.astParser.parse(this.extractWriteNodes()),m=await this.getSqlDataSource("write"),p=await Y(d,c,m,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:u?"raw":"insertOne",models:[e]}});if(!o)return Array.isArray(p)&&p.length?p[0]:p},this.buildInsertConflictCommit(r),this.interpreterUtils.filterComputedColumns(Object.keys(e)),"QueryBuilder::insert")}insertMany(e,r){this.assertWriteClausesSupported("QueryBuilder::insertMany");let n=e.map(s=>this.interpreterUtils.stripComputedFromData(Object.fromEntries(Object.keys(s).map(a=>[a,s[a]])))),o=!r||r.length===0;return this.insertNodeSource=void 0,this.insertConflictConfig=null,this.onDuplicateNode=null,this.insertNode=new te(this.fromNode,n,r,o),new De(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{if(!e.length)return o?void 0:[];let s=await Promise.all(e.map(async m=>{let{columns:p,values:g}=this.interpreterUtils.prepareColumns(Object.keys(m),Object.values(m),"insert",this.dbType);return Object.fromEntries(p.map((y,w)=>[y,g[w]]))})),a=this.insertConflictConfig;if(this.insertNode=new te(this.fromNode,s,a?void 0:r,a?true:o),a&&this.dbType==="mssql")return this.executeMssqlMergeRaw(s,a.conflictColumns,a.columnsToUpdate,{updateOnConflict:a.mode==="update",returning:r},e);let{sql:l,bindings:u}=this.astParser.parse(this.extractWriteNodes()),d=await this.getSqlDataSource("write"),c=await Y(l,u,d,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:a?"raw":"insertMany",models:s}});if(!o)return c},this.buildInsertConflictCommit(r),e.length?this.interpreterUtils.filterComputedColumns(Object.keys(e[0])):[],"QueryBuilder::insertMany")}upsert(e,r,n={updateOnConflict:true}){return this.buildRawUpsert([{...r,...e}],Object.keys(r),this.interpreterUtils.filterComputedColumns(Object.keys(e)),n)}upsertMany(e,r,n,o={updateOnConflict:true}){return this.buildRawUpsert(n,e,this.interpreterUtils.filterComputedColumns(r),o)}buildRawUpsert(e,r,n,o){let s=o.returning?.length?[...o.returning]:void 0,a=s?this.insertMany(e,s):this.insertMany(e),l=o.updateOnConflict??true?a.onConflict(r).merge(n):a.onConflict(r).ignore();return new ie(()=>l.unWrap(),()=>l.toSql(),()=>l.toQuery(),async()=>{let u=await l;return Array.isArray(u)?u:[u]})}buildInsertConflictCommit(e){return r=>{this.insertConflictConfig=r;let n=r.conflictColumns.length===0;if(n&&this.dbType==="mssql")throw new h("QueryBuilder::onConflict","NOT_SUPPORTED_IN_MSSQL",new Error("MSSQL cannot express a target-less ON CONFLICT; provide the conflict columns"));let o=n&&(this.dbType==="mysql"||this.dbType==="mariadb");this.insertNode=new te(this.fromNode,this.insertNode?.records??[],void 0,true,false,{source:this.insertNode?.source,targetColumns:this.insertNode?.targetColumns}),this.onDuplicateNode=this.dbType==="mssql"||o?null:new ve(this.model.table,r.conflictColumns,r.columnsToUpdate,r.mode,e?.length?e:void 0);}}insertFrom(e,r){this.assertWriteClausesSupported("QueryBuilder::insertFrom");let n=Array.isArray(e),o=n?e:void 0,s=n?r:e,a=typeof s=="function"?s(new i(this.model,this.sqlDataSource)):s,l=a!=null&&"extractQueryNodes"in a?a:s;return this.buildInsertFrom(l.extractQueryNodes(),o)}buildInsertFrom(e,r){return this.insertNodeSource=e,this.insertConflictConfig=null,this.onDuplicateNode=null,this.insertNode=new te(this.fromNode,[],void 0,true,false,{source:e,targetColumns:r}),new De(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:n,bindings:o}=this.astParser.parse(this.extractWriteNodes()),s=await this.getSqlDataSource("write"),a=await Y(n,o,s,this.dbType,"rows",{timeout:this.queryTimeout});return Array.isArray(a)?a:[a]},this.buildInsertConflictCommit(),r?this.interpreterUtils.filterComputedColumns(r):[],"QueryBuilder::insertFrom")}async executeMssqlMergeRaw(e,r,n,o,s){if(!e.length)return [];let a=Object.keys(e[0]),l=this.interpreterUtils.formatStringColumn("mssql",this.model.table),u=L=>this.interpreterUtils.formatStringColumn("mssql",L),d=[],c=e.map(L=>`select ${a.map(P=>(d.push(L[P]),`@${d.length}`)).join(", ")}`),m=a.map(u).join(", "),p=c.join(" union all "),g=r.map(L=>`target.${u(L)} = source.${u(L)}`).join(" and "),y=n.filter(L=>!r.includes(L)).map(L=>`target.${u(L)} = source.${u(L)}`).join(", "),w=a.map(u).join(", "),T=a.map(L=>`source.${u(L)}`).join(", "),S=o.returning&&o.returning.length?o.returning.map(L=>`inserted.${u(L)}`).join(", "):a.map(L=>`inserted.${u(L)}`).join(", "),C=(o.updateOnConflict??true)&&y?`when matched then update set ${y}`:"",I=`merge into ${l} as target using (${p}) as source (${m}) on ${g} ${C} when not matched then insert (${w}) values (${T}) output ${S};`,D=await this.getSqlDataSource("write"),A=await Y(I,d,D,this.dbType,"rows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(A)?A:[A]}update(e,r){this.assertWriteClausesSupported("QueryBuilder::update",this.dbType==="mysql"||this.dbType==="mariadb",false);let n=this.interpreterUtils.stripComputedFromData(e),o=Object.keys(n),s=Object.values(n);if(!o.length)throw new h("QueryBuilder::update","UPDATE_REQUIRES_COLUMNS");this.updateNode=new Ee(this.fromNode,o,s),this.returningNode=this.buildReturningNode("update",r);let a=this.returningNode!==null;return new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:l,values:u}=this.interpreterUtils.prepareColumns(o,s,"update",this.dbType);this.updateNode=new Ee(this.fromNode,l,u);let{sql:d,bindings:c}=this.astParser.parse(this.extractWriteNodes()),m=await this.getSqlDataSource("write");return Y(d,c,m,this.dbType,a?"rows":"affectedRows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:a?"fetch":"affectedRows"}})})}buildReturningNode(e,r){return !r?.length||!this.interpreterUtils.dialectEmitsReturning(this.dbType)?null:new gt(r,e==="delete"?"deleted":"inserted")}withReturningNode(e){if(!this.returningNode)return e;if(this.dbType==="mssql"){let[r,...n]=e;return [r,this.returningNode,...n]}return [...e,this.returningNode]}truncate(e={}){if(this.assertWriteClausesSupported("QueryBuilder::truncate"),this.withNodes.length)throw new h("QueryBuilder::truncate","CTE_NOT_SUPPORTED_ON_TRUNCATE");return this.truncateNode=new qt(this.fromNode,false,e),new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:r,bindings:n}=this.astParser.parse(this.extractWriteNodes()),o=await this.getSqlDataSource("write");await Y(r,n,o,this.dbType,"rows",{timeout:this.queryTimeout});})}delete(e){this.assertWriteClausesSupported("QueryBuilder::delete",this.dbType==="mysql"||this.dbType==="mariadb",false),this.deleteNode=new ht(this.fromNode),this.returningNode=this.buildReturningNode("delete",e);let r=this.returningNode!==null;return new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{sql:n,bindings:o}=this.astParser.parse(this.extractWriteNodes()),s=await this.getSqlDataSource("write");return Y(n,o,s,this.dbType,r?"rows":"affectedRows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:r?"fetch":"affectedRows"}})})}softDelete(e={}){this.assertWriteClausesSupported("QueryBuilder::softDelete",this.dbType==="mysql"||this.dbType==="mariadb",false);let{column:r="deletedAt",value:n=lt()}=e||{};return this.updateNode=new Ee(this.fromNode,[r],[n]),new ie(()=>this.unWrap(),()=>this.toSql(),()=>this.toQuery(),async()=>{let{columns:o,values:s}=this.interpreterUtils.prepareColumns([r],[n],"update",this.dbType);this.updateNode=new Ee(this.fromNode,o,s);let{sql:a,bindings:l}=this.astParser.parse(this.extractWriteNodes()),u=await this.getSqlDataSource("write");return Y(a,l,u,this.dbType,"affectedRows",{timeout:this.queryTimeout,sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})})}toQuery(){let{sql:e,bindings:r}=this.toSql();return Bt(e,r)}toSql(){let{sql:e,bindings:r}=this.unWrap(),n=Qt(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${n}`:n,bindings:[...r||[]]}}unWrap(){this.selectNodes.length||(this.selectNodes=[new z("*")]);let{sql:e,bindings:r}=this.astParser.parse(this.extractQueryNodes());return {sql:this.withQuery?`${this.withQuery} ${e}`:e,bindings:[...r||[]]}}clone(){let e=new i(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=F(this.modelSelectedColumns),e.distinctNode=F(this.distinctNode),e.distinctOnNode=F(this.distinctOnNode),e.selectNodes=F(this.selectNodes),e.withQuery=F(this.withQuery),e.joinNodes=F(this.joinNodes),e.whereNodes=F(this.whereNodes),e.groupByNodes=F(this.groupByNodes),e.havingNodes=F(this.havingNodes),e.orderByNodes=F(this.orderByNodes),e.lockQueryNodes=F(this.lockQueryNodes),e.unionNodes=F(this.unionNodes),e.withNodes=F(this.withNodes),e.comments=[...this.comments],e.hints=[...this.hints],e.schemaName=this.schemaName,e.fromNode=F(this.fromNode),e.limitNode=F(this.limitNode),e.offsetNode=F(this.offsetNode),e.returningNode=F(this.returningNode),e.isNestedCondition=this.isNestedCondition,e}clear(){let e=new i(this.model,this.sqlDataSource);return this.fromNode.alias&&e.table(e.model.table,this.fromNode.alias),e}clearLockQuery(){return this.lockQueryNodes=[],this}clearUnionQuery(){return this.unionNodes=[],this}clearWithQuery(){return this.withNodes=[],this}assertWriteClausesSupported(e,r=false,n=true){if(!n&&this.withNodes.length&&this.dbType==="mariadb")throw new h(e,"CTE_NOT_SUPPORTED_ON_WRITE",new Error("MariaDB does not support a CTE on UPDATE or DELETE"));if(this.selectNodes.length>0||!!this.distinctNode||!!this.distinctOnNode||this.groupByNodes.length>0||this.havingNodes.length>0||this.unionNodes.length>0||this.lockQueryNodes.length>0||this.comments.length>0||this.hints.length>0)throw new h(e,"SELECT_ONLY_CLAUSE_ON_WRITE");if(this.joinNodes.length>0)throw new h(e,"JOIN_NOT_SUPPORTED_ON_WRITE");let s=this.orderByNodes.length>0||this.limitNode!==null;if(this.offsetNode||!r&&s)throw new h(e,"ORDER_BY_LIMIT_NOT_SUPPORTED_ON_WRITE")}extractWriteNodes(){if(this.insertNode){let e=this.dbType==="mysql"||this.dbType==="mariadb";this.insertNode.withNodes=e&&this.withNodes.length?this.withNodes:void 0,this.insertNode.source=this.insertNodeSource;let r=(this.dbType==="mysql"||this.dbType==="mariadb")&&!!this.insertConflictConfig&&this.insertConflictConfig.conflictColumns.length===0&&this.insertConflictConfig.mode==="ignore";return this.insertNode.ignoreInto=r,this.insertNode.keyword=r?"insert ignore into":"insert into",this.insertNode.disambiguateSource=this.dbType==="sqlite"&&!!this.insertNodeSource&&!!this.onDuplicateNode,[...e?[]:this.withNodes,this.insertNode,this.onDuplicateNode].filter(Boolean)}return this.updateNode?[...this.withNodes,...this.withReturningNode([this.updateNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode].filter(Boolean))]:this.deleteNode?[...this.withNodes,...this.withReturningNode([this.deleteNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode].filter(Boolean))]:this.truncateNode?[this.truncateNode]:[]}extractQueryNodes(){if(this.schemaName){this.fromNode&&typeof this.fromNode.table=="string"&&(this.fromNode.schema=this.schemaName);for(let n of this.joinNodes)n.schema=this.schemaName;}if(this.insertNode||this.updateNode||this.deleteNode||this.truncateNode)return this.extractWriteNodes();this.selectNodes.length||(this.selectNodes=[new z("*")]);let e=this.comments.map(n=>new Wt(n)),r=this.hints.length?[new Wt(this.hints.join(" "),true)]:[];return [...this.withNodes,...e,this.distinctNode,this.distinctOnNode,...this.selectNodes,...r,this.fromNode,...this.joinNodes,...this.whereNodes,...this.groupByNodes,...this.havingNodes,...this.orderByNodes,this.limitNode,this.offsetNode,...this.lockQueryNodes,...this.unionNodes].filter(Boolean)}clearForFunctions(){return this.clearSelect(),this.clearGroupBy(),this.clearOrderBy(),this.clearLimit(),this.clearOffset(),this}isMssqlTransaction(){return this.sqlDataSource.type==="mssql"&&!!this.sqlDataSource.sqlConnection}async executePaginateQueries(e,r){if(this.isMssqlTransaction()){let n=await e(),o=await r();return [n,o]}return Promise.all([e(),r()])}async getSqlDataSource(e){return this.replicationMode?this.replicationMode==="master"?this.sqlDataSource:e==="write"?this.sqlDataSource:this.sqlDataSource.getSlave()||this.sqlDataSource:e==="read"?this.sqlDataSource.getSlave()||this.sqlDataSource:this.sqlDataSource}async execSqlWithSlaveHandling(e,r){let n=await this.getSqlDataSource(e);if(!(n!==this.sqlDataSource))return r(n);try{return await r(n)}catch(s){let a=s instanceof Error?s:new Error(String(s)),l=this.sqlDataSource.getOnSlaveServerFailure();if(l)return await l(a,{host:n.host,port:n.port,username:n.username,password:n.password,database:n.database,type:n.getDbType()}),await r(this.sqlDataSource);throw a}}};function jy(i,t){return t.strategy&&t.strategy!=="auto"?t.strategy:Fh(i)}function Fh(i){let{parentCount:t,relationType:e,hasLimitOffset:r}=i;return r&&(e==="hasMany"||e==="manyToMany")?"batched":t===1?"join":e==="manyToMany"?typeof t=="number"&&t<=10?"join":"batched":typeof t=="number"&&t<10?"join":"batched"}var Bl=ne(),Ue=class i extends B{constructor(e,r){super(e,r);this.loadOptions={strategy:"auto"};this.sqlModelManagerUtils=new kt(e,this.dbType,r),this.relationQueryBuilders=[],this.modelSelectedColumns=[],this.modelColumnsMap=this.model.getColumnsByDatabaseName(),this.modelColumnsDatabaseNames=new Map;for(let[n,o]of this.modelColumnsMap)this.modelColumnsDatabaseNames.set(n,o.columnName);}expandModelSelectColumns(){let e=this.selectNodes;if(!e.length){if(this.joinNodes.length)return;for(let[,r]of this.modelColumnsMap)r.expression||e.push(new z(r.databaseName,r.columnName));return}for(let r of e){if(r.isRawValue||r.alias!==void 0||typeof r.column!="string"||r.column.includes(".")||r.column==="*")continue;let n=this.modelColumnsMap.get(r.column);!n||n.expression||(r.alias=n.columnName);}}get isRelationQueryBuilder(){return !!this.relation}static from(e,r={}){if(r.connection)return new i(e,r.connection);if(r.trx)return new i(e,r.trx.sql);throw new Error("ModelQueryBuilder::from - A connection or transaction is required. Use sql.from(Model) instead.")}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async oneOrFail(e){let r=await this.one();if(!r)throw new h(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return r}async many(){await this.model.beforeFetch?.(this);let e=this.collectUserOutputNames();this.expandModelSelectColumns();let n=await super.many();if(!n.length)return [];let o=fe(n,this.model,this.modelSelectedColumns,e);if(!o)return [];let s=Array.isArray(o)?o:[o];return this.relationQueryBuilders.length&&await this.processRelationsWithStrategy(s),s}then(e,r){return this.many().then(e,r)}catch(e){return this.many().catch(e)}finally(e){return this.many().finally(e)}async*chunk(e){let r=0;for(;;){let n=await this.limit(e).offset(r).many();if(!n.length)break;yield n,r+=n.length;}}async stream(e={}){await this.model.beforeFetch?.(this);let r=this.collectUserOutputNames();this.expandModelSelectColumns();let{sql:n,bindings:o}=this.unWrap(),s=await this.getSqlDataSource("read");return await gr(n,o,s,e,{onData:async(l,u)=>{let d=fe([u],this.model,this.modelSelectedColumns,r);d&&(this.relationQueryBuilders.length&&await this.processRelationsRecursively([d]),l.write(d));}})}async paginateWithCursor(e,r){return super.paginateWithCursor(e,r)}insert(e,r={}){return this.assertWriteClausesSupported("ModelQueryBuilder::insert"),this.getModelManager(r.trx).insert(e,{returning:r.returning,withNodes:this.withNodes.length?this.withNodes:void 0})}insertMany(e,r={}){return this.assertWriteClausesSupported("ModelQueryBuilder::insertMany"),this.getModelManager(r.trx).insertMany(e,{returning:r.returning,withNodes:this.withNodes.length?this.withNodes:void 0})}insertFrom(e,r){this.assertWriteClausesSupported("ModelQueryBuilder::insertFrom");let n=Array.isArray(e),o=n?e:void 0,s=n?r:e,a=typeof s=="function"?s(new i(this.model,this.sqlDataSource)):s,l=a!=null&&"extractQueryNodes"in a?a:s;return this.buildInsertFrom(l.extractQueryNodes(),o)}upsert(e,r,n={updateOnConflict:true}){this.assertWriteClausesSupported("ModelQueryBuilder::upsert");let o=this.getModelManager(n.trx),s=Object.keys(e),a=Object.keys(r),l={...e,...r};return o.upsertMany(s,a,[l],{updateOnConflict:n.updateOnConflict??true,returning:n.returning}).then(u=>Array.isArray(u)?u[0]:u)}upsertMany(e,r,n={updateOnConflict:true}){this.assertWriteClausesSupported("ModelQueryBuilder::upsertMany");let o=this.getModelManager(n.trx),s=r.length>0?Object.keys(r[0]):[];return o.upsertMany(e,s,r,{updateOnConflict:n.updateOnConflict??true,returning:n.returning})}getModelManager(e){let r=e?e.sql:this.sqlDataSource.getTransactionBoundSqlDataSource()??this.sqlDataSource;return new et(this.model,r)}async find(e){return this.getModelManager().find(e)}async findOne(e){return this.getModelManager().findOne(e)}async findOneOrFail(e){return this.getModelManager().findOneOrFail(e)}async findOneByPrimaryKey(e,r){return this.getModelManager().findOneByPrimaryKey(e,r)}async updateRecord(e,r,n){return this.getModelManager(n?.trx).updateRecord(e,r,n)}async deleteRecord(e,r){return this.getModelManager(r?.trx).deleteRecord(e)}async save(e,r){let n=this.model.primaryKey;if(!n)throw new h(this.model.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");let o=e[n],s=o?{[n]:o}:{};return this.upsert(s,e,{updateOnConflict:true,returning:r?.returning,trx:r?.trx})}async softDeleteRecord(e,r,n){let{column:o=this.model.softDeleteColumn,value:s=this.model.softDeleteValue}=r||{},a={[o]:s};return this.getModelManager(n?.trx).updateRecord(e,a,{returning:n?.returning})}async firstOrInsert(e,r,n){let o=this.getModelManager(n?.trx),s=await o.findOne({where:e});if(s)return s;let a={...e,...r};return o.insert(a,{returning:["*"]})}async refresh(e){return this.getModelManager().findOneByPrimaryKey(e)}async sync(e,r,n,o,s={}){if(Array.isArray(n)||(n=[n]),!n.length)return;let a=this.sqlModelManagerUtils.getRelationFromModel(e);if(a.type!=="manyToMany")throw new h(`${this.model.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let l=V(a.leftForeignKey,s.caseConvention||this.model.databaseCaseConvention),u=V(a.rightForeignKey,s.caseConvention||this.model.databaseCaseConvention),d=n.map((p,g)=>({[l]:r[this.model.primaryKey],[u]:p[a.model.primaryKey],...o?o(p,g):{}}));class c extends de{static get table(){return a.throughModel}}c.databaseCaseConvention="preserve",c.modelCaseConvention="preserve",await new et(c,s.trx?s.trx.sql:this.sqlDataSource).insertMany(d);}truncate(e={}){return super.truncate(e)}update(e,r={}){let n=r.returning,o=super.update(e,n);return new ie(()=>o.unWrap(),()=>o.toSql(),()=>o.toQuery(),async()=>{if(!n||!this.returningNode)return o;let s=await o;return fe(s,this.model,n)})}softDelete(e={}){let r=super.softDelete(e);return new ie(()=>r.unWrap(),()=>r.toSql(),()=>r.toQuery(),async()=>r)}delete(e={}){let r=e.returning,n=super.delete(r);return new ie(()=>n.unWrap(),()=>n.toSql(),()=>n.toQuery(),async()=>{if(!r||!this.returningNode)return n;let o=await n;return fe(o,this.model,r)})}async getCount(e="*"){this.buildCountQuery(e);let r=await this.one();return r?+r.total:0}async getMax(e){this.clearForFunctions(),this.selectFunc("max",e,"total");let r=await this.one();return r?+r.total:0}async getMin(e){this.clearForFunctions(),this.selectFunc("min",e,"total");let r=await this.one();return r?+r.total:0}async getAvg(e){this.clearForFunctions(),this.selectFunc("avg",e,"total");let r=await this.one();return r?+r.total:0}async getSum(e){this.clearForFunctions(),this.selectFunc("sum",e,"total");let r=await this.one();return r?+r.total:0}async paginate(e,r){let n=this.clone(),o=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>o.many(),()=>n.getCount("*"));return {paginationMetadata:br(e,r,a),data:s}}select(...e){if(e.length===2&&(typeof e[0]=="function"||e[0]instanceof B)&&typeof e[1]=="string"){let[r,n]=e;return super.select(r,n),this}return super.select(...e),this}selectRaw(e){return super.selectRaw(e),this}selectFunc(e,r,n){return super.selectFunc(e,r,n),this}countDistinct(e,r){return super.countDistinct(e,r),this}sumDistinct(e,r){return super.sumDistinct(e,r),this}avgDistinct(e,r){return super.avgDistinct(e,r),this}rank(e,r){return super.rank(e,r),this}denseRank(e,r){return super.denseRank(e,r),this}rowNumber(e,r){return super.rowNumber(e,r),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}selectJson(e,r,n){return super.selectJson(e,r,n),this}selectJsonText(e,r,n){return super.selectJsonText(e,r,n),this}selectJsonArrayLength(e,r,n){return super.selectJsonArrayLength(e,r,n),this}selectJsonKeys(e,r,n){return super.selectJsonKeys(e,r,n),this}selectJsonRaw(e,r){return super.selectJsonRaw(e,r),this}load(e,r,n){let o,s={strategy:"auto"};typeof r=="function"?(o=r,n&&(s=n)):r&&typeof r=="object"&&(s=r);let a=this.sqlModelManagerUtils.getRelationFromModel(e),l=new i(a.model,this.sqlDataSource);return l.relation=a,l.loadOptions=s,o?.(l),this.relationQueryBuilders.push(l),this}clearRelations(){return this.relationQueryBuilders=[],this}havingRelated(e,r,n){return this.andHavingRelated(e,r,n)}andHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.whereExists(d),this}orHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.orWhereExists(d),this}notHavingRelated(e,r,n){return this.andNotHavingRelated(e,r,n)}andNotHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.whereNotExists(d),this}orNotHavingRelated(e,r,n){let o,s,a;typeof r=="function"?a=r:typeof r=="string"&&n!==void 0?(s=r,o=n):r!==void 0&&(o=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),u=new i(l.model,this.sqlDataSource);u.relation=l;let d=this.getRelatedModelsQueryForRelation(u,l,[]);return d.clearWhere(),d.clearSelect(),d.selectRaw("1"),a?.(d),this.applyHavingRelatedFilter(d,l,s,o),this.orWhereNotExists(d),this}clone(){let e=super.clone();return e.relationQueryBuilders=F(this.relationQueryBuilders),e}async processRelationsRecursively(e){await Promise.all(this.relationQueryBuilders.filter(r=>r.isRelationQueryBuilder).map(async r=>{let n=await this.getRelatedModelsForRelation(r,r.relation,e);this.mapRelatedModelsToModels(r.relation,e,n);}));}async processRelationsWithStrategy(e){let r=e.length,n=this.relationQueryBuilders.filter(s=>s.isRelationQueryBuilder),o=async s=>{let a=jy({parentCount:r,relationType:s.relation.type,hasLimitOffset:!!s.limitNode||!!s.offsetNode,hasOrderBy:s.orderByNodes.length>0},s.loadOptions),l=s.relationQueryBuilders.length>0;a==="join"&&!l?await this.loadRelationViaJoin(s,e):await this.loadRelationViaBatch(s,e);};if(this.dbType==="mssql"){for(let s of n)await o(s);return}await Promise.all(n.map(o));}async loadRelationViaJoin(e,r){let n=e.relation,o=e.loadOptions.joinSeparator||"__",a=await this.buildJoinQuery(e,n,o).many();this.mapJoinedResultsToModels(a,r,n,o);}buildJoinQuery(e,r,n){let o=new i(this.model,this.sqlDataSource);if(this.modelSelectedColumns.length>0)for(let s of this.selectNodes)o.selectNodes.push(F(s));else for(let[s,a]of this.model.getColumnsByDatabaseName())a.expression||o.selectNodes.push(new z(`${this.model.table}.${s}`,void 0,void 0,true));for(let s of this.whereNodes){let a=F(s);this.qualifyWhereNodeColumns(a,this.model.table),o.whereNodes.push(a);}for(let s of this.groupByNodes)o.groupByNodes.push(F(s));for(let s of this.orderByNodes)o.orderByNodes.push(F(s));switch((r.type==="hasOne"||r.type==="belongsTo")&&(this.limitNode&&(o.limitNode=F(this.limitNode)),this.offsetNode&&(o.offsetNode=F(this.offsetNode))),r.type){case "hasOne":case "hasMany":o.leftJoin(r.model.table,`${this.model.table}.${this.model.primaryKey}`,`${r.model.table}.${r.foreignKey}`);break;case "belongsTo":o.leftJoin(r.model.table,`${this.model.table}.${r.foreignKey}`,`${r.model.table}.${r.model.primaryKey}`);break;case "manyToMany":{let s=r;o.leftJoin(s.throughModel,`${this.model.table}.${this.model.primaryKey}`,`${s.throughModel}.${s.leftForeignKey}`),o.leftJoin(s.model.table,`${s.throughModel}.${s.rightForeignKey}`,`${s.model.table}.${s.model.primaryKey}`);break}}this.selectRelationColumnsWithAlias(o,r,e,n);for(let s of e.whereNodes)o.whereNodes.push(F(s));for(let s of e.orderByNodes)o.orderByNodes.push(F(s));return o}selectRelationColumnsWithAlias(e,r,n,o){let s=r.columnName,a=r.model,l=a.getColumnsByName(),u=a.getColumnsByDatabaseName(),d=n.selectNodes.filter(m=>typeof m.column=="string"),c=d.some(m=>m.column==="*"||m.column.endsWith(".*"));if(d.length===0||c)for(let[m,p]of u)e.selectRaw(`${a.table}.${m} as ${s}${o}${p.columnName}`);else for(let m of d){let p=m.column,g=p.includes(".")?p.split(".").pop():p,y=u.get(g)||l.get(g),w=y?.databaseName??g,T=m.alias??y?.columnName??g;e.selectRaw(`${a.table}.${w} as ${s}${o}${T}`);}}mapJoinedResultsToModels(e,r,n,o){let{columnName:s,type:a}=n,l=n.model.getColumnsByName();if(a==="hasMany"||a==="manyToMany"){let u=new Map;e.forEach(d=>{let c=d[this.model.primaryKey];u.has(c)||u.set(c,[]);let m=this.extractRelationDataFromRow(d,s,o);m&&(this.serializeRelationData(m,l),u.get(c).push(m));}),r.forEach(d=>{let c=d[this.model.primaryKey];d[s]=u.get(c)||[];});}else {let u=new Map;e.forEach(d=>{let c=d[this.model.primaryKey];if(!u.has(c)){let m=this.extractRelationDataFromRow(d,s,o);m&&(this.serializeRelationData(m,l),u.set(c,m));}}),r.forEach(d=>{let c=d[this.model.primaryKey];d[s]=u.get(c)||null;});}}extractRelationDataFromRow(e,r,n){let o=`${r}${n}`,s={},a=false,l=false;for(let u of Object.keys(e))if(u.startsWith(o)){let d=u.substring(o.length);s[d]=e[u],a=true,e[u]!==null&&e[u]!==void 0&&(l=true);}return a&&l?s:null}qualifyWhereNodeColumns(e,r){if(e instanceof M)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof Se)e.column.includes(".")||(e.column=`${r}.${e.column}`);else if(e instanceof xe)for(let n of e.nodes)this.qualifyWhereNodeColumns(n,r);}serializeRelationData(e,r){for(let n of Object.keys(e)){let o=r.get(n);o?.serialize&&e[n]!==null&&e[n]!==void 0&&(e[n]=o.serialize(e[n]));}}async loadRelationViaBatch(e,r){let n=await this.getRelatedModelsForRelation(e,e.relation,r);this.mapRelatedModelsToModels(e.relation,r,n);}mapRelatedModelsToModels(e,r,n){switch(e.type){case "hasOne":if(!this.model.primaryKey)throw new h(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let o=new Map;n.forEach(m=>{let p=m[e.foreignKey];p&&o.set(String(p),m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=null;return}let g=o.get(String(p));m[e.columnName]=g||null;});break;case "belongsTo":let s=new Map;n.forEach(m=>{if(!e.model.primaryKey)throw new h(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let p=m[e.model.primaryKey];p&&s.set(String(p),m);}),r.forEach(m=>{let p=m[e.foreignKey];if(!p){m[e.columnName]=null;return}let g=s.get(String(p));m[e.columnName]=g||null;});break;case "hasMany":if(!this.model.primaryKey)throw new h(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;n.forEach(m=>{let p=m[e.foreignKey];if(!p)return;let g=String(p);a.has(g)||a.set(g,[]),a.get(g).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let g=a.get(String(p))||[];m[e.columnName]=g;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new h(this.model.name+"::mapRelatedModelsToModels::manyToMany","MODEL_HAS_NO_PRIMARY_KEY");let l=e,u=new Map,d=l.leftForeignKey,c=this.modelColumnsMap.get(d)||this.modelColumnsDatabaseNames.get(d)||V(d,this.model.modelCaseConvention);n.forEach(m=>{let p=m[c];if(p==null)return;let g=String(p);u.has(g)||u.set(g,[]),delete m[c],u.get(g).push(m);}),r.forEach(m=>{let p=m[this.model.primaryKey];if(!p){m[e.columnName]=[];return}let g=u.get(String(p))||[];m[e.columnName]=g;});break;default:throw new h(this.model.name+"::mapRelatedModelsToModels","UNSUPPORTED_RELATION_TYPE")}}async getRelatedModelsForRelation(e,r,n){return this.getRelatedModelsQueryForRelation(e,r,n).many()}getRelatedModelsQueryForRelation(e,r,n){let o=this.getFilterValuesFromModelsForRelation(r,n);switch(r.type){case "belongsTo":case "hasOne":return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,o);case "hasMany":let s=e.limitNode?.limit,a=e.offsetNode?.offset;if(!s&&!a)return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,o);let l=ke(Bl.crypto.randomBytes(6)),u=`${r.model.table}_cte_${l}`,d=e.orderByNodes.map(A=>A.isRawValue?A.column:`${this.interpreterUtils.formatStringColumn(this.dbType,A.column)} ${A.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let c=e.with(u,A=>A.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${d}) as rn_${l}`).whereIn(r.foreignKey,o));s&&c.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&c.whereRaw(`rn_${l} > ${a}`);let m=e.modelSelectedColumns.map(A=>kn(A,u,e.model.table));return c.select(...m).table(u);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new h(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!n.length)return e;let g=e.limitNode?.limit,y=e.offsetNode?.offset,w=e.modelSelectedColumns.length?e.modelSelectedColumns.map(A=>A.includes(".")?A:`${r.model.table}.${A}`):[`${r.model.table}.*`];if(!g&&!y)return e.select(...w).select([`${p.throughModel}.${p.leftForeignKey}`,p.leftForeignKey]).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o);let T=ke(Bl.crypto.randomBytes(6)),S=`${r.model.table}_cte_${T}`,x=e.orderByNodes.map(A=>{if(A.isRawValue)return A.column;let L=A.column.includes(".")?A.column:`${r.model.table}.${A.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,L)} ${A.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let C=`${ke(Bl.crypto.randomBytes(6))}_left_foreign_key`,I=e.with(S,A=>A.select(...w).select([`${p.throughModel}.${p.leftForeignKey}`,C]).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${x}) as rn_${T}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,o));g&&I.whereRaw(`rn_${T} <= ${g+(y||0)}`),y&&I.whereRaw(`rn_${T} > ${y}`);let D=w.map(A=>kn(A,S,e.model.table));return I.select(...D).select([`${S}.${C}`,p.leftForeignKey]).table(S);default:throw new h(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new h(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);case "belongsTo":return r.map(n=>n[e.foreignKey]);case "manyToMany":if(!this.model.primaryKey)throw new h(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(n=>n[this.model.primaryKey]);default:throw new h(this.model.name+"::getFilterValuesFromModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}applyHavingRelatedFilter(e,r,n,o){let s=new f(r.model),a=new f(this.model),l=this.dbType;switch(r.type){case "hasOne":case "hasMany":{if(!this.model.primaryKey||!r.foreignKey)throw new h(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");let u=s.formatStringColumn(l,`${r.model.table}.${r.foreignKey}`),d=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${u} = ${d}`),n&&typeof o=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${n} ${o}`);return}case "belongsTo":{if(!r.model.primaryKey||!r.foreignKey)throw new h(this.model.name+"::applyHavingRelatedFilter",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${r.model.name}`);let u=s.formatStringColumn(l,`${r.model.table}.${r.model.primaryKey}`),d=a.formatStringColumn(l,`${this.model.table}.${r.foreignKey}`);e.whereRaw(`${u} = ${d}`),n&&typeof o=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${n} ${o}`);return}case "manyToMany":{let u=r;if(!this.model.primaryKey||!r.model.primaryKey)throw new h(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");e.joinNodes?.some(p=>!p.isRawValue&&p.table===u.throughModel&&p.type==="left")||e.leftJoin(u.throughModel,`${u.relatedModel}.${r.model.primaryKey}`,`${u.throughModel}.${u.rightForeignKey}`);let c=a.formatStringColumn(l,`${u.throughModel}.${u.leftForeignKey}`),m=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${c} = ${m}`),n&&typeof o=="number"&&e.groupByRaw(c).andHavingRaw(`count(*) ${n} ${o}`);return}default:throw new h(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}};var Ql=class{constructor(t,e,r){this.sqlDataSource=t,this.typeofModel=e,this.modelData=r;}merge(t){this.modelData={...this.modelData,...t};}getQueryBuilder(){return new Ue(this.typeofModel,this.sqlDataSource)}async create(t){if(t<=0)return [];let e=this.getQueryBuilder();if(t===1)return await e.insert(this.modelData,{returning:["*"]});let r=Array.from({length:t});return await e.insertMany(r.map(()=>({...this.modelData})),{returning:["*"]})}},jh=(i,t,e)=>new Ql(i,t,e);var Ct=new Map,Je=new Map,Wr=class{async get(t){return Ct.get(t)}async set(t,e,r){let n=Je.get(t);if(n&&(clearTimeout(n),Je.delete(t)),Ct.set(t,e),r){let o=setTimeout(()=>{Ct.delete(t),Je.delete(t);},r);Je.set(t,o);}}async invalidate(t){let e=Je.get(t);e&&(clearTimeout(e),Je.delete(t)),Ct.delete(t);}async invalidateAll(t){let e=Ct.keys();for(let r of e)if(r.startsWith(t)){let n=Je.get(r);n&&(clearTimeout(n),Je.delete(r)),Ct.delete(r);}}};me();var Uy=class{constructor(t){this.ioRedisOptions=t;}async getClient(){if(this.redisInstance)return this.redisInstance;let{default:t}=await import('ioredis').catch(()=>{throw _.error("RedisCacheAdapter::getClient ioredis driver not found and required for the RedisCacheAdapter"),new k("ioredis")});return this.redisInstance=new t(this.ioRedisOptions),this.redisInstance}async get(t){let r=await(await this.getClient()).get(t);if(r!=null)return this.deserializeData(r)}async set(t,e,r){let n=await this.getClient(),o=this.serializeData(e);if(o){if(r){await n.set(t,o,"PX",r);return}await n.set(t,o);}}async invalidate(t){await(await this.getClient()).del(t);}async invalidateAll(t){let e=await this.getClient(),r=await e.keys(`${t}:*`);for(let n of r)await e.del(n);}serializeData(t){if(t!=null){if(typeof t=="string")return t;if(Buffer.isBuffer(t))return t.toString("base64");if(typeof t=="object"||Array.isArray(t))try{return JSON.stringify(t)}catch(e){throw _.error("RedisCacheAdapter::set failed to serialize data"),e}return String(t)}}deserializeData(t){try{return JSON.parse(t)}catch{return t}}async disconnect(){this.redisInstance&&await this.redisInstance.quit();}};var ee=ne(),E={DB_TYPE:ee.readEnv("DB_TYPE"),DB_HOST:ee.readEnv("DB_HOST"),DB_PORT:ee.readEnv("DB_PORT"),DB_USER:ee.readEnv("DB_USER"),DB_PASSWORD:ee.readEnv("DB_PASSWORD"),DB_DATABASE:ee.readEnv("DB_DATABASE"),DB_LOGS:ee.readEnv("DB_LOGS")==="true",MIGRATION_PATH:ee.readEnv("MIGRATION_PATH")||"database/migrations",REDIS_HOST:ee.readEnv("REDIS_HOST"),REDIS_PORT:ee.readEnv("REDIS_PORT"),REDIS_USERNAME:ee.readEnv("REDIS_USERNAME"),REDIS_PASSWORD:ee.readEnv("REDIS_PASSWORD"),REDIS_DATABASE:ee.readEnv("REDIS_DATABASE"),MONGO_URL:ee.readEnv("MONGO_URL"),MONGO_LOGS:ee.readEnv("MONGO_LOGS")==="true",MSSQL_TRUST_SERVER_CERTIFICATE:ee.readEnv("MSSQL_TRUST_SERVER_CERTIFICATE")==="true"||false},Uh=()=>{try{if(!ee.fs.exists(".env"))return E;let i=ee.fs.readFileSync(".env");if(!i)return E;new TextDecoder().decode(i).split(`
142
+ `).forEach(r=>{let[n,o]=r.split("="),s=n.trim(),a=o.trim();switch(s){case "DB_TYPE":E.DB_TYPE||(E.DB_TYPE=a);break;case "DB_HOST":E.DB_HOST||(E.DB_HOST=a);break;case "DB_PORT":E.DB_PORT||(E.DB_PORT=a);break;case "DB_USER":E.DB_USER||(E.DB_USER=a);break;case "DB_PASSWORD":E.DB_PASSWORD||(E.DB_PASSWORD=a);break;case "DB_DATABASE":E.DB_DATABASE||(E.DB_DATABASE=a);break;case "MIGRATION_PATH":E.MIGRATION_PATH||(E.MIGRATION_PATH=a||"database/migrations");break;case "REDIS_HOST":E.REDIS_HOST||(E.REDIS_HOST=a);break;case "REDIS_PORT":E.REDIS_PORT||(E.REDIS_PORT=a);break;case "REDIS_USERNAME":E.REDIS_USERNAME||(E.REDIS_USERNAME=a);break;case "REDIS_PASSWORD":E.REDIS_PASSWORD||(E.REDIS_PASSWORD=a);break;case "REDIS_DATABASE":E.REDIS_DATABASE||(E.REDIS_DATABASE=a);break;case "MONGO_URL":E.MONGO_URL||(E.MONGO_URL=a);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":E.MSSQL_TRUST_SERVER_CERTIFICATE||(E.MSSQL_TRUST_SERVER_CERTIFICATE=a==="true");break}});}catch{}finally{return E}},$=Uh();var Rt=class{constructor(t){switch(this.type=t?.type||$.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 h(`Invalid database type: ${this.type}, please provide a valid database type in your input or in the .env file with the key DB_TYPE
143
+ Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}let e=fr(this.logs);e?.customLogger&&_.setCustomLogger(e.customLogger);}handleCockroachdbSource(t){this.host=t?.host||$.DB_HOST,this.port=+t?.port||+$.DB_PORT,this.username=t?.username||$.DB_USER,this.password=t?.password||$.DB_PASSWORD,this.database=t?.database||$.DB_DATABASE,this.logs=t?.logs||$.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||$.DB_HOST,this.port=+t?.port||+$.DB_PORT,this.username=t?.username||$.DB_USER,this.password=t?.password||$.DB_PASSWORD,this.database=t?.database||$.DB_DATABASE,this.logs=t?.logs||$.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||$.DB_HOST,this.port=+t?.port||+$.DB_PORT,this.username=t?.username||$.DB_USER,this.password=t?.password||$.DB_PASSWORD,this.database=t?.database||$.DB_DATABASE,this.logs=t?.logs||$.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||$.DB_DATABASE||":memory:",this.logs=t?.logs||$.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||$.MONGO_URL,this.logs=t?.logs||$.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||$.DB_HOST,this.port=+t?.port||+$.DB_PORT,this.username=t?.username||$.DB_USER,this.password=t?.password||$.DB_PASSWORD,this.database=t?.database||$.DB_DATABASE,this.logs=t?.logs||$.DB_LOGS||false,this.port||(this.port=1433);}};var ge=class{constructor(t){this.options=t;}static async createDriver(t){throw new h("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};me();var Ut=class Ut extends ge{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new Ut(this.mongoClient);let e=await import('mongodb').catch(()=>{throw new k("mongodb")});if(this.mongoClient=e.default??e,!this.mongoClient)throw new k("mongodb");return new Ut(this.mongoClient)}};Ut.mongoClient=null;var Fr=Ut;me();var Vt=class Vt extends ge{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new Vt(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new k("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new k("mssql");return new Vt(this.mssqlClient)}};Vt.mssqlClient=null;var jr=Vt;me();var Jt=class Jt extends ge{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new Jt(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new k("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new k("mysql2");return new Jt(this.mysqlClient)}};Jt.mysqlClient=null;var Ur=Jt;me();var Ht=class Ht extends ge{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new Ht(this.pgClient);let e=await import('pg').catch(()=>{throw new k("pg")});if("default"in e&&(e.default,this.pgClient=e.default??e),!this.pgClient)throw new k("pg");return new Ht(this.pgClient)}};Ht.pgClient=null;var Vr=Ht;me();var zt=class zt extends ge{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new zt(this.sqlite3Client);let e=await import('sqlite3').catch(()=>{throw new k("sqlite3")});if(this.sqlite3Client=e.default??e,!this.sqlite3Client)throw new k("sqlite3");return new zt(this.sqlite3Client)}};zt.sqlite3Client=null;var Jr=zt;var ae=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await Ur.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await Vr.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await Jr.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await Fr.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await jr.createDriver(),this.mssqlDriver;default:throw new h(`DriverFactory::getDriver Driver ${t} not supported`,"DRIVER_NOT_FOUND")}}static getExistingDriver(t){switch(t){case "mysql":case "mariadb":return this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver;case "sqlite":return this.sqliteDriver;case "mongo":return this.mongodbDriver;case "mssql":return this.mssqlDriver;default:return null}}};ae.mysqlDriver=null,ae.pgDriver=null,ae.sqliteDriver=null,ae.mssqlDriver=null,ae.mongodbDriver=null;var Kl=Symbol("mongoProperties");function Hr(){return (i,t)=>{let e=K.getMetadata(Kl,i)||[];e.push(t),K.defineMetadata(Kl,e,i);}}function Vy(i){return K.getMetadata(Kl,i.prototype)||[]}function Jy(){return {$annotations:{}}}var _t=class extends We{static get collection(){if(!this._collection)throw new Error(`Collection name not set for ${this.name}. Use defineCollection() to create collections.`);return this._collection}static beforeFetch(t){}static beforeInsert(t){return t}static beforeUpdate(t){}static beforeDelete(t){}static async afterFetch(t){return t}};mu([Hr()],_t.prototype,"id");function Vh(i){return typeof i!="function"||!i.prototype}function Jh(i){let t={id:i._id?.toString()};for(let e of Object.keys(i))e!=="_id"&&(t[e]=i[e]);return t}async function He(i,t,e){if(!t)return null;if(Vh(i))return Jh(t);let r=Jy(),n=Vy(i);return (!e||!e.length)&&(e=n),e.includes("id")||e.push("id"),r.$annotations||(r.$annotations={}),await Promise.all(Object.keys(t).map(async o=>{if(o==="_id"){r.id=t._id?.toString();return}if(!n.includes(o)){let a=V(o,i.modelCaseConvention);r.$annotations[a]=t[o];return}let s=V(o,i.modelCaseConvention);r[s]=t[o];})),Object.keys(r.$annotations).length||delete r.$annotations,await Promise.all(e.map(async o=>{if(o!=="id"&&!t.hasOwnProperty(o)){let s=V(o,i.modelCaseConvention);r[s]=null;}})),r}async function zr(i,t,e){return (await Promise.all(t.map(async n=>await He(i,n,e)))).filter(n=>n!==null)}var Gr=class{constructor(t,e,r,n=false){this.model=t,this.idObject={},this.whereObject={},this.logs=n,this.session,this.mongoDataSource=e,e.isConnected&&this.initCollection();}initCollection(){this.collection=this.mongoDataSource.getCurrentConnection().db().collection(this.model.collection);}async ensureInitialized(){await this.mongoDataSource.ensureConnected(),this.collection||this.initCollection();}async one(t={throwErrorOnNull:false}){await this.ensureInitialized(),t.ignoreHooks?.includes("beforeFetch")||this.model.beforeFetch?.(this);let e={...this.whereObject};Object.keys(this.idObject).length&&(e._id=this.idObject);let r=await this.collection.findOne(e,{projection:this.selectObject,session:this.session}),n=await He(this.model,r,this.selectFields);return t.ignoreHooks?.includes("afterFetch")?n:(await(this.model.afterFetch?.([n])??[n]))[0]}async oneOrFail(t={throwErrorOnNull:true}){let e=await this.one(t);if(!e)throw new h("MongoQueryBuilder::oneOrFail","ROW_NOT_FOUND");return e}async many(t={}){await this.ensureInitialized(),t.ignoreHooks?.includes("beforeFetch")||this.model.beforeFetch?.(this);let e={...this.whereObject};Object.keys(this.idObject).length&&(e._id=this.idObject);let r=await this.collection.find(e,{projection:this.selectFields,sort:this.sortObject,limit:this.limitNumber,skip:this.offsetNumber,session:this.session}).toArray(),n=await zr(this.model,r,this.selectFields);return t.ignoreHooks?.includes("afterFetch")?n:await(this.model.afterFetch?.(n)??n)}async insert(t,e={}){await this.ensureInitialized(),e.ignoreHooks||this.model.beforeInsert?.(t);let r=await this.collection.insertOne(t,{session:this.session});if(!e.returning)return {id:r.insertedId.toString()};let n=await this.collection.findOne({_id:r.insertedId});return await He(this.model,n,this.selectFields)}async insertMany(t,e={}){await this.ensureInitialized(),e.ignoreHooks||this.model.beforeInsert?.(t);let r=await this.collection.insertMany(t,{session:this.session});if(!e.returning)return Object.values(r.insertedIds).map(o=>({id:o.toString()}));let n=await this.collection.find({_id:{$in:Object.values(r.insertedIds)}}).toArray();return await zr(this.model,n,this.selectFields)}async update(t,e={}){if(await this.ensureInitialized(),e.ignoreHooks||this.model.beforeUpdate?.(this),(await this.collection.updateMany({_id:this.idObject,...this.whereObject},{$set:t,session:this.session})).modifiedCount===0)return [];let n=await this.collection.find({_id:Object.keys(this.idObject).length?this.idObject:void 0,...this.whereObject},{projection:this.selectFields}).toArray();return await zr(this.model,n,this.selectFields)}async delete(t={}){await this.ensureInitialized(),t.ignoreHooks||this.model.beforeDelete?.(this),await this.collection.deleteMany(this.whereObject,{session:this.session});}async count(t={}){return await this.ensureInitialized(),t.ignoreHooks||this.model.beforeFetch?.(this),this.collection.countDocuments(this.whereObject,{session:this.session})}select(t){return this.selectFields=t,this.selectObject=t.reduce((e,r)=>(e[r]=1,e),{}),this}where(t,e,r){let n="$eq",o;typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="$eq");let s=se("mongodb");if(t==="id")return this.idObject={$eq:new s.ObjectId(o)},this;let a={[t]:{[n]:o}};return this.whereObject?(this.whereObject.$and||(this.whereObject.$and=[]),this.whereObject.$and.push(a)):this.whereObject={$and:[a]},this}andWhere(t,e,r){let n="$eq",o;typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="$eq");let s=se("mongodb"),a={[t]:{[n]:o}};return t==="id"?(this.idObject={$eq:new s.ObjectId(o)},this):(this.whereObject?(this.whereObject.$and||(this.whereObject.$and=[]),this.whereObject.$and.push(a)):this.whereObject={$and:[a]},this)}orWhere(t,e,r){let n="$eq",o;typeof e=="string"&&r!==void 0?(n=e,o=r):(o=e,n="$eq");let s=se("mongodb"),a={[t]:{[n]:o}};return t==="id"?(this.idObject={$eq:new s.ObjectId(o)},this):(this.whereObject?(this.whereObject.$or||(this.whereObject.$or=[]),this.whereObject.$or.push(a)):this.whereObject={$or:[a]},this)}whereExists(t){let e={[t]:{$exists:true}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}andWhereExists(t){let e={[t]:{$exists:true}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}orWhereExists(t){let e={[t]:{$exists:true}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(e),this):(this.whereObject.$or=[e],this):(this.whereObject={$or:[e]},this)}whereNotExists(t){let e={[t]:{$exists:false}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}andWhereNotExists(t){let e={[t]:{$exists:false}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}orWhereNotExists(t){let e={[t]:{$exists:false}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(e),this):(this.whereObject.$or=[e],this):(this.whereObject={$or:[e]},this)}whereNot(t,e){let r={[t]:{$ne:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}andWhereNot(t,e){let r={[t]:{$ne:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}orWhereNot(t,e){let r={[t]:{$ne:e}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(r),this):(this.whereObject.$or=[r],this):(this.whereObject={$or:[r]},this)}whereLike(t,e){let r={[t]:{$regex:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}andWhereLike(t,e){let r={[t]:{$regex:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}orWhereLike(t,e){let r={[t]:{$regex:e}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(r),this):(this.whereObject.$or=[r],this):(this.whereObject={$or:[r]},this)}whereNotLike(t,e){let r={[t]:{$not:{$regex:e}}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}andWhereNotLike(t,e){let r={[t]:{$not:{$regex:e}}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(r),this):(this.whereObject.$and=[r],this):(this.whereObject={$and:[r]},this)}orWhereNotLike(t,e){let r={[t]:{$not:{$regex:e}}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(r),this):(this.whereObject.$or=[r],this):(this.whereObject={$or:[r]},this)}whereIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$in:o},this}let n={[t]:{$in:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}andWhereIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$in:o},this}let n={[t]:{$in:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}orWhereIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$in:o},this}let n={[t]:{$in:e}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(n),this):(this.whereObject.$or=[n],this):(this.whereObject={$or:[n]},this)}whereNotIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$nin:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}andWhereNotIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$nin:e}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}orWhereNotIn(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$nin:e}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(n),this):(this.whereObject.$or=[n],this):(this.whereObject={$or:[n]},this)}whereNull(t){if(t==="id")return _.warn("Id cannot be null"),this;let e={[t]:null};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}andWhereNull(t){if(t==="id")return _.warn("Id cannot be null"),this;let e={[t]:null};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}orWhereNull(t){if(t==="id")return _.warn("Id cannot be null"),this;let e={[t]:null};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(e),this):(this.whereObject.$or=[e],this):(this.whereObject={$or:[e]},this)}whereNotNull(t){if(t==="id")return _.warn("Id cannot be null"),this;let e={[t]:{$ne:null}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}andWhereNotNull(t){if(t==="id")return _.warn("Id cannot be null"),this;let e={[t]:{$ne:null}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(e),this):(this.whereObject.$and=[e],this):(this.whereObject={$and:[e]},this)}orWhereNotNull(t){if(t==="id")return _.warn("Id cannot be null"),this;let e={[t]:{$ne:null}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(e),this):(this.whereObject.$or=[e],this):(this.whereObject={$or:[e]},this)}whereBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$gte:e[0],$lte:e[1]}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}andWhereBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$gte:e[0],$lte:e[1]}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}orWhereBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$gte:e[0],$lte:e[1]}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(n),this):(this.whereObject.$or=[n],this):(this.whereObject={$or:[n]},this)}whereNotBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$lt:e[0],$gt:e[1]}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}andWhereNotBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$lt:e[0],$gt:e[1]}};return this.whereObject?this.whereObject.$and?(this.whereObject.$and.push(n),this):(this.whereObject.$and=[n],this):(this.whereObject={$and:[n]},this)}orWhereNotBetween(t,e){let r=se("mongodb");if(t==="id"){let o=e.map(s=>new r.ObjectId(s));return this.idObject={$nin:o},this}let n={[t]:{$lt:e[0],$gt:e[1]}};return this.whereObject?this.whereObject.$or?(this.whereObject.$or.push(n),this):(this.whereObject.$or=[n],this):(this.whereObject={$or:[n]},this)}whereRaw(t){return this.whereObject={...this.whereObject,...t},this}andRawWhere(t){return this.whereObject={...this.whereObject,...t},this}orRawWhere(t){return this.whereObject.$or||(this.whereObject.$or=[]),this.whereObject.$or.push(t),this}sortById(t){return this.sortObject={_id:t},this}sort(t){return typeof t=="number"?(this.sortObject={_id:t},this):typeof t=="string"?(this.sortObject={[t]:1},this):Array.isArray(t)?(this.sortObject=t.reduce((e,r)=>{if(typeof r=="string")return e[r]=1,e;let n=Object.keys(r)[0],o=Object.values(r)[0];return e[n]=+o,e},{}),this):(this.sortObject=t,this)}limit(t){return this.limitNumber=t,this}offset(t){return this.offsetNumber=t,this}};var Yr=class{constructor(t,e,r,n=false){this.logs=n,this.session=r,this.mongoDataSource=e,this.collection=t,e.isConnected&&this.initConnection();}initConnection(){this.mongoClient=this.mongoDataSource.getCurrentConnection(),this.collectionInstance=this.mongoClient.db().collection(this.collection.collection);}async ensureInitialized(){await this.mongoDataSource.ensureConnected(),this.collectionInstance||this.initConnection();}async find(t){await this.ensureInitialized();let e=this.query();return t?(t.select&&e.select(t.select),t.where&&Object.entries(t.where).forEach(([r,n])=>{e.where(r,n);}),t.sort&&e.sort(t.sort),t.limit&&e.limit(t.limit),t.offset&&e.offset(t.offset),e.many({ignoreHooks:t.ignoreHooks})):e.many()}async findOne(t){await this.ensureInitialized();let e=this.query();return t?(t.where&&Object.entries(t.where).forEach(([r,n])=>{e.where(r,n);}),e.one({ignoreHooks:t.ignoreHooks})):e.oneOrFail()}async findOneOrFail(t){await this.ensureInitialized();let e=this.query();if(!t)return e.oneOrFail();t.select&&e.select(t.select),t.where&&Object.entries(t.where).forEach(([n,o])=>{e.where(n,o);});let r=await e.one({ignoreHooks:t.ignoreHooks});if(r===null)throw t.customError?t.customError:new h("CollectionManager::findOneOrFail No record found","ROW_NOT_FOUND");return r}query(){return new Gr(this.collection,this.mongoDataSource,this.session,this.logs)}async insert(t,e={}){await this.ensureInitialized(),e.ignoreHooks||this.collection.beforeInsert(t);let n=(await this.collectionInstance.insertOne(t)).insertedId,o=await this.collectionInstance.findOne({_id:n},{session:this.session});return await He(this.collection,o)}async insertMany(t,e={}){await this.ensureInitialized(),e.ignoreHooks||t.forEach(s=>{this.collection.beforeInsert(s);});let n=(await this.collectionInstance.insertMany(t)).insertedIds,o=await this.collectionInstance.find({_id:{$in:Object.values(n)}},{session:this.session}).toArray();return Promise.all(o.map(async s=>await He(this.collection,s)))}async updateRecord(t){await this.ensureInitialized();let e=t.id;if(!e)throw new h("CollectionManager::updateRecord","ROW_NOT_FOUND");let r=await import('mongodb');if((await this.collectionInstance.updateOne({_id:new r.ObjectId(e)},{$set:t})).modifiedCount===0)throw new h("CollectionManager::updateRecord","ROW_NOT_FOUND");let o=await this.collectionInstance.findOne({_id:new r.ObjectId(e)},{session:this.session});return await He(this.collection,o)}async deleteRecord(t){await this.ensureInitialized();let e=t.id;if(!e)throw new h("CollectionManager::deleteRecord","ROW_NOT_FOUND");let r=await import('mongodb');return await this.collectionInstance.deleteOne({_id:new r.ObjectId(e)},{session:this.session}),t}};var kl=class extends Rt{constructor(e){super({type:"mongo",url:e?.url,logs:e?.logs});this.mongoClient=null;this.connecting=null;this.isConnected=false,this.mongoOptions=e?.options,this.lazyLoad=e?.lazyLoad??false,this.url||(this.url=$.MONGO_URL);}async connect(){if(!this.url)throw new h("MongoDataSource::connect url is required to connect to mongo database and was not provided in the options nor the environment variables","REQUIRED_VALUE_NOT_SET");let e=(await ae.getDriver("mongo")).client;this.mongoClient=new e.MongoClient(this.url,this.mongoOptions),await this.mongoClient.connect(),this.isConnected=true;}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new h("MongoDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.connect().finally(()=>{this.connecting=null;})),await this.connecting;}}getCurrentConnection(){if(!this.mongoClient)throw new h("MongoDataSource::getCurrentConnection mongo database connection not established","CONNECTION_NOT_ESTABLISHED");return this.mongoClient}startSession(){if(!this.mongoClient)throw new h("MongoDataSource::startSession mongo database connection not established","CONNECTION_NOT_ESTABLISHED");let e=this.mongoClient.startSession();return e.startTransaction(),e}async disconnect(){this.mongoClient&&await this.mongoClient.close(),this.isConnected=false;}async closeConnection(){await this.disconnect();}from(e,r){if(!this.isConnected&&!this.lazyLoad)throw new h("MongoDataSource::from","CONNECTION_NOT_ESTABLISHED");if(typeof e=="string"){let n={_collection:e,collection:e,beforeInsert:void 0,beforeFetch:void 0,beforeUpdate:void 0,beforeDelete:void 0,afterFetch:void 0};return this.getModelManager(n,this).query()}return this.getModelManager(e,this,r?.session)}getModelManager(e,r,n){return new Yr(e,r,n,this.logs)}async ping(){let e=Date.now();try{return await this.ensureConnected(),this.mongoClient?(await this.mongoClient.db().command({ping:1}),{ok:!0,latencyMs:Date.now()-e,dialect:"mongo"}):{ok:!1,latencyMs:Date.now()-e,dialect:"mongo"}}catch{return {ok:false,latencyMs:Date.now()-e,dialect:"mongo"}}}async isHealthy(){try{return (await this.ping()).ok}catch{return false}}};me();var Ll=class i{constructor(t){this.OK="OK";this.ioRedisConnection=null;this.connecting=null;this.isConnected=false,this.inputOptions=t||{},this.lazyLoad=t?.lazyLoad??false;}get ioredis(){if(!this.ioRedisConnection)throw new h("RedisDataSource::ioredis connection not established","CONNECTION_NOT_ESTABLISHED");return this.ioRedisConnection}async connect(){if(this.isConnected)return;let t=this.inputOptions.port||+$.REDIS_PORT||6379,e=await import('ioredis').catch(()=>{throw new k("ioredis")});this.ioRedisConnection=new e.default({host:this.inputOptions.host||$.REDIS_HOST,username:this.inputOptions.username||$.REDIS_USERNAME,port:t,password:this.inputOptions.password||$.REDIS_PASSWORD,...this.inputOptions});try{await this.ioRedisConnection.ping(),this.isConnected=!0;}catch{throw new h("RedisDataSource::connect","CONNECTION_NOT_ESTABLISHED")}}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new h("RedisDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.connect().finally(()=>{this.connecting=null;})),await this.connecting;}}async set(t,e,r){await this.ensureConnected(),r=r?r/1e3:void 0,typeof e=="object"&&!Buffer.isBuffer(e)&&(e=JSON.stringify(e)),typeof e=="boolean"&&(e=e.toString());try{if(r){await this.ioredis.setex(t,r,e);return}await this.ioredis.set(t,e);}catch{throw new h("RedisDataSource::set","SET_FAILED")}}async get(t){try{let e=await this.ioredis.get(t);return i.getValue(e)}catch{throw new h("RedisDataSource::get","GET_FAILED")}}async getBuffer(t){await this.ensureConnected();try{return await this.ioredis.getBuffer(t)}catch{throw new h("RedisDataSource::getBuffer","GET_FAILED")}}async consume(t){try{let e=await this.ioredis.get(t);return await this.ioredis.del(t),i.getValue(e)}catch{throw new h("RedisDataSource::consume","GET_FAILED")}}async delete(t){await this.ensureConnected();try{await this.ioredis.del(t);}catch{throw new h("RedisDataSource::delete","DELETE_FAILED")}}async flushAll(){await this.ensureConnected();try{await this.ioredis.flushall();}catch{throw new h("RedisDataSource::flushAll","FLUSH_FAILED")}}async disconnect(t){if(!(!this.isConnected||!this.ioRedisConnection))try{await this.ioRedisConnection.quit(),this.isConnected=!1,this.ioRedisConnection=null;}catch{if(t)throw new h("RedisDataSource::disconnect","DISCONNECT_FAILED");_.warn("RedisDataSource::disconnect DISCONNECT_FAILED");}}async lpush(t,...e){await this.ensureConnected();try{let r=e.map(n=>typeof n=="object"&&!Buffer.isBuffer(n)?JSON.stringify(n):typeof n=="boolean"?n.toString():n);return await this.ioredis.lpush(t,...r)}catch{throw new h("RedisDataSource::lpush","LPUSH_FAILED")}}async rpush(t,...e){await this.ensureConnected();try{let r=e.map(n=>typeof n=="object"&&!Buffer.isBuffer(n)?JSON.stringify(n):typeof n=="boolean"?n.toString():n);return await this.ioredis.rpush(t,...r)}catch{throw new h("RedisDataSource::rpush","RPUSH_FAILED")}}async lpop(t){try{let e=await this.ioredis.lpop(t);return i.getValue(e)}catch{throw new h("RedisDataSource::lpop","LPOP_FAILED")}}async rpop(t){try{let e=await this.ioredis.rpop(t);return i.getValue(e)}catch{throw new h("RedisDataSource::rpop","RPOP_FAILED")}}async lrange(t,e,r){try{return (await this.ioredis.lrange(t,e,r)).map(o=>i.getValue(o)).filter(o=>o!==null)}catch{throw new h("RedisDataSource::lrange","LRANGE_FAILED")}}async llen(t){await this.ensureConnected();try{return await this.ioredis.llen(t)}catch{throw new h("RedisDataSource::llen","LLEN_FAILED")}}async hset(t,e,r){await this.ensureConnected();try{return typeof r=="object"&&!Buffer.isBuffer(r)&&(r=JSON.stringify(r)),typeof r=="boolean"&&(r=r.toString()),await this.ioredis.hset(t,e,r)}catch{throw new h("RedisDataSource::hset","HSET_FAILED")}}async hmset(t,e){await this.ensureConnected();try{let r={};for(let[n,o]of Object.entries(e))typeof o=="object"&&!Buffer.isBuffer(o)?r[n]=JSON.stringify(o):typeof o=="boolean"?r[n]=o.toString():r[n]=String(o);return await this.ioredis.hmset(t,r)}catch{throw new h("RedisDataSource::hmset","HMSET_FAILED")}}async hget(t,e){try{let r=await this.ioredis.hget(t,e);return i.getValue(r)}catch{throw new h("RedisDataSource::hget","HGET_FAILED")}}async hgetall(t){try{let e=await this.ioredis.hgetall(t),r={};for(let[n,o]of Object.entries(e))r[n]=i.getValue(o);return r}catch{throw new h("RedisDataSource::hgetall","HGETALL_FAILED")}}async hmget(t,...e){try{return (await this.ioredis.hmget(t,...e)).map(n=>i.getValue(n))}catch{throw new h("RedisDataSource::hmget","HMGET_FAILED")}}async hdel(t,...e){await this.ensureConnected();try{return await this.ioredis.hdel(t,...e)}catch{throw new h("RedisDataSource::hdel","HDEL_FAILED")}}async hexists(t,e){await this.ensureConnected();try{return await this.ioredis.hexists(t,e)}catch{throw new h("RedisDataSource::hexists","HEXISTS_FAILED")}}async hkeys(t){await this.ensureConnected();try{return await this.ioredis.hkeys(t)}catch{throw new h("RedisDataSource::hkeys","HKEYS_FAILED")}}async hlen(t){await this.ensureConnected();try{return await this.ioredis.hlen(t)}catch{throw new h("RedisDataSource::hlen","HLEN_FAILED")}}async sadd(t,...e){await this.ensureConnected();try{let r=e.map(n=>typeof n=="object"&&!Buffer.isBuffer(n)?JSON.stringify(n):typeof n=="boolean"?n.toString():n);return await this.ioredis.sadd(t,...r)}catch{throw new h("RedisDataSource::sadd","SADD_FAILED")}}async smembers(t){try{return (await this.ioredis.smembers(t)).map(r=>i.getValue(r)).filter(r=>r!==null)}catch{throw new h("RedisDataSource::smembers","SMEMBERS_FAILED")}}async srem(t,...e){await this.ensureConnected();try{let r=e.map(n=>typeof n=="object"&&!Buffer.isBuffer(n)?JSON.stringify(n):typeof n=="boolean"?n.toString():n);return await this.ioredis.srem(t,...r)}catch{throw new h("RedisDataSource::srem","SREM_FAILED")}}async sismember(t,e){await this.ensureConnected();try{return typeof e=="object"&&!Buffer.isBuffer(e)&&(e=JSON.stringify(e)),typeof e=="boolean"&&(e=e.toString()),await this.ioredis.sismember(t,e)}catch{throw new h("RedisDataSource::sismember","SISMEMBER_FAILED")}}async scard(t){await this.ensureConnected();try{return await this.ioredis.scard(t)}catch{throw new h("RedisDataSource::scard","SCARD_FAILED")}}async sinter(...t){try{return (await this.ioredis.sinter(...t)).map(r=>i.getValue(r)).filter(r=>r!==null)}catch{throw new h("RedisDataSource::sinter","SINTER_FAILED")}}async sunion(...t){try{return (await this.ioredis.sunion(...t)).map(r=>i.getValue(r)).filter(r=>r!==null)}catch{throw new h("RedisDataSource::sunion","SUNION_FAILED")}}async sdiff(...t){try{return (await this.ioredis.sdiff(...t)).map(r=>i.getValue(r)).filter(r=>r!==null)}catch{throw new h("RedisDataSource::sdiff","SDIFF_FAILED")}}async zadd(t,e,r){await this.ensureConnected();try{if(typeof e=="number"&&r!==void 0){let n=r;return typeof r=="object"&&!Buffer.isBuffer(r)?n=JSON.stringify(r):typeof r=="boolean"&&(n=r.toString()),await this.ioredis.zadd(t,e,n)}else if(Array.isArray(e)){let n=[];for(let[o,s]of e)n.push(o),typeof s=="object"&&!Buffer.isBuffer(s)?n.push(JSON.stringify(s)):typeof s=="boolean"?n.push(s.toString()):n.push(s);return await this.ioredis.zadd(t,...n)}throw new Error("Invalid arguments for zadd")}catch{throw new h("RedisDataSource::zadd","ZADD_FAILED")}}async zrange(t,e,r,n=false){try{let o;if(n){o=await this.ioredis.zrange(t,e,r,"WITHSCORES");let s=[];for(let a=0;a<o.length;a+=2){let l=i.getValue(o[a]),u=Number(o[a+1]);l!==null&&s.push({value:l,score:u});}return s}return o=await this.ioredis.zrange(t,e,r),o.map(s=>i.getValue(s)).filter(s=>s!==null)}catch{throw new h("RedisDataSource::zrange","ZRANGE_FAILED")}}async zrevrange(t,e,r,n=false){try{let o;if(n){o=await this.ioredis.zrevrange(t,e,r,"WITHSCORES");let s=[];for(let a=0;a<o.length;a+=2){let l=i.getValue(o[a]),u=Number(o[a+1]);l!==null&&s.push({value:l,score:u});}return s}return o=await this.ioredis.zrevrange(t,e,r),o.map(s=>i.getValue(s)).filter(s=>s!==null)}catch{throw new h("RedisDataSource::zrevrange","ZREVRANGE_FAILED")}}async zrem(t,...e){await this.ensureConnected();try{let r=e.map(n=>typeof n=="object"&&!Buffer.isBuffer(n)?JSON.stringify(n):typeof n=="boolean"?n.toString():n);return await this.ioredis.zrem(t,...r)}catch{throw new h("RedisDataSource::zrem","ZREM_FAILED")}}async zscore(t,e){await this.ensureConnected();try{typeof e=="object"&&!Buffer.isBuffer(e)&&(e=JSON.stringify(e)),typeof e=="boolean"&&(e=e.toString());let r=await this.ioredis.zscore(t,e);return r!==null?Number(r):null}catch{throw new h("RedisDataSource::zscore","ZSCORE_FAILED")}}async zcard(t){await this.ensureConnected();try{return await this.ioredis.zcard(t)}catch{throw new h("RedisDataSource::zcard","ZCARD_FAILED")}}async subscribe(t,e){await this.ensureConnected();try{await this.ioredis.subscribe(...t),this.ioredis.on("message",e);}catch{throw new h("RedisDataSource::subscribe","SUBSCRIBE_FAILED")}}async unsubscribe(...t){await this.ensureConnected();try{await this.ioredis.unsubscribe(...t);}catch{throw new h("RedisDataSource::unsubscribe","UNSUBSCRIBE_FAILED")}}async publish(t,e){await this.ensureConnected();try{let r;return typeof e=="object"&&!Buffer.isBuffer(e)?r=JSON.stringify(e):typeof e=="boolean"||typeof e=="number"?r=e.toString():Buffer.isBuffer(e)?r=e:r=String(e),await this.ioredis.publish(t,r)}catch{throw new h("RedisDataSource::publish","PUBLISH_FAILED")}}async psubscribe(t,e){await this.ensureConnected();try{await this.ioredis.psubscribe(...t),this.ioredis.on("pmessage",(r,n,o)=>{e(n,o);});}catch{throw new h("RedisDataSource::psubscribe","PSUBSCRIBE_FAILED")}}async punsubscribe(...t){await this.ensureConnected();try{await this.ioredis.punsubscribe(...t);}catch{throw new h("RedisDataSource::punsubscribe","PUNSUBSCRIBE_FAILED")}}async exists(t){await this.ensureConnected();try{return await this.ioredis.exists(t)}catch{throw new h("RedisDataSource::exists","EXISTS_FAILED")}}async expire(t,e){await this.ensureConnected();try{return await this.ioredis.expire(t,e)}catch{throw new h("RedisDataSource::expire","EXPIRE_FAILED")}}async expireat(t,e){await this.ensureConnected();try{return await this.ioredis.expireat(t,e)}catch{throw new h("RedisDataSource::expireat","EXPIREAT_FAILED")}}async pexpire(t,e){await this.ensureConnected();try{return await this.ioredis.pexpire(t,e)}catch{throw new h("RedisDataSource::pexpire","PEXPIRE_FAILED")}}async ttl(t){await this.ensureConnected();try{return await this.ioredis.ttl(t)}catch{throw new h("RedisDataSource::ttl","TTL_FAILED")}}async pttl(t){await this.ensureConnected();try{return await this.ioredis.pttl(t)}catch{throw new h("RedisDataSource::pttl","PTTL_FAILED")}}async persist(t){await this.ensureConnected();try{return await this.ioredis.persist(t)}catch{throw new h("RedisDataSource::persist","PERSIST_FAILED")}}async keys(t){await this.ensureConnected();try{return await this.ioredis.keys(t)}catch{throw new h("RedisDataSource::keys","KEYS_FAILED")}}async rename(t,e){await this.ensureConnected();try{return await this.ioredis.rename(t,e)}catch{throw new h("RedisDataSource::rename","RENAME_FAILED")}}async type(t){await this.ensureConnected();try{return await this.ioredis.type(t)}catch{throw new h("RedisDataSource::type","TYPE_FAILED")}}static getValue(t){if(!t)return null;try{return JSON.parse(t)}catch{}return t==="true"||t==="false"?!!t:Number.isNaN(Number(t))?t:Number(t)}};me();var Zr={string:"string",varchar:"string",char:"string",text:"textarea",longtext:"textarea",mediumtext:"textarea",tinytext:"textarea",integer:"number",int:"number",smallint:"number",bigint:"number",tinyint:"number",mediumint:"number",float:"float",double:"float",decimal:"float",numeric:"float",real:"float",boolean:"boolean",bool:"boolean",date:"date",datetime:"datetime",timestamp:"datetime",time:"string",year:"number",json:"mixed",jsonb:"mixed",uuid:"string",ulid:"string",binary:"string",blob:"string",enum:"string"};var zy=null;function ot(i,t){return t.getModelManager(i)}function Hy(i,t,e){if(!t||typeof t!="object")return;let r=t;if(!r.filters)return;let n=e.getColumns();for(let[o,s]of Object.entries(r.filters)){let a=s.value;if(a==null||a==="")continue;let l=n.find(c=>c.columnName===o||c.databaseName===o);if(!l)continue;let u=typeof l.type=="string"?l.type:"string",d=Zr[u]||"string";if(d==="string"||d==="textarea"){i.whereLike(o,`%${a}%`);continue}if(d==="boolean"){i.where(o,a==="true"||a===true);continue}if(d==="date"||d==="datetime"){if(typeof a=="object"&&a!==null){let c=a;c.from&&i.where(o,">=",c.from),c.to&&i.where(o,"<=",c.to);continue}i.where(o,a);continue}i.where(o,a);}}function Gt(i,t){let e={},r=t.getColumns();for(let n of r){let o=i[n.columnName];e[n.columnName]=o;}return e}async function Hh(){let i=await import('adminjs').catch(()=>{throw new k("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(o){super(o),this._model=o,this._db=zy;}static isAdapterFor(o){if(typeof o!="function")return false;let s=o;return s.prototype!==void 0&&typeof s.table=="string"&&typeof s.getColumns=="function"}databaseName(){return this._db.database||"hysteria"}databaseType(){return this._db.getDbType()}id(){return this._model.table}properties(){return this._model.getColumns().map(s=>{let a=typeof s.type=="string"?s.type:"string",l=Zr[a]||"string";return new r({path:s.columnName,type:l,isId:s.isPrimary,isSortable:true})})}property(o){let a=this._model.getColumns().find(d=>d.columnName===o||d.databaseName===o);if(!a)return null;let l=typeof a.type=="string"?a.type:"string",u=Zr[l]||"string";return new r({path:a.columnName,type:u,isId:a.isPrimary,isSortable:true})}async count(o){let a=ot(this._model,this._db).query();return Hy(a,o,this._model),a.getCount()}async find(o,s={}){let l=ot(this._model,this._db).query();return Hy(l,o,this._model),s.limit&&l.limit(s.limit),s.offset&&l.offset(s.offset),s.sort?.sortBy&&l.orderBy(s.sort.sortBy,s.sort.direction||"asc"),(await l.many()).map(d=>new e(Gt(d,this._model),this))}async findOne(o){if(!this._model.primaryKey)return null;let l=await ot(this._model,this._db).findOneByPrimaryKey(o);return l?new e(Gt(l,this._model),this):null}async findMany(o){let s=this._model.primaryKey;return s?(await ot(this._model,this._db).query().whereIn(s,o).many()).map(u=>new e(Gt(u,this._model),this)):[]}async create(o){let a=await ot(this._model,this._db).insert(o,{returning:["*"]});return Gt(a,this._model)}async update(o,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=ot(this._model,this._db);if(!await l.findOneByPrimaryKey(o))throw new Error("Record not found");let d=await l.updateRecord(o,s,{returning:["*"]});return Gt(d,this._model)}async delete(o){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=ot(this._model,this._db);await a.findOneByPrimaryKey(o)&&await a.deleteRecord(o);}}}async function zh(){let i=await import('adminjs').catch(()=>{throw new k("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function Gh(){let i=await import('adminjs').catch(()=>{throw new k("adminjs")}),t=await Hh(),e=await zh();i.default.registerAdapter({Database:e,Resource:t});}async function Wl(i,t){zy=i;let e=await import('adminjs').catch(()=>{throw new k("adminjs")});await Gh();let r=t.resources||Object.values(i.models);if(!r.length)throw new Error("No models provided for AdminJS. Please provide models in the resources option or register them in SqlDataSource.");let n=r.map(a=>{let l=t.resourceOptions?.[a.table]||{};return {resource:a,options:l}}),o={rootPath:t.rootPath||"/admin",resources:n};if(t.branding&&(o.branding=t.branding),t.locale?.language&&(o.locale=t.locale),t.assets&&(o.assets=t.assets),t.settings&&(o.settings=t.settings),t.pages){let a={};for(let[l,u]of Object.entries(t.pages))u.component&&(a[l]=u);Object.keys(a).length>0&&(o.pages=a);}return {admin:new e.default(o)}}async function Gy(i,t){let{admin:e}=await Wl(i,t),r;try{r=await import('@adminjs/express');}catch{throw new k("@adminjs/express")}let n=r.buildRouter(e);return {admin:e,router:n}}var Yh=i=>{let{required:t,...e}=i.openApi||{},r={...e,type:i.openApi?.type||"string",description:i.openApi?.description??`Property: ${i.columnName}`};return i.openApi?.type?{...r,type:i.openApi.type}:Array.isArray(i.type)?{...r,type:"string",enum:i.type}:i.type==="date"||i.type==="datetime"||i.type==="timestamp"||i.type==="time"?{...r,type:"string",format:"date-time"}:i.type==="boolean"?{...r,type:"boolean"}:i.type==="integer"||i.type==="tinyint"||i.type==="smallint"||i.type==="mediumint"||i.type==="increment"?{...r,type:"integer",format:"int32"}:i.type==="biginteger"||i.type==="bigIncrement"?{...r,type:"integer",format:"int64"}:i.type==="float"||i.type==="real"?{...r,type:"number",format:"float"}:i.type==="double"?{...r,type:"number",format:"double"}:i.type==="decimal"||i.type==="numeric"?{...r,type:"number"}:i.type==="json"||i.type==="jsonb"?{...r,type:"object"}:i.type==="uuid"?{...r,type:"string",format:"uuid"}:i.type==="ulid"?{...r,type:"string",format:"ulid"}:i.type==="string"||i.type==="char"||i.type==="varchar"||i.type==="text"||i.type==="longtext"||i.type==="mediumtext"||i.type==="tinytext"?{...r,type:"string"}:i.type==="blob"||i.type==="binary"||i.type==="varbinary"||i.type==="tinyblob"||i.type==="mediumblob"||i.type==="longblob"?{...r,type:"string",format:"binary"}:i.type==="year"?{...r,type:"integer",format:"int32"}:r},Zh=i=>i.openApi?.required??false,Xh=i=>{let t=i.getColumns(),e={};for(let r of t)r.openApi?.excludeFromSwagger||(e[r.columnName]=Yh(r));return e},eg=i=>{let t=i.getColumns(),e=[];for(let r of t)Zh(r)&&e.push(r.columnName);return e||[]},Fl=i=>{let t=Xh(i),e=eg(i);return {type:"object",properties:t,required:e.length?e:[]}},vk=i=>i.map(t=>Fl(t)),Ek=i=>Fl(i),Yy=i=>i.map(t=>({...Fl(t),modelName:t.table,$id:t.table}));var jl=(i,t)=>{let e=$e__default.default.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var Xr=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="check_constraint_info";this.table=e;}};var en=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="foreign_key_info";this.table=e;}};var tn=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="index_info";this.table=e;}};var rn=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var nn=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var on=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_table";this.table=e;}};var sn=class extends N{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_column";this.table=e,this.column=r;}};var an=class extends N{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_index";this.table=e,this.index=r;}};var ln=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_primary_key";this.table=e;}};var un=class extends N{constructor(e,r){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="has_check_constraint";this.table=e,this.constraint=r;}};var dn=class extends N{constructor(){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_tables";}};var mn=class extends N{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="get_column_listing";this.table=e;}};var ze=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var cn=class extends N{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var pn=class extends ze{constructor(t,e,r,n,o=[],s="create_table"){super(e),this.columnNode=r,this.tableName=n,this.namedConstraints=o,this.context=s,this.sqlType=t;}primaryKey(t){let e=Ne(this.tableName,q(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new J("primary_key",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new J("primary_key",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??e})),this)}foreignKey(t,e){this.columnNode.isForeignKey=true;let[r,n]=t.split("."),o=n.split(","),s=e?.constraintName??H(this.tableName??"",q(this.columnNode.column),o[0]);return this.context==="alter_table"?(this.nodes.push(new J("foreign_key",{columns:[q(this.columnNode.column)],references:{table:r,columns:o},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this):(this.namedConstraints.push(new J("foreign_key",{columns:[q(this.columnNode.column)],references:{table:r,columns:o},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this)}increment(){return this.columnNode.autoIncrement=true,this}unsigned(){return this.columnNode.unsigned=true,this}zerofill(){return this.columnNode.zerofill=true,this}notNullable(){return this.nodes.push(new J("not_null",{columns:[q(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new J("null",{columns:[q(this.columnNode.column)]})),this}default(t){let e;return t instanceof O||t instanceof v?e=t:t===null?e="NULL":typeof t=="boolean"?e=t?"TRUE":"FALSE":t!==void 0&&(e=t.toString()),this.nodes.push(new J("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new J("unique",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??pe(this.tableName??"",q(this.columnNode.column))})),this):(this.namedConstraints.push(new J("unique",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName||pe(this.tableName??"",q(this.columnNode.column))})),this)}check(t,e){let r=q(this.columnNode.column),n=e?.constraintName??`chk_${this.tableName}_${r}`.substring(0,63);return this.context==="alter_table"?(this.nodes.push(new J("check",{columns:[r],checkExpression:t,constraintName:n})),this):(this.namedConstraints.push(new J("check",{columns:[r],checkExpression:t,constraintName:n})),this)}after(t){return this.sqlType!=="mysql"?this:(this.nodes.push(new cn(t)),this)}collate(t){return this.columnNode.collate=t,this}handleSqliteAutoIncrement(t){return this.isInlineSqlitePrimaryKey()?this:(this.nodes.push(new J("primary_key",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this)}isInlineSqlitePrimaryKey(){let t=(this.columnNode.dataType??"").toLowerCase();return t==="bigincrement"?true:(t==="integer"||t==="bigint"||t==="int")&&!!this.columnNode.autoIncrement}};var st=class extends ze{constructor(e,r,n,o){super(r);this.context="create_table";this.tableName=n,this.namedConstraints=[],this.context=o??"create_table",this.sqlType=e;}mysqlOptions(e){return this._mysqlOptions=e,this}getMysqlOptions(){return this._mysqlOptions}build(e){return this.nodes.push(e),new pn(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new O(e)}char(e,r=1){let n=new Q(e,"char",{length:r});return this.build(n)}varchar(e,r=255){let n=new Q(e,"varchar",{length:r});return this.build(n)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let n=new Q(e,r);return this.build(n)}longtext(e){return this.text(e,"longtext")}mediumtext(e){return this.text(e,"mediumtext")}tinytext(e){return this.text(e,"tinytext")}uuid(e){let r=new Q(e,"uuid");return this.build(r)}ulid(e){let r=new Q(e,"ulid");return this.build(r)}integer(e,r=255){let n=new Q(e,"integer",{length:r});return this.build(n)}tinyint(e,r=255){let n=new Q(e,"tinyint",{length:r});return this.build(n)}smallint(e,r=255){let n=new Q(e,"smallint",{length:r});return this.build(n)}mediumint(e,r=255){let n=new Q(e,"mediumint",{length:r});return this.build(n)}biginteger(e,r=255){let n=new Q(e,"bigint",{length:r});return this.build(n)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let n=new Q(e,"float",{precision:r});return this.build(n)}double(e,r=10){let n=new Q(e,"double",{precision:r});return this.build(n)}real(e,r=10){let n=new Q(e,"real",{precision:r});return this.build(n)}decimal(e,r=10,n=2){let o=new Q(e,"decimal",{precision:r,scale:n});return this.build(o)}numeric(e,r=10,n=2){let o=new Q(e,"numeric",{precision:r,scale:n});return this.build(o)}increment(e,r=255){return this.integer(e,r).increment()}bigIncrement(e,r=255){return this.biginteger(e,r).increment()}date(e,r){let n=new Q(e,"date",{precision:r});return this.build(n)}time(e,r){let n=new Q(e,"time",{precision:r});return this.build(n)}year(e){let r=new Q(e,"year");return this.build(r)}datetime(e,r){let n=new Q(e,"datetime",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}timestamp(e,r){let n=new Q(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision,autoCreate:r?.autoCreate,autoUpdate:r?.autoUpdate});return this.build(n)}boolean(e){let r=new Q(e,"boolean");return this.build(r)}binary(e){let r=new Q(e,"binary");return this.build(r)}varbinary(e,r=255){let n=new Q(e,"varbinary",{length:r});return this.build(n)}blob(e){let r=new Q(e,"blob");return this.build(r)}tinyblob(e){let r=new Q(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new Q(e,"mediumblob");return this.build(r)}longblob(e){let r=new Q(e,"longblob");return this.build(r)}json(e){let r=new Q(e,"json");return this.build(r)}jsonb(e){let r=new Q(e,"jsonb");return this.build(r)}enum(e,r){let n=new Q(e,"enum",{enumValues:r});return this.build(n)}custom(e,r,n){let o=new Q(e,r,{length:n});return this.build(o)}rawColumn(e){let r=new Q(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new Q(e,"geometry");return this.build(r)}point(e){let r=new Q(e,"point");return this.build(r)}linestring(e){let r=new Q(e,"linestring");return this.build(r)}polygon(e){let r=new Q(e,"polygon");return this.build(r)}multiPoint(e){let r=new Q(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var yn=class extends ze{constructor(t,e,r){super(e),this.table=t,this.sqlType=r;}rawStatement(t){return new O(t)}addColumn(t){let e=[],r=new st(this.sqlType,e,this.table,"alter_table"),n=t(r);if(!e.length)return;let o=r.getNamedConstraints(),s=e.filter(c=>c.folder==="column");if(e=e.concat(o),s.length!==1)throw new Error("addColumn callback must define exactly one column");let a=s[0],l=n.getNodes().filter(c=>{let m=c;return m.constraintType==="not_null"||m.constraintType==="null"||m.constraintType==="default"}),u=new Tr(a);u.inlineConstraints=l,this.nodes.push(u),n.getNodes().filter(c=>{let m=c;return m.constraintType==="unique"||m.constraintType==="foreign_key"||m.constraintType==="primary_key"}).forEach(c=>{this.nodes.push(new qe(c));});}alterColumn(t){if(this.sqlType==="sqlite")throw new h("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new st(this.sqlType,e,this.table,"alter_table"),n=t(r);if(!e.length)return;let o=e.filter(p=>p.folder==="column");if(o.length!==1)throw new Error("alterColumn callback must define exactly one column");let s=o[0],a=q(s.column),l=n.getNodes().find(p=>p.constraintType==="null"),d=n.getNodes().find(p=>p.constraintType==="not_null")||l,c=n.getNodes().find(p=>p.constraintType==="default"),m={};d&&(m.nullable=d.constraintType==="null"),c&&(c.defaultValue===void 0||c.defaultValue===null||c.defaultValue==="NULL"?m.dropDefault=true:m.default=c.defaultValue),s.collate&&(this.sqlType==="mysql"||this.sqlType==="mariadb")&&(m.collate=s.collate),this.nodes.push(new wr(q(a),s,m)),d&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(d.constraintType==="not_null"?this.nodes.push(new Rr(q(a))):d.constraintType==="null"&&this.nodes.push(new Sr(q(a)))),c&&this.sqlType!=="mysql"&&this.sqlType!=="mariadb"&&(c.defaultValue===void 0||c.defaultValue===null||c.defaultValue==="NULL"?this.nodes.push(new Lt(q(a))):this.nodes.push(new Cr(q(a),c.defaultValue))),n.getNodes().forEach(p=>{let g=p;switch(g.constraintType){case "primary_key":this.addPrimaryKey(q(a));break;case "unique":this.unique(q(a),{constraintName:g.constraintName});break;case "foreign_key":this.foreignKey(q(a),g.references?.table??"",q(g.references?.columns?.[0]??""),{constraintName:g.constraintName,onDelete:g.onDelete,onUpdate:g.onUpdate});break}});}dropColumn(t){this.nodes.push(new Nr(t));}renameColumn(t,e){this.nodes.push(new qr(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new h("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Lt(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new h("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new wt([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new h("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new qe(new J(...t)));}foreignKey(t,e,r,n){if(this.sqlType==="sqlite")throw new h("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new qe(new J("foreign_key",{columns:[t],references:{table:e,columns:[r]},constraintName:n?.constraintName??H(this.table,t,r),onDelete:n?.onDelete,onUpdate:n?.onUpdate})));}unique(t,e){if(this.sqlType==="sqlite")throw new h("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new qe(new J("unique",{columns:[t],constraintName:e?.constraintName??pe(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new h("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let r=H(this.table,t,e);this.nodes.push(new Ce(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new h("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new h("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??pe(this.table,t);this.nodes.push(new Ce(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new h("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Ce(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new h("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new h("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new Nt(t));}setTableOptions(t){let e=this.sqlType==="mysql"||this.sqlType==="mariadb",r=this.sqlType==="postgres"||this.sqlType==="cockroachdb",n=this.sqlType==="mssql";return this.sqlType==="sqlite"?this:(e?this.nodes.push(new St(t)):r?this.nodes.push(new St(t)):n&&this.nodes.push(new St(t)),this)}};var le=class{constructor(t){if(this.sqlType=t||$.DB_TYPE,!this.sqlType)throw new h("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new O(t)}rawQuery(t){this.queryStatements.push(t);}async execute(){for(let t of this.queryStatements)this.rawQuery(t);}runFile(t){if(!xn__default.default.existsSync(t))throw new h("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=It__default.default.basename(t),r=It__default.default.extname(e);if(r!==".sql"&&r!==".txt")throw new h("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let o=xn__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 st(this.sqlType,[],t);e(n);let o=n.getNodes(),s=new b({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a={...r,...this.sqlType==="mysql"||this.sqlType==="mariadb"?n.getMysqlOptions()||{}:{}},l=new _r(t,o,n.getNamedConstraints(),r?.ifNotExists,a),u=s.parse([l]).sql,d=u.startsWith("create table")?u:`create table ${u}`;this.rawQuery(d),this.generateAutoUpdateTriggers(t,o);}alterTable(t,e){let r=[],n=new yn(t,r,this.sqlType);if(e(n),!r.length)return;let o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"}),s=[],a=()=>{if(!s.length)return;let u=new he(t,s),d=o.parse([u]).sql;if(!d||!d.trim())return;let c=d.startsWith("alter table")?d:`alter table ${d}`;this.rawQuery(c),s=[];};for(let u of r)u.file==="add_constraint"&&s.length&&s[0].file==="add_column"||a(),s.push(u);a();let l=r.filter(u=>u.file==="add_column").map(u=>u.column);this.generateAutoUpdateTriggers(t,l);}dropTable(t,e=false){let r=new Mr(t,e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}renameTable(t,e){let r=new he(t,[new dt(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}truncateTable(t){let e=new qt(t,true),r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}createIndex(t,e,r={}){Array.isArray(e)||(e=[e]);let n=r.constraintName||pr(t,e.join("_")),o=new Ar(t,e,n),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([o]).sql);}dropIndex(t,e){let r=new xr(t,e),n=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addPrimaryKey(t,e){let r=new he(t,[new wt(e)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addUnique(t,e,r){let n=Array.isArray(e)?e:[e],o=r?.constraintName??pe(t,n.join("_")),s=new J("unique",{columns:n,constraintName:o}),a=new he(t,[new qe(s)]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropForeignKey(t,e,r){let n=H(t,e,r),o=new Ce(n),s=new he(t,[o]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropUnique(t,e,r){let n=Array.isArray(e)?pe(t,e.join("_")):pe(t,e),o=r?.constraintName??n,s=new Ce(o),a=new he(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new Nt,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new J(...e),n=new he(t,[new qe(r)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}dropConstraint(t,e){let r=new Ce(e),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}addCheck(t,e,r){let n=r?.constraintName??`chk_${t}_custom`.substring(0,63),o=new J("check",{checkExpression:e,constraintName:n}),s=new he(t,[new qe(o)]),a=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(a.parse([s]).sql);}dropCheck(t,e){if(this.sqlType==="mysql"){this.rawQuery(`ALTER TABLE \`${t}\` DROP CHECK \`${e}\``);return}let r=new Ce(e),n=new he(t,[r]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([n]).sql);}createExtension(t,e=true){let r=new Or(t,e),n=this.generateAstInstance({table:"",databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([r]).sql);}generateAutoUpdateTriggers(t,e){if(this.sqlType==="mysql"||this.sqlType==="mariadb")return;let r=e.filter(n=>n.folder==="column"&&n.autoUpdate===true).map(n=>q(n.column));for(let n of r){let o=this.getAutoUpdateTriggerSql(t,n);for(let s of o)this.rawQuery(s);}}getAutoUpdateTriggerSql(t,e){let r=`trg_${t}_${e}_auto_update`;switch(this.sqlType){case "postgres":case "cockroachdb":return [`CREATE OR REPLACE FUNCTION ${r}_fn() RETURNS trigger AS $$ BEGIN NEW."${e}" = CURRENT_TIMESTAMP; RETURN NEW; END; $$ LANGUAGE plpgsql`,`CREATE OR REPLACE TRIGGER ${r} BEFORE UPDATE ON "${t}" FOR EACH ROW EXECUTE FUNCTION ${r}_fn()`];case "sqlite":return [`CREATE TRIGGER IF NOT EXISTS ${r} AFTER UPDATE ON "${t}" FOR EACH ROW BEGIN UPDATE "${t}" SET "${e}" = CURRENT_TIMESTAMP WHERE rowid = NEW.rowid; END`];case "mssql":return [`CREATE OR ALTER TRIGGER [${r}] ON [${t}] AFTER UPDATE AS BEGIN SET NOCOUNT ON; UPDATE t SET t.[${e}] = CURRENT_TIMESTAMP FROM [${t}] t INNER JOIN inserted i ON t.[id] = i.[id]; END`];default:return []}}generateAstInstance(t){return new b(t,this.sqlType)}};var fn,ef,Yt=class{constructor(t,e){cu(this,fn);this.executionPromise=null;this.state="pending";this.executionError=null;this.dataSource=t,this.schema=new le(e||t.getDbType());}then(t,e){return this.state==="pending"&&(this.executionPromise=pu(this,fn,ef).call(this)),this.executionPromise.then(t,e)}rawStatement(t){return this.schema.rawStatement(t)}rawQuery(t){return this.schema.rawQuery(t),this}createTable(t,e,r){return this.schema.createTable(t,e,r),this}alterTable(t,e){return this.schema.alterTable(t,e),this}dropTable(t,e=false){return this.schema.dropTable(t,e),this}renameTable(t,e){return this.schema.renameTable(t,e),this}truncateTable(t){return this.schema.truncateTable(t),this}createIndex(t,e,r){return this.schema.createIndex(t,e,r),this}dropIndex(t,e){return this.schema.dropIndex(t,e),this}addPrimaryKey(t,e){return this.schema.addPrimaryKey(t,e),this}addUnique(t,e,r){return this.schema.addUnique(t,e,r),this}addConstraint(t,e,...r){return this.schema.addConstraint(t,e,...r),this}dropPrimaryKey(t){return this.schema.dropPrimaryKey(t),this}dropForeignKey(t,e,r){return this.schema.dropForeignKey(t,e,r),this}dropUnique(t,e,r){return this.schema.dropUnique(t,e,r),this}dropConstraint(t,e){return this.schema.dropConstraint(t,e),this}createExtension(t,e=true){return this.schema.createExtension(t,e),this}toQuery(){let t=this.schema.queryStatements;return t.length===1?t[0]:t}toQueries(){return [...this.schema.queryStatements]}toString(){let t=this.schema.queryStatements;return t.length===1?t[0]||"":t.join(`;
144
+ `)}async execute(){if(this.state!=="executed"){if(this.state==="failed")throw this.executionError;return this.then()}}isExecuted(){return this.state==="executed"}isPending(){return this.state==="pending"}hasFailed(){return this.state==="failed"}async hasTable(t){return this.dataSource.hasTable(t)}async hasColumn(t,e){return this.dataSource.hasColumn(t,e)}async hasColumns(t,...e){return this.dataSource.hasColumns(t,...e)}async hasIndex(t,e){return this.dataSource.hasIndex(t,e)}async hasPrimaryKey(t){return this.dataSource.hasPrimaryKey(t)}async hasUnique(t,e){return this.dataSource.hasUnique(t,e)}async hasForeignKey(t,e){return this.dataSource.hasForeignKey(t,e)}async hasCheckConstraint(t,e){return this.dataSource.hasCheckConstraint(t,e)}async getTables(){return this.dataSource.getTables()}async getColumnListing(t){return this.dataSource.getColumnListing(t)}dropTableIfExists(t){return this.schema.dropTable(t,true),this}async dropIndexIfExists(t,e){if(await this.dataSource.hasIndex(e,t)){let n=new le(this.dataSource.getDbType());n.dropIndex(t,e);let o=n.queryStatements[0];o&&await this.dataSource.rawQuery(o);}}renameColumn(t,e,r){return this.schema.alterTable(t,n=>{n.renameColumn(e,r);}),this}};fn=new WeakSet,ef=async function(){try{this.state="pending";let t=this.schema.queryStatements;if(!t.length){this.state="executed";return}for(let e of t)await this.dataSource.rawQuery(e);this.state="executed";}catch(t){throw this.state="failed",this.executionError=t,t}};var hn=class{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}buildDropDependencies(t){let e=new Map,r=new Map,n=new Map;for(let o of t.relationsToDrop||[]){let s=`${o.table}.${o.relation.name}`,a=[];if(o.relation.referencedTable&&a.push(`table.${o.relation.referencedTable}`),o.relation.referencedColumns)for(let l of o.relation.referencedColumns)a.push(`column.${o.relation.referencedTable}.${l}`);e.set(s,a);}for(let o of t.tablesToDrop||[]){let s=`table.${o.table}`,a=[];for(let l of this.models){let u=l.getRelations();for(let d of u)d.type==="belongsTo"&&d.model().table===o.table&&a.push(`fk.${l.table}.${d.constraintName}`);}r.set(s,a);}for(let o of t.columnsToDrop||[]){let s=`column.${o.table}.${o.column}`,a=[],l=this.models.find(u=>u.table===o.table);if(l){let u=l.getColumns().find(d=>d.databaseName===o.column);if(u){u.isPrimary&&a.push(`pk.${o.table}`);let d=l.getRelations();for(let c of d)c.columnName===u.columnName&&a.push(`fk.${o.table}.${c.constraintName}`);}}n.set(s,a);}return {foreignKeys:e,tables:r,constraints:n}}topologicalSortReverse(t,e){let r=new Set,n=new Set,o=[],s=a=>{if(n.has(a))throw new Error(`Circular dependency detected: ${a}`);if(r.has(a))return;n.add(a);let l=e(a);for(let u of l)s(u);n.delete(a),r.add(a),o.push(a);};for(let a of t.keys())r.has(a)||s(a);return o}generateDropOperations(t){let e=this.buildDropDependencies(t),r=[],n=this.topologicalSortReverse(e.foreignKeys,s=>e.foreignKeys.get(s)||[]);for(let s of n){let[a,l]=s.split("."),u=t.relationsToDrop?.find(d=>d.table===a&&d.relation.name===l);u&&r.push({type:"DROP_FOREIGN_KEY",phase:"DESTRUCTIVE_OPERATIONS",table:a,constraint:l,data:u,dependencies:e.foreignKeys.get(s)||[],sqlStatements:this.generateDropForeignKeySql(u)});}let o=this.topologicalSortReverse(e.tables,s=>e.tables.get(s)||[]);for(let s of t.columnsToDrop||[]){let a=`column.${s.table}.${s.column}`,l=e.constraints.get(a)||[];for(let u of l)u.startsWith("pk.")?r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:"PRIMARY KEY",data:{type:"primary_key",table:s.table},dependencies:[a],sqlStatements:this.generateDropPrimaryKeySql(s.table)}):u.startsWith("unique.")&&r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:`UNIQUE_${s.column}`,data:{type:"unique",table:s.table,column:s.column},dependencies:[a],sqlStatements:this.generateDropUniqueConstraintSql(s.table,s.column)});}for(let s of t.columnsToDrop||[])r.push({type:"DROP_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,column:s.column,data:s,dependencies:[],sqlStatements:this.generateDropColumnSql(s)});for(let s of o){let a=s.replace("table.",""),l=t.tablesToDrop?.find(u=>u.table===a);l&&r.push({type:"DROP_TABLE",phase:"DESTRUCTIVE_OPERATIONS",table:a,data:l,dependencies:e.tables.get(s)||[],sqlStatements:this.generateDropTableSql(l)});}return r}analyzeConstraintImpact(t){let e=new Map;for(let r of t.columnsToDrop||[]){let n=[],o=this.models.find(s=>s.table===r.table);if(o){let s=o.getColumns().find(a=>a.databaseName===r.column);if(s){s.isPrimary&&n.push(`PRIMARY KEY on ${r.table}`);let a=o.getRelations();for(let l of a)l.columnName===s.columnName&&n.push(`FOREIGN KEY ${l.constraintName} on ${r.table}`);}}e.set(`${r.table}.${r.column}`,n);}return e}detectMixedOperations(t){let e=[];for(let r of t.columnsToModify||[]){let n=this.models.find(o=>o.table===r.table);n&&n.getColumns().find(s=>s.databaseName===r.dbColumns.name)&&this.hasConstraintChanges(r.dbColumns,r.modelColumn)&&e.push({type:"column_modification_with_constraints",table:r.table,column:r.dbColumns.name,description:`Column ${r.dbColumns.name} modification requires constraint recreation`});}for(let r of t.primaryKeysToModify||[])e.push({type:"primary_key_modification",table:r.table,description:`Primary key modification on ${r.table} requires FK recreation`});return e}hasConstraintChanges(t,e){return t.isNullable!==!e.constraints?.nullable||t.isUnique!==!!e.constraints?.unique||t.defaultValue!==e.constraints?.default}generateDropForeignKeySql(t){if(this.sql.getDbType()==="sqlite")return [];if(!t.relation.name)return [];let e=this.sql.schema().alterTable(t.table,n=>{n.dropConstraint(t.relation.name);}).toQueries(),r=this.sql.getDbType();return (r==="mysql"||r==="mariadb")&&e.push(`DROP INDEX \`${t.relation.name}\` ON \`${t.table}\``),e}generateDropPrimaryKeySql(t){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,e=>{e.dropPrimaryKey();}).toQueries()}generateDropUniqueConstraintSql(t,e){return this.sql.getDbType()==="sqlite"?[]:this.sql.schema().alterTable(t,r=>{r.dropConstraint(`UNIQUE_${e}`);}).toQueries()}generateDropColumnSql(t){return this.sql.schema().alterTable(t.table,e=>{e.dropColumn(t.column);}).toQueries()}generateDropTableSql(t){return [`DROP TABLE ${t.table}`]}};var Vl=i=>String(i??"").replace(/::[a-z_ ]+$/i,"").replace(/[()\s]/g,"").toLowerCase(),rg=/^(current[ _]?timestamp\d*|now\d*|getdate\d*|localtimestamp\d*|localtime\d*)$/,ng={postgres:i=>i.includes("nextval"),cockroachdb:i=>i.includes("unique_rowid")},og={postgres:["gen_random_uuid"],cockroachdb:["gen_random_uuid"],mysql:["uuid"],mariadb:["uuid"],mssql:["newid"],sqlite:["lower(hex(randomblob(16)))"]},rf=(i,t)=>(og[i]??[]).includes(Vl(t)),Mt=(i,t)=>!!i.autoCreate&&rg.test(Vl(t)),Ot=(i,t,e)=>{if(t.type!=="increment"&&t.type!=="bigIncrement")return false;let r=ng[i];return r?r(Vl(e)):false};var gn=class gn{constructor(t){this.sql=t,this.models=Object.values(this.sql._models),this.dropResolver=new hn(t);}generateOperations(t){let e=[];e.push(...this.generateStructureCreationOperations(t)),e.push(...this.generateConstraintCreationOperations(t)),e.push(...this.generateDestructiveOperations(t)),e.push(...this.generateColumnModificationOperations(t));let r=l=>l.table&&l.constraint?`${l.table}::${l.constraint}`:void 0,n=new Set(e.filter(l=>l.type==="ADD_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),o=new Set(e.filter(l=>l.type==="DROP_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),s=new Set([...n].filter(l=>o.has(l)));return e.filter(l=>{let u=r(l);return u?!(s.has(u)&&(l.type==="ADD_FOREIGN_KEY"||l.type==="DROP_FOREIGN_KEY")):true})}generateStructureCreationOperations(t){let e=[];for(let r of t.tablesToAdd){let n=this.sql.schema().createTable(r.table,o=>{for(let s of r.columns){if(Array.isArray(s.type)){o.enum(s.databaseName,s.type);continue}s.type&&this.executeBuilderMethod(r.table,o,s,[s.databaseName,s.length,s.precision&&!s.withTimezone?s.precision:void 0,s.scale,s.withTimezone?{withTimezone:s.withTimezone,precision:s.precision}:void 0].filter(Boolean),true);}}).toQuery();e.push({type:"CREATE_TABLE",phase:"STRUCTURE_CREATION",table:r.table,data:r,dependencies:[],sqlStatements:[n]});}for(let r of t.columnsToAdd){let n=this.generateAddColumnViaAlter(r);e.push({type:"ADD_COLUMN",phase:"STRUCTURE_CREATION",table:r.table,column:r.column.databaseName,data:r,dependencies:[`table.${r.table}`],sqlStatements:n});}return e}generateConstraintCreationOperations(t){let e=[];for(let n of t.uniquesToDrop||[]){let o=this.sql.schema().alterTable(n.table,s=>{s.dropConstraint(n.name);}).toQueries();e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:o});}let r=new Set((t.uniquesToDrop||[]).map(n=>n.name));for(let n of t.indexesToDrop){if(r.has(n.index))continue;let o=new le(this.sql.getDbType());o.dropIndex(n.index,n.table);let s=o.queryStatements[0];e.push({type:"DROP_INDEX",phase:"CONSTRAINT_CREATION",table:n.table,index:n.index,data:n,dependencies:[`table.${n.table}`],sqlStatements:[s]});}for(let n of t.primaryKeysToAdd){let a=this.models.find(u=>u.table===n.table)?.getColumns().find(u=>u.columnName===n.columns[0])?.primaryKeyConstraintName||Ne(n.table,n.columns[0]),l=this.sql.schema().alterTable(n.table,u=>{let d=a||Ne(n.table,n.columns[0]);u.addConstraint("primary_key",{columns:[n.columns[0]],constraintName:d});}).toQueries();e.push({type:"ADD_PRIMARY_KEY",phase:"CONSTRAINT_CREATION",table:n.table,constraint:a,data:n,dependencies:[`table.${n.table}`],sqlStatements:l});}for(let n of t.relationsToAdd){if(n.relation.type==="manyToMany")continue;let o=this.generateAddRelationViaAlter(n),s=this.computeFkConstraintName(n);e.push({type:"ADD_FOREIGN_KEY",phase:"CONSTRAINT_CREATION",table:n.table,constraint:s,data:n,dependencies:this.getForeignKeyDependencies(n),sqlStatements:o});}for(let n of t.uniquesToAdd||[]){let o=this.models.find(l=>l.table===n.table),s=(n.columns||[]).map(l=>o?.getColumns().find(d=>d.columnName===l)?.databaseName||l),a=this.sql.schema().alterTable(n.table,l=>{l.addConstraint("unique",{columns:s,constraintName:n.name||"mandatory"});}).toQueries();e.push({type:"ADD_UNIQUE_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name||"mandatory",data:n,dependencies:[`table.${n.table}`],sqlStatements:a});}for(let n of t.indexesToAdd){let o=this.generateCreateIndexSql(n);e.push({type:"CREATE_INDEX",phase:"CONSTRAINT_CREATION",table:n.table,index:n.index,data:n,dependencies:[`table.${n.table}`],sqlStatements:[o]});}for(let n of t.checksToDrop||[]){let o=new le(this.sql.getDbType());o.dropCheck(n.table,n.name);let s=o.queryStatements;e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:s});}for(let n of t.checksToAdd||[]){let o=new le(this.sql.getDbType());o.addCheck(n.table,n.expression,{constraintName:n.name});let s=o.queryStatements;e.push({type:"ADD_CHECK_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:n.table,constraint:n.name,data:n,dependencies:[`table.${n.table}`],sqlStatements:s});}return e}computeFkConstraintName(t){let e=q(t.relation.constraintName);if(e)return e;let r=t.table;t.relation.type==="belongsTo"?r=t.relation.model().table:t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(r=q(t.relation.manyToManyOptions.throughModel));let o=this.models.find(a=>a.table===t.table)?.getColumns()||[],s=t.relation.columnName;return t.relation.type==="belongsTo"?s=o.find(l=>l.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey:s=o.find(l=>l.columnName===s)?.databaseName||s,H(t.table,s,r)}generateDestructiveOperations(t){return this.dropResolver.generateDropOperations(t)}generateColumnModificationOperations(t){let e=[];for(let r of t.columnsToModify||[]){let n=this.generateModifyColumnViaAlter(r);e.push({type:"MODIFY_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:r.table,column:r.dbColumns.name,data:r,dependencies:[],sqlStatements:n});}return e}getForeignKeyDependencies(t){let e=[];if(t.relation.type==="belongsTo"){let n=t.relation.model();e.push(`table.${n.table}`);let o=n.primaryKey||"id",s=n.getColumns().find(a=>a.columnName===o);s&&e.push(`column.${n.table}.${s.databaseName}`);}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let n=q(t.relation.manyToManyOptions.throughModel);e.push(`table.${n}`);}e.push(`table.${t.table}`);let r=this.models.find(n=>n.table===t.table);if(r){let n=r.getColumns().find(o=>o.columnName===t.relation.columnName||o.databaseName===t.relation.columnName);n&&e.push(`column.${t.table}.${n.databaseName}`);}return e}applyNullableConstraint(t,e){return e===false?t.notNullable():e===true||this.sql.getDbType()==="mariadb"?t.nullable():t}executeBuilderMethod(t,e,r,n,o=true){let s;if(Array.isArray(r.type))s=e.enum(n[0],r.type);else if(typeof r.type=="string"&&gn.BUILTIN_COLUMN_TYPES.has(r.type))s=e[r.type](...n);else if(typeof r.type=="string")s=e.custom(n[0],r.type,r.length);else throw new Error(`Unknown column type: ${String(r.type)} for column ${r.columnName}`);return o&&(r.isPrimary&&s.primaryKey({constraintName:r.primaryKeyConstraintName||Ne(t,r.columnName)}),r.unsigned&&s.unsigned(),r.zerofill&&s.zerofill(),r.constraints?.default!==void 0&&s.default(r.constraints.default),this.applyNullableConstraint(s,r.constraints?.nullable)),s}generateAddColumnViaAlter(t){let e=[t.column.databaseName,t.column.length,t.column.precision&&!t.column.withTimezone?t.column.precision:void 0,t.column.scale,t.column.withTimezone?{withTimezone:t.column.withTimezone,precision:t.column.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,r=>{r.addColumn(n=>{let o=this.executeBuilderMethod(t.table,n,t.column,e,false);return t.column.constraints?.default!==void 0&&o.default(t.column.constraints.default),this.applyNullableConstraint(o,t.column.constraints?.nullable),o});}).toQueries()}generateModifyColumnViaAlter(t){if(this.sql.getDbType()==="sqlite")return [];let e=[t.modelColumn.databaseName,t.modelColumn.length,t.modelColumn.precision&&!t.modelColumn.withTimezone?t.modelColumn.precision:void 0,t.modelColumn.scale,t.modelColumn.withTimezone?{withTimezone:t.modelColumn.withTimezone,precision:t.modelColumn.precision}:void 0].filter(Boolean);return this.sql.schema().alterTable(t.table,n=>{n.alterColumn(o=>{let s=this.executeBuilderMethod(t.table,o,t.modelColumn,e,false);return t.modelColumn.constraints?.default!==void 0?s.default(t.modelColumn.constraints.default):t.dbColumns.defaultValue!=null&&t.dbColumns.defaultValue!==""&&!Mt(t.modelColumn,t.dbColumns.defaultValue)&&!Ot(this.sql.getDbType(),t.modelColumn,t.dbColumns.defaultValue)&&s.default(null),this.applyNullableConstraint(s,t.modelColumn.constraints?.nullable),s});}).toQueries()}generateCreateIndexSql(t){let e=this.models.find(s=>s.table===t.table),n=(e?.getIndexes().find(s=>s.name===t.index)?.columns||[]).map(s=>e?.getColumns().find(l=>l.columnName===s)?.databaseName||s),o=new le(this.sql.getDbType());return o.createIndex(t.table,n,{constraintName:t.index}),o.queryStatements[0]||""}generateAddRelationViaAlter(t){let e=t.table,r=t.relation.foreignKey;t.relation.type==="belongsTo"?(e=t.relation.model().table,r=t.relation.model().primaryKey||"id"):t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(e=q(t.relation.manyToManyOptions.throughModel),r=q(t.relation.manyToManyOptions.rightForeignKey),(!r||r==="undefined")&&(r=t.relation.model().primaryKey||"id"));let n=typeof t.relation.constraintName=="string"?t.relation.constraintName:void 0,o=q(r);if(t.relation.type==="belongsTo"){let m=t.relation.model(),p=m.primaryKey,y=m.getColumns().find(w=>w.columnName===p);if(y)o=y.databaseName;else {let w=m?.databaseCaseConvention||"preserve";o=V(p,w);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.model();if(typeof o=="string"&&o){let p=m.getColumns(),g=p.find(y=>y.columnName===o);if(g)o=g.databaseName;else {let y=m.primaryKey||"id",w=p.find(T=>T.columnName===y);if(w)o=w.databaseName;else {let T=m?.databaseCaseConvention||"preserve";o=V(o||y,T);}}}else {let p=m.primaryKey||"id",y=m.getColumns().find(w=>w.columnName===p);if(y)o=y.databaseName;else {let w=m?.databaseCaseConvention||"preserve";o=V(p,w);}}}let s=this.models.find(m=>m.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,u=a.find(m=>m.columnName===l);if(u)l=u.databaseName;else {let m=s?.databaseCaseConvention||"preserve";l=V(l,m);}if(t.relation.type==="belongsTo"){let m=a.find(p=>p.columnName===t.relation.foreignKey);if(m)l=m.databaseName;else {let p=s?.databaseCaseConvention||"preserve";l=V(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let m=t.relation.manyToManyOptions.leftForeignKey,p=q(m),g=a.find(y=>y.columnName===p);if(g)l=g.databaseName;else {let y=s?.databaseCaseConvention||"preserve";l=V(p,y);}}let d=t.relation.onDelete?.toLowerCase(),c=t.relation.onUpdate?.toLowerCase();return this.sql.schema().alterTable(t.table,m=>{let p=n||H(t.table,l,e);m.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[o]},constraintName:p,onDelete:d,onUpdate:c});}).toQueries()}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>sqlFormatter.format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};gn.BUILTIN_COLUMN_TYPES=new Set(["char","varchar","string","text","longtext","mediumtext","tinytext","uuid","ulid","integer","tinyint","smallint","mediumint","bigint","biginteger","float","double","real","decimal","numeric","increment","bigIncrement","boolean","date","time","datetime","timestamp","year","json","jsonb","binary","varbinary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]);var Zt=gn;var Tn=class Tn{constructor(t){this.sql=t,this.models=Object.values(this.sql._models);}generateCode(t){let e=[],r=[],n=null,o={STRUCTURE_CREATION:"Structure creation",CONSTRAINT_CREATION:"Constraints and indexes",DESTRUCTIVE_OPERATIONS:"Destructive operations"};for(let s of t){s.phase!==n&&(n=s.phase,e.length>0&&e.push(""),e.push(`// ${o[n]}`));let{up:a,down:l}=this.generateOperationCode(s);a&&e.push(...a),l&&r.push(...l);}return {up:e,down:r}}generateOperationCode(t){switch(t.type){case "CREATE_TABLE":return this.generateCreateTableCode(t);case "ADD_COLUMN":return this.generateAddColumnCode(t);case "MODIFY_COLUMN":return this.generateModifyColumnCode(t);case "DROP_COLUMN":return this.generateDropColumnCode(t);case "CREATE_INDEX":return this.generateCreateIndexCode(t);case "DROP_INDEX":return this.generateDropIndexCode(t);case "ADD_FOREIGN_KEY":return this.generateAddForeignKeyCode(t);case "DROP_FOREIGN_KEY":return this.generateDropForeignKeyCode(t);case "ADD_UNIQUE_CONSTRAINT":return this.generateAddUniqueCode(t);case "DROP_CONSTRAINT":return this.generateDropConstraintCode(t);case "ADD_CHECK_CONSTRAINT":return this.generateAddCheckCode(t);case "ADD_PRIMARY_KEY":return this.generateAddPrimaryKeyCode(t);case "DROP_TABLE":return this.generateDropTableCode(t);case "MODIFY_PRIMARY_KEY":return this.generateModifyPrimaryKeyCode(t);default:return {up:null,down:null}}}generateCreateTableCode(t){let e=t.data,r=[];r.push(`this.schema.createTable(${this.quote(e.table)}, (table) => {`);for(let o of e.columns){let s=this.generateColumnCode(e.table,o,true);r.push(` ${s}`);}r.push("});");let n=[`this.schema.dropTable(${this.quote(e.table)});`];return {up:r,down:n}}generateAddColumnCode(t){let{table:e,column:r}=t.data,n=this.generateColumnCode(e,r,false),o=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.addColumn((col) => ${n.replace(/^table\./,"col.")});`,"});"],s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r.databaseName)});`,"});"];return {up:o,down:s}}generateModifyColumnCode(t){let{table:e,modelColumn:r,dbColumns:n}=t.data,o=this.generateColumnCodeForModify(e,r,n),s=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.alterColumn((col) => ${o.replace(/^table\./,"col.")});`,"});"],a=[`// TODO: reverse column modification for ${this.quote(n.name)} on ${this.quote(e)}`];return {up:s,down:a}}generateDropColumnCode(t){let{table:e,column:r}=t.data,n=[`this.schema.alterTable(${this.quote(e)}, (table) => {`,` table.dropColumn(${this.quote(r)});`,"});"],o=[`// TODO: reverse column drop for ${this.quote(r)} on ${this.quote(e)}`];return {up:n,down:o}}generateCreateIndexCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=(r?.getIndexes().find(u=>u.name===e.index)?.columns||[]).map(u=>r?.getColumns().find(c=>c.columnName===u)?.databaseName||u),s=o.length===1?this.quote(o[0]):`[${o.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.createIndex(${this.quote(e.table)}, ${s}, { constraintName: ${this.quote(e.index)} });`],l=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`];return {up:a,down:l}}generateDropIndexCode(t){let e=t.data,r=[`this.schema.dropIndex(${this.quote(e.index)}, ${this.quote(e.table)});`],n=[`// TODO: reverse index drop for ${this.quote(e.index)} on ${this.quote(e.table)}`];return {up:r,down:n}}generateAddForeignKeyCode(t){let e=t.data,{sourceColumn:r,referencedTable:n,referencedColumn:o,constraintName:s}=this.resolveRelationDetails(e),a=e.relation.onDelete?.toLowerCase(),l=e.relation.onUpdate?.toLowerCase(),u=[];s&&u.push(`constraintName: ${this.quote(s)}`),a&&u.push(`onDelete: ${this.quote(a)}`),l&&u.push(`onUpdate: ${this.quote(l)}`);let d=u.length>0?`, { ${u.join(", ")} }`:"",c=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.foreignKey(${this.quote(r)}, ${this.quote(n)}, ${this.quote(o)}${d});`,"});"],m=s||H(e.table,r,n),p=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.dropConstraint(${this.quote(m)});`,"});"];return {up:c,down:p}}generateDropForeignKeyCode(t){let e=t.constraint||t.data?.relation?.name;if(!e)return {up:null,down:null};let r=t.table||t.data?.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(e)});`,"});"],o=[`// TODO: reverse FK drop for ${this.quote(e)} on ${this.quote(r)}`];return {up:n,down:o}}generateAddUniqueCode(t){let e=t.data,r=this.models.find(u=>u.table===e.table),o=`[${(e.columns||[]).map(u=>r?.getColumns().find(c=>c.columnName===u)?.databaseName||u).map(u=>this.quote(u)).join(", ")}]`,s=e.name||"mandatory",a=[`this.schema.addUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(s)} });`],l=[`this.schema.dropUnique(${this.quote(e.table)}, ${o}, { constraintName: ${this.quote(s)} });`];return {up:a,down:l}}generateDropConstraintCode(t){let e=t.data,r=t.table||e.table,n=t.constraint||e.name;if(!n||!r)return {up:null,down:null};if(e.type==="primary_key"){let a=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});"],l=[`// TODO: reverse primary key drop on ${this.quote(r)}`];return {up:a,down:l}}if(e.type==="unique"){let a=e.column,l=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],u=[`// TODO: reverse unique constraint drop for ${this.quote(a)} on ${this.quote(r)}`];return {up:l,down:u}}if(e.expression!==void 0){let a=[`this.schema.dropCheck(${this.quote(r)}, ${this.quote(n)});`],l=[`// TODO: reverse check constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:a,down:l}}let o=[`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.dropConstraint(${this.quote(n)});`,"});"],s=[`// TODO: reverse constraint drop for ${this.quote(n)} on ${this.quote(r)}`];return {up:o,down:s}}generateAddCheckCode(t){let e=t.data,r=[`this.schema.addCheck(${this.quote(e.table)}, ${this.quote(e.expression)}, { constraintName: ${this.quote(e.name)} });`],n=[`this.schema.dropCheck(${this.quote(e.table)}, ${this.quote(e.name)});`];return {up:r,down:n}}generateAddPrimaryKeyCode(t){let e=t.data,o=this.models.find(u=>u.table===e.table)?.getColumns().find(u=>u.columnName===e.columns[0])?.primaryKeyConstraintName||Ne(e.table,e.columns[0]),s=`[${e.columns.map(u=>this.quote(u)).join(", ")}]`,a=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`,` table.addConstraint("primary_key", { columns: ${s}, constraintName: ${this.quote(o)} });`,"});"],l=[`this.schema.alterTable(${this.quote(e.table)}, (table) => {`," table.dropPrimaryKey();","});"];return {up:a,down:l}}generateDropTableCode(t){let e=t.table||t.data?.table,r=[`this.schema.dropTable(${this.quote(e)});`],n=[`// TODO: reverse table drop for ${this.quote(e)}`];return {up:r,down:n}}generateModifyPrimaryKeyCode(t){let e=t.data,r=e.table,n=[`this.schema.alterTable(${this.quote(r)}, (table) => {`," table.dropPrimaryKey();","});",`this.schema.alterTable(${this.quote(r)}, (table) => {`,` table.addPrimaryKey(${this.quote(e.modelPrimaryKey)});`,"});"],o=[`// TODO: reverse primary key modification on ${this.quote(r)}`];return {up:n,down:o}}generateColumnCode(t,e,r){let n=this.generateColumnTypeCode(e);if(!r)return n;if(e.isPrimary){let o=e.primaryKeyConstraintName||Ne(t,e.columnName);n+=`.primaryKey({ constraintName: ${this.quote(o)} })`;}return e.unsigned&&(n+=".unsigned()"),e.zerofill&&(n+=".zerofill()"),e.constraints?.default!==void 0&&(n+=`.default(${this.formatDefaultValue(e.constraints.default)})`),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n+";"}generateColumnCodeForModify(t,e,r){let n=this.generateColumnTypeCode(e);return e.constraints?.default!==void 0?n+=`.default(${this.formatDefaultValue(e.constraints.default)})`:r.defaultValue!=null&&r.defaultValue!==""&&!Mt(e,r.defaultValue)&&!Ot(this.sql.getDbType(),e,r.defaultValue)&&(n+=".default(null)"),e.constraints?.nullable===false?n+=".notNullable()":e.constraints?.nullable===true&&(n+=".nullable()"),n}generateColumnTypeCode(t){let e=t.databaseName;if(Array.isArray(t.type)){let s=t.type.map(a=>this.quote(a)).join(", ");return `table.enum(${this.quote(e)}, [${s}])`}let r=t.type;if(new Set(["uuid","ulid","boolean","year","json","jsonb","binary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]).has(r))return `table.${r}(${this.quote(e)})`;if(r==="timestamp"||r==="datetime"){let s=[];return t.withTimezone&&s.push("withTimezone: true"),t.precision!=null&&s.push(`precision: ${t.precision}`),s.length>0?`table.${r}(${this.quote(e)}, { ${s.join(", ")} })`:`table.${r}(${this.quote(e)})`}return r==="date"||r==="time"?t.precision!=null?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="increment"||r==="bigIncrement"?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:r==="decimal"||r==="numeric"?t.precision!=null?t.scale!=null?`table.${r}(${this.quote(e)}, ${t.precision}, ${t.scale})`:`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="float"||r==="double"||r==="real"?t.precision!=null&&t.precision!==10?`table.${r}(${this.quote(e)}, ${t.precision})`:`table.${r}(${this.quote(e)})`:r==="longtext"||r==="mediumtext"||r==="tinytext"?`table.${r}(${this.quote(e)})`:new Set(["varchar","char","string","integer","tinyint","smallint","mediumint","bigint","biginteger","varbinary"]).has(r)?t.length!=null&&t.length!==255?`table.${r}(${this.quote(e)}, ${t.length})`:`table.${r}(${this.quote(e)})`:Tn.BUILTIN_COLUMN_TYPES.has(r)?`table.${r}(${this.quote(e)})`:t.length!=null?`table.custom(${this.quote(e)}, ${this.quote(r)}, ${t.length})`:`table.custom(${this.quote(e)}, ${this.quote(r)})`}resolveRelationDetails(t){let e=t.table,r="id";if(t.relation.type==="belongsTo"){let l=t.relation.model();e=l.table;let u=l.primaryKey||"id";r=l.getColumns().find(m=>m.columnName===u)?.databaseName||u;}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){e=q(t.relation.manyToManyOptions.throughModel);let l=q(t.relation.manyToManyOptions.rightForeignKey);l&&l!=="undefined"?r=l:r=t.relation.model().primaryKey||"id";}let o=this.models.find(l=>l.table===t.table)?.getColumns()||[],s=t.relation.columnName;if(t.relation.type==="belongsTo")s=o.find(u=>u.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey;else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let l=q(t.relation.manyToManyOptions.leftForeignKey);s=o.find(d=>d.columnName===l)?.databaseName||l;}else s=o.find(u=>u.columnName===s)?.databaseName||s;let a=typeof t.relation.constraintName=="string"?t.relation.constraintName:q(t.relation.constraintName)||void 0;return {sourceColumn:s,referencedTable:e,referencedColumn:r,constraintName:a}}quote(t){return `"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}formatDefaultValue(t){return t==null?"null":t==="NULL"?'"NULL"':typeof t=="boolean"||typeof t=="number"?t.toString():t==="TRUE"||t==="true"?"true":t==="FALSE"||t==="false"?"false":this.quote(String(t))}};Tn.BUILTIN_COLUMN_TYPES=new Set(["char","varchar","string","text","longtext","mediumtext","tinytext","uuid","ulid","integer","tinyint","smallint","mediumint","bigint","biginteger","float","double","real","decimal","numeric","increment","bigIncrement","boolean","date","time","datetime","timestamp","year","json","jsonb","binary","varbinary","blob","tinyblob","mediumblob","longblob","geometry","point","linestring","polygon","multiPoint"]);var bn=Tn;function ig(i){return i.replace(/\s+/g," ").trim()}function ag(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function lg(i){let t=i.split(/\s+/).filter(n=>n.length>0),e=[],r=[];for(let n of t)n==="unsigned"||n==="zerofill"?e.push(n):r.push(n);return {bareBase:r.join(" "),modifiers:e}}function ug(i,t){return t.length===0?i:`${i} ${t.join(" ")}`}function Ge(i,t){let e=ig(t.toLowerCase()),r=ag(e);switch(i){case "sqlite":{let n=[{test:o=>o==="increment",normalized:"integer"},{test:o=>o==="bigincrement",normalized:"integer"},{test:o=>o.includes("int"),normalized:"integer"},{test:o=>o==="string",normalized:"varchar"},{test:o=>o.includes("char"),normalized:"varchar"},{test:o=>o.includes("text"),normalized:"text"},{test:o=>o.includes("clob"),normalized:"text"},{test:o=>o.includes("date"),normalized:"text"},{test:o=>o.includes("time"),normalized:"text"},{test:o=>o.includes("timestamp"),normalized:"text"},{test:o=>o.includes("datetime"),normalized:"text"},{test:o=>o.includes("blob"),normalized:"blob"},{test:o=>o.includes("real")||o.includes("floa")||o.includes("doub"),normalized:"real"},{test:o=>o.includes("numeric"),normalized:"numeric"},{test:o=>o.includes("bool"),normalized:"integer"},{test:o=>o.includes("uuid"),normalized:"varchar"},{test:o=>o.includes("ulid"),normalized:"varchar"},{test:o=>o.includes("jsonb"),normalized:"text"},{test:o=>o.includes("json"),normalized:"text"}];for(let o of n)if(o.test(r))return o.normalized;return r}case "mysql":case "mariadb":{let{bareBase:n,modifiers:o}=lg(r),a=new Set(["int","integer","increment","tinyint","smallint","mediumint","bigint","bigincrement","float","double","double precision","real","decimal","numeric","year","bool","boolean"]).has(n);if(n.endsWith("text")||n==="text")return "text";let l;switch(n){case "int":case "integer":case "increment":l="integer";break;case "tinyint":l="boolean";break;case "smallint":l="smallint";break;case "mediumint":l="mediumint";break;case "bigint":case "bigincrement":l="bigint";break;case "float":l="float";break;case "double":case "double precision":l="double";break;case "real":l="double";break;case "decimal":case "numeric":l="numeric";break;case "string":case "varchar":case "character varying":l="varchar";break;case "char":case "character":l="char";break;case "uuid":l="varchar";break;case "ulid":l="varchar";break;case "date":l="date";break;case "datetime":l="datetime";break;case "timestamp":l="timestamp";break;case "time":l="time";break;case "year":l="year";break;case "jsonb":case "json":l=i==="mariadb"?"text":"json";break;case "enum":l="enum";break;case "binary":l="binary";break;case "varbinary":l="varbinary";break;case "tinyblob":l="tinyblob";break;case "mediumblob":l="mediumblob";break;case "longblob":l="longblob";break;case "blob":l="blob";break;case "boolean":case "bool":l="boolean";break;default:l=n;break}return a&&o.length>0?ug(l,o):l}case "postgres":case "cockroachdb":{if(r.endsWith("text")||r==="text")return "text";if(r.startsWith("timestamp"))return "timestamp";if(r.startsWith("time"))return "time";if(r==="datetime")return "timestamp";switch(r){case "string":case "varchar":case "character varying":return "varchar";case "char":case "character":return "char";case "ulid":return "varchar";case "double precision":return "double";case "real":return "real";case "float":return "real";case "integer":case "int4":case "int":case "increment":case "serial":return "integer";case "mediumint":return "integer";case "bigint":case "int8":case "bigincrement":case "bigserial":return "bigint";case "smallint":case "int2":return "smallint";case "tinyint":return "smallint";case "uuid":return "uuid";case "year":return "smallint";case "bytea":return "bytea";case "binary":case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":return "bytea";case "boolean":case "bool":return "boolean";case "numeric":case "decimal":return "numeric";case "jsonb":return "jsonb";case "json":return "json";case "date":return "date";default:return r}}case "mssql":{if(r.endsWith("text")||r==="text"||r==="ntext")return "text";if(r.startsWith("datetime2"))return "datetime2";if(r.startsWith("datetimeoffset"))return "datetimeoffset";switch(r){case "int":case "integer":case "increment":return "int";case "tinyint":return "tinyint";case "smallint":return "smallint";case "bigint":case "bigincrement":return "bigint";case "float":return "float";case "real":return "real";case "double":case "double precision":return "float";case "decimal":case "numeric":return "decimal";case "money":return "money";case "smallmoney":return "smallmoney";case "string":case "varchar":case "character varying":return "varchar";case "nvarchar":return "nvarchar";case "char":case "character":return "char";case "nchar":return "nchar";case "uuid":case "uniqueidentifier":return "uniqueidentifier";case "ulid":return "varchar";case "date":return "date";case "datetime":return "datetime";case "smalldatetime":return "smalldatetime";case "time":return "time";case "timestamp":return "datetime2";case "binary":return "binary";case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":case "bytea":return "varbinary";case "image":return "image";case "bit":case "boolean":case "bool":return "bit";case "json":case "jsonb":return "nvarchar";case "xml":return "xml";case "sql_variant":return "sql_variant";default:return r}}default:return r}}var wn=class i{constructor(t){this.emptyStatements=[/^alter table [`'"]?[\w]+[`'"]?\s*$/i];this.sql=t,this.models=Object.values(this.sql._models),this.data={columnsToAdd:[],columnsToDrop:[],columnsToModify:[],indexesToAdd:[],indexesToDrop:[],uniquesToAdd:[],uniquesToDrop:[],checksToAdd:[],checksToDrop:[],tablesToAdd:[],relationsToAdd:[],relationsToDrop:[],relationsToModify:[],primaryKeysToAdd:[],primaryKeysToDrop:[],primaryKeysToModify:[]};}static async makeDiff(t){let e=new i(t);return await Promise.all(e.models.map(async r=>{let n=await e.sql.getTableSchema(r.table),o={columns:r.getColumns().filter(y=>y?.type!==void 0&&y?.type!==null),indexes:r.getIndexes(),relations:r.getRelations()};if(!n.columns.length){e.data.tablesToAdd.push({table:r.table,columns:o.columns});for(let T of o.indexes)n.indexes.map(S=>S.name).includes(T.name)||e.data.indexesToAdd.push({table:r.table,index:T.name});let y=r.getUniques?.()||[];for(let T of y)e.data.uniquesToAdd.push({table:r.table,name:T.name||"mandatory",columns:T.columns});let w=r.getChecks?.()||[];for(let T of w)e.data.checksToAdd.push({table:r.table,name:T.name,expression:T.expression});for(let T of o.relations){if(T.type!=="belongsTo")continue;let S=q(T.constraintName);n.foreignKeys.find(C=>C.name===S)||e.data.relationsToAdd.push({table:r.table,relation:T,onDelete:T.onDelete,onUpdate:T.onUpdate});}return}for(let y of o.columns)n.columns.some(T=>T.name===y.databaseName||T.name===y.columnName)||e.data.columnsToAdd.push({table:r.table,column:y});let s=r.getColumns();for(let y of n.columns)s.some(T=>T.databaseName===y.name||T.columnName===y.name)||e.data.columnsToDrop.push({table:r.table,column:y.name});for(let y of o.indexes)n.indexes.map(w=>w.name).includes(y.name)||e.data.indexesToAdd.push({table:r.table,index:y.name});let a=r.getUniques?.()||[];for(let y of a)n.indexes.some(T=>T.name===y.name&&T.isUnique)||e.data.uniquesToAdd.push({table:r.table,name:y.name||"mandatory",columns:y.columns});let l=n.foreignKeys.map(y=>y.name);for(let y of n.indexes)y.isUnique||l.includes(y.name)||o.indexes.map(T=>T.name).includes(y.name)||e.data.indexesToDrop.push({table:r.table,index:y.name});for(let y of n.indexes){if(!y.isUnique||y.name==="PRIMARY")continue;(r.getUniques?.()||[]).map(T=>T.name).includes(y.name)||e.data.uniquesToDrop.push({table:r.table,name:y.name});}let u=r.getChecks?.()||[];for(let y of u)n.checkConstraints.some(T=>T.name===y.name)||e.data.checksToAdd.push({table:r.table,name:y.name,expression:y.expression});let d=new Set(u.map(y=>y.name)),c=o.columns.filter(y=>Array.isArray(y.type)),m=new Set(c.map(y=>y.databaseName||y.columnName));for(let y of n.checkConstraints)if(!d.has(y.name)){let w=[...m].find(T=>{let S=T.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),x=new RegExp(`[\\["\\[]?${S}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),C=new RegExp(`[\\("\\[]?${S}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return x.test(y.expression)||C.test(y.expression)});if(w){let T=c.find(x=>(x.databaseName||x.columnName)===w),S=n.columns.find(x=>x.name===w);if(T&&S?.enumValues&&Array.isArray(T.type)){let x=[...T.type].sort(),C=[...S.enumValues].sort();if(!(x.length===C.length&&x.every((D,A)=>D===C[A]))){e.data.checksToDrop.push({table:r.table,name:y.name});let D=e.sql.getDbType(),A=D==="mssql"?"[":'"',L=D==="mssql"?"]":'"',ce=T.type.map(P=>`'${P.replace(/'/g,"''")}'`).join(", ");e.data.checksToAdd.push({table:r.table,name:y.name,expression:`${A}${w}${L} IN (${ce})`});}}}else e.data.checksToDrop.push({table:r.table,name:y.name});}for(let y of o.columns){let w=n.columns.find(x=>x.name===y.databaseName||x.name===y.columnName);if(!w)continue;let T=!e.areColumnsEqual(w,y,n.indexes),S=e.getDefaultChange({table:r.table,dbColumns:w,modelColumn:y});(T||S)&&e.data.columnsToModify.push({table:r.table,dbColumns:w,modelColumn:y});}for(let y of o.relations){if(y.type!=="belongsTo"&&y.type!=="manyToMany")continue;if(y.type==="manyToMany"&&y.manyToManyOptions){let S=q(y.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:S,relation:{type:"belongsTo",model:()=>r,columnName:q(y.manyToManyOptions.leftForeignKey),foreignKey:y.manyToManyOptions.leftForeignKey,constraintName:y.constraintName?q(y.constraintName):H(S,q(y.manyToManyOptions.leftForeignKey||Le(r.table)),r.table),onDelete:y.onDelete,onUpdate:y.onUpdate},onDelete:y.onDelete,onUpdate:y.onUpdate});continue}let w=q(y.constraintName);if(w&&n.foreignKeys.some(S=>S.name===w))continue;n.foreignKeys.find(S=>e.relationMatchesDbRelation(r,y,S))||e.data.relationsToAdd.push({table:r.table,relation:y,onDelete:y.onDelete,onUpdate:y.onUpdate});}let p=new Set(o.relations.filter(y=>y.type==="belongsTo").map(y=>{let w=q(y.foreignKey)||y.columnName,S=r.getColumns().find(x=>x.columnName===w)?.databaseName||w;return q(y.constraintName)||H(r.table,S,y.model().table)}));for(let y of n.foreignKeys){if(y.name&&p.has(y.name))continue;o.relations.find(T=>T.type!=="belongsTo"&&T.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,T,y))||e.data.relationsToDrop.push({table:r.table,relation:y});}for(let y of o.relations){if(y.type!=="belongsTo"&&y.type!=="manyToMany")continue;let w=n.foreignKeys.find(T=>e.relationMatchesDbRelation(r,y,T));w&&!e.areRelationsEqual(w,y)&&e.data.relationsToModify.push({table:r.table,dbRelation:w,modelRelation:y,onDelete:y.onDelete,onUpdate:y.onUpdate});}let g=r.primaryKey;if(g&&!n.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[g]}),n.primaryKey&&!g&&e.data.primaryKeysToDrop.push({table:r.table,columns:n.primaryKey.columns,name:n.primaryKey.name}),g&&n.primaryKey){let y=r.getColumns().find(w=>w.columnName===g);y&&!e.arePrimaryKeysEqual(n.primaryKey,y)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:n.primaryKey,modelPrimaryKey:g});}})),await e.processManyToMany(),await e.removeFkChurnByName(),e}getSqlStatements(){let t=this.getSqlStatementsByPhase();return Object.values(t).flat().filter(r=>{let n=r.trim();return n?!this.emptyStatements.some(o=>o.test(n)):false})}getCodeStatements(){let e=new Zt(this.sql).generateOperations(this.data);return new bn(this.sql).generateCode(e)}getSqlStatementsByPhase(){let t=new Zt(this.sql),e=t.generateOperations(this.data),r=t.formatSqlStatements(e),n={STRUCTURE_CREATION:[],CONSTRAINT_CREATION:[],DESTRUCTIVE_OPERATIONS:[]};for(let o of r)n[o.phase].push(...o.sqlStatements);return n}areColumnsEqual(t,e,r=[]){let n=t.name===e.databaseName,o=this.sql.getDbType(),s=Ge(o,t.dataType),a=typeof e.type=="string"?Ge(o,e.type):void 0,l=s.split(" ").filter(d=>d!=="unsigned"&&d!=="zerofill").join(" ");if(a&&n&&(n=l===a),Array.isArray(e.type)&&(o==="mysql"||o==="mariadb")){let d=[...e.type].sort(),c=t.enumValues?[...t.enumValues].sort():null;c&&n&&(n=d.length===c.length&&d.every((m,p)=>m===c[p]));}e.length!=null&&t.length!=null&&n&&(n=t.length===e.length);let u=a==="real"||a==="double"||a==="float";if(e.precision!=null&&t.precision!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.precision===e.precision)),e.scale!=null&&t.scale!=null&&((o==="postgres"||o==="cockroachdb")&&u||n&&(n=t.scale===e.scale)),typeof e.type=="string"&&(a==="timestamp"||a==="time")&&(o==="postgres"||o==="cockroachdb")&&e.withTimezone!==void 0&&t.withTimezone!==void 0&&n&&(n=!!t.withTimezone==!!e.withTimezone),e.constraints?.nullable!==void 0){let d=e.constraints.nullable,c=t.isNullable;n=n&&d===c;}if(o==="mysql"||o==="mariadb"){if(e.unsigned!==void 0){let d=e.unsigned??false,c=t.unsigned??false;n&&(n=d===c);}if(e.zerofill!==void 0){let d=e.zerofill??false,c=t.zerofill??false;n&&(n=d===c);}}if(e.stringMode!==void 0){let d=e.stringMode??false,c=t.stringMode??false;n&&(n=d===c);}return n}areRelationsEqual(t,e){let r=q(e.constraintName),n=r?t.name===r:true;if(e.type==="belongsTo"){let u=e.model(),d=u.primaryKey||"id",c=u.getColumns().find(g=>g.columnName===d),m=u.table,p=c?.databaseName||d;n=n&&t.referencedTable===m&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===p;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let u=q(e.manyToManyOptions.throughModel);n=n&&t.referencedTable===u;}let o=t.onDelete?.toLowerCase(),s=t.onUpdate?.toLowerCase(),a=e.onDelete?.toLowerCase(),l=e.onUpdate?.toLowerCase();return a&&n&&(n=o===a),l&&n&&(n=s===l),n}relationMatchesDbRelation(t,e,r){let n,o=e;if(o&&o.model){if(typeof o.model=="function"&&o.model.table)n=o.model;else if(typeof o.model=="function")try{let y=o.model();y&&y.table&&(n=y);}catch{}}if(!n)return false;let s=e.type==="belongsTo"?n.table:e.type==="manyToMany"&&e.manyToManyOptions?q(e.manyToManyOptions.throughModel):void 0;if(s&&r.referencedTable!==s)return false;let a=q(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),d=(o.type||"belongsTo")==="belongsTo"?q(o.foreignKey):o.columnName,c=l.find(y=>y.columnName===d);c&&(d=c.databaseName);let m=n.primaryKey||"id",g=n.getColumns().find(y=>y.columnName===m)?.databaseName||m;return r.columns.length===1&&r.columns[0]===d&&r.referencedColumns.length===1&&r.referencedColumns[0]===g}arePrimaryKeysEqual(t,e){if(t.columns.length!==1)return false;let n=t.columns[0]===e.databaseName,o=this.sql.getDbType();if(["mysql","mariadb"].includes(o))return n;let a=!t.name||!e.primaryKeyConstraintName||t.name===e.primaryKeyConstraintName;return n&&a}getDefaultChange(t){let e=this.sql.getDbType(),r=Ge(e,t.dbColumns.dataType),n=typeof t.modelColumn.type=="string"?Ge(e,t.modelColumn.type):void 0;if(n&&r!==n||t.modelColumn.length!=null&&t.dbColumns.length!=null&&t.dbColumns.length!==t.modelColumn.length||t.modelColumn.precision!=null&&t.dbColumns.precision!=null&&t.dbColumns.precision!==t.modelColumn.precision||t.modelColumn.scale!=null&&t.dbColumns.scale!=null&&t.dbColumns.scale!==t.modelColumn.scale||(this.sql.getDbType()==="postgres"||this.sql.getDbType()==="cockroachdb")&&typeof t.modelColumn.type=="string"&&(n==="timestamp"||n==="time")&&t.modelColumn.withTimezone!==void 0&&t.dbColumns.withTimezone!==void 0&&!!t.dbColumns.withTimezone!=!!t.modelColumn.withTimezone)return false;let s=t.modelColumn.constraints?.default!==void 0,a=t.dbColumns.defaultValue!==null&&t.dbColumns.defaultValue!==void 0;if(s&&!a)return "set";if(!s&&a){let l=t.dbColumns.defaultValue;return Ot(e,t.modelColumn,l)||Mt(t.modelColumn,l)||t.modelColumn.type==="uuid"&&rf(e,l)?false:"drop"}if(s&&a){let l=String(t.dbColumns.defaultValue),u=String(t.modelColumn.constraints?.default),d=this.normalizeDefaultValue(e,r,l),c=this.normalizeDefaultValue(e,n||r,u);return d!==c?"set":false}return false}normalizeDefaultValue(t,e,r){let n=String(r).trim();if(!n)return n;if(t==="postgres"||t==="cockroachdb"){if(e==="json"||e==="jsonb")try{n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::(jsonb?|[a-zA-Z_ ]+[\[\]]*)/g,"");let s=n.match(/^'(.*)'$/s);if(s&&(n=s[1]),n==="{}"||n==="")return "{}";let a=JSON.parse(n);return JSON.stringify(a)}catch{}n=n.replace(/^\((.*)\)$/s,"$1"),n=n.replace(/::[a-zA-Z_ ]+[\[\]]*/g,"");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),/^true$/i.test(n)?"true":/^false$/i.test(n)?"false":/^null$/i.test(n)?"null":(n)}if(t==="mysql"||t==="mariadb"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);if(o&&(n=o[1]),/^current_timestamp(?:\(\d+\))?$/i.test(n))return "current_timestamp";if(e==="boolean"){if(/^1$/.test(n))return "true";if(/^0$/.test(n))return "false"}return n}if(t==="sqlite"){n=n.replace(/^\((.*)\)$/s,"$1");let o=n.match(/^'(.*)'$/s);return o&&(n=o[1]),n.toLowerCase()}return n}async processManyToMany(){let t=new Set;for(let e of this.models){let r=e.getRelations();for(let n of r){if(n.type!=="manyToMany"||!n.manyToManyOptions||n.manyToManyOptions.wasModelProvided)continue;let o=q(n.manyToManyOptions.throughModel);if(t.has(o))continue;t.add(o);let s=this.models.find(P=>P.table===n?.manyToManyOptions?.primaryModel),a=n.model();if(!s||!a)continue;let l=s.primaryKey||"id",u=a.primaryKey||"id",d=s.getColumns().find(P=>P.columnName===l),c=a.getColumns().find(P=>P.columnName===u);if(!d||!c)continue;let m=q(n.manyToManyOptions.leftForeignKey)||l,p=q(n.manyToManyOptions.rightForeignKey)||u,g=await this.sql.getTableSchema(o);if(!g.columns.length){this.data.tablesToAdd.push({table:o,columns:[this.clonePkAsColumn(d,m),this.clonePkAsColumn(c,p)]}),this.pushM2mFkRelations({throughTable:o,leftModel:s,rightModel:a,leftFkName:m,rightFkName:p,onDelete:n.onDelete,onUpdate:n.onUpdate,constraintName:void 0});continue}let y=this.clonePkAsColumn(d,m),w=this.clonePkAsColumn(c,p),T=g.columns.find(P=>P.name===m),S=g.columns.find(P=>P.name===p),x=T?this.areColumnsEqual(T,y,g.indexes):false,C=S?this.areColumnsEqual(S,w,g.indexes):false;for(let P of g.foreignKeys){let oe=P.referencedTable===s.table,Xe=P.referencedTable===a.table;if(!oe&&!Xe)continue;let Re=oe?m:p,_e=P.columns[0];_e&&_e!==Re&&(this.data.relationsToDrop.push({table:o,relation:P}),_e!==m&&_e!==p&&this.data.columnsToDrop.push({table:o,column:_e}));}let I={};x||(I[y.databaseName]=y),C||(I[w.databaseName]=I[w.databaseName]||w);for(let P of Object.keys(I))this.data.columnsToAdd.push({table:o,column:I[P]});let D=this.buildBelongsToRelation(o,()=>s,m,l,void 0,n.onDelete,n.onUpdate),A=this.buildBelongsToRelation(o,n.model,p,u,void 0,n.onDelete,n.onUpdate),L=g.foreignKeys.find(P=>P.referencedTable===s.table&&P.columns.length===1&&P.columns[0]===m),ce=g.foreignKeys.find(P=>P.referencedTable===a.table&&P.columns.length===1&&P.columns[0]===p);if(!L){let P=g.foreignKeys.find(oe=>oe.referencedTable===s.table);P&&this.data.relationsToDrop.push({table:o,relation:P}),this.data.relationsToAdd.push(D);}if(!ce){let P=g.foreignKeys.find(oe=>oe.referencedTable===a.table);P&&this.data.relationsToDrop.push({table:o,relation:P}),this.data.relationsToAdd.push(A);}}}}async removeFkChurnByName(){let t=new Set;for(let n of this.data.relationsToAdd)t.add(n.table);for(let n of this.data.relationsToDrop)t.add(n.table);let e=new Map;for(let n of t){let o=await this.sql.getTableSchema(n),s=new Set((o.foreignKeys||[]).map(a=>a.name).filter(Boolean));e.set(n,s);}let r=new Map;for(let n of this.models){let o=n.getRelations(),s=new Set;for(let a of o){if(a.type!=="belongsTo")continue;let l=a.foreignKey||a.columnName,d=n.getColumns().find(m=>m.columnName===l)?.databaseName||l,c=q(a.constraintName)||H(n.table,d,a.model().table);s.add(c);}r.set(n.table,s);}this.data.relationsToAdd=await Promise.all(this.data.relationsToAdd.map(async n=>{let o=await this.sql.getTableSchema(n.table),s=this.models.find(y=>y.table===n.table),a=s?.getColumns()||[],l=n.relation.columnName;n.relation.type==="belongsTo"?l=a.find(w=>w.columnName===n.relation.foreignKey)?.databaseName||n.relation.foreignKey:l=a.find(w=>w.columnName===l)?.databaseName||l;let u=n.table,d=n.relation.foreignKey;if(n.relation.type==="belongsTo"){let y=n.relation.model();u=y.table;let w=y.primaryKey||"id";d=y.getColumns().find(S=>S.columnName===w)?.databaseName||w;}let c=new Set([l,n.relation.columnName].filter(Boolean)),m=o.foreignKeys.some(y=>{if(y.columns.length!==1||y.referencedColumns.length!==1)return false;let w=c.has(y.columns[0]),T=y.referencedTable===u,S=y.referencedColumns[0]===d;return w&&T&&S}),p=q(n.relation.constraintName)||H(n.table,l,u),g=e.get(n.table)||new Set;if(m||p&&g.has(p))return null;if(n.relation.type==="manyToMany"&&n.relation.manyToManyOptions){let y=q(n.relation.manyToManyOptions.throughModel),w=q(n.relation.manyToManyOptions.leftForeignKey),T=q(n.relation.manyToManyOptions.rightForeignKey),S=n.table===y&&n.relation.columnName===w&&n.relation.model().table===s?.table,x=n.table===y&&n.relation.columnName===T&&n.relation.model().table!==s?.table,C=await this.sql.getTableSchema(y),I=C.foreignKeys.some(A=>A.columns.length===1&&A.columns[0]===w&&A.referencedTable===(s?.table||"")),D=C.foreignKeys.some(A=>A.columns.length===1&&A.columns[0]===T&&A.referencedTable===n.relation.model().table);if(S&&I||x&&D)return null}return n})).then(n=>n.filter(Boolean)),this.data.relationsToDrop=await Promise.all(this.data.relationsToDrop.map(async n=>{let o=this.models.find(u=>u.table===n.table);if(!o)return n;let s=o.getRelations(),a=o.getColumns();return s.some(u=>{if(u.type!=="belongsTo")return false;let c=a.find(w=>w.columnName===u.foreignKey)?.databaseName||u.foreignKey,m=u.model(),p=m.primaryKey||"id",y=m.getColumns().find(w=>w.columnName===p)?.databaseName||p;return n.relation.columns.length===1&&n.relation.columns[0]===c&&n.relation.referencedTable===m.table&&n.relation.referencedColumns.length===1&&n.relation.referencedColumns[0]===y})?null:n})).then(n=>n.filter(Boolean));}clonePkAsColumn(t,e){let r=t.type;return r==="bigIncrement"?r="bigint":r==="increment"&&(r="integer"),{columnName:e,databaseName:e,isPrimary:false,type:r,length:t.length,precision:t.precision,scale:t.scale,withTimezone:t.withTimezone,constraints:{nullable:false}}}pushM2mFkRelations(t){let e=this.buildBelongsToRelation(t.throughTable,()=>t.leftModel,t.leftFkName,t.leftModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate),r=this.buildBelongsToRelation(t.throughTable,()=>t.rightModel,t.rightFkName,t.rightModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate);this.data.relationsToAdd.push(e),this.data.relationsToAdd.push(r);}buildBelongsToRelation(t,e,r,n,o,s,a){let l=o?q(o):H(t,r,e().table);return {table:t,relation:{type:"belongsTo",model:e,columnName:r,foreignKey:r,constraintName:l,onDelete:s,onUpdate:a},onDelete:s,onUpdate:a}}};var Jl=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??lt()});At();At();me();var Nn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;let n=e.coerceNumericTypes&&!e.driverOptions?.types?{getTypeParser:(o,s)=>{let a=!s||s==="text";return a&&o===20?l=>BigInt(l):a&&o===1700?l=>Number.parseFloat(l):r.types.getTypeParser(o,s)}}:void 0;this.pool=new r.Pool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions,...n?{types:n}:{}});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.connect()}releaseConnection(t){t?.release();}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION"),e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`);}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){let n=0,o=t.replace(/\?/g,()=>`$${++n}`);if(!r.signal)return (r.connection??this.pool).query(o,e);let s=r.connection??await this.pool.connect(),a=!r.connection,l=()=>{let u=s.processID;u!=null&&this.pool.query("SELECT pg_cancel_backend($1)",[u]).catch(()=>{});};r.signal.addEventListener("abort",l,{once:true});try{return await s.query(o,e)}finally{r.signal.removeEventListener("abort",l),a&&s.release();}}extract(t,e){return e==="rows"?t.rows:e==="raw"?t:t.rowCount}async stream(t,e,r,n){let o=r.connection,s=!o,a=o??await this.pool.connect(),l=await import('pg-query-stream').catch(()=>{throw new k("pg-query-stream")}),u=new 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),g=0,y=false,w=false,T=S=>{if(s)try{a.release(S);}catch{}};return p.on("data",S=>{if(n.onData){g++,Promise.resolve(n.onData(u,S)).then(()=>{g--,y&&g===0&&!w&&(T(),u.end());}).catch(x=>{w=true,T(x),u.destroy(x);});return}u.write(S);}),p.on("end",()=>{y=true,g===0&&!w&&(T(),u.end());}),p.on("error",S=>{w=true,T(S),u.destroy(S);}),u}};var Sn=class{constructor(t,e,r){this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=r.createPool({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,...e.driverOptions});}createPool(){}async closePool(){await this.pool.end();}async reserveConnection(){return this.pool.getConnection()}releaseConnection(t){t?.release();}async beginTransaction(t,e){e.isolationLevel&&await e.rawQuery(`SET TRANSACTION ISOLATION LEVEL ${e.isolationLevel}`),await t.beginTransaction();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){if(!r.signal)return (r.connection??this.pool).query(t,e);let n=r.connection??await this.pool.getConnection(),o=!r.connection,s=()=>{let a=n.threadId;a!=null&&this.pool.query(`KILL QUERY ${Number(a)}`).catch(()=>{});};r.signal.addEventListener("abort",s,{once:true});try{return await n.query(t,e)}finally{r.signal.removeEventListener("abort",s),o&&n.release();}}extract(t,e){let r=t;return e==="affectedRows"?r[0]?.affectedRows??0:e==="raw"?t:r[0]}async stream(t,e,r,n){let o=this.pool,s=r.connection??await o.getConnection(),a=new 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",g=>{if(n.onData){d++,Promise.resolve(n.onData(a,g)).then(()=>{d--,c&&d===0&&!m&&(p(),a.end());}).catch(y=>{m=true,p(),a.destroy(y);});return}a.write(g);}),u.on("end",()=>{c=true,d===0&&!m&&(p(),a.end());}),u.on("error",g=>{m=true,p(),a.destroy(g);}),a.on("close",()=>{p();}),a}};var qn=class{constructor(t,e,r){this.dialect="sqlite";this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e,this.pool=new r.Database(String(e.database??":memory:"),e.driverOptions?.mode??void 0,n=>{if(n)throw new h("SqliteDataSource::createSqlPool","CONNECTION_NOT_ESTABLISHED")});}createPool(){}async closePool(){await new Promise((t,e)=>{this.pool.close(r=>{r&&e(r),t();});});}async reserveConnection(){return this.pool}releaseConnection(){}async beginTransaction(t,e){await e.rawQuery("BEGIN TRANSACTION");}async commitTransaction(t,e){await e.rawQuery("COMMIT");}async rollbackTransaction(t,e){await e.rawQuery("ROLLBACK");}async execute(t,e,r){return await this.promisify(t,e,r)}extract(t,e){return e==="raw"?Array.isArray(t)?t:[t]:t}async stream(t,e,r,n){let o=r.connection??this.pool;return new Hl(o,t,e,{onData:n.onData})}promisify(t,e,r){let n=r.sqlLiteOptions??{},o=n.mode||"fetch",s=n.customConnection??r.connection??this.pool;if(["begin","begin transaction","commit","rollback"].includes(t.trim().toLowerCase()))return new Promise((u,d)=>{s.run(t,e,function(c){c&&d(c),u(this.changes);});});if(o==="fetch")return new Promise((u,d)=>{s.all(t,e,(c,m)=>{c&&d(c),u(m||[]);});});if(!n?.typeofModel)return new Promise((u,d)=>{s.run(t,e,function(c){c?d(new Error(c.message)):u(this.changes);});});if(o==="insertOne"||o==="insertMany"){let u=`${t} returning *`;return new Promise((d,c)=>{s.all(u,e,(m,p)=>{if(m)return c(m);d(p||[]);});})}return new Promise((u,d)=>{s.run(t,e,function(c){c?d(new Error(c.message)):u(this.changes);});})}},Hl=class extends 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);});}};me();var Cn=class{constructor(t,e,r){this.dialect="mssql";this.jsEnvironment="node";this.dialect=t,this.client=r,this.input=e;let n=e.driverOptions,{options:o,...s}=n??{};this.pool=new r.ConnectionPool({server:e.host??"localhost",port:e.port,database:e.database,user:e.username,password:e.password,...s,options:{trustServerCertificate:$.MSSQL_TRUST_SERVER_CERTIFICATE??void 0,...o,abortTransactionOnError:false,enableImplicitTransactions:false}});}async createPool(){await this.pool.connect();}async closePool(){await this.pool.close();}async reserveConnection(){return this.pool.transaction()}releaseConnection(){}async beginTransaction(t,e){if(e.isolationLevel){let r=await this.getMssqlTransactionLevel(e.isolationLevel);await t.begin(r);return}await t.begin();}async commitTransaction(t,e){await t.commit();}async rollbackTransaction(t,e){await t.rollback();}async execute(t,e,r){let n=this.pool,o=r.connection?r.connection.request():n.request();e.forEach((l,u)=>{o.input(`p${u}`,l);});let s=0,a=t.replace(/\?|@(\d+)/g,()=>`@p${s++}`);if(r.signal){let l=()=>{try{o.cancel();}catch{}};r.signal.addEventListener("abort",l,{once:true});try{return await o.query(a)}finally{r.signal.removeEventListener("abort",l);}}return o.query(a)}extract(t,e){return e==="affectedRows"?t.rowsAffected[0]:e==="raw"?t:t.recordset}async stream(t,e,r,n){let o=r.connection??this.pool,s=new stream.PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),a=o.request();a.stream=true,e.forEach((p,g)=>{a.input(`p${g}`,p);});let l=0,u=t.replace(/\?|@(\d+)/g,()=>`@p${l++}`),d=0,c=false,m=false;return a.on("row",p=>{if(!m){if(n.onData){d++,Promise.resolve(n.onData(s,p)).then(()=>{d--,c&&d===0&&!m&&s.end();}).catch(g=>{m=true,s.destroy(g);});return}s.write(p);}}),a.on("error",p=>{m=true,s.destroy(p);}),a.on("done",()=>{c=true,d===0&&!m&&s.end();}),a.query(u),s}async getMssqlTransactionLevel(t){let e=await import('mssql').then(r=>r.default.ISOLATION_LEVEL).catch(r=>{throw _.error(r),new k("mssql")});switch(t){case "READ UNCOMMITTED":return e.READ_UNCOMMITTED;case "READ COMMITTED":return e.READ_COMMITTED;case "REPEATABLE READ":return e.REPEATABLE_READ;case "SERIALIZABLE":return e.SERIALIZABLE;default:throw new h("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${t}`)}}};var fg=()=>{exports.registerDriverAdapter({name:"pg",dialects:["postgres","cockroachdb"],create:async({dialect:i,input:t})=>{let e=(await ae.getDriver(i)).client;return new Nn(i,t,e)}}),exports.registerDriverAdapter({name:"mysql2",dialects:["mysql","mariadb"],create:async({dialect:i,input:t})=>{let e=(await ae.getDriver(i)).client;return new Sn(i,t,e)}}),exports.registerDriverAdapter({name:"sqlite3",dialects:["sqlite"],create:async({dialect:i,input:t})=>{let e=(await ae.getDriver(i)).client;return new qn(i,t,e)}}),exports.registerDriverAdapter({name:"mssql",dialects:["mssql"],create:async({dialect:i,input:t})=>{let e=(await ae.getDriver(i)).client;return new Cn(i,t,e)}});};fg();var Ng=async i=>{if(i==="bun"){await(await Promise.resolve().then(()=>(cf(),mf))).registerBunDrivers();return}if(i==="web"){(await Promise.resolve().then(()=>(Xl(),Zl))).registerWebDrivers();return}if(i==="react-native"){await(await Promise.resolve().then(()=>(Xl(),Zl))).registerReactNativeDrivers();return}},An=async(i,t)=>{let e=rr(t?.jsEnvironment);await Ng(e);let r=await of(i,e,t?.driver,t);return await r.createPool(),r};var er=class er{constructor(){}static run(t,e){return er.storage.run(t,e)}static getTransaction(){return er.storage.getStore()}};er.storage=new async_hooks.AsyncLocalStorage;var Ye=er;var tr=class i{constructor(t,e,r=false,n=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=ke(ne().crypto.randomBytes(16)),this.isolationLevel=e,this.isNested=r,this.nestingDepth=n;}async nestedTransaction(t){let e=new i(this.sql,this.isolationLevel,true,this.nestingDepth+1);if(await e.transaction(),t)try{let r=await Ye.run(e,()=>t(e));return await e.commit(),r}catch(r){throw await e.rollback(),r}return e}async transaction(){if(this.getIsolationLevelQuery(),this.isNested){let r=this.getSavePointName();this.sql.type==="mssql"?await this.sql.rawQuery(`SAVE TRANSACTION ${r}`):await this.sql.rawQuery(`SAVEPOINT ${r}`),this.isActive=true;return}(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&yt("BEGIN TRANSACTION",this.sql.logs);let t=this.sql.driverAdapter,e=this.sql.sqlConnection;if(!t||!e)throw new h("TRANSACTION::transaction","CONNECTION_NOT_ESTABLISHED");await t.beginTransaction(e,{isolationLevel:this.isolationLevel,rawQuery:(r,n)=>this.sql.rawQuery(r,n??[])}),this.isActive=true;}async commit(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new h("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");_.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "sqlite":await this.sql.rawQuery(`RELEASE SAVEPOINT ${e}`);break}this.isActive=false;return}try{let e=this.sql.driverAdapter,r=this.sql.sqlConnection;(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&yt("COMMIT",this.sql.logs),e&&r&&await e.commitTransaction(r,{rawQuery:(n,o)=>this.sql.rawQuery(n,o??[])});}catch(e){throw _.error(e),e}finally{await this.releaseConnection(),this.isActive=false;}}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new h("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");_.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":await this.sql.rawQuery(`ROLLBACK TRANSACTION ${e}`);break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":await this.sql.rawQuery(`ROLLBACK TO SAVEPOINT ${e}`);break;case "sqlite":await this.sql.rawQuery(`ROLLBACK TO ${e}`);break;default:throw new h("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}this.isActive=false;return}try{let e=this.sql.driverAdapter,r=this.sql.sqlConnection;(this.sql.type==="mssql"||this.sql.type==="mysql"||this.sql.type==="mariadb")&&yt("ROLLBACK",this.sql.logs),e&&r&&await e.rollbackTransaction(r,{rawQuery:(n,o)=>this.sql.rawQuery(n,o??[])});}catch(e){throw _.error(e),e}finally{await this.releaseConnection(),this.isActive=false;}}async releaseConnection(){if(this.connectionReleased)return;let t=null;try{this.sql.driverAdapter?.releaseConnection(this.sql.sqlConnection);}catch(e){t=e,_.error(e);}this.sql.sqlConnection=null;try{await this.sql.disconnect();}catch(e){_.warn(`Transaction::releaseConnection - disconnect failed: ${e?.message??e}`);}if(this.connectionReleased=true,t)throw t}getIsolationLevelQuery(){if(!this.isolationLevel||this.sql.type==="mssql")return "";if(this.sql.type==="sqlite"&&this.isolationLevel!=="SERIALIZABLE")throw new h("TRANSACTION::getIsolationLevelQuery","SQLITE_ONLY_SUPPORTS_SERIALIZABLE_ISOLATION_LEVEL");if(this.sql.type==="mysql"||this.sql.type==="mariadb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="postgres"||this.sql.type==="cockroachdb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="sqlite")return "";throw new h("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}};var eu=Symbol.for("hysteria.orm.SqlDataSource"),gf,bf,Be=class i extends(bf=Rt,gf=eu,bf){constructor(e){super(e);this[gf]=true;this.globalTransaction=null;this.globalTransactionLock=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.lockConnection=null;this.lockKeyToId=new Map;this.driverAdapter=null;this.id=ne().crypto.randomUUID();this.logicalSourceId=ne().crypto.randomUUID();this.cacheAdapter=new Wr;this.migrationConfig={path:$.MIGRATION_PATH||"database/migrations",lock:true,transactional:true,lockTimeout:3e4};this.seederConfig={path:"database/seeders"};this.zodEngine=null;this.lazyLoad=false;this.connecting=null;this.sqlType=e?.type||this.type;let r=e;this.inputDetails={...e,type:this.sqlType,host:r?.host??this.host,port:r?.port??this.port,username:r?.username??this.username,password:r?.password??this.password,database:r?.database??this.database,logs:r?.logs??this.logs},this.inputDetails.connectionPolicies=e?.connectionPolicies||{retry:{maxRetries:0,delay:0}},this.inputDetails.queryFormatOptions=e?.queryFormatOptions||{language:Pt(this.sqlType),keywordCase:"lower",dataTypeCase:"lower",functionCase:"lower"},this.cacheKeys=e?.cacheStrategy?.keys??{},this.cacheAdapter=e?.cacheStrategy?.cacheAdapter??this.cacheAdapter,this.adminJsOptions=e?.adminJs,e?.migrations&&(this.migrationConfig={path:e.migrations.path||this.migrationConfig.path,tsconfig:e.migrations.tsconfig,lock:e.migrations.lock??this.migrationConfig.lock,transactional:"transactional"in e.migrations?e.migrations.transactional??this.migrationConfig.transactional:this.migrationConfig.transactional}),e?.seeders&&(this.seederConfig={path:e.seeders.path||this.seederConfig.path,tsconfig:e.seeders.tsconfig}),this._models=e?.models||{},this.slaves=(e?.replication?.slaves||[]).map(n=>new i(n)),this.slaveAlgorithm=e?.replication?.slaveAlgorithm||"roundRobin",this.onSlaveServerFailure=e?.replication?.onSlaveServerFailure,this.lazyLoad=e?.lazyLoad??false,this.clsEnabled=e?.clsEnabled??true;}static isSqlDataSource(e){return typeof e=="object"&&e!==null&&eu in e&&e[eu]===true}get isClsEnabled(){return this.clsEnabled}getOnSlaveServerFailure(){return this.onSlaveServerFailure}addObserver(e){return this.observerChain||(this.observerChain=new bt([])),this.observerChain.add(e),this}static async useConnection(e,r){let n=new i(e);await n.connect();try{await r(n),n.isConnected&&await n.disconnect();}catch(o){throw n.isConnected&&await n.disconnect(),o}}async connect(){if(this.isConnected)throw new h("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");try{this.driverAdapter=await An(this.sqlType,this.inputDetails),this.sqlPool=this.driverAdapter.pool??null,this.ownsPool=!0,this.slaves.length&&await Promise.all(this.slaves.map(async e=>{e.driverAdapter=await An(e.sqlType,e.inputDetails),e.sqlPool=e.driverAdapter.pool??null,e.ownsPool=!0;}));}catch(e){this.sqlPool=null,this.ownsPool=false;for(let r of this.slaves)r.ownsPool&&(r.sqlPool=null,r.ownsPool=false);throw e}}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}async ensureConnected(){if(!this.isConnected){if(!this.lazyLoad)throw new h("SqlDataSource::ensureConnected","CONNECTION_NOT_ESTABLISHED");this.connecting||(this.connecting=this.connect().finally(()=>{this.connecting=null;})),await this.connecting;}}get isInGlobalTransaction(){return !!this.globalTransaction}get models(){let e=this;return new Proxy(this._models,{get(r,n){if(typeof n=="string"&&n in r)return e.from(r[n])}})}getSlave(){if(!this.slaves.length)return null;if(this.slaveAlgorithm==="random")return this.slaves[Math.floor(Math.random()*this.slaves.length)];let e=this.slaves[this.roundRobinIndex%this.slaves.length];return this.roundRobinIndex=(this.roundRobinIndex+1)%this.slaves.length,e}getTransactionBoundSqlDataSource(){if(this.globalTransaction?.isActive)return this.globalTransaction.sql;if(this.clsEnabled){let e=Ye.getTransaction();if(e?.isActive&&e.sql.logicalSourceId===this.logicalSourceId)return e.sql}return null}async useCache(e,r,...n){if(!this.cacheAdapter)throw new h("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new h("SqlDataSource::useCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);let s=o.length,a=typeof r=="number"&&s===n.length,l,u=[];a?(l=r,u=n):(l=void 0,u=r!==void 0?[r,...n]:n);let d=jl(JSON.stringify(u)),c=d?`${e}:${d}`:e,m=await this.cacheAdapter.get(c);if(m!==void 0)return m;let p=await o(...u);return await this.cacheAdapter.set(c,p,l),p}async invalidCache(e,...r){if(!this.cacheAdapter)throw new h("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new h("SqlDataSource::invalidCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);if(n.length>0&&r.length===0){let l=e;await this.cacheAdapter.invalidate(l);return}let s=jl(JSON.stringify(r)),a=s?`${e}:${s}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new h("SqlDataSource::invalidateAllCache","CACHE_ADAPTER_NOT_CONFIGURED");await this.cacheAdapter.invalidateAll(e);}async clone(e){let r=new i(this.inputDetails);return r.id=this.id,r.logicalSourceId=this.logicalSourceId,r.sqlType==="sqlite"||!!e?.shouldRecreatePool?(r.driverAdapter=await An(r.sqlType,this.inputDetails),r.sqlPool=r.driverAdapter.pool,r.ownsPool=true):(r.driverAdapter=this.driverAdapter,r.sqlPool=this.sqlPool,r.ownsPool=false),r}getDbType(){return this.sqlType}from(e,r){let n=this.getTransactionBoundSqlDataSource()??this;if(typeof e=="string"){let o=new B(Jl(e,r),n);return r?.alias&&o.table(e,r.alias),o}return new Ue(e,n)}fromRaw(e,r=[],n){let o=this.getTransactionBoundSqlDataSource()??this;return new B(Jl("",n),o).fromRaw(e,r)}schema(){if(!this.isConnected&&!this.lazyLoad)throw new h("SqlDataSource::schema","CONNECTION_NOT_ESTABLISHED");return new Yt(this,this.getDbType())}async startGlobalTransaction(e){for(;this.globalTransactionLock;)await this.globalTransactionLock;if(this.globalTransaction?.isActive)throw new h("SqlDataSource::startGlobalTransaction","GLOBAL_TRANSACTION_ALREADY_STARTED");let r=()=>{};this.globalTransactionLock=new Promise(n=>{r=n;});try{let n=await this.clone();return n.sqlConnection=await n.getConnection(),this.globalTransaction=new tr(n,e?.isolationLevel),await this.globalTransaction.transaction(),this.globalTransaction}finally{r(),this.globalTransactionLock=null;}}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new h("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");try{await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async rollbackGlobalTransaction(e){if(!this.globalTransaction){_.warn("SqlDataSource::rollbackGlobalTransaction - GLOBAL_TRANSACTION_NOT_STARTED");return}try{await this.globalTransaction.rollback({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction});}finally{this.globalTransaction=null;}}async transaction(e,r){let n=typeof e=="function"?r:e;if(this.globalTransaction?.isActive)return typeof e=="function"?this.globalTransaction.nestedTransaction(e):this.globalTransaction.nestedTransaction();let o=this.clsEnabled?Ye.getTransaction():void 0;if(o?.isActive&&o.sql.logicalSourceId===this.logicalSourceId)return typeof e=="function"?o.nestedTransaction(e):o.nestedTransaction();let s=await this.clone();s.sqlConnection=await s.getConnection();let a=new tr(s,n?.isolationLevel);if(await a.transaction(),typeof e=="function")try{let l=this.clsEnabled?await Ye.run(a,()=>e(a)):await e(a);return await a.commit({throwErrorOnInactiveTransaction:!1}),l}catch(l){throw await a.rollback({throwErrorOnInactiveTransaction:false}),l}return a}getModelManager(e){if(!this.isConnected&&!this.lazyLoad)throw new h("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");let r=this.getTransactionBoundSqlDataSource()??this;return new et(e,r)}getPool(){if(!this.sqlPool)throw this.lazyLoad?new h("SqlDataSource::getPool - call ensureConnected() or connect() first when using lazyLoad","CONNECTION_NOT_ESTABLISHED"):new h("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(){if(this.sqlConnection)return this.sqlConnection;await this.ensureConnected();let e=this.driverAdapter;if(!e)throw new h("SqlDataSource::getConnection","CONNECTION_NOT_ESTABLISHED");return e.reserveConnection()}async disconnect(){if(!this.isConnected){_.warn("Connection already closed or not established");return}if(!this.ownsPool){if(this.sqlConnection)try{this.driverAdapter?.releaseConnection(this.sqlConnection);}catch(e){_.warn(`SqlDataSource::disconnect - releasing borrowed connection failed: ${e?.message??e}`);}this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{_.warn("SqlDataSource::disconnect - Error while rolling back global transaction");}if(this.lockConnection){try{this.driverAdapter?.releaseConnection(this.lockConnection);}catch(e){_.warn(`SqlDataSource::disconnect - releasing lock connection failed: ${e?.message??e}`);}this.lockConnection=null,this.lockKeyToId.clear();}await this.cacheAdapter?.disconnect?.(),this.slaves.length&&await Promise.all(this.slaves.map(async e=>{try{await e.disconnect();}catch(r){_.warn(`SqlDataSource::disconnect - Error while closing slave connection: ${r.message}`);}})),_.warn("Closing connection"),await this.driverAdapter?.closePool(),this.sqlPool=null,this.driverAdapter=null,this.sqlConnection=null;}getConnectionDetails(){return {type:this.getDbType(),host:this.host,port:this.port,username:this.username,password:this.password,database:this.database,connectionPolicies:this.inputDetails.connectionPolicies,queryFormatOptions:this.inputDetails.queryFormatOptions,jsEnvironment:this.inputDetails.jsEnvironment,driver:this.inputDetails.driver}}async introspectSchema(){let e=this.getDbType(),r;e==="postgres"||e==="cockroachdb"?r=`
145
145
  SELECT table_schema AS schema_name, table_name
146
146
  FROM information_schema.tables
147
147
  WHERE table_type = 'BASE TABLE'
@@ -167,7 +167,7 @@ Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]
167
167
  WHERE table_type = 'BASE TABLE'
168
168
  AND table_schema NOT IN ('information_schema', 'pg_catalog', 'mysql', 'sys', 'performance_schema')
169
169
  ORDER BY table_schema, table_name;
170
- `;try{let n=await this.rawQuery(r),o=this.extractRowsFromRawResult(n),s={dialect:e,tables:[]},a={};for(let l of o){let u=String(l.schema_name||l.SCHEMA_NAME||"public"),d=String(l.table_name||l.TABLE_NAME||l.name||""),c=`${u}.${d}`;!a[c]&&d&&(a[c]={name:d,columns:[]},s.tables.push(a[c]));}return [s]}catch(n){return _.warn(`Failed to introspect schema: ${n.message}`),[]}}async syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){_.warn("Syncing schema with SQLite is not supported, skipping...");return}let n=(await Tn.makeDiff(this)).getSqlStatements();if(!n.length){_.info("No new changes detected between database schema and models metadata");return}if(_.info(`Generated ${n.length} SQL statements to sync schema`),!e?.transactional){for(let o of n)await this.rawQuery(o);_.info(`Synced schema with ${n.length} SQL statements`);return}await this.transaction(async o=>{for(let s of n)await o.sql.rawQuery(s);}),_.info(`Synced schema with ${n.length} SQL statements`);}extractRowsFromRawResult(e){let r=this.getDbType();if(r==="mysql"||r==="mariadb"){if(Array.isArray(e)&&e.length>=1){let n=e[0];if(Array.isArray(n))return n;if(typeof n=="object"&&n!==null&&("insertId"in n||"affectedRows"in n))return []}return e}return r==="postgres"||r==="cockroachdb"?e&&typeof e=="object"&&"rows"in e?e.rows||[]:e:Array.isArray(e)?e:[]}async rawQuery(e,r=[],n){if(await this.ensureConnected(),(n?.replicationMode||"master")==="slave")return this.executeOnSlave(async a=>Y(e,r,a,this.getDbType(),"raw"));let s=this.getTransactionBoundSqlDataSource()??this;return Y(e,r,s,this.getDbType(),"raw")}rawStatement(e){return new O(e)}jsonSet(e,r,n,o){return Rd(e,r,n,o)}jsonInsert(e,r,n,o){return _d(e,r,n,o)}jsonRemove(e,r,n){return Md(e,r,n)}async getTableSchema(e){let[r,n,o,s,a]=await Promise.all([this.getTableInfo(e),this.getIndexInfo(e),this.getForeignKeyInfo(e),this.getPrimaryKeyInfo(e),this.getCheckConstraintInfo(e)]);return {columns:r,indexes:n,foreignKeys:o,primaryKey:s,checkConstraints:a}}getModelOpenApiSchema(){return zy(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 kl(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 Hy(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}loadZodEngine(e){return this.zodEngine=e,me.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 rn(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(mt(this.getDbType(),l))return [];throw l}let s=this.getDbType();if(s==="sqlite")return o.map(l=>{let u=String(l.type||"").toLowerCase(),d=ze(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=ze(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,x=l.timezone!=null?!!l.timezone:/with time zone/.test(String(l.column_type||l.udt_name||d||"").toLowerCase()),C=null,$=String(l.column_type||l.COLUMN_TYPE||""),D=$.match(/^enum\((.+)\)$/i);D&&(C=D[1].split(",").map(Ze=>Ze.trim().replace(/^'|'$/g,"")));let A=$.toLowerCase(),Q=A.includes(" unsigned"),ue=A.includes(" zerofill"),ne=new Set(["text","tinytext","mediumtext","longtext","varchar","char","nvarchar","nchar","ntext","character varying","character"]).has(c);return {name:u,dataType:c,isNullable:p,defaultValue:y,length:T,precision:w,scale:N,withTimezone:x,enumValues:C,unsigned:Q,zerofill:ue,stringMode:ne}});if(s==="postgres"||s==="mssql"){let l=[];try{l=await this.getCheckConstraintInfo(e);}catch{}if(l.length>0)for(let u of a){let d=u.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c=l.find(m=>{let p=m.expression,h=new RegExp(`[\\["\\[]?${d}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),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 nn(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 on(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 sn(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"?a.length>0:false}async hasPrimaryKey(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new an(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 ln(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 un]).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 dn(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 en(e)]).sql,o=this.getDbType(),s=[];try{let l=await this.rawQuery(n);s=this.extractRowsFromRawResult(l);}catch(l){if(mt(this.getDbType(),l))return [];throw l}if(o==="mysql"||o==="mariadb"){let l=new Map;for(let u of s){let d=u.Key_name,c=u.Non_unique===0,m=l.get(d)||{name:d,columns:[],isUnique:c};m.columns.push(u.Column_name),l.set(d,m);}return Array.from(l.values())}if(o==="postgres"||o==="cockroachdb"){let l=new Map;for(let u of s){let d=u.index_name,c=!!u.is_unique,m=l.get(d)||{name:d,columns:[],isUnique:c};m.columns.push(u.column_name),l.set(d,m);}return Array.from(l.values())}let a=[];for(let l of s){let u=l.name,d=!!l.unique,c=await this.rawQuery(`PRAGMA index_info(${u})`),p=this.extractRowsFromRawResult(c).map(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 Xr(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(mt(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let u of o){let d=Number(u.id),c=l.get(d)||{name:void 0,columns:[],referencedTable:String(u.table),referencedColumns:[],onDelete:u.on_delete??null,onUpdate:u.on_update??null};c.columns.push(String(u.from)),c.referencedColumns.push(String(u.to)),l.set(d,c);}return Array.from(l.values())}let a=new Map;for(let l of o){let u=String(l.name||""),d=u||`${l.referenced_table}_${l.column_name}`,c=a.get(d)||{name:u||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};c.columns.push(String(l.column_name)),c.referencedColumns.push(String(l.referenced_column)),a.set(d,c);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new tn(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(mt(this.getDbType(),l))return;throw l}if(!o.length)return;let s=o.map(l=>String(l.column_name));return {name:o[0].name||void 0,columns:s}}async getCheckConstraintInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Zr(e)]).sql,o=[];try{let a=await this.rawQuery(n);o=this.extractRowsFromRawResult(a);}catch(a){if(mt(this.getDbType(),a))return [];throw a}let s=a=>this.getDbType()==="mariadb"&&/^json_valid\(/i.test(a);return o.filter(a=>!s(String(a.expression))).map(a=>({name:String(a.name),expression:String(a.expression)}))}async acquireLock(e="hysteria_lock",r=3e4){let n=this.getDbType();try{switch(n){case "postgres":case "cockroachdb":{let o=this.hashStringToLockId(e),s=this.driverAdapter;if(!s)return !1;let a=await this.getLockConnection(),l=await s.execute("SELECT pg_try_advisory_lock($1) as pg_try_advisory_lock",[o],{returning:"rows",connection:a}),d=s.extract(l,"rows")?.[0]?.pg_try_advisory_lock;return d===!0||d==="t"?(this.lockKeyToId.set(e,o),!0):!1}case "mysql":case "mariadb":{let o=Math.floor(r/1e3);return (await this.rawQuery("SELECT GET_LOCK(?, ?) as lock_result",[e,o]))[0]?.[0]?.lock_result===1}case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_getapplock @Resource = @p0, @LockMode = 'Exclusive', @LockOwner = 'Session', @LockTimeout = @p1; SELECT @result as lock_result",[e,r])).recordset?.[0]?.lock_result??-999)>=0;case "sqlite":return _.info("SQLite uses automatic file-based locking, advisory locks not needed"),!0;default:return _.warn(`Advisory locks not implemented for database type: ${n}`),!0}}catch(o){let s=o instanceof Error?o:new Error(String(o));return _.error(`Failed to acquire lock: ${s.message||JSON.stringify(o)} (dbType: ${n}, lockKey: ${e}). Full error: ${JSON.stringify(o)}`),false}}async ping(){let e=this.getDbType(),r=Date.now();try{await this.ensureConnected();let n;switch(e){case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "mssql":n="SELECT 1";break;case "sqlite":n="PRAGMA integrity_check";break;default:n="SELECT 1";}return await this.rawQuery(n),{ok:!0,latencyMs:Date.now()-r,dialect:e}}catch{return {ok:false,latencyMs:Date.now()-r,dialect:e}}}async isHealthy(){try{return (await this.ping()).ok}catch{return false}}async releaseLock(e="hysteria_lock"){let r=this.getDbType();try{switch(r){case "postgres":case "cockroachdb":{let n=this.lockKeyToId.get(e),o=this.lockConnection,s=this.driverAdapter;if(n===void 0||!o||!s)return !1;let a=await s.execute("SELECT pg_advisory_unlock($1) as pg_advisory_unlock",[n],{returning:"rows",connection:o}),u=s.extract(a,"rows")?.[0]?.pg_advisory_unlock,d=u===!0||u==="t";return d&&(this.lockKeyToId.delete(e),this.lockKeyToId.size===0&&(s.releaseConnection(o),this.lockConnection=null)),d}case "mysql":case "mariadb":return (await this.rawQuery("SELECT RELEASE_LOCK(?) as release_result",[e]))[0]?.[0]?.release_result===1;case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_releaseapplock @Resource = @p0, @LockOwner = 'Session'; SELECT @result as release_result",[e])).recordset?.[0]?.release_result??-999)>=0;case "sqlite":return !0;default:return _.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(n){let o=n instanceof Error?n:new Error(String(n));return _.error(`Failed to release lock: ${o.message||JSON.stringify(n)} (dbType: ${r}, lockKey: ${e}). Full error: ${JSON.stringify(n)}`),false}}async getLockConnection(){if(this.lockConnection)return this.lockConnection;let e=this.driverAdapter;if(!e)throw new 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 gf=class{constructor(t){this.chain=new Tt(t);}get chainInstance(){return this.chain}add(t){this.chain.add(t);}};xt();function bf(i,t){if(t instanceof Pe)return t;let e=typeof t=="function"?t(i):i[t];if(!e||!(e instanceof Pe))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=bf(this,e.dataSource):$t.sqlDataSource?l=$t.sqlDataSource:l=bf(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 Xl=class{constructor(t){this.dbType=t,this.migrationName=vt__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 le(this.dbType);}};async function Cg(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 Rg(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 An__default.default.promises.unlink(r).catch(()=>{});}}async function Sf(i,t){let e=vt__default.default.isAbsolute(i)?i:vt__default.default.resolve(process.cwd(),i);return e.endsWith(".ts")?Rg(e):Cg(e)}var eu=class{parseGetAllTables(t,e,r){switch(t){case "mysql":case "mariadb":return r[0].map(o=>o[`Tables_in_${e}`]);case "cockroachdb":case "postgres":return r.rows.map(o=>o.table_name);case "mssql":return r.recordset.map(o=>o.TABLE_NAME);default:throw new Error(`Unsupported database type: ${t}`)}}getAllTablesTemplate(t,e){switch(t){case "mysql":case "mariadb":return `SHOW TABLES FROM ${e};`;case "cockroachdb":case "postgres":return `SELECT table_name
170
+ `;try{let n=await this.rawQuery(r),o=this.extractRowsFromRawResult(n),s={dialect:e,tables:[]},a={};for(let l of o){let u=String(l.schema_name||l.SCHEMA_NAME||"public"),d=String(l.table_name||l.TABLE_NAME||l.name||""),c=`${u}.${d}`;!a[c]&&d&&(a[c]={name:d,columns:[]},s.tables.push(a[c]));}return [s]}catch(n){return _.warn(`Failed to introspect schema: ${n.message}`),[]}}async syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){_.warn("Syncing schema with SQLite is not supported, skipping...");return}let n=(await wn.makeDiff(this)).getSqlStatements();if(!n.length){_.info("No new changes detected between database schema and models metadata");return}if(_.info(`Generated ${n.length} SQL statements to sync schema`),!e?.transactional){for(let o of n)await this.rawQuery(o);_.info(`Synced schema with ${n.length} SQL statements`);return}await this.transaction(async o=>{for(let s of n)await o.sql.rawQuery(s);}),_.info(`Synced schema with ${n.length} SQL statements`);}extractRowsFromRawResult(e){let r=this.getDbType();if(r==="mysql"||r==="mariadb"){if(Array.isArray(e)&&e.length>=1){let n=e[0];if(Array.isArray(n))return n;if(typeof n=="object"&&n!==null&&("insertId"in n||"affectedRows"in n))return []}return e}return r==="postgres"||r==="cockroachdb"?e&&typeof e=="object"&&"rows"in e?e.rows||[]:e:Array.isArray(e)?e:[]}async rawQuery(e,r=[],n){if(await this.ensureConnected(),(n?.replicationMode||"master")==="slave")return this.executeOnSlave(async a=>Y(e,r,a,this.getDbType(),"raw"));let s=this.getTransactionBoundSqlDataSource()??this;return Y(e,r,s,this.getDbType(),"raw")}rawStatement(e){return new O(e)}jsonSet(e,r,n,o){return Md(e,r,n,o)}jsonInsert(e,r,n,o){return Od(e,r,n,o)}jsonRemove(e,r,n){return Ad(e,r,n)}async getTableSchema(e){let[r,n,o,s,a]=await Promise.all([this.getTableInfo(e),this.getIndexInfo(e),this.getForeignKeyInfo(e),this.getPrimaryKeyInfo(e),this.getCheckConstraintInfo(e)]);return {columns:r,indexes:n,foreignKeys:o,primaryKey:s,checkConstraints:a}}getModelOpenApiSchema(){return Yy(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new h("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await Wl(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new h("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await Gy(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}loadZodEngine(e){return this.zodEngine=e,de.zodEngine=e,this}isAdminJsEnabled(){return !!this.adminJsOptions?.enabled}async getTableInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new nn(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(mt(this.getDbType(),l))return [];throw l}let s=this.getDbType();if(s==="sqlite")return o.map(l=>{let u=String(l.type||"").toLowerCase(),d=Ge(s,u),c=new Set(["text","varchar","char"]);return {name:l.name,dataType:d,isNullable:l.notnull===0,defaultValue:l.dflt_value??null,withTimezone:null,stringMode:c.has(d)}});let a=o.map(l=>{let u=String(l.column_name||l.COLUMN_NAME||l.name||""),d=String(l.data_type||l.DATA_TYPE||l.type||"").toLowerCase(),c=Ge(s,d),m=l.is_nullable!==void 0?l.is_nullable:l.IS_NULLABLE!==void 0?l.IS_NULLABLE:void 0,p=typeof m=="string"?m.toLowerCase()!=="no":typeof m=="boolean"?m:l.notnull!==void 0?l.notnull===0:true,g=l.column_default??l.COLUMN_DEFAULT??l.defaultValue??l.dflt_value??null,y=s==="mariadb"&&g==="NULL"?null:g,w=l.char_length!=null?Number(l.char_length):null,T=l.numeric_precision!=null?Number(l.numeric_precision):null,S=l.numeric_scale!=null?Number(l.numeric_scale):null,x=l.timezone!=null?!!l.timezone:/with time zone/.test(String(l.column_type||l.udt_name||d||"").toLowerCase()),C=null,I=String(l.column_type||l.COLUMN_TYPE||""),D=I.match(/^enum\((.+)\)$/i);D&&(C=D[1].split(",").map(Xe=>Xe.trim().replace(/^'|'$/g,"")));let A=I.toLowerCase(),L=A.includes(" unsigned"),ce=A.includes(" zerofill"),oe=new Set(["text","tinytext","mediumtext","longtext","varchar","char","nvarchar","nchar","ntext","character varying","character"]).has(c);return {name:u,dataType:c,isNullable:p,defaultValue:y,length:w,precision:T,scale:S,withTimezone:x,enumValues:C,unsigned:L,zerofill:ce,stringMode:oe}});if(s==="postgres"||s==="mssql"){let l=[];try{l=await this.getCheckConstraintInfo(e);}catch{}if(l.length>0)for(let u of a){let d=u.name.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c=l.find(m=>{let p=m.expression,g=new RegExp(`[\\["\\[]?${d}[\\]"\\]]?\\s*\\)\\s*IN\\s*\\(`,"i"),y=new RegExp(`[\\("\\[]?${d}[\\)"\\]]?(?:::text)?\\s*=\\s*ANY\\s*\\(`,"i");return g.test(p)||y.test(p)});if(c){let m=c.expression,p=m.match(/IN\s*\(([^)]+)\)/i);if(p)u.enumValues=p[1].split(",").map(g=>g.trim().replace(/^'|'$/g,""));else {let g=m.match(/ARRAY\[([^\]]+)\]/i);g&&(u.enumValues=g[1].split(",").map(y=>y.trim().replace(/::[a-z ]+$/i,"").replace(/^'|'$/g,"")));}}}}return a}async hasTable(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new on(e)]).sql,o=this.getDbType(),s=[];try{let a=await this.rawQuery(n);s=this.extractRowsFromRawResult(a);}catch{return false}return o==="postgres"||o==="cockroachdb"?s.length>0&&s[0].exists===true:o==="mysql"||o==="mariadb"||o==="mssql"?s.length>0&&parseInt(s[0].count)>0:o==="sqlite"?s.length>0:false}async hasColumn(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new sn(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"?a.some(l=>l.name===r):false}async hasColumns(e,...r){if(!r.length)return true;for(let n of r)if(!await this.hasColumn(e,n))return false;return true}async hasIndex(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new an(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"?a.length>0:false}async hasPrimaryKey(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new ln(e)]).sql,o=this.getDbType(),s=[];try{let a=await this.rawQuery(n);s=this.extractRowsFromRawResult(a);}catch{return false}return o==="postgres"||o==="cockroachdb"?s.length>0&&s[0].exists===true:o==="mysql"||o==="mariadb"||o==="mssql"?s.length>0&&parseInt(s[0].count)>0:o==="sqlite"?s.some(a=>a.pk>0):false}async hasUnique(e,r){let n=Array.isArray(r)?r:[r];try{return (await this.getIndexInfo(e)).some(s=>{let a=s.unique??s.isUnique??s.Non_unique,l=a===!0||a==="true"||a==="1"||a===0,u=Array.isArray(s.columns)?s.columns:[s.column_name];return l&&u.length===n.length&&u.every((d,c)=>d===n[c])})}catch{return false}}async hasForeignKey(e,r){try{let o=(await this.getForeignKeyInfo(e)).flatMap(a=>a.columns||a.column||[a.from]);return r.every(a=>o.includes(a))&&o.length>=r.length}catch{return false}}async hasCheckConstraint(e,r){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new un(e,r)]).sql,s=this.getDbType(),a=[];try{let l=await this.rawQuery(o);a=this.extractRowsFromRawResult(l);}catch{return false}return s==="postgres"||s==="cockroachdb"?a.length>0&&a[0].exists===true:s==="mysql"||s==="mariadb"||s==="mssql"?a.length>0&&parseInt(a[0].count)>0:s==="sqlite"&&a.length>0&&a[0].sql?a[0].sql.includes("CHECK")&&a[0].sql.includes(r):false}async getTables(){let r=new b({databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new dn]).sql,n=[];try{let s=await this.rawQuery(r);n=this.extractRowsFromRawResult(s);}catch{return []}let o=n[0]?.table_name||"name";return n.map(s=>s[o]||s.name)}async getColumnListing(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new mn(e)]).sql,o=[];try{let s=await this.rawQuery(n);o=this.extractRowsFromRawResult(s);}catch{return []}return o.map(s=>s.name??s.column_name)}async getIndexInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new tn(e)]).sql,o=this.getDbType(),s=[];try{let l=await this.rawQuery(n);s=this.extractRowsFromRawResult(l);}catch(l){if(mt(this.getDbType(),l))return [];throw l}if(o==="mysql"||o==="mariadb"){let l=new Map;for(let u of s){let d=u.Key_name,c=u.Non_unique===0,m=l.get(d)||{name:d,columns:[],isUnique:c};m.columns.push(u.Column_name),l.set(d,m);}return Array.from(l.values())}if(o==="postgres"||o==="cockroachdb"){let l=new Map;for(let u of s){let d=u.index_name,c=!!u.is_unique,m=l.get(d)||{name:d,columns:[],isUnique:c};m.columns.push(u.column_name),l.set(d,m);}return Array.from(l.values())}let a=[];for(let l of s){let u=l.name,d=!!l.unique,c=await this.rawQuery(`PRAGMA index_info(${u})`),p=this.extractRowsFromRawResult(c).map(g=>g.name);a.push({name:u,columns:p,isUnique:d});}return a}async getForeignKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new en(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(mt(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let u of o){let d=Number(u.id),c=l.get(d)||{name:void 0,columns:[],referencedTable:String(u.table),referencedColumns:[],onDelete:u.on_delete??null,onUpdate:u.on_update??null};c.columns.push(String(u.from)),c.referencedColumns.push(String(u.to)),l.set(d,c);}return Array.from(l.values())}let a=new Map;for(let l of o){let u=String(l.name||""),d=u||`${l.referenced_table}_${l.column_name}`,c=a.get(d)||{name:u||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};c.columns.push(String(l.column_name)),c.referencedColumns.push(String(l.referenced_column)),a.set(d,c);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new rn(e)]).sql,o=[];try{let l=await this.rawQuery(n);o=this.extractRowsFromRawResult(l);}catch(l){if(mt(this.getDbType(),l))return;throw l}if(!o.length)return;let s=o.map(l=>String(l.column_name));return {name:o[0].name||void 0,columns:s}}async getCheckConstraintInfo(e){let n=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Xr(e)]).sql,o=[];try{let a=await this.rawQuery(n);o=this.extractRowsFromRawResult(a);}catch(a){if(mt(this.getDbType(),a))return [];throw a}let s=a=>this.getDbType()==="mariadb"&&/^json_valid\(/i.test(a);return o.filter(a=>!s(String(a.expression))).map(a=>({name:String(a.name),expression:String(a.expression)}))}async acquireLock(e="hysteria_lock",r=3e4){let n=this.getDbType();try{switch(n){case "postgres":case "cockroachdb":{let o=this.hashStringToLockId(e),s=this.driverAdapter;if(!s)return !1;let a=await this.getLockConnection(),l=await s.execute("SELECT pg_try_advisory_lock($1) as pg_try_advisory_lock",[o],{returning:"rows",connection:a}),d=s.extract(l,"rows")?.[0]?.pg_try_advisory_lock;return d===!0||d==="t"?(this.lockKeyToId.set(e,o),!0):!1}case "mysql":case "mariadb":{let o=Math.floor(r/1e3);return (await this.rawQuery("SELECT GET_LOCK(?, ?) as lock_result",[e,o]))[0]?.[0]?.lock_result===1}case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_getapplock @Resource = @p0, @LockMode = 'Exclusive', @LockOwner = 'Session', @LockTimeout = @p1; SELECT @result as lock_result",[e,r])).recordset?.[0]?.lock_result??-999)>=0;case "sqlite":return _.info("SQLite uses automatic file-based locking, advisory locks not needed"),!0;default:return _.warn(`Advisory locks not implemented for database type: ${n}`),!0}}catch(o){let s=o instanceof Error?o:new Error(String(o));return _.error(`Failed to acquire lock: ${s.message||JSON.stringify(o)} (dbType: ${n}, lockKey: ${e}). Full error: ${JSON.stringify(o)}`),false}}async ping(){let e=this.getDbType(),r=Date.now();try{await this.ensureConnected();let n;switch(e){case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "mssql":n="SELECT 1";break;case "sqlite":n="PRAGMA integrity_check";break;default:n="SELECT 1";}return await this.rawQuery(n),{ok:!0,latencyMs:Date.now()-r,dialect:e}}catch{return {ok:false,latencyMs:Date.now()-r,dialect:e}}}async isHealthy(){try{return (await this.ping()).ok}catch{return false}}async releaseLock(e="hysteria_lock"){let r=this.getDbType();try{switch(r){case "postgres":case "cockroachdb":{let n=this.lockKeyToId.get(e),o=this.lockConnection,s=this.driverAdapter;if(n===void 0||!o||!s)return !1;let a=await s.execute("SELECT pg_advisory_unlock($1) as pg_advisory_unlock",[n],{returning:"rows",connection:o}),u=s.extract(a,"rows")?.[0]?.pg_advisory_unlock,d=u===!0||u==="t";return d&&(this.lockKeyToId.delete(e),this.lockKeyToId.size===0&&(s.releaseConnection(o),this.lockConnection=null)),d}case "mysql":case "mariadb":return (await this.rawQuery("SELECT RELEASE_LOCK(?) as release_result",[e]))[0]?.[0]?.release_result===1;case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_releaseapplock @Resource = @p0, @LockOwner = 'Session'; SELECT @result as release_result",[e])).recordset?.[0]?.release_result??-999)>=0;case "sqlite":return !0;default:return _.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(n){let o=n instanceof Error?n:new Error(String(n));return _.error(`Failed to release lock: ${o.message||JSON.stringify(n)} (dbType: ${r}, lockKey: ${e}). Full error: ${JSON.stringify(n)}`),false}}async getLockConnection(){if(this.lockConnection)return this.lockConnection;let e=this.driverAdapter;if(!e)throw new h("SqlDataSource::getLockConnection","CONNECTION_NOT_ESTABLISHED");return this.lockConnection=await e.reserveConnection(),this.lockConnection}hashStringToLockId(e){let r=0;for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);r=(r<<5)-r+o,r=r&r;}return Math.abs(r)}async executeOnSlave(e){let r=this.getSlave();if(!r)return e(this);try{return await e(r)}catch(n){let o=n instanceof Error?n:new Error(String(n));if(this.onSlaveServerFailure)return await this.onSlaveServerFailure(o,{host:r.host,port:r.port,username:r.username,password:r.password,database:r.database,type:r.sqlType}),e(this);throw o}}};var Tf=class{constructor(t){this.chain=new bt(t);}get chainInstance(){return this.chain}add(t){this.chain.add(t);}};At();function wf(i,t){if(t instanceof Be)return t;let e=typeof t=="function"?t(i):i[t];if(!e||!(e instanceof Be))throw new h("atomic::resolveSqlDataSource","ATOMIC_DATASOURCE_RESOLUTION_FAILED");return e}function Dt(i,t){let e=typeof i=="string"?{dataSource:i,isolationLevel:t}:i??{};return (r,n,o)=>{let s=o.value;if(!s||typeof s!="function")throw new h("atomic::descriptor","ATOMIC_INVALID_METHOD");return o.value=async function(...a){let l;if(e.dataSource?l=wf(this,e.dataSource):Dt.sqlDataSource?l=Dt.sqlDataSource:l=wf(this,"sql"),!l.isClsEnabled)throw new h("atomic::descriptor","ATOMIC_CLS_DISABLED");return await l.transaction(async()=>await s.apply(this,a),{isolationLevel:e.isolationLevel})},o}}(t=>{})(Dt||(Dt={}));var tu=class{constructor(t){this.dbType=t,this.migrationName=It__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 le(this.dbType);}};async function Mg(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 Og(i){let{build:t}=await import('esbuild').catch(()=>{throw new Error("esbuild is required to import TypeScript files. Install it with: npm install esbuild -D")}),e=Math.random().toString(36).slice(2,8),r=i.replace(/\.ts$/,`.bundled_${e}.mjs`);try{return await t({entryPoints:[i],bundle:!0,platform:"node",format:"esm",sourcemap:"inline",outfile:r,packages:"external",logLevel:"silent"}),await import(url.pathToFileURL(r).href)}finally{await xn__default.default.promises.unlink(r).catch(()=>{});}}async function qf(i,t){let e=It__default.default.isAbsolute(i)?i:It__default.default.resolve(process.cwd(),i);return e.endsWith(".ts")?Og(e):Mg(e)}var ru=class{parseGetAllTables(t,e,r){switch(t){case "mysql":case "mariadb":return r[0].map(o=>o[`Tables_in_${e}`]);case "cockroachdb":case "postgres":return r.rows.map(o=>o.table_name);case "mssql":return r.recordset.map(o=>o.TABLE_NAME);default:throw new Error(`Unsupported database type: ${t}`)}}getAllTablesTemplate(t,e){switch(t){case "mysql":case "mariadb":return `SHOW TABLES FROM ${e};`;case "cockroachdb":case "postgres":return `SELECT table_name
171
171
  FROM information_schema.tables
172
172
  WHERE table_catalog = '${e}'
173
173
  AND table_schema = 'public'
@@ -276,5 +276,5 @@ CREATE TABLE [migrations] (
276
276
  [name] NVARCHAR(255) NOT NULL,
277
277
  [timestamp] DATETIME NOT NULL DEFAULT GETDATE(),
278
278
  PRIMARY KEY ([id])
279
- );`}},Be=new eu;var Og=async(i,t)=>{if(i.endsWith(".ts"))return Sf(i);try{return import(url.pathToFileURL(i).href)}catch{let n=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)));try{let o=n(i);return {default:o.default||o,...o}}catch{throw new g(`MigrationUtils::importMigrationFile Failed to import migration file: ${i}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function xn(i,t){switch(i){case "mariadb":case "mysql":return await t.rawQuery(Be.migrationTableTemplateMysql()),(await t.rawQuery(Be.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":return await t.rawQuery(Be.migrationTableTemplatePg()),(await t.rawQuery(Be.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await t.rawQuery(Be.migrationTableTemplateSQLite()),await t.rawQuery(Be.selectAllFromMigrationsTemplate());case "mssql":return await t.rawQuery(Be.migrationTableTemplateMssql()),(await t.rawQuery(Be.selectAllFromMigrationsTemplate())).recordset;default:throw new g("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function Dn(i,t,e){let r=xg(t),n=[];for(let{name:o,fullPath:s}of r){let a=await Ag(s),l=new a(i||v.DB_TYPE);l.migrationName=o,n.push(l);}return n}async function Ag(i,t){let e=await Og(i);if(!e.default)throw new g("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}function xg(i){let t=process.cwd(),e=i||v.MIGRATION_PATH||"database/migrations",r=/[*?{}\[\]]/.test(e);if(!r){let s=vt__default.default.isAbsolute(e)?e:vt__default.default.resolve(t,e);if(!An__default.default.existsSync(s))return An__default.default.mkdirSync(s,{recursive:true}),[]}let n=r?e:vt__default.default.join(e,"**/*.{ts,js}"),o=vt__default.default.isAbsolute(n)?n:vt__default.default.resolve(t,n);try{return An__default.default.globSync(o).filter(a=>An__default.default.statSync(a).isFile()).sort().map(a=>({name:vt__default.default.basename(a),fullPath:a}))}catch{return []}}async function tu(i,t,e,r,n){let o=i.getDbType(),s=n&&o!=="mssql",a=null;_.info("Rolling back migrations for database type: "+o);try{let l=await xn(o,i),u=await Dn(o,e,r),d=l.map(p=>p.name),c=u.filter(p=>d.includes(p.migrationName));if(c.length===0){_.info("No pending migrations.");return}if(t);s&&(a=await i.transaction(),i=a.sql),await new Ye(i).downMigrations(c),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}_.info("Migrations rolled back successfully");}async function ru(i,t,e,r,n){let o=i.getDbType(),s=n&&o!=="mssql",a=null;_.info("Running migrations for database type: "+o);try{let l=await xn(o,i),d=(await Dn(o,e,r)).filter(m=>!l.map(p=>p.name).includes(m.migrationName));if(!d.length){_.info("No pending migrations.");return}if(t);s&&(a=await i.transaction(),i=a.sql),await new Ye(i).upMigrations(d),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}_.info("Migrations ran successfully");}var Ye=class{constructor(t){this.migrationTable="migrations";this.sql=t;}async upMigrations(t){for(let e of t){_.info(`Running migration ${e.migrationName}`),await e.up();let r=e.schema.queryStatements;for(let n of r)n&&await this.sql.rawQuery(n);await this.addMigrationToMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async downMigrations(t){t=t.reverse();for(let e of t){_.info(`Rolling back migration ${e.migrationName}`),await e.down();let r=e.schema.queryStatements;for(let n of r)n&&await this.sql.rawQuery(n);await this.deleteMigrationFromMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async addMigrationToMigrationTable(t){let r=new Date().toISOString().replace("T"," ").replace(/\.\d{3}Z$/,"");await this.sql.from(this.migrationTable).insert({name:t.migrationName,timestamp:r});}async deleteMigrationFromMigrationTable(t){await this.sql.from(this.migrationTable).where("name",t.migrationName).delete();}},nu=class{constructor(t=v.MIGRATION_PATH||"database/migrations",e){this.migrationPath=t,this.sqlDataSourceInput=e;}async up(){return this.migrate("up")}async down(){return this.migrate("down")}async migrate(t){v.MIGRATION_PATH=this.migrationPath;let e;if(this.sqlDataSourceInput instanceof Pe)e=this.sqlDataSourceInput;else {let r=this.sqlDataSourceInput;e=new Pe(r),await e.connect();}return t==="up"?ru(e,void 0,this.migrationPath,e.migrationConfig.tsconfig,e.migrationConfig.transactional):tu(e,void 0,this.migrationPath,e.migrationConfig.tsconfig,e.migrationConfig.transactional)}},Dg=(i,t)=>new nu(i,t);var ou=class{constructor(t){this.logger=_;this.sqlDataSource=t;}};var nU=(i,t)=>i!=null&&i!==""?{valid:true}:{valid:false,message:"Value is required"},oU=i=>(t,e)=>t==null?{valid:true}:typeof t!="string"?{valid:false,message:"Value must be a string"}:t.length>=i?{valid:true}:{valid:false,message:`Minimum length is ${i}`},sU=i=>(t,e)=>t==null?{valid:true}:typeof t!="string"?{valid:false,message:"Value must be a string"}:t.length<=i?{valid:true}:{valid:false,message:`Maximum length is ${i}`},iU=i=>(t,e)=>t==null?{valid:true}:typeof t!="number"?{valid:false,message:"Value must be a number"}:t>=i?{valid:true}:{valid:false,message:`Minimum value is ${i}`},aU=i=>(t,e)=>t==null?{valid:true}:typeof t!="number"?{valid:false,message:"Value must be a number"}:t<=i?{valid:true}:{valid:false,message:`Maximum value is ${i}`},lU=i=>(t,e)=>t==null?{valid:true}:typeof t!="string"?{valid:false,message:"Value must be a string"}:i.test(t)?{valid:true}:{valid:false,message:"Value does not match pattern"},uU=(i,t)=>i==null?{valid:true}:typeof i!="string"?{valid:false,message:"Invalid email"}:/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(i)?{valid:true}:{valid:false,message:"Invalid email"},dU=(i,t)=>{if(i==null)return {valid:true};if(typeof i!="string")return {valid:false,message:"Invalid url"};try{return new URL(i),{valid:!0}}catch{return {valid:false,message:"Invalid url"}}},mU=i=>(t,e)=>t==null?{valid:true}:typeof t!="string"?{valid:false,message:"Invalid enum value"}:i.includes(t)?{valid:true}:{valid:false,message:`Value must be one of: ${i.join(", ")}`};function $g(i){return {_phantom:void 0,_apply:i}}function It(){return $g((i,t)=>{Jr()(i,t);})}var vg={string:()=>It(),number:()=>It(),boolean:()=>It(),date:()=>It(),object:()=>It(),any:()=>It()};function Ig(i,t){let{properties:e,hooks:r}=t;class n extends Mt{}n._collection=i;for(let[o,s]of Object.entries(e))s._apply(n.prototype,o);return r&&(r.beforeFetch&&(n.beforeFetch=r.beforeFetch),r.afterFetch&&(n.afterFetch=r.afterFetch),r.beforeInsert&&(n.beforeInsert=r.beforeInsert),r.beforeUpdate&&(n.beforeUpdate=r.beforeUpdate),r.beforeDelete&&(n.beforeDelete=r.beforeDelete)),n}ce();function Eg(i){switch(i){case "postgres":case "cockroachdb":return {supportsJSON:true,supportsDates:true,supportsBooleans:true,supportsArrays:true,supportsNumericIds:true};case "mysql":case "mariadb":return {supportsJSON:true,supportsDates:true,supportsBooleans:false,supportsArrays:false,supportsNumericIds:true};case "mssql":return {supportsJSON:false,supportsDates:true,supportsBooleans:false,supportsArrays:false,supportsNumericIds:true};default:return {supportsJSON:false,supportsDates:false,supportsBooleans:false,supportsArrays:false,supportsNumericIds:true}}}function Nf(i,t,e){let{field:r,value:n,mode:o}=t,s=o==="insensitive",a=e?"orWhere":"andWhere",l=e?"orWhereNull":"andWhereNull",u=e?"orWhereNotNull":"andWhereNotNull",d=e?"orWhereIn":"andWhereIn",c=e?"orWhereNotIn":"andWhereNotIn",m=s?e?"orWhereILike":"andWhereILike":e?"orWhereLike":"andWhereLike";switch(t.operator){case "eq":if(n===null){i[l](r);return}i[a](r,"=",n);return;case "ne":if(n===null){i[u](r);return}i[a](r,"!=",n);return;case "lt":i[a](r,"<",n);return;case "lte":i[a](r,"<=",n);return;case "gt":i[a](r,">",n);return;case "gte":i[a](r,">=",n);return;case "in":i[d](r,n);return;case "not_in":i[c](r,n);return;case "contains":i[m](r,`%${n}%`);return;case "starts_with":i[m](r,`${n}%`);return;case "ends_with":i[m](r,`%${n}`);return;default:throw new Error(`Unsupported where operator: ${t.operator}`)}}function Te(i,t=[]){let e=t.filter(n=>n.connector!=="OR"),r=t.filter(n=>n.connector==="OR");for(let n of e)Nf(i,n,false);return r.length&&i.where(n=>{for(let o of r)Nf(n,o,true);}),i}function qf(i){let t=i.filter(e=>e.field==="id"&&e.connector!=="OR");return t.length?t:i}var Pg=new Set(["postgres","cockroachdb","mssql"]);function Bg(i,t,e){return {create:async({model:r,data:n})=>{if(n.id===void 0||n.id===null){if(!Pg.has(e))throw new g("betterAuthAdapter::create",`BETTER_AUTH_MISSING_ID_${r}`);return i.from(r).insert(n,["*"])}return await i.from(r).insert(n),n},findOne:async({model:r,where:n,select:o})=>{let s=Te(i.from(r),n);return o?.length&&s.select(...o),s.one()},findMany:async({model:r,where:n,limit:o,offset:s,sortBy:a,select:l})=>{let u=Te(i.from(r),n).limit(o);return s&&u.offset(s),a&&u.orderBy(t({model:r,field:a.field}),a.direction),l?.length&&u.select(...l),u.many()},count:async({model:r,where:n})=>Te(i.from(r),n).getCount(),update:async({model:r,where:n,update:o})=>await Te(i.from(r),n).update(o)?Te(i.from(r),qf(n)).one():null,updateMany:async({model:r,where:n,update:o})=>Te(i.from(r),n).update(o),incrementOne:async({model:r,where:n,increment:o,set:s})=>{let a={...s??{}};for(let[u,d]of Object.entries(o)){if(!Number.isFinite(d))throw new g("betterAuthAdapter::incrementOne",`BETTER_AUTH_INVALID_INCREMENT_${u}`);a[u]=new O(`${u} + (${d})`);}return await Te(i.from(r),n).update(a)?Te(i.from(r),qf(n)).one():null},consumeOne:async({model:r,where:n})=>{let o=await Te(i.from(r),n).one();return o&&await Te(i.from(r),n).delete()?o:null},delete:async({model:r,where:n})=>{await Te(i.from(r),n).delete();},deleteMany:async({model:r,where:n})=>Te(i.from(r),n).delete()}}function Cf(i,t,e,r,n=t,o=false){let s=t.getDbType();return i({config:{adapterId:"hysteria",adapterName:"Hysteria ORM",...Eg(s),...e,transaction:o?false:(l=>t.transaction(u=>l(Cf(i,t,e,r,u.sql,true))))},adapter:({getFieldName:l})=>Bg(n,l,s)})(r)}function Kg(i,t={}){return e=>{let r,n=()=>r??(r=import('better-auth/adapters').catch(()=>{throw new L("better-auth")}).then(({createAdapterFactory:o})=>Cf(o,i,t,e)));return {id:"hysteria",create:async o=>(await n()).create(o),findOne:async o=>(await n()).findOne(o),findMany:async o=>(await n()).findMany(o),count:async o=>(await n()).count(o),update:async o=>(await n()).update(o),updateMany:async o=>(await n()).updateMany(o),delete:async o=>(await n()).delete(o),deleteMany:async o=>(await n()).deleteMany(o),consumeOne:async o=>(await n()).consumeOne(o),incrementOne:async o=>(await n()).incrementOne(o),transaction:async o=>(await n()).transaction(o)}}}exports.BaseSeeder=ou;exports.Collection=Mt;exports.HysteriaError=g;exports.InMemoryAdapter=Lr;exports.Migration=Xl;exports.ModelQueryBuilder=Fe;exports.MongoDataSource=Kl;exports.ObserverChain=Tt;exports.ObserverChainWrapper=gf;exports.PlatformUnsupportedError=st;exports.RawNode=O;exports.RedisCacheAdapter=jy;exports.Schema=le;exports.SchemaBuilder=Gt;exports.SqlDataSource=Pe;exports.SqlFuncNode=I;exports.ValidationError=Et;exports.WriteOperation=Z;exports.atomic=$t;exports.betterAuthAdapter=Kg;exports.col=lh;exports.createSchema=mh;exports.defineCollection=Ig;exports.defineMigrator=Dg;exports.defineModel=uh;exports.defineModelFactory=Lh;exports.defineRelations=dh;exports.defineView=ch;exports.deriveOperationFromQuery=Ky;exports.email=uU;exports.enumValidator=mU;exports.generateOpenApiModel=dk;exports.generateOpenApiModelSchema=mk;exports.generateOpenApiModelWithMetadata=zy;exports.loadPlatform=se;exports.logger=_;exports.max=aU;exports.maxLength=sU;exports.min=iU;exports.minLength=oU;exports.pattern=lU;exports.prop=vg;exports.redis=Ql;exports.registerSqlFuncRenderer=Oh;exports.required=nU;exports.sqlFunc=Mh;exports.url=dU;//# sourceMappingURL=index.cjs.map
279
+ );`}},Qe=new ru;var Dg=async(i,t)=>{if(i.endsWith(".ts"))return qf(i);try{return import(url.pathToFileURL(i).href)}catch{let n=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)));try{let o=n(i);return {default:o.default||o,...o}}catch{throw new h(`MigrationUtils::importMigrationFile Failed to import migration file: ${i}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function Dn(i,t){switch(i){case "mariadb":case "mysql":return await t.rawQuery(Qe.migrationTableTemplateMysql()),(await t.rawQuery(Qe.selectAllFromMigrationsTemplate()))[0];case "postgres":case "cockroachdb":return await t.rawQuery(Qe.migrationTableTemplatePg()),(await t.rawQuery(Qe.selectAllFromMigrationsTemplate())).rows;case "sqlite":return await t.rawQuery(Qe.migrationTableTemplateSQLite()),await t.rawQuery(Qe.selectAllFromMigrationsTemplate());case "mssql":return await t.rawQuery(Qe.migrationTableTemplateMssql()),(await t.rawQuery(Qe.selectAllFromMigrationsTemplate())).recordset;default:throw new h("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function In(i,t,e){let r=$g(t),n=[];for(let{name:o,fullPath:s}of r){let a=await Ig(s),l=new a(i||$.DB_TYPE);l.migrationName=o,n.push(l);}return n}async function Ig(i,t){let e=await Dg(i);if(!e.default)throw new h("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}function $g(i){let t=process.cwd(),e=i||$.MIGRATION_PATH||"database/migrations",r=/[*?{}\[\]]/.test(e);if(!r){let s=It__default.default.isAbsolute(e)?e:It__default.default.resolve(t,e);if(!xn__default.default.existsSync(s))return xn__default.default.mkdirSync(s,{recursive:true}),[]}let n=r?e:It__default.default.join(e,"**/*.{ts,js}"),o=It__default.default.isAbsolute(n)?n:It__default.default.resolve(t,n);try{return xn__default.default.globSync(o).filter(a=>xn__default.default.statSync(a).isFile()).sort().map(a=>({name:It__default.default.basename(a),fullPath:a}))}catch{return []}}async function nu(i,t,e,r,n){let o=i.getDbType(),s=n&&o!=="mssql",a=null;_.info("Rolling back migrations for database type: "+o);try{let l=await Dn(o,i),u=await In(o,e,r),d=l.map(p=>p.name),c=u.filter(p=>d.includes(p.migrationName));if(c.length===0){_.info("No pending migrations.");return}if(t);s&&(a=await i.transaction(),i=a.sql),await new Ze(i).downMigrations(c),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}_.info("Migrations rolled back successfully");}async function ou(i,t,e,r,n){let o=i.getDbType(),s=n&&o!=="mssql",a=null;_.info("Running migrations for database type: "+o);try{let l=await Dn(o,i),d=(await In(o,e,r)).filter(m=>!l.map(p=>p.name).includes(m.migrationName));if(!d.length){_.info("No pending migrations.");return}if(t);s&&(a=await i.transaction(),i=a.sql),await new Ze(i).upMigrations(d),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}_.info("Migrations ran successfully");}var Ze=class{constructor(t){this.migrationTable="migrations";this.sql=t;}async upMigrations(t){for(let e of t){_.info(`Running migration ${e.migrationName}`),await e.up();let r=e.schema.queryStatements;for(let n of r)n&&await this.sql.rawQuery(n);await this.addMigrationToMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async downMigrations(t){t=t.reverse();for(let e of t){_.info(`Rolling back migration ${e.migrationName}`),await e.down();let r=e.schema.queryStatements;for(let n of r)n&&await this.sql.rawQuery(n);await this.deleteMigrationFromMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async addMigrationToMigrationTable(t){let r=new Date().toISOString().replace("T"," ").replace(/\.\d{3}Z$/,"");await this.sql.from(this.migrationTable).insert({name:t.migrationName,timestamp:r});}async deleteMigrationFromMigrationTable(t){await this.sql.from(this.migrationTable).where("name",t.migrationName).delete();}},su=class{constructor(t=$.MIGRATION_PATH||"database/migrations",e){this.migrationPath=t,this.sqlDataSourceInput=e;}async up(){return this.migrate("up")}async down(){return this.migrate("down")}async migrate(t){$.MIGRATION_PATH=this.migrationPath;let e;if(this.sqlDataSourceInput instanceof Be)e=this.sqlDataSourceInput;else {let r=this.sqlDataSourceInput;e=new Be(r),await e.connect();}return t==="up"?ou(e,void 0,this.migrationPath,e.migrationConfig.tsconfig,e.migrationConfig.transactional):nu(e,void 0,this.migrationPath,e.migrationConfig.tsconfig,e.migrationConfig.transactional)}},vg=(i,t)=>new su(i,t);var iu=class{constructor(t){this.logger=_;this.sqlDataSource=t;}};var MU=(i,t)=>i!=null&&i!==""?{valid:true}:{valid:false,message:"Value is required"},OU=i=>(t,e)=>t==null?{valid:true}:typeof t!="string"?{valid:false,message:"Value must be a string"}:t.length>=i?{valid:true}:{valid:false,message:`Minimum length is ${i}`},AU=i=>(t,e)=>t==null?{valid:true}:typeof t!="string"?{valid:false,message:"Value must be a string"}:t.length<=i?{valid:true}:{valid:false,message:`Maximum length is ${i}`},xU=i=>(t,e)=>t==null?{valid:true}:typeof t!="number"?{valid:false,message:"Value must be a number"}:t>=i?{valid:true}:{valid:false,message:`Minimum value is ${i}`},DU=i=>(t,e)=>t==null?{valid:true}:typeof t!="number"?{valid:false,message:"Value must be a number"}:t<=i?{valid:true}:{valid:false,message:`Maximum value is ${i}`},IU=i=>(t,e)=>t==null?{valid:true}:typeof t!="string"?{valid:false,message:"Value must be a string"}:i.test(t)?{valid:true}:{valid:false,message:"Value does not match pattern"},$U=(i,t)=>i==null?{valid:true}:typeof i!="string"?{valid:false,message:"Invalid email"}:/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(i)?{valid:true}:{valid:false,message:"Invalid email"},vU=(i,t)=>{if(i==null)return {valid:true};if(typeof i!="string")return {valid:false,message:"Invalid url"};try{return new URL(i),{valid:!0}}catch{return {valid:false,message:"Invalid url"}}},EU=i=>(t,e)=>t==null?{valid:true}:typeof t!="string"?{valid:false,message:"Invalid enum value"}:i.includes(t)?{valid:true}:{valid:false,message:`Value must be one of: ${i.join(", ")}`};function Eg(i){return {_phantom:void 0,_apply:i}}function $t(){return Eg((i,t)=>{Hr()(i,t);})}var Pg={string:()=>$t(),number:()=>$t(),boolean:()=>$t(),date:()=>$t(),object:()=>$t(),any:()=>$t()};function Bg(i,t){let{properties:e,hooks:r}=t;class n extends _t{}n._collection=i;for(let[o,s]of Object.entries(e))s._apply(n.prototype,o);return r&&(r.beforeFetch&&(n.beforeFetch=r.beforeFetch),r.afterFetch&&(n.afterFetch=r.afterFetch),r.beforeInsert&&(n.beforeInsert=r.beforeInsert),r.beforeUpdate&&(n.beforeUpdate=r.beforeUpdate),r.beforeDelete&&(n.beforeDelete=r.beforeDelete)),n}me();function Qg(i){switch(i){case "postgres":case "cockroachdb":return {supportsJSON:true,supportsDates:true,supportsBooleans:true,supportsArrays:true,supportsNumericIds:true};case "mysql":case "mariadb":return {supportsJSON:true,supportsDates:true,supportsBooleans:false,supportsArrays:false,supportsNumericIds:true};case "mssql":return {supportsJSON:false,supportsDates:true,supportsBooleans:false,supportsArrays:false,supportsNumericIds:true};default:return {supportsJSON:false,supportsDates:false,supportsBooleans:false,supportsArrays:false,supportsNumericIds:true}}}function Cf(i,t,e){let{field:r,value:n,mode:o}=t,s=o==="insensitive",a=e?"orWhere":"andWhere",l=e?"orWhereNull":"andWhereNull",u=e?"orWhereNotNull":"andWhereNotNull",d=e?"orWhereIn":"andWhereIn",c=e?"orWhereNotIn":"andWhereNotIn",m=s?e?"orWhereILike":"andWhereILike":e?"orWhereLike":"andWhereLike";switch(t.operator){case "eq":if(n===null){i[l](r);return}i[a](r,"=",n);return;case "ne":if(n===null){i[u](r);return}i[a](r,"!=",n);return;case "lt":i[a](r,"<",n);return;case "lte":i[a](r,"<=",n);return;case "gt":i[a](r,">",n);return;case "gte":i[a](r,">=",n);return;case "in":i[d](r,n);return;case "not_in":i[c](r,n);return;case "contains":i[m](r,`%${n}%`);return;case "starts_with":i[m](r,`${n}%`);return;case "ends_with":i[m](r,`%${n}`);return;default:throw new Error(`Unsupported where operator: ${t.operator}`)}}function Te(i,t=[]){let e=t.filter(n=>n.connector!=="OR"),r=t.filter(n=>n.connector==="OR");for(let n of e)Cf(i,n,false);return r.length&&i.where(n=>{for(let o of r)Cf(n,o,true);}),i}function Rf(i){let t=i.filter(e=>e.field==="id"&&e.connector!=="OR");return t.length?t:i}var Kg=new Set(["postgres","cockroachdb","mssql"]);function kg(i,t,e){return {create:async({model:r,data:n})=>{if(n.id===void 0||n.id===null){if(!Kg.has(e))throw new h("betterAuthAdapter::create",`BETTER_AUTH_MISSING_ID_${r}`);return i.from(r).insert(n,["*"])}return await i.from(r).insert(n),n},findOne:async({model:r,where:n,select:o})=>{let s=Te(i.from(r),n);return o?.length&&s.select(...o),s.one()},findMany:async({model:r,where:n,limit:o,offset:s,sortBy:a,select:l})=>{let u=Te(i.from(r),n).limit(o);return s&&u.offset(s),a&&u.orderBy(t({model:r,field:a.field}),a.direction),l?.length&&u.select(...l),u.many()},count:async({model:r,where:n})=>Te(i.from(r),n).getCount(),update:async({model:r,where:n,update:o})=>await Te(i.from(r),n).update(o)?Te(i.from(r),Rf(n)).one():null,updateMany:async({model:r,where:n,update:o})=>Te(i.from(r),n).update(o),incrementOne:async({model:r,where:n,increment:o,set:s})=>{let a={...s??{}};for(let[u,d]of Object.entries(o)){if(!Number.isFinite(d))throw new h("betterAuthAdapter::incrementOne",`BETTER_AUTH_INVALID_INCREMENT_${u}`);a[u]=new O(`${u} + (${d})`);}return await Te(i.from(r),n).update(a)?Te(i.from(r),Rf(n)).one():null},consumeOne:async({model:r,where:n})=>{let o=await Te(i.from(r),n).one();return o&&await Te(i.from(r),n).delete()?o:null},delete:async({model:r,where:n})=>{await Te(i.from(r),n).delete();},deleteMany:async({model:r,where:n})=>Te(i.from(r),n).delete()}}function _f(i,t,e,r,n=t,o=false){let s=t.getDbType();return i({config:{adapterId:"hysteria",adapterName:"Hysteria ORM",...Qg(s),...e,transaction:o?false:(l=>t.transaction(u=>l(_f(i,t,e,r,u.sql,true))))},adapter:({getFieldName:l})=>kg(n,l,s)})(r)}function Lg(i,t={}){return e=>{let r,n=()=>r??(r=import('better-auth/adapters').catch(()=>{throw new k("better-auth")}).then(({createAdapterFactory:o})=>_f(o,i,t,e)));return {id:"hysteria",create:async o=>(await n()).create(o),findOne:async o=>(await n()).findOne(o),findMany:async o=>(await n()).findMany(o),count:async o=>(await n()).count(o),update:async o=>(await n()).update(o),updateMany:async o=>(await n()).updateMany(o),delete:async o=>(await n()).delete(o),deleteMany:async o=>(await n()).deleteMany(o),consumeOne:async o=>(await n()).consumeOne(o),incrementOne:async o=>(await n()).incrementOne(o),transaction:async o=>(await n()).transaction(o)}}}exports.BaseSeeder=iu;exports.Collection=_t;exports.HysteriaError=h;exports.InMemoryAdapter=Wr;exports.InsertWriteOperation=De;exports.Migration=tu;exports.ModelQueryBuilder=Ue;exports.MongoDataSource=kl;exports.ObserverChain=bt;exports.ObserverChainWrapper=Tf;exports.PlatformUnsupportedError=it;exports.RawNode=O;exports.RedisCacheAdapter=Uy;exports.Schema=le;exports.SchemaBuilder=Yt;exports.SqlDataSource=Be;exports.SqlFuncNode=v;exports.ValidationError=vt;exports.WriteOperation=ie;exports.atomic=Dt;exports.betterAuthAdapter=Lg;exports.col=dh;exports.createSchema=ph;exports.defineCollection=Bg;exports.defineMigrator=vg;exports.defineModel=mh;exports.defineModelFactory=jh;exports.defineRelations=ch;exports.defineView=yh;exports.deriveOperationFromQuery=ky;exports.email=$U;exports.enumValidator=EU;exports.generateOpenApiModel=vk;exports.generateOpenApiModelSchema=Ek;exports.generateOpenApiModelWithMetadata=Yy;exports.loadPlatform=ne;exports.logger=_;exports.max=DU;exports.maxLength=AU;exports.min=xU;exports.minLength=OU;exports.pattern=IU;exports.prop=Pg;exports.redis=Ll;exports.registerSqlFuncRenderer=xh;exports.required=MU;exports.sqlFunc=Ah;exports.url=vU;//# sourceMappingURL=index.cjs.map
280
280
  //# sourceMappingURL=index.cjs.map